From efcecb887aa5fdcb58b1b32ebde7dbc59140ec9a Mon Sep 17 00:00:00 2001 From: Joshua Taillon Date: Fri, 4 Nov 2022 09:46:26 -0600 Subject: [PATCH 01/10] add comment to nginx config about client_max_body_size --- docsrc/source/installation.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docsrc/source/installation.rst b/docsrc/source/installation.rst index 93dd4c9a..494c7c9b 100644 --- a/docsrc/source/installation.rst +++ b/docsrc/source/installation.rst @@ -733,6 +733,14 @@ Examples (to update depending on your application configuration and given distri ssl_certificate fullchain.pem; ssl_certificate_key privkey.pem; + ## this parameter controls how large of a file can be + ## uploaded, and defaults to 1MB. If you change the FitTrackee + ## settings to allow larger uploads, you'll need to change this + ## setting by uncommenting the line below and setting the size limit + ## you want. Set to "0" to prevent nginx from checking the + ## request body size at all + # client_max_body_size 1m; + location / { proxy_pass http://127.0.0.1:5000; proxy_redirect default; From 4b1c51880f26562a3ed21e635ef6423b59e1bcfa Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 4 Nov 2022 22:26:47 +0100 Subject: [PATCH 02/10] API - return error when number of files in zip exceeds limit (instead of importing the configured number of files without raising errors) --- .../workouts/test_workouts_api_1_post.py | 13 ++++----- fittrackee/workouts/utils/workouts.py | 28 ++++++++++++------- fittrackee/workouts/workouts.py | 2 +- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/fittrackee/tests/workouts/test_workouts_api_1_post.py b/fittrackee/tests/workouts/test_workouts_api_1_post.py index 35185dfd..c500d8fd 100644 --- a/fittrackee/tests/workouts/test_workouts_api_1_post.py +++ b/fittrackee/tests/workouts/test_workouts_api_1_post.py @@ -1112,7 +1112,7 @@ class TestPostWorkoutWithZipArchive(ApiTestCaseMixin): data = self.assert_500(response, 'error during gpx processing') assert 'data' not in data - def test_it_imports_only_max_number_of_files( + def test_it_returns_400_when_files_in_archive_exceed_limit( self, app_with_max_workouts: Flask, user_1: User, @@ -1127,7 +1127,7 @@ class TestPostWorkoutWithZipArchive(ApiTestCaseMixin): app_with_max_workouts, user_1.email ) - client.post( + response = client.post( '/api/workouts', data=dict( file=(zip_file, 'gpx_test.zip'), data='{"sport_id": 1}' @@ -1138,12 +1138,11 @@ class TestPostWorkoutWithZipArchive(ApiTestCaseMixin): ), ) - response = client.get( - '/api/workouts', - headers=dict(Authorization=f'Bearer {auth_token}'), + self.assert_400( + response, + 'the number of files in the archive exceeds the limit', + 'fail', ) - data = json.loads(response.data.decode()) - assert len(data['data']['workouts']) == 2 def test_it_returns_error_if_archive_size_exceeds_limit( self, diff --git a/fittrackee/workouts/utils/workouts.py b/fittrackee/workouts/utils/workouts.py index 17a2c9a9..03eb21b1 100644 --- a/fittrackee/workouts/utils/workouts.py +++ b/fittrackee/workouts/utils/workouts.py @@ -333,6 +333,14 @@ def process_one_gpx_file( raise WorkoutException('fail', 'Error during workout save.', e) +def is_gpx_file(filename: str) -> bool: + return ( + '.' in filename + and filename.rsplit('.', 1)[1].lower() + in current_app.config['WORKOUT_ALLOWED_EXTENSIONS'] + ) + + def process_zip_archive( common_params: Dict, extract_dir: str, stopped_speed_threshold: float ) -> List: @@ -341,21 +349,21 @@ def process_zip_archive( does not exceed defined limit. """ with zipfile.ZipFile(common_params['file_path'], "r") as zip_ref: + info_list = [ + zip_info + for zip_info in zip_ref.infolist() + if is_gpx_file(zip_info.filename) + ] + if len(info_list) > current_app.config['gpx_limit_import']: + raise WorkoutException( + 'fail', 'the number of files in the archive exceeds the limit' + ) zip_ref.extractall(extract_dir) new_workouts = [] - gpx_files_limit = current_app.config['gpx_limit_import'] - gpx_files_ok = 0 for gpx_file in os.listdir(extract_dir): - if ( - '.' in gpx_file - and gpx_file.rsplit('.', 1)[1].lower() - in current_app.config['WORKOUT_ALLOWED_EXTENSIONS'] - ): - gpx_files_ok += 1 - if gpx_files_ok > gpx_files_limit: - break + if is_gpx_file(gpx_file): file_path = os.path.join(extract_dir, gpx_file) params = common_params params['file_path'] = file_path diff --git a/fittrackee/workouts/workouts.py b/fittrackee/workouts/workouts.py index de44bf92..a4873113 100644 --- a/fittrackee/workouts/workouts.py +++ b/fittrackee/workouts/workouts.py @@ -1022,7 +1022,7 @@ def post_workout(auth_user: User) -> Union[Tuple[Dict, int], HttpResponse]: appLog.error(e.e) if e.status == 'error': return InternalServerErrorResponse(e.message) - return InvalidPayloadErrorResponse(e.message) + return InvalidPayloadErrorResponse(e.message, e.status) shutil.rmtree(folders['extract_dir'], ignore_errors=True) shutil.rmtree(folders['tmp_dir'], ignore_errors=True) From d2db9240fa1861732b75d5bc8bcc4007bfe59d1e Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 4 Nov 2022 22:27:42 +0100 Subject: [PATCH 03/10] API - return error when file from a zip archive exceeds size limit --- .../workouts/test_workouts_api_1_post.py | 34 +++++++++++++++++++ fittrackee/workouts/utils/workouts.py | 24 +++++++++---- 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/fittrackee/tests/workouts/test_workouts_api_1_post.py b/fittrackee/tests/workouts/test_workouts_api_1_post.py index c500d8fd..da727f10 100644 --- a/fittrackee/tests/workouts/test_workouts_api_1_post.py +++ b/fittrackee/tests/workouts/test_workouts_api_1_post.py @@ -1177,6 +1177,40 @@ class TestPostWorkoutWithZipArchive(ApiTestCaseMixin): ) assert 'data' not in data + def test_it_returns_error_if_a_file_from_archive_size_exceeds_limit( + self, + app_with_max_file_size: Flask, + user_1: User, + sport_1_cycling: Sport, + ) -> None: + file_path = os.path.join( + app_with_max_file_size.root_path, 'tests/files/gpx_test.zip' + ) + # 'gpx_test.zip' contains 3 gpx files (same data) and 1 non-gpx file + with open(file_path, 'rb') as zip_file: + client, auth_token = self.get_test_client_and_auth_token( + app_with_max_file_size, user_1.email + ) + + response = client.post( + '/api/workouts', + data=dict( + file=(zip_file, 'gpx_test.zip'), data='{"sport_id": 1}' + ), + headers=dict( + content_type='multipart/form-data', + Authorization=f'Bearer {auth_token}', + ), + ) + + data = self.assert_400( + response, + 'at least one file in zip archive exceeds size limit, ' + 'please check the archive', + 'fail', + ) + assert 'data' not in data + class TestPostAndGetWorkoutWithGpx(ApiTestCaseMixin): def workout_assertion( diff --git a/fittrackee/workouts/utils/workouts.py b/fittrackee/workouts/utils/workouts.py index 03eb21b1..568de418 100644 --- a/fittrackee/workouts/utils/workouts.py +++ b/fittrackee/workouts/utils/workouts.py @@ -349,15 +349,27 @@ def process_zip_archive( does not exceed defined limit. """ with zipfile.ZipFile(common_params['file_path'], "r") as zip_ref: - info_list = [ - zip_info - for zip_info in zip_ref.infolist() - if is_gpx_file(zip_info.filename) - ] - if len(info_list) > current_app.config['gpx_limit_import']: + max_file_size = current_app.config['max_single_file_size'] + gpx_files_count = 0 + files_with_invalid_size_count = 0 + for zip_info in zip_ref.infolist(): + if is_gpx_file(zip_info.filename): + gpx_files_count += 1 + if zip_info.file_size > max_file_size: + files_with_invalid_size_count += 1 + + if gpx_files_count > current_app.config['gpx_limit_import']: raise WorkoutException( 'fail', 'the number of files in the archive exceeds the limit' ) + + if files_with_invalid_size_count > 0: + raise WorkoutException( + 'fail', + 'at least one file in zip archive exceeds size limit, ' + 'please check the archive', + ) + zip_ref.extractall(extract_dir) new_workouts = [] From e83021b7f355e2b0daa6c52ed699351f3a880b17 Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 4 Nov 2022 22:40:33 +0100 Subject: [PATCH 04/10] Client - add new errors messages in api locales --- fittrackee_client/src/locales/en/api.json | 2 ++ fittrackee_client/src/locales/fr/api.json | 2 ++ 2 files changed, 4 insertions(+) diff --git a/fittrackee_client/src/locales/en/api.json b/fittrackee_client/src/locales/en/api.json index b7c1d266..5d0942cb 100644 --- a/fittrackee_client/src/locales/en/api.json +++ b/fittrackee_client/src/locales/en/api.json @@ -1,6 +1,7 @@ { "ERROR": { "UNKNOWN": "Error. Please try again or contact the administrator.", + "at least one file in zip archive exceeds size limit, please check the archive": "At least one file in zip archive exceeds size limit, please check the archive.", "email: valid email must be provided": "Email: valid email must be provided.", "error during gpx processing": "Error during gpx processing.", "error during gpx file parsing": "Error during gpx file parsing.", @@ -18,6 +19,7 @@ "new email must be different than curent email": "The new email must be different than curent email", "no file part": "No file provided.", "no selected file": "No selected file.", + "the number of files in the archive exceeds the limit": "The number of files in the archive exceeds the limit.", "password: password and password confirmation do not match": "Password: password and password confirmation don't match.", "provide a valid auth token": "Provide a valid auth token.", "sorry, that username is already taken": "Sorry, that username is already taken.", diff --git a/fittrackee_client/src/locales/fr/api.json b/fittrackee_client/src/locales/fr/api.json index 6d0c5e33..0a944d73 100644 --- a/fittrackee_client/src/locales/fr/api.json +++ b/fittrackee_client/src/locales/fr/api.json @@ -1,6 +1,7 @@ { "ERROR": { "UNKNOWN": "Erreur. Veuillez réessayer ou contacter l'administrateur.", + "at least one file in zip archive exceeds size limit, please check the archive": "Au moins un fichier de l'archive zip dépasse la taille maximale, veuillez vérifier l'archive.", "email: valid email must be provided": "Courriel : une adresse électronique valide doit être fournie.", "error during gpx processing": "Erreur lors du traitement du fichier gpx.", "error during gpx file parsing": "Erreur lors de l'analyse du fichier.", @@ -24,6 +25,7 @@ "signature expired, please log in again": "Signature expirée. Merci de vous reconnecter.", "sorry, that username is already taken": "Désolé, ce nom d'utilisateur est déjà utilisé.", "successfully registered": "Inscription validée.", + "the number of files in the archive exceeds the limit": "Le nombre de fichiers de l'archive dépasse la limite.", "user does not exist": "L'utilisateur n'existe pas.", "valid email must be provided for admin contact": "Une adresse électronique doit être fournie pour le contact de l'administrateur", "you can not delete your account, no other user has admin rights": "Vous ne pouvez pas supprimer votre compte, aucun autre utilisateur n'a des droits d'administration.", From b1536fc637649c4c32a88af6d96c131f05bc1742 Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 4 Nov 2022 22:57:16 +0100 Subject: [PATCH 05/10] Client - fix french translations in administration --- fittrackee_client/src/locales/fr/administration.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fittrackee_client/src/locales/fr/administration.json b/fittrackee_client/src/locales/fr/administration.json index 9e845fc2..9f6b980f 100644 --- a/fittrackee_client/src/locales/fr/administration.json +++ b/fittrackee_client/src/locales/fr/administration.json @@ -10,11 +10,11 @@ "ADMIN_CONTACT": "Email de l'administrateur pour contact ", "MAX_USERS_LABEL": "Nombre maximum d'utilisateurs actifs ", "MAX_USERS_HELP": "Si égal à 0, pas limite d'inscription", - "MAX_FILES_IN_ZIP_LABEL": "Taille max. des archives zip (en Mo) ", + "MAX_FILES_IN_ZIP_LABEL": "Nombre max. de fichiers dans une archive zip ", "NO_CONTACT_EMAIL": "non renseigné", "SINGLE_UPLOAD_MAX_SIZE_LABEL": "Taille max. des fichiers (en Mo) ", "TITLE": "Configuration de l'application", - "ZIP_UPLOAD_MAX_SIZE_LABEL": "Nombre max. de fichiers dans une archive zip " + "ZIP_UPLOAD_MAX_SIZE_LABEL": "Taille max. des archives zip (en Mo) " }, "BACK_TO_ADMIN": "Revenir à l'admin", "CONFIRM_USER_ACCOUNT_DELETION": "Êtes-vous sûr de vouloir supprimer le compte de l'utilisateur {0} ? Toutes les données seront définitivement.", From 573cbe4cda438083bb3da686fbc2f9b7e74c41c6 Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 4 Nov 2022 23:25:55 +0100 Subject: [PATCH 06/10] update client dist files --- fittrackee/dist/index.html | 2 +- fittrackee/dist/service-worker.js | 2 +- fittrackee/dist/service-worker.js.map | 2 +- fittrackee/dist/static/js/app.3ce255f9.js | 2 ++ fittrackee/dist/static/js/app.3ce255f9.js.map | 1 + fittrackee/dist/static/js/app.f7049224.js | 2 -- fittrackee/dist/static/js/app.f7049224.js.map | 1 - .../dist/static/js/{reset.d9073cf1.js => reset.3194c9f0.js} | 2 +- .../static/js/{reset.d9073cf1.js.map => reset.3194c9f0.js.map} | 2 +- .../js/{statistics.c9a8011a.js => statistics.04a17f2e.js} | 2 +- .../{statistics.c9a8011a.js.map => statistics.04a17f2e.js.map} | 2 +- .../static/js/{workouts.8abaa659.js => workouts.a514f12a.js} | 2 +- .../js/{workouts.8abaa659.js.map => workouts.a514f12a.js.map} | 2 +- 13 files changed, 12 insertions(+), 12 deletions(-) create mode 100644 fittrackee/dist/static/js/app.3ce255f9.js create mode 100644 fittrackee/dist/static/js/app.3ce255f9.js.map delete mode 100644 fittrackee/dist/static/js/app.f7049224.js delete mode 100644 fittrackee/dist/static/js/app.f7049224.js.map rename fittrackee/dist/static/js/{reset.d9073cf1.js => reset.3194c9f0.js} (99%) rename fittrackee/dist/static/js/{reset.d9073cf1.js.map => reset.3194c9f0.js.map} (99%) rename fittrackee/dist/static/js/{statistics.c9a8011a.js => statistics.04a17f2e.js} (98%) rename fittrackee/dist/static/js/{statistics.c9a8011a.js.map => statistics.04a17f2e.js.map} (99%) rename fittrackee/dist/static/js/{workouts.8abaa659.js => workouts.a514f12a.js} (99%) rename fittrackee/dist/static/js/{workouts.8abaa659.js.map => workouts.a514f12a.js.map} (99%) diff --git a/fittrackee/dist/index.html b/fittrackee/dist/index.html index a1c92f0e..5f0e2003 100644 --- a/fittrackee/dist/index.html +++ b/fittrackee/dist/index.html @@ -1 +1 @@ -FitTrackee
\ No newline at end of file +FitTrackee
\ No newline at end of file diff --git a/fittrackee/dist/service-worker.js b/fittrackee/dist/service-worker.js index 1e3402c9..3bc542c9 100644 --- a/fittrackee/dist/service-worker.js +++ b/fittrackee/dist/service-worker.js @@ -1,2 +1,2 @@ -if(!self.define){let s,i={};const e=(e,t)=>(e=new URL(e+".js",t).href,i[e]||new Promise((i=>{if("document"in self){const s=document.createElement("script");s.src=e,s.onload=i,document.head.appendChild(s)}else s=e,importScripts(e),i()})).then((()=>{let s=i[e];if(!s)throw new Error(`Module ${e} didn’t register its module`);return s})));self.define=(t,r)=>{const a=s||("document"in self?document.currentScript.src:"")||location.href;if(i[a])return;let n={};const l=s=>e(s,a),c={module:{uri:a},exports:n,require:l};i[a]=Promise.all(t.map((s=>c[s]||l(s)))).then((s=>(r(...s),n)))}}define(["./workbox-db5fc017"],(function(s){"use strict";s.setCacheNameDetails({prefix:"fittrackee_client"}),self.addEventListener("message",(s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()})),s.precacheAndRoute([{url:"/img/bike.svg",revision:"ab4faed007625b209af72b9b8dce84db"},{url:"/img/weather/breeze.svg",revision:"428c6ccb838f8e91dc4826c5b650a98b"},{url:"/img/weather/clear-day.svg",revision:"f3e8628de2e5089f508f03944f8be951"},{url:"/img/weather/clear-night.svg",revision:"6a0d6579a93e89fdf1a2a95b398e0935"},{url:"/img/weather/cloudy.svg",revision:"c52fe62c9d9fea2cdf5ae2813b3df366"},{url:"/img/weather/fog.svg",revision:"9f4d74289594eb83f9c175d13167a0eb"},{url:"/img/weather/partly-cloudy-day.svg",revision:"f730c2e4f4c014e8b49c9d4a0a141b90"},{url:"/img/weather/partly-cloudy-night.svg",revision:"0d9270901c4dffbc05f3998d835171c8"},{url:"/img/weather/pour-rain.svg",revision:"91eb3159ba8781d258d8c384a8ef987c"},{url:"/img/weather/rain.svg",revision:"c52ca88ce0ddf4de0fc29167e578b2be"},{url:"/img/weather/sleet.svg",revision:"97d61d89332f912c1ec27bcbe077b7bd"},{url:"/img/weather/snow.svg",revision:"9e88c89c0d6d14174e9665e98932dd80"},{url:"/img/weather/temperature.svg",revision:"d42b62d0b57d5d326506277d87b70435"},{url:"/img/weather/wind.svg",revision:"d75fbe559220d7b2b9577a98a91f38d0"},{url:"/img/workouts/finish.svg",revision:"375196b7ade7c07c3b64ac4cb8b850a8"},{url:"/img/workouts/mountains.svg",revision:"0b94f1d4a050a86ca5ac89ab3ed60f9c"},{url:"/img/workouts/start.svg",revision:"97f6a197b6c2869e0cb2ff0e7697af86"},{url:"/index.html",revision:"c43fe6476930d6fc83b1d6c65c49311f"},{url:"/manifest.json",revision:"c61028ca6e9f81bf958e6b66238e2d7c"},{url:"/robots.txt",revision:"b6216d61c03e6ce0c9aea6ca7808f7ca"},{url:"/static/css/admin.73df498d.css",revision:null},{url:"/static/css/app.564b9516.css",revision:null},{url:"/static/css/fork-awesome.min.css",revision:"82c1118c918377daaa71a320ab8eea42"},{url:"/static/css/leaflet.css",revision:"5c761a156eea82263d8bacf1718fe04d"},{url:"/static/css/profile.203e78e2.css",revision:null},{url:"/static/css/reset.e2527ec6.css",revision:null},{url:"/static/css/statistics.40e24e75.css",revision:null},{url:"/static/css/workouts.41709693.css",revision:null},{url:"/static/fonts/forkawesome-webfont.eot",revision:"e719f9244c69e28e7d00e725ca1e280e"},{url:"/static/fonts/forkawesome-webfont.svg",revision:"d58987a18774d859d98af95281c1dee5"},{url:"/static/fonts/forkawesome-webfont.ttf",revision:"fe45770c6c277da3921355d971045ea5"},{url:"/static/fonts/forkawesome-webfont.woff",revision:"92cd4d8328b2ae614386a01ff935a9f3"},{url:"/static/fonts/forkawesome-webfont.woff2",revision:"12ee76445f0383c58529169d700b6650"},{url:"/static/fonts/pt-sans-v9-latin-700.01a58da9.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.51b1613b.woff2",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.5ff2a2d7.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.6514157e.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.10011d51.woff2",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.6206408d.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.8293436e.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.fe36f54f.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.b5b74f16.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.c43bc0a2.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.c5a514ae.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.e7867499.woff2",revision:null},{url:"/static/img/map.5b26d82b.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-700.b8a7047e.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-italic.0b285c83.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-regular.59a385b4.svg",revision:null},{url:"/static/js/243.e551248f.js",revision:null},{url:"/static/js/431.e5102e07.js",revision:null},{url:"/static/js/633.81a8ddc8.js",revision:null},{url:"/static/js/858.3f2a93f2.js",revision:null},{url:"/static/js/93.02cf293c.js",revision:null},{url:"/static/js/admin.9bc68088.js",revision:null},{url:"/static/js/app.f7049224.js",revision:null},{url:"/static/js/chunk-vendors.50f5c7a2.js",revision:null},{url:"/static/js/profile.430ae7df.js",revision:null},{url:"/static/js/reset.d9073cf1.js",revision:null},{url:"/static/js/statistics.c9a8011a.js",revision:null},{url:"/static/js/workouts.8abaa659.js",revision:null}],{})})); +if(!self.define){let s,i={};const e=(e,t)=>(e=new URL(e+".js",t).href,i[e]||new Promise((i=>{if("document"in self){const s=document.createElement("script");s.src=e,s.onload=i,document.head.appendChild(s)}else s=e,importScripts(e),i()})).then((()=>{let s=i[e];if(!s)throw new Error(`Module ${e} didn’t register its module`);return s})));self.define=(t,r)=>{const a=s||("document"in self?document.currentScript.src:"")||location.href;if(i[a])return;let n={};const l=s=>e(s,a),c={module:{uri:a},exports:n,require:l};i[a]=Promise.all(t.map((s=>c[s]||l(s)))).then((s=>(r(...s),n)))}}define(["./workbox-db5fc017"],(function(s){"use strict";s.setCacheNameDetails({prefix:"fittrackee_client"}),self.addEventListener("message",(s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()})),s.precacheAndRoute([{url:"/img/bike.svg",revision:"ab4faed007625b209af72b9b8dce84db"},{url:"/img/weather/breeze.svg",revision:"428c6ccb838f8e91dc4826c5b650a98b"},{url:"/img/weather/clear-day.svg",revision:"f3e8628de2e5089f508f03944f8be951"},{url:"/img/weather/clear-night.svg",revision:"6a0d6579a93e89fdf1a2a95b398e0935"},{url:"/img/weather/cloudy.svg",revision:"c52fe62c9d9fea2cdf5ae2813b3df366"},{url:"/img/weather/fog.svg",revision:"9f4d74289594eb83f9c175d13167a0eb"},{url:"/img/weather/partly-cloudy-day.svg",revision:"f730c2e4f4c014e8b49c9d4a0a141b90"},{url:"/img/weather/partly-cloudy-night.svg",revision:"0d9270901c4dffbc05f3998d835171c8"},{url:"/img/weather/pour-rain.svg",revision:"91eb3159ba8781d258d8c384a8ef987c"},{url:"/img/weather/rain.svg",revision:"c52ca88ce0ddf4de0fc29167e578b2be"},{url:"/img/weather/sleet.svg",revision:"97d61d89332f912c1ec27bcbe077b7bd"},{url:"/img/weather/snow.svg",revision:"9e88c89c0d6d14174e9665e98932dd80"},{url:"/img/weather/temperature.svg",revision:"d42b62d0b57d5d326506277d87b70435"},{url:"/img/weather/wind.svg",revision:"d75fbe559220d7b2b9577a98a91f38d0"},{url:"/img/workouts/finish.svg",revision:"375196b7ade7c07c3b64ac4cb8b850a8"},{url:"/img/workouts/mountains.svg",revision:"0b94f1d4a050a86ca5ac89ab3ed60f9c"},{url:"/img/workouts/start.svg",revision:"97f6a197b6c2869e0cb2ff0e7697af86"},{url:"/index.html",revision:"83ac98b5c391ddb9e0927f2ab9b60f8a"},{url:"/manifest.json",revision:"c61028ca6e9f81bf958e6b66238e2d7c"},{url:"/robots.txt",revision:"b6216d61c03e6ce0c9aea6ca7808f7ca"},{url:"/static/css/admin.73df498d.css",revision:null},{url:"/static/css/app.564b9516.css",revision:null},{url:"/static/css/fork-awesome.min.css",revision:"82c1118c918377daaa71a320ab8eea42"},{url:"/static/css/leaflet.css",revision:"5c761a156eea82263d8bacf1718fe04d"},{url:"/static/css/profile.203e78e2.css",revision:null},{url:"/static/css/reset.e2527ec6.css",revision:null},{url:"/static/css/statistics.40e24e75.css",revision:null},{url:"/static/css/workouts.41709693.css",revision:null},{url:"/static/fonts/forkawesome-webfont.eot",revision:"e719f9244c69e28e7d00e725ca1e280e"},{url:"/static/fonts/forkawesome-webfont.svg",revision:"d58987a18774d859d98af95281c1dee5"},{url:"/static/fonts/forkawesome-webfont.ttf",revision:"fe45770c6c277da3921355d971045ea5"},{url:"/static/fonts/forkawesome-webfont.woff",revision:"92cd4d8328b2ae614386a01ff935a9f3"},{url:"/static/fonts/forkawesome-webfont.woff2",revision:"12ee76445f0383c58529169d700b6650"},{url:"/static/fonts/pt-sans-v9-latin-700.01a58da9.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.51b1613b.woff2",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.5ff2a2d7.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.6514157e.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.10011d51.woff2",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.6206408d.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.8293436e.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.fe36f54f.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.b5b74f16.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.c43bc0a2.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.c5a514ae.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.e7867499.woff2",revision:null},{url:"/static/img/map.5b26d82b.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-700.b8a7047e.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-italic.0b285c83.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-regular.59a385b4.svg",revision:null},{url:"/static/js/243.e551248f.js",revision:null},{url:"/static/js/431.e5102e07.js",revision:null},{url:"/static/js/633.81a8ddc8.js",revision:null},{url:"/static/js/858.3f2a93f2.js",revision:null},{url:"/static/js/93.02cf293c.js",revision:null},{url:"/static/js/admin.9bc68088.js",revision:null},{url:"/static/js/app.3ce255f9.js",revision:null},{url:"/static/js/chunk-vendors.50f5c7a2.js",revision:null},{url:"/static/js/profile.430ae7df.js",revision:null},{url:"/static/js/reset.3194c9f0.js",revision:null},{url:"/static/js/statistics.04a17f2e.js",revision:null},{url:"/static/js/workouts.a514f12a.js",revision:null}],{})})); //# sourceMappingURL=service-worker.js.map diff --git a/fittrackee/dist/service-worker.js.map b/fittrackee/dist/service-worker.js.map index c99a61a1..50eb1a96 100644 --- a/fittrackee/dist/service-worker.js.map +++ b/fittrackee/dist/service-worker.js.map @@ -1 +1 @@ -{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/a0976c7ca834784fb0d1a256ec4db231/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"fittrackee_client\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/img/bike.svg\",\n \"revision\": \"ab4faed007625b209af72b9b8dce84db\"\n },\n {\n \"url\": \"/img/weather/breeze.svg\",\n \"revision\": \"428c6ccb838f8e91dc4826c5b650a98b\"\n },\n {\n \"url\": \"/img/weather/clear-day.svg\",\n \"revision\": \"f3e8628de2e5089f508f03944f8be951\"\n },\n {\n \"url\": \"/img/weather/clear-night.svg\",\n \"revision\": \"6a0d6579a93e89fdf1a2a95b398e0935\"\n },\n {\n \"url\": \"/img/weather/cloudy.svg\",\n \"revision\": \"c52fe62c9d9fea2cdf5ae2813b3df366\"\n },\n {\n \"url\": \"/img/weather/fog.svg\",\n \"revision\": \"9f4d74289594eb83f9c175d13167a0eb\"\n },\n {\n \"url\": \"/img/weather/partly-cloudy-day.svg\",\n \"revision\": \"f730c2e4f4c014e8b49c9d4a0a141b90\"\n },\n {\n \"url\": \"/img/weather/partly-cloudy-night.svg\",\n \"revision\": \"0d9270901c4dffbc05f3998d835171c8\"\n },\n {\n \"url\": \"/img/weather/pour-rain.svg\",\n \"revision\": \"91eb3159ba8781d258d8c384a8ef987c\"\n },\n {\n \"url\": \"/img/weather/rain.svg\",\n \"revision\": \"c52ca88ce0ddf4de0fc29167e578b2be\"\n },\n {\n \"url\": \"/img/weather/sleet.svg\",\n \"revision\": \"97d61d89332f912c1ec27bcbe077b7bd\"\n },\n {\n \"url\": \"/img/weather/snow.svg\",\n \"revision\": \"9e88c89c0d6d14174e9665e98932dd80\"\n },\n {\n \"url\": \"/img/weather/temperature.svg\",\n \"revision\": \"d42b62d0b57d5d326506277d87b70435\"\n },\n {\n \"url\": \"/img/weather/wind.svg\",\n \"revision\": \"d75fbe559220d7b2b9577a98a91f38d0\"\n },\n {\n \"url\": \"/img/workouts/finish.svg\",\n \"revision\": \"375196b7ade7c07c3b64ac4cb8b850a8\"\n },\n {\n \"url\": \"/img/workouts/mountains.svg\",\n \"revision\": \"0b94f1d4a050a86ca5ac89ab3ed60f9c\"\n },\n {\n \"url\": \"/img/workouts/start.svg\",\n \"revision\": \"97f6a197b6c2869e0cb2ff0e7697af86\"\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"c43fe6476930d6fc83b1d6c65c49311f\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"c61028ca6e9f81bf958e6b66238e2d7c\"\n },\n {\n \"url\": \"/robots.txt\",\n \"revision\": \"b6216d61c03e6ce0c9aea6ca7808f7ca\"\n },\n {\n \"url\": \"/static/css/admin.73df498d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/app.564b9516.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/fork-awesome.min.css\",\n \"revision\": \"82c1118c918377daaa71a320ab8eea42\"\n },\n {\n \"url\": \"/static/css/leaflet.css\",\n \"revision\": \"5c761a156eea82263d8bacf1718fe04d\"\n },\n {\n \"url\": \"/static/css/profile.203e78e2.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/reset.e2527ec6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/statistics.40e24e75.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/workouts.41709693.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.eot\",\n \"revision\": \"e719f9244c69e28e7d00e725ca1e280e\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.svg\",\n \"revision\": \"d58987a18774d859d98af95281c1dee5\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.ttf\",\n \"revision\": \"fe45770c6c277da3921355d971045ea5\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.woff\",\n \"revision\": \"92cd4d8328b2ae614386a01ff935a9f3\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.woff2\",\n \"revision\": \"12ee76445f0383c58529169d700b6650\"\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.01a58da9.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.51b1613b.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.5ff2a2d7.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.6514157e.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.10011d51.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.6206408d.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.8293436e.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.fe36f54f.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.b5b74f16.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.c43bc0a2.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.c5a514ae.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.e7867499.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/map.5b26d82b.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-700.b8a7047e.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-italic.0b285c83.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-regular.59a385b4.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/243.e551248f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/431.e5102e07.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/633.81a8ddc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/858.3f2a93f2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/93.02cf293c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/admin.9bc68088.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/app.f7049224.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/chunk-vendors.50f5c7a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/profile.430ae7df.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/reset.d9073cf1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/statistics.c9a8011a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/workouts.8abaa659.js\",\n \"revision\": null\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"0nBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,sBAG1CC,KAAKC,iBAAiB,WAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,aACP,IAWFC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,gBACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,sCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,MAEd,CACED,IAAO,oDACPC,SAAY,MAEd,CACED,IAAO,mDACPC,SAAY,MAEd,CACED,IAAO,kDACPC,SAAY,MAEd,CACED,IAAO,uDACPC,SAAY,MAEd,CACED,IAAO,qDACPC,SAAY,MAEd,CACED,IAAO,qDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,uDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,wDACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,gDACPC,SAAY,MAEd,CACED,IAAO,mDACPC,SAAY,MAEd,CACED,IAAO,oDACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,4BACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,uCACPC,SAAY,MAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,OAEb,CAAA"} \ No newline at end of file +{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/2d7e18c19c28313ab0dcc91110a5f633/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"fittrackee_client\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/img/bike.svg\",\n \"revision\": \"ab4faed007625b209af72b9b8dce84db\"\n },\n {\n \"url\": \"/img/weather/breeze.svg\",\n \"revision\": \"428c6ccb838f8e91dc4826c5b650a98b\"\n },\n {\n \"url\": \"/img/weather/clear-day.svg\",\n \"revision\": \"f3e8628de2e5089f508f03944f8be951\"\n },\n {\n \"url\": \"/img/weather/clear-night.svg\",\n \"revision\": \"6a0d6579a93e89fdf1a2a95b398e0935\"\n },\n {\n \"url\": \"/img/weather/cloudy.svg\",\n \"revision\": \"c52fe62c9d9fea2cdf5ae2813b3df366\"\n },\n {\n \"url\": \"/img/weather/fog.svg\",\n \"revision\": \"9f4d74289594eb83f9c175d13167a0eb\"\n },\n {\n \"url\": \"/img/weather/partly-cloudy-day.svg\",\n \"revision\": \"f730c2e4f4c014e8b49c9d4a0a141b90\"\n },\n {\n \"url\": \"/img/weather/partly-cloudy-night.svg\",\n \"revision\": \"0d9270901c4dffbc05f3998d835171c8\"\n },\n {\n \"url\": \"/img/weather/pour-rain.svg\",\n \"revision\": \"91eb3159ba8781d258d8c384a8ef987c\"\n },\n {\n \"url\": \"/img/weather/rain.svg\",\n \"revision\": \"c52ca88ce0ddf4de0fc29167e578b2be\"\n },\n {\n \"url\": \"/img/weather/sleet.svg\",\n \"revision\": \"97d61d89332f912c1ec27bcbe077b7bd\"\n },\n {\n \"url\": \"/img/weather/snow.svg\",\n \"revision\": \"9e88c89c0d6d14174e9665e98932dd80\"\n },\n {\n \"url\": \"/img/weather/temperature.svg\",\n \"revision\": \"d42b62d0b57d5d326506277d87b70435\"\n },\n {\n \"url\": \"/img/weather/wind.svg\",\n \"revision\": \"d75fbe559220d7b2b9577a98a91f38d0\"\n },\n {\n \"url\": \"/img/workouts/finish.svg\",\n \"revision\": \"375196b7ade7c07c3b64ac4cb8b850a8\"\n },\n {\n \"url\": \"/img/workouts/mountains.svg\",\n \"revision\": \"0b94f1d4a050a86ca5ac89ab3ed60f9c\"\n },\n {\n \"url\": \"/img/workouts/start.svg\",\n \"revision\": \"97f6a197b6c2869e0cb2ff0e7697af86\"\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"83ac98b5c391ddb9e0927f2ab9b60f8a\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"c61028ca6e9f81bf958e6b66238e2d7c\"\n },\n {\n \"url\": \"/robots.txt\",\n \"revision\": \"b6216d61c03e6ce0c9aea6ca7808f7ca\"\n },\n {\n \"url\": \"/static/css/admin.73df498d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/app.564b9516.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/fork-awesome.min.css\",\n \"revision\": \"82c1118c918377daaa71a320ab8eea42\"\n },\n {\n \"url\": \"/static/css/leaflet.css\",\n \"revision\": \"5c761a156eea82263d8bacf1718fe04d\"\n },\n {\n \"url\": \"/static/css/profile.203e78e2.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/reset.e2527ec6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/statistics.40e24e75.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/workouts.41709693.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.eot\",\n \"revision\": \"e719f9244c69e28e7d00e725ca1e280e\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.svg\",\n \"revision\": \"d58987a18774d859d98af95281c1dee5\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.ttf\",\n \"revision\": \"fe45770c6c277da3921355d971045ea5\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.woff\",\n \"revision\": \"92cd4d8328b2ae614386a01ff935a9f3\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.woff2\",\n \"revision\": \"12ee76445f0383c58529169d700b6650\"\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.01a58da9.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.51b1613b.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.5ff2a2d7.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.6514157e.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.10011d51.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.6206408d.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.8293436e.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.fe36f54f.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.b5b74f16.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.c43bc0a2.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.c5a514ae.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.e7867499.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/map.5b26d82b.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-700.b8a7047e.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-italic.0b285c83.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-regular.59a385b4.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/243.e551248f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/431.e5102e07.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/633.81a8ddc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/858.3f2a93f2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/93.02cf293c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/admin.9bc68088.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/app.3ce255f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/chunk-vendors.50f5c7a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/profile.430ae7df.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/reset.3194c9f0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/statistics.04a17f2e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/workouts.a514f12a.js\",\n \"revision\": null\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"0nBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,sBAG1CC,KAAKC,iBAAiB,WAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,aACP,IAWFC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,gBACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,sCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,MAEd,CACED,IAAO,oDACPC,SAAY,MAEd,CACED,IAAO,mDACPC,SAAY,MAEd,CACED,IAAO,kDACPC,SAAY,MAEd,CACED,IAAO,uDACPC,SAAY,MAEd,CACED,IAAO,qDACPC,SAAY,MAEd,CACED,IAAO,qDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,uDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,wDACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,gDACPC,SAAY,MAEd,CACED,IAAO,mDACPC,SAAY,MAEd,CACED,IAAO,oDACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,4BACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,uCACPC,SAAY,MAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,OAEb,CAAA"} \ No newline at end of file diff --git a/fittrackee/dist/static/js/app.3ce255f9.js b/fittrackee/dist/static/js/app.3ce255f9.js new file mode 100644 index 00000000..07b2da70 --- /dev/null +++ b/fittrackee/dist/static/js/app.3ce255f9.js @@ -0,0 +1,2 @@ +(function(){var e={5167:function(e,t,n){"use strict";var r=n(9669),a=n.n(r),o=n(8566),s=n(2894),i=n(5801),l=n(2024);const c=a().create({baseURL:(0,l.k)()});c.interceptors.request.use((e=>{const t=new AbortController;e.signal=t.signal;const n=(0,o.a)(e);o.j.set(n,t);const r=s.Z.getters[i.YN.GETTERS.AUTH_TOKEN];if(r){const t=`Bearer ${r}`;e.headers&&e.headers.Authorization!==t&&(e.headers.Authorization=`Bearer ${r}`)}return e}),(e=>Promise.reject(e))),c.interceptors.response.use((e=>((0,o.a)(e.config),e)),(e=>("canceled"!==e.message&&(0,o.a)(e.response.config),Promise.reject(e)))),t["Z"]=c},8566:function(e,t,n){"use strict";n.d(t,{a:function(){return o},j:function(){return r}});const r=new Map,a=e=>{const{method:t,url:n,params:r={},data:a={}}=e;return[t,n,JSON.stringify(r),JSON.stringify(a)].join("")},o=e=>{const t=a(e);if(r.has(t)){const e=r.get(t)||{};e?.abort(),r.delete(t)}return t}},2540:function(e,t,n){"use strict";var r=n(9150);const a=["nb"];function o(){const e=n(4612),t={};return e.keys().forEach((n=>{const r=n.match(/([A-Za-z0-9-_]+)\./i);if(r&&r.length>1&&!a.includes(r[1])){const a=r[1];t[a]=e(n).default}})),t}t["Z"]=(0,r.o)({legacy:!1,locale:"en",fallbackLocale:"en",globalInjection:!0,messages:o()})},9923:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Kontaktiere den Administrator"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee ist ein selbst-gehosteter Outdoor-Aktivitäts-Tracker."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["unter ",n(r(0))," Lizenz "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Quellkode"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Aktion"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Aktiviere Konto"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Aktiv"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Hinzufügen/Entfernen von Administratorrechten, Lösche Nutzerkonto."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Anwendung"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Kontakt-E-Mail des Administrators"])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Max. Anzahl aktiver Nutzer"])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["Wenn 0, gibt es keine Registrierungslimitierung.."])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Max. Dateianzahl im zip Archiv"])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["keine Kontakt-E-Mail"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. Größe der hochgeladenen Dateien (in Mb)"])},TITLE:e=>{const{normalize:t}=e;return t(["Anwendungskonfiguration"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. Größe des zip Archives (in Mb)"])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Zurück zu Admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Möchtest du wirklich das ",n(r(0))," Konto löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Möchtest du wirklich das ",n(r(0))," Passwort zurücksetzen?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Aktuelle E-Mail"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Lösche Nutzer"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["E-Mail-Versand ist deaktiviert."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Aktivieren/Deaktivieren von Sportarten."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["Neue E-Mail"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Das wasswort wurde zurückgesetzt."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Registrierung ist derzeit deaktiviert."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Registrierung ist derzeit aktiviert."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Aktiv"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["Trainings existieren"])},IMAGE:e=>{const{normalize:t}=e;return t(["Bild"])},LABEL:e=>{const{normalize:t}=e;return t(["Titel"])}},TITLE:e=>{const{normalize:t}=e;return t(["Sportarten Administration"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Aktualisiere Anwemdungskonfiguration (maximale Anzahl an registrierten Nutzern, maximale Dateigröße)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Aktualisiere E-Mail"])},USER:e=>{const{normalize:t}=e;return t(["Nutzer"])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Die E-Mail Adresse wurde aktualisiert."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Administratorrechte hinzufügen"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Administratorrechte entfernen"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["Adminstatus"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["Registrierungsdatum"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["Accountstatus"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nutzername"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["Trainingsanzahl"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["E-Mail: Eine gültige E-Mail muss angegeben werden."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Fehler bei der GPX-Verarbeitung."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Fehler beim Einlesen der GPX-Datei"])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Fehler beim Abrufen der Konfiguration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Fehler beim Aktualisieren der Konfiguration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Fehler. Die Registrierung ist deaktiviert."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["Dateierweiterung ist nicht erlaubt."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["Die Datei ist größer als erlaubt."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Ungültige Anmeldedaten."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Die bereitgestellten Daten sind ungültig."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte erneut anmelden."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte erneut anmelden."])},"Network Error":e=>{const{normalize:t}=e;return t(["Netzwerkfehler."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["Die neue E-Mail muss sich von der aktuellen E-Mail unterscheiden"])},"no file part":e=>{const{normalize:t}=e;return t(["Keine Datei angegeben."])},"no selected file":e=>{const{normalize:t}=e;return t(["Keine Datei ausgewählt."])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Passwort: Passwort und Passwortbestätigung stimmen nicht überein."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Gebe ein gültiges Authentifizierungstoken an."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Es tut mir leid, der Benutzername ist schon vergeben."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Sportart existiert nicht."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Die Signatur ist abgelaufen. Bitte melde dich erneut an."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Registrierung erfolgreich."])},"user does not exist":e=>{const{normalize:t}=e;return t(["Der Nutzer existiert nicht."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["Um den Administrator zu kontaktieren, muss eine gültige E-Mail-Adresse angegeben werden"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["Du kannst Dein Konto nicht löschen, da kein anderer Nutzer hat Administratorrechte besitzt."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["Du hast keine Berechtigung."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["Vorhergehende"])},NEXT:e=>{const{normalize:t}=e;return t(["Nächste"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Bestätigungs-E-Mail erneut senden"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Autorisieren"])},BACK:e=>{const{normalize:t}=e;return t(["Zurück"])},CANCEL:e=>{const{normalize:t}=e;return t(["Abbrechen"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Filter löschen"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Mein Konto löschen"])},DISABLE:e=>{const{normalize:t}=e;return t(["Deaktivieren"])},EDIT:e=>{const{normalize:t}=e;return t(["Bearbeiten"])},ENABLE:e=>{const{normalize:t}=e;return t(["Aktivieren"])},FILTER:e=>{const{normalize:t}=e;return t(["Filter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Anmelden"])},NO:e=>{const{normalize:t}=e;return t(["Nein"])},REGISTER:e=>{const{normalize:t}=e;return t(["Registrieren"])},RESET:e=>{const{normalize:t}=e;return t(["Zurücksetzen"])},SUBMIT:e=>{const{normalize:t}=e;return t(["Speichern"])},YES:e=>{const{normalize:t}=e;return t(["Ja"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["Über"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bestätigung"])},CONTACT:e=>{const{normalize:t}=e;return t(["Kontakt"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["Tag"]),t(["Tage"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Angezeigt"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["Dokumentation (en)"])},HERE:e=>{const{normalize:t}=e;return t(["hier"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Versteckt"])},HOME:e=>{const{normalize:t}=e;return t(["Startseite"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["sortiert nach"])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["sortieren"])},ASC:e=>{const{normalize:t}=e;return t(["aufsteigend"])},DESC:e=>{const{normalize:t}=e;return t(["absteigend"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["pro Seite"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Insgesamt"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Dashboard"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["Dieser Monat"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["Bei der Anwendung scheinen einige Probleme aufgetreten zu sein.
Bitte versuche es später noch einmal oder kontaktiere den Administrator."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Seite nicht gefunden"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Training nicht gefunden"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Etwas lief schief"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Eine neue OAuth2-Anwendung hinzufügen"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["ID"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Geheimnis"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Anwendungsbeschreibung"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Erstellt am"])},NAME:e=>{const{normalize:t}=e;return t(["Anwendungsname"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["Weiterleitungs-URL"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Geltungsbereich"])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf auth-Endpunkte"])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf auth-Endpunkte"])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf users-Endpunkte"])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf users-Endpunkte"])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf workouts-Endpunkte"])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf workouts-Endpunkte"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf die Anwendungskonfiguration"])}},URL:e=>{const{normalize:t}=e;return t(["Anwendungs-URL"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Anwendung erfolgreich erstellt. Stelle sicher, dass du das Geheimnis kopierst, du kannst es nicht erneut anzeigen."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist sicher, dass du diese App löschen willst?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Die Anwendung ",n(r(0))," fragt an:"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["OAuth2-Anwendungen"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t([n(r(0))," den Zugriff auf deinen Account erlauben?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["in Zwischenablage kopieren"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Anwendung löschen"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Anwendung hinzufügen"])},NO_APP:e=>{const{normalize:t}=e;return t(["Anwendung wurde nicht gefunden!"])},NO_APPS:e=>{const{normalize:t}=e;return t(["keine Anwendungen"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["keine Beschreibung"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Alle Tokens zurückrufen"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist du sicher, dass du alle Tokens zurückrufen möchtest?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["Alle vorhandenen und vergebenen Tokens wurde zurückgerufen."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Pendeln)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Virtuell)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Wandern"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["Mountainbiken"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["Mountainbiken (elektrisch)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Rudern"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Laufen"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Skifahren (Alpin)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Skifahren (Langlauf)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Schneeschuhe"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Gehen"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistik"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["Woche"])},month:e=>{const{normalize:t}=e;return t(["Monat"])},year:e=>{const{normalize:t}=e;return t(["Jahr"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Hast du keine Anweisungen erhalten?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Prüfe deine E-Mail. Eine neue Bestätigungs-E-Mail wurde an die angegebene Adresse geschickt."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Hast du bereits ein Konto?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Möchtest du dein Konto wirklich löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Aktuelles Passwort"])},EMAIL:e=>{const{normalize:t}=e;return t(["E-Mail"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Gebe eine gültige E-Mail-Adresse an."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Gebe ein Passwort ein"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Nach Benutzernamen filtern"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort verbergen"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte fordere ein neues Passworts an."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Sprache"])},LOG_IN:e=>{const{normalize:t}=e;return t(["Anmelden"])},LOGIN:e=>{const{normalize:t}=e;return t(["Anmeldung"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Abmelden"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["Neues Passwort"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["Keine Nutzer gefunden."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["Mindestens 8 Zeichen sind erforderlich."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Passwort vergessen?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Prüfe Deine E-Mail. Wenn Deine Adresse in der Datenbank enthalten ist, wirst du eine E-Mail mit einem Link erhalten um Dein Passwort zurückzusetzen."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["schwach"])},AVERAGE:e=>{const{normalize:t}=e;return t(["mittel"])},GOOD:e=>{const{normalize:t}=e;return t(["gut"])},STRONG:e=>{const{normalize:t}=e;return t(["start"])},LABEL:e=>{const{normalize:t}=e;return t(["Passwortstärke"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Vermeide vorhersehbare Buchstabenersetzungen wie ","@"," für a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Vermeide umgekehrte Schreibweisen gebräuchlicher Wörter."])},allUppercase:e=>{const{normalize:t}=e;return t(["Schreibe einige, aber nicht alle Buchstaben groß."])},capitalization:e=>{const{normalize:t}=e;return t(["Schreibe mehr als nur den ersten Buchstaben groß."])},dates:e=>{const{normalize:t}=e;return t(["Vermeide Daten und Jahreszahlen, die mit Dir in Verbindung gebracht werden."])},recentYears:e=>{const{normalize:t}=e;return t(["Vermeide Angabe von letzten Jahreszahlen."])},associatedYears:e=>{const{normalize:t}=e;return t(["Vermeide Jahreszahlen, die mit Dir in Verbindung gebracht werden."])},sequences:e=>{const{normalize:t}=e;return t(["Vermeide gebräuchliche Zeichenfolgen."])},repeated:e=>{const{normalize:t}=e;return t(["Vermeide wiederholungen von Wörtern und Zeichen."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Verwende längere Tastaturmuster und ändere mehrmals die Schreibrichtung."])},anotherWord:e=>{const{normalize:t}=e;return t(["Füge weitere weniger gebräuchliche Wörter hinzu."])},useWords:e=>{const{normalize:t}=e;return t(["Verwenden Sie mehrere Wörter, aber vermeide gebräuchliche Ausdrücke."])},noNeed:e=>{const{normalize:t}=e;return t(["Du kannst sichere Passwörter erstellen, ohne Symbole, Zahlen oder Großbuchstaben zu verwenden."])},pwned:e=>{const{normalize:t}=e;return t(["Wenn Sie dieses Passwort auch anderweitig verwenden, sollten Sie es ändern."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Dein Passwort wurde aktualisiert. Klicke ",n(r(0))," um dich anzumelden."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Kontoausgabe"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Anstiegs-bezogene Daten (Aufnahmen, gesamt)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Zurück zum Profil"])},BIO:e=>{const{normalize:t}=e;return t(["Biographie"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Geburtsdatum"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Datumsanzeigeformat"])},EDIT:e=>{const{normalize:t}=e;return t(["Profil bearbeiten"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen ändern"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen für Sportarten ändern"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Bitte ",n(r(0))," um Deine E-Mail Adresse nochmals zu ändern oder kontaktiere den Administrator"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["Vorname"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["Erster Tag der Woche"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Sprache"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Nachname"])},LOCATION:e=>{const{normalize:t}=e;return t(["Ort"])},MONDAY:e=>{const{normalize:t}=e;return t(["Montag"])},PICTURE:e=>{const{normalize:t}=e;return t(["Bild"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Bildausgabe"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Bild aktualisieren"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Bild entfernen"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Einstellungsausgabe"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Profil-Ausgabe"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Regirierungsdatum"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Sportarten-Einstellungsausgabe"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Sontag"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["Konto"])},APPS:e=>{const{normalize:t}=e;return t(["Anwendungen"])},PICTURE:e=>{const{normalize:t}=e;return t(["Bild"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen"])},PROFILE:e=>{const{normalize:t}=e;return t(["Profil"])},SPORTS:e=>{const{normalize:t}=e;return t(["Sportarten"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["Aktion"])},COLOR:e=>{const{normalize:t}=e;return t(["Farbe"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["vom Admin deaktiviert"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["aktiv"])},LABEL:e=>{const{normalize:t}=e;return t(["Titel"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["Geschwindigkeitsschwellenwert für Stopp"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich aktualisiert. Bitte prüfe Deine E-Mail um die neue E-Mail Adresse zu bestätigen."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich erstellt."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["Ein Aktivierungslink für Dein Konto wurde an die angegebene E-Mail Adresse geschickt."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich aktualisiert."])},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Einheiten für die Distanz"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Imperiales System (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Metrisches System (m, km)"])}},TIMEZONE:e=>{const{normalize:t}=e;return t(["Zeitzone"])}},REGISTER:e=>{const{normalize:t}=e;return t(["Registrieren"])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["E-Mail zur Kontobestätigung erneut senden"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Entschuldigung, die Registrierung ist deaktiviert."])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort anzeigen"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["Dieser Account ist inaktiv."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["Benutzerbild"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nutzername"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(["3 bis 30 Zeichen sind erforderlich, nur alphanumerische Zeichen und der Unterstrich _ sind erlaubt."])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Training hinzufügen"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["Analyse"])},ASCENT:e=>{const{normalize:t}=e;return t(["Aufstieg"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["Durchschn. Geschwindigkeit"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["Durchschnittsgeschwindigkeit"])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["zurück zum Training"])},DATE:e=>{const{normalize:t}=e;return t(["Datum"])},DESCENT:e=>{const{normalize:t}=e;return t(["Abstieg"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["zeige Filter"])},DISTANCE:e=>{const{normalize:t}=e;return t(["Entfernung"])},DURATION:e=>{const{normalize:t}=e;return t(["Dauer"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Training bearbeiten"])},ELEVATION:e=>{const{normalize:t}=e;return t(["Höhe"])},END:e=>{const{normalize:t}=e;return t(["Ende"])},FROM:e=>{const{normalize:t}=e;return t(["Von"])},GPX_FILE:e=>{const{normalize:t}=e;return t([".gpx Datei"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["verberge Filter"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Letzte Trainings"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Lade mehr Trainings"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["maximale Höhe"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["Maximale Dateianzahl"])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["Maximalgröße"])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["Max. Geschwindigkeit"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["minimale Höhe"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Nächstes Segment"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Nächstes Training"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["Daten aus gpx, ohne Bereinigung"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["Keine Datei angegeben"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["enthält keinen Ordner"])},NO_MAP:e=>{const{normalize:t}=e;return t(["Keine Karte"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Kein nächstes Segment"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Kein nächstes Training"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["Keine Anmerkungen"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Kein vorheriges Segment"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Kein vorheriges Training"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["Keine Aufzeichnungen."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["Keine Trainings."])},NOTES:e=>{const{normalize:t}=e;return t(["Anmerkungen"])},PAUSES:e=>{const{normalize:t}=e;return t(["Pausen"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Vorheriges Segment"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Vorheriges Training"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["Aufzeichnung"]),t(["Aufzeichnungen"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Durchschn. Geschwindigkeit"])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Weiteste Entfernung"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Höchster Anstieg"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Längste Dauer"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Max. Geschwindigkeit"])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["verbleibende Zeichen"])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["Segment"]),t(["Segmente"])])},SPEED:e=>{const{normalize:t}=e;return t(["Geschwindigkeit"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["Sportart"]),t(["Sportarten"])])},START:e=>{const{normalize:t}=e;return t(["Start"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Start und Ziel"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["Höhenachse bei Null starten"])},TITLE:e=>{const{normalize:t}=e;return t(["Titel"])},TO:e=>{const{normalize:t}=e;return t(["bis"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["Gesamtdauer"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Füge erstes Training hinzu!"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["Luftfeuchtigkeit"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["Temperatur"])},WIND:e=>{const{normalize:t}=e;return t(["Wind"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNO"])},NE:e=>{const{normalize:t}=e;return t(["NO"])},ENE:e=>{const{normalize:t}=e;return t(["ONO"])},E:e=>{const{normalize:t}=e;return t(["O"])},ESE:e=>{const{normalize:t}=e;return t(["OSO"])},SE:e=>{const{normalize:t}=e;return t(["SO"])},SSE:e=>{const{normalize:t}=e;return t(["SSO"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSW"])},SW:e=>{const{normalize:t}=e;return t(["SW"])},WSW:e=>{const{normalize:t}=e;return t(["WSW"])},W:e=>{const{normalize:t}=e;return t(["W"])},WNW:e=>{const{normalize:t}=e;return t(["WNW"])},NW:e=>{const{normalize:t}=e;return t(["NW"])},NNW:e=>{const{normalize:t}=e;return t(["NNW"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["klarer Tag"])},"clear-night":e=>{const{normalize:t}=e;return t(["klare Nacht"])},cloudy:e=>{const{normalize:t}=e;return t(["wolkig"])},fog:e=>{const{normalize:t}=e;return t(["Nebel"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["teilweise bewölkter Tag"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["teilweise bewölkte Nacht"])},rain:e=>{const{normalize:t}=e;return t(["Regen"])},sleet:e=>{const{normalize:t}=e;return t(["Schneeregen"])},snow:e=>{const{normalize:t}=e;return t(["Schnee"])},wind:e=>{const{normalize:t}=e;return t(["Wind"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["mit .gpx Datei"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["ohne .gpx Datei"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["Training"]),t(["Trainings"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["Trainingsdatum"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist du sicher, dass du dieses Training löschen möchtest?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t([".zip Datei"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["oder .zip Datei mit .gpx Dateien"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},8757:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Contact the administrator"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee is a self-hosted outdoor activity tracker."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["under ",n(r(0))," license "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Source code"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Action"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Activate account"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Active"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Add/remove admin rights, delete user account."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Application"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Administrator email for contact"])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Max. number of active users"])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["If 0, no limitation on registration."])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Max. files of zip archive"])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["no contact email"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. size of uploaded files (in Mb)"])},TITLE:e=>{const{normalize:t}=e;return t(["Application configuration"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. size of zip archive (in Mb)"])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Back to admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Are you sure you want to delete ",n(r(0))," account? All data will be deleted, this cannot be undone."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Are you sure you want to reset ",n(r(0))," password?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Current email"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Delete user"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["Email sending is disabled."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Enable/disable sports."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["New email"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["The password has been reset."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Registration is currently disabled."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Registration is currently enabled."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Reset password"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Active"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["workouts exist"])},IMAGE:e=>{const{normalize:t}=e;return t(["Image"])},LABEL:e=>{const{normalize:t}=e;return t(["Label"])}},TITLE:e=>{const{normalize:t}=e;return t(["Sports administration"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Update application configuration (maximum number of registered users, maximum files size)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Update email"])},USER:e=>{const{normalize:t,plural:n}=e;return n([t(["user"]),t(["users"])])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["The email address has been updated."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Add admin rights"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Remove admin rights"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["admin status"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["registration date"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["account status"])},USERNAME:e=>{const{normalize:t}=e;return t(["username"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["workout count"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Error. Please try again or contact the administrator."])},"at least one file in zip archive exceeds size limit, please check the archive":e=>{const{normalize:t}=e;return t(["At least one file in zip archive exceeds size limit, please check the archive."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["Email: valid email must be provided."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Error during gpx processing."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Error during gpx file parsing."])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Error on getting configuration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Error when updating configuration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Error, please try again or contact the administrator."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Error, registration is disabled."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["File extension not allowed."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["File size is greater than the allowed size."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Invalid credentials."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Provided data are invalid."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Invalid token, please log in again."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Invalid token, please log in again."])},"Network Error":e=>{const{normalize:t}=e;return t(["Network Error."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["The new email must be different than curent email"])},"no file part":e=>{const{normalize:t}=e;return t(["No file provided."])},"no selected file":e=>{const{normalize:t}=e;return t(["No selected file."])},"the number of files in the archive exceeds the limit":e=>{const{normalize:t}=e;return t(["The number of files in the archive exceeds the limit."])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Password: password and password confirmation don't match."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Provide a valid auth token."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Sorry, that username is already taken."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Sport does not exist."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Signature expired. Please log in again."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Successfully registered."])},"user does not exist":e=>{const{normalize:t}=e;return t(["User does not exist."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["A valid email must be provided for administrator contact"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["You can not delete your account, no other user has admin rights."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["You do not have permissions."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["previous"])},NEXT:e=>{const{normalize:t}=e;return t(["next"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Resend confirmation email"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Authorize"])},BACK:e=>{const{normalize:t}=e;return t(["Back"])},CANCEL:e=>{const{normalize:t}=e;return t(["Cancel"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Clear filters"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Delete my account"])},DISABLE:e=>{const{normalize:t}=e;return t(["Disable"])},EDIT:e=>{const{normalize:t}=e;return t(["Edit"])},ENABLE:e=>{const{normalize:t}=e;return t(["Enable"])},FILTER:e=>{const{normalize:t}=e;return t(["Filter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Log in"])},NO:e=>{const{normalize:t}=e;return t(["No"])},REGISTER:e=>{const{normalize:t}=e;return t(["Register"])},RESET:e=>{const{normalize:t}=e;return t(["Reset"])},SUBMIT:e=>{const{normalize:t}=e;return t(["Submit"])},YES:e=>{const{normalize:t}=e;return t(["Yes"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["about"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Confirmation"])},CONTACT:e=>{const{normalize:t}=e;return t(["contact"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["day"]),t(["days"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Displayed"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["documentation"])},HERE:e=>{const{normalize:t}=e;return t(["here"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Hidden"])},HOME:e=>{const{normalize:t}=e;return t(["Home"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["order by"])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["sort"])},ASC:e=>{const{normalize:t}=e;return t(["ascending"])},DESC:e=>{const{normalize:t}=e;return t(["descending"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["par page"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Total"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Dashboard"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["This month"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Error. Please try again or contact the administrator."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["The application seems to have encountered some issues.
Please try again later or contact the administrator."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Page not found"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Workout not found"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Something went wrong"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Add a new OAuth2 application"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["Id"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Secret"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Application description"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Issue at"])},NAME:e=>{const{normalize:t}=e;return t(["Application name"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["Redirect URL"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Scope"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to application configuration."])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to auth endpoints."])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to auth endpoints."])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to users endpoints."])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to users endpoints."])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to workouts endpoints."])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to workouts endpoints."])}},URL:e=>{const{normalize:t}=e;return t(["Application URL"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Application created successfully. Make sure to copy the secret now, it won't show up again."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete this app?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["The application ",n(r(0))," is requesting:"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["OAuth2 applications"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Authorize ",n(r(0))," to use your account?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["copy to the clipboard"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Delete application"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Add an application"])},NO_APP:e=>{const{normalize:t}=e;return t(["Application not found!"])},NO_APPS:e=>{const{normalize:t}=e;return t(["no applications"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["no description"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Revoke all tokens"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to revoke all tokens?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["All existing associated tokens have been revoked."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Transport)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Virtual)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Hiking"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["Mountain Biking"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["Mountain Biking (Electric)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Rowing"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Running"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Skiing (Alpine)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Skiing (Cross Country)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Snowshoes"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Walking"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistics"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["week"])},month:e=>{const{normalize:t}=e;return t(["month"])},year:e=>{const{normalize:t}=e;return t(["year"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Didn't received instructions?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Check your email. A new confirmation email has been sent to the address provided."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Already have an account?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete your account? All data will be deleted, this cannot be undone"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Current password"])},EMAIL:e=>{const{normalize:t}=e;return t(["Email"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Enter a valid email address."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Enter a password"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Filter on username"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["hide password"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Invalid token, please request a new password reset."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Language"])},LOG_IN:e=>{const{normalize:t}=e;return t(["log in"])},LOGIN:e=>{const{normalize:t}=e;return t(["Login"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Logout"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["New password"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["No users found."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Password"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["At least 8 characters required."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Forgot password?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Password reset"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Check your email. If your address is in our database, you'll received an email with a link to reset your password."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["weak"])},AVERAGE:e=>{const{normalize:t}=e;return t(["average"])},GOOD:e=>{const{normalize:t}=e;return t(["good"])},STRONG:e=>{const{normalize:t}=e;return t(["strong"])},LABEL:e=>{const{normalize:t}=e;return t(["password strength"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Avoid predictable letter substitutions like ","@"," for a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Avoid reversed spellings of common words."])},allUppercase:e=>{const{normalize:t}=e;return t(["Capitalize some, but not all letters."])},capitalization:e=>{const{normalize:t}=e;return t(["Capitalize more than the first letter."])},dates:e=>{const{normalize:t}=e;return t(["Avoid dates and years that are associated with you."])},recentYears:e=>{const{normalize:t}=e;return t(["Avoid recent years."])},associatedYears:e=>{const{normalize:t}=e;return t(["Avoid years that are associated with you."])},sequences:e=>{const{normalize:t}=e;return t(["Avoid common character sequences."])},repeated:e=>{const{normalize:t}=e;return t(["Avoid repeated words and characters."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Use longer keyboard patterns and change typing direction multiple times."])},anotherWord:e=>{const{normalize:t}=e;return t(["Add more words that are less common."])},useWords:e=>{const{normalize:t}=e;return t(["Use multiple words, but avoid common phrases."])},noNeed:e=>{const{normalize:t}=e;return t(["You can create strong passwords without using symbols, numbers, or uppercase letters."])},pwned:e=>{const{normalize:t}=e;return t(["If you use this password elsewhere, you should change it."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Your password have been updated. Click ",n(r(0))," to log in."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Account edition"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Ascent-related data (records, total)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Back to profile"])},BIO:e=>{const{normalize:t}=e;return t(["Bio"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Birth date"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Date display format"])},EDIT:e=>{const{normalize:t}=e;return t(["Edit profile"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Edit preferences"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Edit sports preferences"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Please ",n(r(0))," to change your email address again or contact the administrator"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["First name"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["First day of week"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Language"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Last name"])},LOCATION:e=>{const{normalize:t}=e;return t(["Location"])},MONDAY:e=>{const{normalize:t}=e;return t(["Monday"])},PICTURE:e=>{const{normalize:t}=e;return t(["Picture"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Picture edition"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Update picture"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Remove picture"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Preferences edition"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Profile edition"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Registration date"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Sports preferences edition"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Sunday"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["account"])},APPS:e=>{const{normalize:t}=e;return t(["apps"])},PICTURE:e=>{const{normalize:t}=e;return t(["picture"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["preferences"])},PROFILE:e=>{const{normalize:t}=e;return t(["profile"])},SPORTS:e=>{const{normalize:t}=e;return t(["sports"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["action"])},COLOR:e=>{const{normalize:t}=e;return t(["color"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["disabled by admin"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["active"])},LABEL:e=>{const{normalize:t}=e;return t(["label"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["stopped speed threshold"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Your account has been updated successfully. Please check your email to confirm your new email address."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Your account has been created successfully."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["A link to activate your account has been emailed to the address provided."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Your account has been updated successfully."])},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Units for distance"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Imperial system (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Metric system (m, km)"])}},TIMEZONE:e=>{const{normalize:t}=e;return t(["Timezone"])}},REGISTER:e=>{const{normalize:t}=e;return t(["Register"])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Resend account confirmation email"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Sorry, registration is disabled."])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Reset your password"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["show password"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["This user account is inactive."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["user picture"])},USERNAME:e=>{const{normalize:t}=e;return t(["Username"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(['3 to 30 characters required, only alphanumeric characters and the underscore character "_" allowed.'])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Add a workout"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["analysis"])},ASCENT:e=>{const{normalize:t}=e;return t(["ascent"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["ave. speed"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["average speed"])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["back to workout"])},DATE:e=>{const{normalize:t}=e;return t(["date"])},DESCENT:e=>{const{normalize:t}=e;return t(["descent"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["display filters"])},DISTANCE:e=>{const{normalize:t}=e;return t(["distance"])},DURATION:e=>{const{normalize:t}=e;return t(["duration"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Edit the workout"])},ELEVATION:e=>{const{normalize:t}=e;return t(["elevation"])},END:e=>{const{normalize:t}=e;return t(["end"])},FROM:e=>{const{normalize:t}=e;return t(["from"])},GPX_FILE:e=>{const{normalize:t}=e;return t([".gpx file"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["hide filters"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Latest workouts"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Load more workouts"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["max. altitude"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["max files"])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["max size"])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["max. speed"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["min. altitude"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["No next segment"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Next workout"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["data from gpx, without any cleaning"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["No file provided"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["no folder inside"])},NO_MAP:e=>{const{normalize:t}=e;return t(["No map"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["No next segment"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["No next workout"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["No notes"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["No previous segment"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["No previous workout"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["No records."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["No workouts."])},NOTES:e=>{const{normalize:t}=e;return t(["notes"])},PAUSES:e=>{const{normalize:t}=e;return t(["pauses"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Previous segment"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Previous workout"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["record"]),t(["records"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Ave. speed"])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Farthest distance"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Highest ascent"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Longest duration"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Max. speed"])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["remaining characters"])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["segment"]),t(["segments"])])},SPEED:e=>{const{normalize:t}=e;return t(["speed"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["sport"]),t(["sports"])])},START:e=>{const{normalize:t}=e;return t(["start"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Start and finish"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["start elevation axis at zero"])},TITLE:e=>{const{normalize:t}=e;return t(["title"])},TO:e=>{const{normalize:t}=e;return t(["to"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["total duration"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Upload one!"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["humidity"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["temperature"])},WIND:e=>{const{normalize:t}=e;return t(["wind"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNE"])},NE:e=>{const{normalize:t}=e;return t(["NE"])},ENE:e=>{const{normalize:t}=e;return t(["ENE"])},E:e=>{const{normalize:t}=e;return t(["E"])},ESE:e=>{const{normalize:t}=e;return t(["ESE"])},SE:e=>{const{normalize:t}=e;return t(["SE"])},SSE:e=>{const{normalize:t}=e;return t(["SSE"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSW"])},SW:e=>{const{normalize:t}=e;return t(["SW"])},WSW:e=>{const{normalize:t}=e;return t(["WSW"])},W:e=>{const{normalize:t}=e;return t(["W"])},WNW:e=>{const{normalize:t}=e;return t(["WNW"])},NW:e=>{const{normalize:t}=e;return t(["NW"])},NNW:e=>{const{normalize:t}=e;return t(["NNW"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["clear day"])},"clear-night":e=>{const{normalize:t}=e;return t(["clear night"])},cloudy:e=>{const{normalize:t}=e;return t(["cloudy"])},fog:e=>{const{normalize:t}=e;return t(["fog"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["partly cloudy day"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["partly cloudy night"])},rain:e=>{const{normalize:t}=e;return t(["rain"])},sleet:e=>{const{normalize:t}=e;return t(["sleet"])},snow:e=>{const{normalize:t}=e;return t(["snow"])},wind:e=>{const{normalize:t}=e;return t(["wind"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["with .gpx file"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["without .gpx file"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["workout"]),t(["workouts"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["workout date"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete this workout?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t([".zip file"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["or .zip file containing .gpx files"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},6625:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Contacter l'administrateur"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee est un tracker d'activités sportives (en extérieur)."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["sous licence ",n(r(0))," (en) "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Code source (en)"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Action"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Activer le compte"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Actif"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Ajouter/retirer des droits d'administration, supprimer des comptes utilisateurs."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Application"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Email de l'administrateur pour contact "])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Nombre maximum d'utilisateurs actifs "])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["Si égal à 0, pas limite d'inscription"])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Nombre max. de fichiers dans une archive zip "])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["non renseigné"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Taille max. des fichiers (en Mo) "])},TITLE:e=>{const{normalize:t}=e;return t(["Configuration de l'application"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Taille max. des archives zip (en Mo) "])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Revenir à l'admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Êtes-vous sûr de vouloir supprimer le compte de l'utilisateur ",n(r(0))," ? Toutes les données seront définitivement."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Êtes-vous sûr de vouloir réinitialiser le mot de passe de l'utilisateur ",n(r(0))," ?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Adresse email actuelle"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Supprimer l'utilisateur"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["L'envoi d'emails est désactivé."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Activer/désactiver des sports."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["Nouvelle adresse email"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Le mot de passe a été réinitialisé."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Les inscriptions sont actuellement désactivées."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Les inscriptions sont actuellement activées."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Réinit. le mot de passe"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Actif"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["des séances existent"])},IMAGE:e=>{const{normalize:t}=e;return t(["Image"])},LABEL:e=>{const{normalize:t}=e;return t(["Label"])}},TITLE:e=>{const{normalize:t}=e;return t(["Administration - Sports"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Configurer l'application (nombre maximum d'utilisateurs inscrits, taille maximale des fichers)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Changer l'email"])},USER:e=>{const{normalize:t,plural:n}=e;return n([t(["utilisateur"]),t(["utilisateurs"])])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["L'adresse email a été mise à jour."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Ajouter les droits d'admin"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Retirer les droits d'admin"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["status administrateur"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["date d'inscription"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["statut du compte"])},USERNAME:e=>{const{normalize:t}=e;return t(["nom d'utilisateur"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["nombre de séances"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Erreur. Veuillez réessayer ou contacter l'administrateur."])},"at least one file in zip archive exceeds size limit, please check the archive":e=>{const{normalize:t}=e;return t(["Au moins un fichier de l'archive zip dépasse la taille maximale, veuillez vérifier l'archive."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["Courriel : une adresse électronique valide doit être fournie."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Erreur lors du traitement du fichier gpx."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Erreur lors de l'analyse du fichier."])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Erreur lors de la récupération de la configuration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Erreur lors de la mise à jour de la configuration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Erreur, veuillez réessayer ou contacter l'administrateur."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Erreur, les inscriptions sont désactivées."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["Extension de fichier non autorisée."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["La taille du fichier est supérieure à la limite autorisée."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Identifiants invalides."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Données fournies incorrectes."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Jeton de connexion invalide, merci de vous reconnecter."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Jeton de connexion, merci de vous reconnecter."])},"no file part":e=>{const{normalize:t}=e;return t(["Pas de fichier fourni."])},"no selected file":e=>{const{normalize:t}=e;return t(["Pas de fichier sélectionné."])},"Network Error":e=>{const{normalize:t}=e;return t(["Erreur réseau."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["La nouvelle addresse électronique doit être differente de l'adresse actuelle"])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Mot de passe : les mots de passe saisis sont différents."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Merci de fournir un jeton de connexion valide."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Ce sport n'existe pas."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Signature expirée. Merci de vous reconnecter."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Désolé, ce nom d'utilisateur est déjà utilisé."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Inscription validée."])},"the number of files in the archive exceeds the limit":e=>{const{normalize:t}=e;return t(["Le nombre de fichiers de l'archive dépasse la limite."])},"user does not exist":e=>{const{normalize:t}=e;return t(["L'utilisateur n'existe pas."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["Une adresse électronique doit être fournie pour le contact de l'administrateur"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["Vous ne pouvez pas supprimer votre compte, aucun autre utilisateur n'a des droits d'administration."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["Vous n'avez pas les permissions nécessaires."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["précédent"])},NEXT:e=>{const{normalize:t}=e;return t(["suivant"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Renvoyer le message de confirmation"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Autoriser"])},BACK:e=>{const{normalize:t}=e;return t(["Retour"])},CANCEL:e=>{const{normalize:t}=e;return t(["Annuler"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Réinitialiser"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Supprimer mon compte"])},DISABLE:e=>{const{normalize:t}=e;return t(["Désactiver"])},EDIT:e=>{const{normalize:t}=e;return t(["Modifier"])},ENABLE:e=>{const{normalize:t}=e;return t(["Activer"])},FILTER:e=>{const{normalize:t}=e;return t(["Filtrer"])},LOGIN:e=>{const{normalize:t}=e;return t(["Se connecter"])},NO:e=>{const{normalize:t}=e;return t(["Non"])},REGISTER:e=>{const{normalize:t}=e;return t(["S'inscrire"])},RESET:e=>{const{normalize:t}=e;return t(["Réinit."])},SUBMIT:e=>{const{normalize:t}=e;return t(["Valider"])},YES:e=>{const{normalize:t}=e;return t(["Oui"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["à propos"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Confirmation"])},CONTACT:e=>{const{normalize:t}=e;return t(["contact"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["jour"]),t(["jours"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Affiché"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["documentation (en)"])},HERE:e=>{const{normalize:t}=e;return t(["ici"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Masqué"])},HOME:e=>{const{normalize:t}=e;return t(["Accueil"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["trier par "])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["tri"])},ASC:e=>{const{normalize:t}=e;return t(["ascendant"])},DESC:e=>{const{normalize:t}=e;return t(["descendant"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["par page"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Total"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Tableau de bord"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["Ce mois-ci"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Erreur. Veuillez réessayer ou contacter l'administrateur."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["L'application semble rencontrer quelques problèmes.
Veuillez réessayer plus tard ou contacter l'administrateur."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Page introuvable"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Séance introuvable"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Une erreur s'est produite"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Ajouter une nouvelle application OAuth2"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["Identifiant"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Secret"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Description de l'application"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Créée le"])},NAME:e=>{const{normalize:t}=e;return t(["Nom de l'application"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["URL de redirection"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Scope"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture à la configuration de l'application."])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes auth."])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes auth."])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes users."])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes users."])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes workouts."])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes workouts."])}},URL:e=>{const{normalize:t}=e;return t(["URL de l'application"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Application créée avec succès. Assurez-vous de copier le secret maintenant, il ne s'affichera plus."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr de vouloir supprimer cette application ?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["L'application ",n(r(0))," demande les accès suivants :"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["Applications OAuth2"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Autoriser ",n(r(0))," à utiliser votre compte ?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["copier dans le presse papier"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Supprimer l'application"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Ajouter une application"])},NO_APP:e=>{const{normalize:t}=e;return t(["Application introuvable !"])},NO_APPS:e=>{const{normalize:t}=e;return t(["pas de applications"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["pas de description"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Révoquer tous les jetons"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr de vouloir révoquer tous les jetons ?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["Tous les jetons associés existants ont été révoqués."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Transport)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Virtuel)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Randonnée"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["VTT"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["VTT (Électrique)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Aviron"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Course"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Ski (Alpin)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Ski (Randonnée)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Raquettes"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Marche"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistiques"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["semaine"])},month:e=>{const{normalize:t}=e;return t(["mois"])},year:e=>{const{normalize:t}=e;return t(["année"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Vous n'avez pas reçu les instructions ?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Vérifiez vos courriels. Un nouveau courriel de confirmation a été envoyé à l'adresse électronique fournie."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Vous avez déjà un compte ?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr·e de vouloir supprimer votre compte ? Toutes les données seront définitivement effacés"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Mot de passe actuel"])},EMAIL:e=>{const{normalize:t}=e;return t(["Courriel"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Saisissez une adresse électronique valide."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Saisissez un mot de passe"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Filtrer sur le nom d'utilisateur"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["masquer le mot de passe"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Jeton invalide, veuillez demander une nouvelle réinitialisation de mot de passe."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Langue"])},LOG_IN:e=>{const{normalize:t}=e;return t(["connecter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Se connecter"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Se déconnecter"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["Nouveau mot de passe"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["Aucun utilisateur trouvé."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Mot de passe"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["8 caractères minimum."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Mot de passe oublié ?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Réinitialisation du mot de passe"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Vérifiez vos courriels. Si vote adresse est dans notre base de données, vous recevrez un courriel avec un lien pour réinitialiser votre mot de passe."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["faible"])},AVERAGE:e=>{const{normalize:t}=e;return t(["moyenne"])},GOOD:e=>{const{normalize:t}=e;return t(["bonne"])},STRONG:e=>{const{normalize:t}=e;return t(["forte"])},LABEL:e=>{const{normalize:t}=e;return t(["robustesse du mot de passe"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Évitez les substitutions de lettres prévisibles comme ","@"," pour a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Évitez les orthographes inversées des mots courants."])},allUppercase:e=>{const{normalize:t}=e;return t(["Mettez quelques lettres en majuscules, mais pas toutes."])},capitalization:e=>{const{normalize:t}=e;return t(["Capitalisez mais pas seulement la première lettre."])},dates:e=>{const{normalize:t}=e;return t(["Évitez les dates et les années qui vous sont associées. (ex : date ou année de naissance)."])},recentYears:e=>{const{normalize:t}=e;return t(["Évitez les dernières années."])},associatedYears:e=>{const{normalize:t}=e;return t(["Évitez les années qui vous sont associées. (ex : date de naissance)."])},sequences:e=>{const{normalize:t}=e;return t(["Évitez les séquences de caractères courantes."])},repeated:e=>{const{normalize:t}=e;return t(["Évitez les mots et les caractères répétés."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Utilisez des motifs de clavier plus longs et changez de sens de frappe plusieurs fois."])},anotherWord:e=>{const{normalize:t}=e;return t(["Ajoutez des mots moins courants."])},useWords:e=>{const{normalize:t}=e;return t(["Utilisez plusieurs mots, mais évitez les phrases courantes."])},noNeed:e=>{const{normalize:t}=e;return t(["Vous pouvez créer des mots de passe forts sans utiliser de symboles, de chiffres ou de lettres majuscules."])},pwned:e=>{const{normalize:t}=e;return t(["Si vous utilisez ce mot de passe ailleurs, vous devriez le modifier."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Votre mot de passe a été mis à jour. Cliquez ",n(r(0))," pour vous connecter."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour du compte"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Données relatives au dénivelé positif (records, total)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Revenir au profil"])},BIO:e=>{const{normalize:t}=e;return t(["Bio"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Date de naissance"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Format d'affichage de la date"])},EDIT:e=>{const{normalize:t}=e;return t(["Modifier le profil"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Modifier les préférences"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Modifier les préférences des sports"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Veuillez vous ",n(r(0))," pour changer de nouveau votre adresse électronique ou contacter l'administrateur"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["Premier jour de la semaine"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["Prénom"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Langue"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Nom"])},LOCATION:e=>{const{normalize:t}=e;return t(["Lieu"])},MONDAY:e=>{const{normalize:t}=e;return t(["Lundi"])},PICTURE:e=>{const{normalize:t}=e;return t(["Image de profil"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour de l'image de profil"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Mettre à jour l'image"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Supprimer"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour des préférences"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour du profil"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Date d'inscription"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour des préférences des sports"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Dimanche"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["compte"])},APPS:e=>{const{normalize:t}=e;return t(["apps"])},PICTURE:e=>{const{normalize:t}=e;return t(["image"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["préférences"])},PROFILE:e=>{const{normalize:t}=e;return t(["profil"])},SPORTS:e=>{const{normalize:t}=e;return t(["sports"])}},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Unités pour les distances"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Système impérial (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Système métrique (m, km)"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["action"])},COLOR:e=>{const{normalize:t}=e;return t(["couleur"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["désactivé par l'administrateur"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["actif"])},LABEL:e=>{const{normalize:t}=e;return t(["label"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["seuil de vitesse arrêtée"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Votre compte a été modifié avec succès. Veuillez vérifier votre boîte de réception pour valider votre nouvelle adresse électronique."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Votre compte a été créé avec succès."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["Un lien pour activer votre compte a été envoyé à l'adresse électronique fournie."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Votre compte a été modifié avec succès."])},TIMEZONE:e=>{const{normalize:t}=e;return t(["Fuseau horaire"])}},REGISTER:e=>{const{normalize:t}=e;return t(["S'inscrire"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Désolé, les inscriptions sont désactivées."])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Envoyer à nouveau le courriel de confirmation de compte"])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Réinitialiser votre mot de passe"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["afficher le mot de passe"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["Le compte de cet utilisateur est inactif."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["photo de l'utilisateur"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nom d'utilisateur"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(["3 à 30 caractères requis, seuls les caractères alphanumériques et le caractère _ sont autorisés."])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Ajouter une séance"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["analyse"])},ASCENT:e=>{const{normalize:t}=e;return t(["dénivelé positif"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["vitesse moyenne"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["vitesse moy."])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["revenir à la séance"])},DATE:e=>{const{normalize:t}=e;return t(["date"])},DESCENT:e=>{const{normalize:t}=e;return t(["dénivelé négatif"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["afficher les filtres"])},DISTANCE:e=>{const{normalize:t}=e;return t(["distance"])},DURATION:e=>{const{normalize:t}=e;return t(["durée"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Modifier la séance"])},ELEVATION:e=>{const{normalize:t}=e;return t(["altitude"])},END:e=>{const{normalize:t}=e;return t(["fin"])},FROM:e=>{const{normalize:t}=e;return t(["à partir de"])},GPX_FILE:e=>{const{normalize:t}=e;return t(["fichier .gpx"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["masquer les filtres"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Séances récentes"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Charger les séances suivantes"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["altitude max"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["fichiers max. "])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["taille max. "])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["vitesse max"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["altitude min"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Segment suivant"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Séance suivante"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["données issues du fichier gpx, sans correction"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["Pas de fichier fourni"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["pas de répertoire"])},NO_MAP:e=>{const{normalize:t}=e;return t(["Pas de carte"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Pas de segment suivant"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Pas de séance suivante"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["Pas de notes"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Pas de segment précédent"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Pas de séance précédente"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["Pas de records."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["Pas de séances."])},NOTES:e=>{const{normalize:t}=e;return t(["notes"])},PAUSES:e=>{const{normalize:t}=e;return t(["pauses"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Segment précédent"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Séance précédente"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["record"]),t(["records"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Vitesse moy."])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Distance la + longue"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Dénivelé positif le + élevé"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Durée la + longue"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Vitesse max."])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["nombre de caractères restants "])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["segment"]),t(["segments"])])},SPEED:e=>{const{normalize:t}=e;return t(["vitesse"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["sport"]),t(["sports"])])},START:e=>{const{normalize:t}=e;return t(["début"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Départ et arrivée"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["démarrer l'axe de l'altitude à 0"])},TITLE:e=>{const{normalize:t}=e;return t(["titre"])},TO:e=>{const{normalize:t}=e;return t(["jusqu'au"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["durée totale"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Ajoutez votre première séance !"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["humidité"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["température"])},WIND:e=>{const{normalize:t}=e;return t(["vent"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNE"])},NE:e=>{const{normalize:t}=e;return t(["NE"])},ENE:e=>{const{normalize:t}=e;return t(["ENE"])},E:e=>{const{normalize:t}=e;return t(["E"])},ESE:e=>{const{normalize:t}=e;return t(["ESE"])},SE:e=>{const{normalize:t}=e;return t(["SE"])},SSE:e=>{const{normalize:t}=e;return t(["SSE"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSO"])},SW:e=>{const{normalize:t}=e;return t(["SO"])},WSW:e=>{const{normalize:t}=e;return t(["OSO"])},W:e=>{const{normalize:t}=e;return t(["O"])},WNW:e=>{const{normalize:t}=e;return t(["ONO"])},NW:e=>{const{normalize:t}=e;return t(["NO"])},NNW:e=>{const{normalize:t}=e;return t(["NNO"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["ensoleillé"])},"clear-night":e=>{const{normalize:t}=e;return t(["nuit claire"])},cloudy:e=>{const{normalize:t}=e;return t(["nuageux"])},fog:e=>{const{normalize:t}=e;return t(["brouillard"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["partiellement nuageux"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["nuit partiellement nuageuse"])},rain:e=>{const{normalize:t}=e;return t(["pluie"])},sleet:e=>{const{normalize:t}=e;return t(["neige fondue"])},snow:e=>{const{normalize:t}=e;return t(["neige"])},wind:e=>{const{normalize:t}=e;return t(["venteux"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["avec un fichier .gpx"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["sans fichier .gpx"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["séance"]),t(["séances"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["date de la séance"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Etes-vous sûr de vouloir supprimer cette séance ?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t(["archive .zip"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["ou une archive .zip contenant des fichiers .gpx"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},8891:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={},a={},o={},s={},i={},l={},c={},u={},d={},m={},_={},E={},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},4970:function(e,t,n){"use strict";var r=n(6775),a=n(6429),o=n(9963),s=n(2343),i=n(5205);(0,i.z)("/service-worker.js",{ready(){console.log("App is being served from cache by a service worker.\nFor more details, visit https://goo.gl/AFskqB")},registered(){console.log("Service worker has been registered.")},cached(){console.log("Content has been cached for offline use.")},updatefound(){console.log("New content is downloading.")},updated(){console.log("New content is available; please refresh.")},offline(){console.log("No internet connection found. App is running in offline mode.")},error(e){console.error("Error during service worker registration:",e)}});var l=n(6252),c=n(2262),u=n(3577);const d=e=>((0,l.dD)("data-v-2c73279e"),e=e(),(0,l.Cn)(),e),m={id:"footer"},_={class:"footer-items"},E={class:"footer-item"},S=d((()=>(0,l._)("strong",null,"FitTrackee",-1))),T=d((()=>(0,l._)("div",{class:"footer-item bullet"},"•",-1))),p={class:"footer-item"},A={key:0,class:"footer-item bullet"},O={key:1,class:"footer-item"},R=["href"],I=d((()=>(0,l._)("div",{class:"footer-item bullet"},"•",-1))),U={class:"footer-item"},g={href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer"};var N=(0,l.aZ)({__name:"Footer",props:{version:null,adminContact:null},setup(e){const t=e,{adminContact:n,version:r}=(0,c.BK)(t);return(e,t)=>{const a=(0,l.up)("router-link");return(0,l.wg)(),(0,l.iD)("div",m,[(0,l._)("div",_,[(0,l._)("div",E,[S,(0,l.Uk)(" v"+(0,u.zw)((0,c.SU)(r)),1)]),T,(0,l._)("div",p,[(0,l.Wm)(a,{to:"/about"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("common.ABOUT")),1)])),_:1})]),(0,c.SU)(n)?((0,l.wg)(),(0,l.iD)("div",A,"•")):(0,l.kq)("",!0),(0,c.SU)(n)?((0,l.wg)(),(0,l.iD)("div",O,[(0,l._)("a",{href:`mailto:${(0,c.SU)(n)}`},(0,u.zw)(e.$t("common.CONTACT")),9,R)])):(0,l.kq)("",!0),I,(0,l._)("div",U,[(0,l._)("a",g,(0,u.zw)(e.$t("common.DOCUMENTATION")),1)])])])}}}),h=n(3744);const z=(0,h.Z)(N,[["__scopeId","data-v-2c73279e"]]);var w=z,f=(n(7658),n(6595)),v=n(5801),C=n(9917),D=n(6287);const k=e=>((0,l.dD)("data-v-95c1cc02"),e=e(),(0,l.Cn)(),e),P={id:"nav"},L={class:"nav-container"},M={class:"nav-app-name"},b={class:"nav-items-close"},y=k((()=>(0,l._)("div",{class:"app-name"},"FitTrackee",-1))),G={key:0,class:"nav-items-group"},F=k((()=>(0,l._)("div",{class:"nav-item nav-separator"},null,-1))),W={class:"nav-items-user-menu"},K={key:0,class:"nav-items-group"},Y={class:"nav-item nav-profile-img"},x={key:1,class:"nav-items-group"},$=k((()=>(0,l._)("i",{class:"fa fa-language"},null,-1)));var B=(0,l.aZ)({__name:"NavBar",emits:["menuInteraction"],setup(e,{emit:t}){const n=(0,C.o)(),r=(0,l.Fl)((()=>n.getters[v.YN.GETTERS.AUTH_USER_PROFILE])),a=(0,l.Fl)((()=>n.getters[v.YN.GETTERS.IS_AUTHENTICATED])),o=(0,l.Fl)((()=>n.getters[v.SY.GETTERS.LANGUAGE])),s=(0,c.iH)(!1);function i(){s.value=!0,t("menuInteraction",!0)}function d(){s.value=!1,t("menuInteraction",!1)}function m(e){n.dispatch(v.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,e.value.toString())}function _(){n.dispatch(v.YN.ACTIONS.LOGOUT)}return(e,t)=>{const n=(0,l.up)("router-link"),E=(0,l.up)("Dropdown");return(0,l.wg)(),(0,l.iD)("div",P,[(0,l._)("div",L,[(0,l._)("div",M,[(0,l._)("div",{class:"nav-item app-name",onClick:t[0]||(t[0]=t=>e.$router.push("/"))}," FitTrackee ")]),(0,l._)("div",{class:(0,u.C_)(["nav-icon-open",{"menu-open":s.value}])},[(0,l._)("i",{class:"fa fa-bars hamburger-icon",onClick:t[1]||(t[1]=e=>i())})],2),(0,l._)("div",{class:(0,u.C_)(["nav-items",{"menu-open":s.value}])},[(0,l._)("div",b,[y,(0,l._)("i",{class:(0,u.C_)(["fa fa-close close-icon nav-item",{"menu-closed":!s.value}]),onClick:t[2]||(t[2]=e=>d())},null,2)]),(0,l._)("div",{class:"nav-items-app-menu",onClick:t[3]||(t[3]=e=>d())},[(0,c.SU)(a)?((0,l.wg)(),(0,l.iD)("div",G,[(0,l.Wm)(n,{class:"nav-item",to:"/"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("dashboard.DASHBOARD")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/workouts"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,u.kC)(e.$t("workouts.WORKOUT",2))),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/statistics"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("statistics.STATISTICS")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/workouts/add"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("workouts.ADD_WORKOUT")),1)])),_:1}),(0,c.SU)(a)&&(0,c.SU)(r).admin?((0,l.wg)(),(0,l.j4)(n,{key:0,class:"nav-item",to:"/admin"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("admin.ADMIN")),1)])),_:1})):(0,l.kq)("",!0),F])):(0,l.kq)("",!0)]),(0,l._)("div",W,[(0,c.SU)(a)?((0,l.wg)(),(0,l.iD)("div",K,[(0,l._)("div",Y,[(0,l.Wm)(f.Z,{user:(0,c.SU)(r)},null,8,["user"])]),(0,l.Wm)(n,{class:"nav-item",to:"/profile",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,c.SU)(r).username),1)])),_:1}),(0,l._)("div",{class:"nav-item nav-link",onClick:_},(0,u.zw)(e.$t("user.LOGOUT")),1)])):((0,l.wg)(),(0,l.iD)("div",x,[(0,l.Wm)(n,{class:"nav-item",to:"/login",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("user.LOGIN")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/register",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("user.REGISTER")),1)])),_:1})])),(0,c.SU)(D.mT)&&(0,c.SU)(o)?((0,l.wg)(),(0,l.j4)(E,{key:2,class:"nav-item",options:(0,c.SU)(D.mT),selected:(0,c.SU)(o),onSelected:m},{default:(0,l.w5)((()=>[$])),_:1},8,["options","selected"])):(0,l.kq)("",!0)])],2)])])}}});const Z=(0,h.Z)(B,[["__scopeId","data-v-95c1cc02"]]);var H=Z,q=n(7167);const V={id:"no-config"},j={class:"error-page"},X={class:"error-img"},J=["innerHTML"];var Q=(0,l.aZ)({__name:"NoConfig",setup(e){return(e,t)=>((0,l.wg)(),(0,l.iD)("div",V,[(0,l._)("div",j,[(0,l._)("div",X,[(0,l.Wm)(q.Z)]),(0,l._)("p",{class:"error-message",innerHTML:e.$t("error.APP_ERROR")},null,8,J)])]))}});const ee=(0,h.Z)(Q,[["__scopeId","data-v-47759238"]]);var te=ee;const ne=(0,l._)("div",{id:"top"},null,-1),re={key:0,class:"app-container"},ae={class:"app-loading"},oe={class:"container scroll"},se=(0,l._)("i",{class:"fa fa-chevron-up","aria-hidden":"true"},null,-1),ie=[se];var le=(0,l.aZ)({__name:"App",setup(e){const t=(0,C.o)(),n=(0,l.Fl)((()=>t.getters[v.SY.GETTERS.APP_CONFIG])),r=(0,l.Fl)((()=>t.getters[v.SY.GETTERS.APP_LOADING])),a=(0,c.iH)(!1),o=(0,c.iH)(!1);function s(e){a.value=e}function i(e){return e.getBoundingClientRect().top=0}function d(){window.onscroll=()=>{const e=document.querySelector("#bottom");o.value=null!==e&&i(e)}}function m(){window.scrollTo({top:0,behavior:"smooth"}),setTimeout((()=>{o.value=!1}),300)}function _(){let e="en";try{const t=navigator.language.split("-")[0];t in D.v1&&(e=t)}catch(n){e="en"}t.dispatch(v.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,e)}return(0,l.wF)((()=>{_(),t.dispatch(v.SY.ACTIONS.GET_APPLICATION_CONFIG)})),(0,l.bv)((()=>d())),(e,t)=>{const i=(0,l.up)("Loader"),d=(0,l.up)("router-view");return(0,l.wg)(),(0,l.iD)(l.HY,null,[ne,(0,l.Wm)(H,{onMenuInteraction:s}),(0,c.SU)(r)?((0,l.wg)(),(0,l.iD)("div",re,[(0,l._)("div",ae,[(0,l.Wm)(i)])])):((0,l.wg)(),(0,l.iD)("div",{key:1,class:(0,u.C_)(["app-container",{"hide-scroll":a.value}])},[(0,c.SU)(n)?((0,l.wg)(),(0,l.j4)(d,{key:0})):((0,l.wg)(),(0,l.j4)(te,{key:1}))],2)),(0,l._)("div",oe,[(0,l._)("div",{class:(0,u.C_)(["scroll-button",{"display-button":o.value}]),onClick:m},ie,2)]),(0,c.SU)(n)?((0,l.wg)(),(0,l.j4)(w,{key:2,version:(0,c.SU)(n)?(0,c.SU)(n).version:"",adminContact:(0,c.SU)(n).admin_contact},null,8,["version","adminContact"])):(0,l.kq)("",!0)],64)}}});const ce=le;var ue=ce,de=n(2540),me=n(5073),_e=n(2894);const Ee={class:"alert-message"},Se=["innerHTML"];var Te=(0,l.aZ)({__name:"AlertMessage",props:{message:null},setup(e){const t=e,{message:n}=(0,c.BK)(t);return(e,t)=>((0,l.wg)(),(0,l.iD)("div",Ee,[(0,l._)("div",{innerHTML:e.$t((0,c.SU)(n))},null,8,Se)]))}});const pe=(0,h.Z)(Te,[["__scopeId","data-v-69d7e4ff"]]);var Ae=pe,Oe=n(2531);const Re={class:"custom-textarea"},Ie=["id","name","maxLenght","disabled"],Ue={class:"remaining-chars"};var ge=(0,l.aZ)({__name:"CustomTextArea",props:{name:null,charLimit:{default:500},disabled:{type:Boolean,default:!1},input:{default:""}},emits:["updateValue"],setup(e,{emit:t}){const n=e,r=(0,c.iH)("");function a(e){t("updateValue",e.target.value)}return(0,l.YP)((()=>n.input),(e=>{r.value=null===e?"":e})),(t,n)=>((0,l.wg)(),(0,l.iD)("div",Re,[(0,l.wy)((0,l._)("textarea",{id:e.name,name:e.name,maxLenght:e.charLimit,disabled:e.disabled,"onUpdate:modelValue":n[0]||(n[0]=e=>r.value=e),onInput:a},null,40,Ie),[[o.nr,r.value]]),(0,l._)("div",Ue,(0,u.zw)(t.$t("workouts.REMAINING_CHARS"))+": "+(0,u.zw)(r.value.length)+"/"+(0,u.zw)(e.charLimit),1)]))}});const Ne=(0,h.Z)(ge,[["__scopeId","data-v-8cf5cc64"]]);var he=Ne,ze=n(3649),we=(0,l.aZ)({__name:"Distance",props:{distance:null,unitFrom:null,useImperialUnits:{type:Boolean},digits:{default:2},displayUnit:{type:Boolean,default:!0},speed:{type:Boolean,default:!1},strong:{type:Boolean,default:!1}},setup(e){const t=e,{digits:n,displayUnit:r,distance:a,speed:o,strong:s,unitFrom:i,useImperialUnits:d}=(0,c.BK)(t),m=(0,l.Fl)((()=>d.value?ze.Dl[i.value].defaultTarget:i.value)),_=(0,l.Fl)((()=>d.value?(0,ze.sC)(a.value,i.value,m.value,n.value):parseFloat(a.value.toFixed(n.value))));return(e,t)=>((0,l.wg)(),(0,l.iD)(l.HY,null,[(0,l._)("span",{class:(0,u.C_)(["distance",{strong:(0,c.SU)(s)}])},(0,u.zw)((0,c.SU)(_)),3),(0,l.Uk)(" "+(0,u.zw)(" ")+" "),(0,c.SU)(r)?((0,l.wg)(),(0,l.iD)("span",{key:0,class:(0,u.C_)(["unit",{strong:(0,c.SU)(s)}])},(0,u.zw)((0,c.SU)(m))+(0,u.zw)((0,c.SU)(o)?"/h":""),3)):(0,l.kq)("",!0)],64))}});const fe=(0,h.Z)(we,[["__scopeId","data-v-f46ff1d6"]]);var ve=fe,Ce=n(2201);const De={class:"dropdown-wrapper"},ke={key:0,class:"dropdown-list"},Pe=["onClick"];var Le=(0,l.aZ)({__name:"Dropdown",props:{options:null,selected:null},emits:{selected:e=>e},setup(e,{emit:t}){const n=e,r=(0,Ce.yj)(),a=(0,c.iH)(!1),o=n.options.map((e=>e));function s(){a.value=!a.value}function i(e){t("selected",e),a.value=!1}return(0,l.YP)((()=>r.path),(()=>a.value=!1)),(t,n)=>((0,l.wg)(),(0,l.iD)("div",De,[(0,l._)("div",{class:"dropdown-selected",onClick:s},[(0,l.WI)(t.$slots,"default")]),a.value?((0,l.wg)(),(0,l.iD)("ul",ke,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)((0,c.SU)(o),((t,n)=>((0,l.wg)(),(0,l.iD)("li",{class:(0,u.C_)(["dropdown-item",{selected:t.value===e.selected}]),key:n,onClick:e=>i(t)},(0,u.zw)(t.label),11,Pe)))),128))])):(0,l.kq)("",!0)]))}});const Me=(0,h.Z)(Le,[["__scopeId","data-v-2d3b4eac"]]);var be=Me;const ye={class:"error-message"},Ge={key:0},Fe={key:1};var We=(0,l.aZ)({__name:"ErrorMessage",props:{message:null},setup(e){const t=e,{message:n}=(0,c.BK)(t);return(e,t)=>((0,l.wg)(),(0,l.iD)("div",ye,[Array.isArray((0,c.SU)(n))?((0,l.wg)(),(0,l.iD)("ul",Ge,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)((0,c.SU)(n),((t,n)=>((0,l.wg)(),(0,l.iD)("li",{key:n},(0,u.zw)(e.$t(t)),1)))),128))])):((0,l.wg)(),(0,l.iD)("div",Fe,(0,u.zw)(e.$t((0,c.SU)(n))),1))]))}});const Ke=(0,h.Z)(We,[["__scopeId","data-v-2659a79a"]]);var Ye=Ke;const xe={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve"},$e=(0,l._)("desc",{id:"cyclingSportDescription"}," silhouette of a person riding a bicycle ",-1),Be=(0,l._)("g",null,[(0,l._)("path",{d:"M321.097,112.359c20.973,12.338,47.985,5.315,60.293-15.652c12.34-20.973,5.35-47.974-15.623-60.304\n\t\tc-21.009-12.332-47.99-5.317-60.314,15.65C293.129,73.036,300.103,100.027,321.097,112.359z"}),(0,l._)("path",{d:"M393.081,264.102c-2.414,0-4.8,0.194-7.169,0.362l-14.431-71.605l4.702-1.757c10.666-3.987,16.093-15.868,12.098-26.54\n\t\tc-3.994-10.681-15.946-16.084-26.531-12.09l-51.823,19.38l-2.321-18.864c6.3-13.193,5.541-29.78-4.767-41.482\n\t\tc-21.224-24.092-47.12-12.508-55.191-5.976l-106.884,86.555l0.016,0.024c-3.319,2.893-6.089,6.485-7.86,10.842\n\t\tc-2.191,5.396-2.596,11.067-1.564,16.384c-8.503,0.669-15.255,7.571-15.255,16.246c0,9.085,7.346,16.44,16.432,16.48l-6.797,15.906\n\t\tc-8.62-2.465-17.674-3.866-27.066-3.866C44.27,264.102,0,308.354,0,362.754c0,54.403,44.27,98.663,98.668,98.663\n\t\tc54.403,0,98.652-44.26,98.652-98.663c0-36.228-19.683-67.867-48.858-85.024l10.957-25.652h17.767l60.281,24.462l-32.201,52.773\n\t\tc-8.297,13.612-3.994,31.382,9.615,39.685c4.691,2.86,9.878,4.229,15,4.229c9.729,0,19.234-4.929,24.677-13.838l29.339-48.095\n\t\tl19.072,11.511c-5.447,12.227-8.54,25.726-8.54,39.95c0,54.403,44.254,98.663,98.652,98.663c54.402,0,98.656-44.26,98.656-98.663\n\t\tC491.737,308.354,447.483,264.102,393.081,264.102z M98.668,436.671c-40.756,0-73.923-33.161-73.923-73.917\n\t\tc0-40.756,33.167-73.909,73.923-73.909c5.944,0,11.649,0.896,17.188,2.224l-20.476,47.893\n\t\tc-11.758,1.619-20.843,11.598-20.843,23.792c0,13.323,10.808,24.132,24.13,24.132c8.767,0,16.367-4.745,20.589-11.76h52.065\n\t\tC165.395,409.988,135.188,436.671,98.668,436.671z M171.322,350.383h-52.065c-0.355-0.588-0.708-1.176-1.112-1.732l20.476-47.901\n\t\tC155.679,311.776,167.793,329.595,171.322,350.383z M296.781,290.175l7.666-12.564c4.416-7.233,5.431-16.038,2.774-24.084\n\t\tc-2.661-8.046-8.718-14.515-16.562-17.704l-52.725-21.395l32.443-26.281l1.804,14.691c0.756,6.267,4.366,11.841,9.761,15.12\n\t\tc3.271,1.981,6.979,2.988,10.698,2.988c2.435,0,4.88-0.435,7.218-1.306l48.15-18.001l13.627,67.691\n\t\tc-18.268,6.162-34.117,17.51-45.848,32.314L296.781,290.175z M375.396,337.633l-38.003-22.94\n\t\tc7.877-9.118,17.787-16.319,29.205-20.734L375.396,337.633z M393.081,436.671c-40.757,0-73.907-33.161-73.907-73.917\n\t\tc0-9.544,1.965-18.597,5.268-26.983l44.541,26.888c0,0.032-0.016,0.064-0.016,0.095c0,13.323,10.808,24.132,24.114,24.132\n\t\tc13.322,0,24.118-10.81,24.118-24.132c0-10.478-6.721-19.307-16.06-22.64l-10.277-51.043c0.756-0.024,1.463-0.226,2.22-0.226\n\t\tc40.757,0,73.911,33.153,73.911,73.909C466.992,403.51,433.838,436.671,393.081,436.671z"})],-1),Ze=[$e,Be];function He(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",xe,Ze)}var qe={name:"CyclingSport"};const Ve=(0,h.Z)(qe,[["render",He]]);var je=Ve;const Xe={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Je=(0,l._)("desc",{id:"cyclingTransportDescription"}," silhouette of a person riding a bicycle (for transportation) ",-1),Qe=(0,l._)("g",{id:"g147"},[(0,l._)("path",{d:"m 189.097,82.359 c 20.97701,12.331184 47.97442,5.308784 60.293,-15.652 12.32942,-20.979222 5.35418,-47.981117 -15.623,-60.304 -21.00482,-12.3391184 -47.99,-5.317 -60.314,15.65 -12.324,20.983 -5.34599,47.967183 15.644,60.306 z",id:"path143"}),(0,l._)("path",{d:"m 393.081,264.102 c -2.414,0 -4.8,0.194 -7.169,0.362 l -14.431,-71.605 4.702,-1.757 c 10.666,-3.987 16.093,-15.868 12.098,-26.54 -3.994,-10.681 -15.946,-16.084 -26.531,-12.09 l -63.05508,-1.53717 C 284.04753,137.09803 248.90259,106.55858 243.33317,101.62481 217.77732,75.090916 186.1698,85.012419 178.0988,91.544419 L 140.764,192.085 l 0.016,0.024 c -3.319,2.893 -6.089,6.485 -7.86,10.842 -2.191,5.396 -2.596,11.067 -1.564,16.384 -8.503,0.669 -15.255,7.571 -15.255,16.246 0,9.085 7.346,16.44 16.432,16.48 l -6.797,15.906 c -8.62,-2.465 -17.674,-3.866 -27.066,-3.866 C 44.27,264.102 0,308.354 0,362.754 c 0,54.403 44.27,98.663 98.668,98.663 54.403,0 98.652,-44.26 98.652,-98.663 0,-36.228 -19.683,-67.867 -48.858,-85.024 l 10.957,-25.652 h 17.767 l 60.281,24.462 -32.201,52.773 c -8.297,13.612 -3.994,31.382 9.615,39.685 4.691,2.86 9.878,4.229 15,4.229 9.729,0 19.234,-4.929 24.677,-13.838 l 29.339,-48.095 19.072,11.511 c -5.447,12.227 -8.54,25.726 -8.54,39.95 0,54.403 44.254,98.663 98.652,98.663 54.402,0 98.656,-44.26 98.656,-98.663 0,-54.401 -44.254,-98.653 -98.656,-98.653 z M 98.668,436.671 c -40.756,0 -73.923,-33.161 -73.923,-73.917 0,-40.756 33.167,-73.909 73.923,-73.909 5.944,0 11.649,0.896 17.188,2.224 L 95.38,338.962 c -11.758,1.619 -20.843,11.598 -20.843,23.792 0,13.323 10.808,24.132 24.13,24.132 8.767,0 16.367,-4.745 20.589,-11.76 h 52.065 c -5.926,34.862 -36.133,61.545 -72.653,61.545 z m 72.654,-86.288 h -52.065 c -0.355,-0.588 -0.708,-1.176 -1.112,-1.732 l 20.476,-47.901 c 17.058,11.026 29.172,28.845 32.701,49.633 z m 125.459,-60.208 7.666,-12.564 c 4.416,-7.233 5.431,-16.038 2.774,-24.084 -2.661,-8.046 -8.718,-14.515 -16.562,-17.704 l -73.83357,-31.7176 16.7558,-45.21274 c 10.36934,4.13303 41.82171,27.90767 45.77423,28.08592 3.271,1.981 8.57725,1.46711 12.29625,1.46711 2.435,0 18.50584,0.70472 20.84384,-0.16628 L 343.32113,188.03378 361.635,269.33 c -18.268,6.162 -34.117,17.51 -45.848,32.314 z m 78.615,47.458 -38.003,-22.94 c 7.877,-9.118 17.787,-16.319 29.205,-20.734 z m 17.685,99.038 c -40.757,0 -73.907,-33.161 -73.907,-73.917 0,-9.544 1.965,-18.597 5.268,-26.983 l 44.541,26.888 c 0,0.032 -0.016,0.064 -0.016,0.095 0,13.323 10.808,24.132 24.114,24.132 13.322,0 24.118,-10.81 24.118,-24.132 0,-10.478 -6.721,-19.307 -16.06,-22.64 l -10.277,-51.043 c 0.756,-0.024 1.463,-0.226 2.22,-0.226 40.757,0 73.911,33.153 73.911,73.909 -10e-4,40.756 -33.155,73.917 -73.912,73.917 z",id:"path145"})],-1),et=[Je,Qe];function tt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Xe,et)}var nt={name:"CyclingTransport"};const rt=(0,h.Z)(nt,[["render",tt]]);var at=rt;const ot={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},st=(0,l.uE)(' silhouette of a person riding a bicycle with virtual indicator ',4),it=[st];function lt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",ot,it)}var ct={name:"CyclingVirtual"};const ut=(0,h.Z)(ct,[["render",lt]]);var dt=ut;const mt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 463.507 463.507",style:{"enable-background":"new 0 0 463.507 463.507"},"xml:space":"preserve"},_t=(0,l._)("desc",{id:"hikingDescription"},"silhouette of a person hiking",-1),Et=(0,l._)("g",null,[(0,l._)("path",{d:"M246.413,78.492c21.688,0,39.255-17.573,39.255-39.251c0-21.67-17.567-39.24-39.255-39.24\n\t\tc-21.652,0-39.242,17.57-39.242,39.24C207.171,60.919,224.761,78.492,246.413,78.492z"}),(0,l._)("path",{d:"M386.604,202.858c0-11.185-9.066-20.251-20.253-20.251h-68.479l-38.62-54.832l0.127-0.933\n\t\tc1.378-10.474-1.474-21.067-7.911-29.444c-6.441-8.378-15.932-13.852-26.408-15.23c-11.596-1.511-22.592,2.224-30.852,9.225V45.779\n\t\tc0-7.847-6.362-14.217-14.225-14.217H140.59c-7.867,0-14.225,6.37-14.225,14.217v168.953c0,20.68,15.821,37.476,35.979,39.446\n\t\tl-3.043,7.073l-23.859,90.136l-53.73,72.188c-8.006,10.768-5.794,25.987,4.984,34.001c4.348,3.245,9.443,4.811,14.491,4.811\n\t\tc7.422,0,14.729-3.385,19.511-9.795l56.529-75.945c1.851-2.484,3.213-5.299,4.003-8.289l16.266-61.414l44.521,40.877l-6.076,88.603\n\t\tc-0.917,13.393,9.177,24.99,22.58,25.908c0.552,0.04,1.124,0.056,1.691,0.056c12.66,0,23.339-9.819,24.208-22.642l6.882-100.264\n\t\tc0.508-7.364-2.371-14.572-7.815-19.564l-45.994-42.219l13.992-90.613l19.331,27.435c3.801,5.387,9.972,8.592,16.552,8.592h70.882\n\t\tl1.339,232.294c0,4.478,3.626,8.101,8.101,8.101c4.479,0,8.101-3.624,8.101-8.101l-1.339-234.036\n\t\tC381.588,218.245,386.604,211.15,386.604,202.858z"})],-1),St=[_t,Et];function Tt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",mt,St)}var pt={name:"Hiking"};const At=(0,h.Z)(pt,[["render",Tt]]);var Ot=At;const Rt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 503.162 503.162",style:{"enable-background":"new 0 0 503.162 503.162"},"xml:space":"preserve"},It=(0,l._)("desc",{id:"mountainBikingDescription"}," silhouette of a person riding a mountain bike ",-1),Ut=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M149.951,67.997c15.711-7.143,22.739-25.675,15.596-41.416c-7.124-15.701-25.723-22.682-41.453-15.539\n\t\t\tc-15.721,7.134-22.702,25.752-15.578,41.444C115.679,68.216,134.23,75.14,149.951,67.997z"}),(0,l._)("path",{d:"M87.517,89.072l-32.828,87.755c-1.979,5.967-1.683,12.594,1.1,18.733c4.055,8.922,12.604,14.525,21.755,15.271\n\t\t\tl76.873,6.244l29.137,64.184c4.122,9.046,14.832,13.148,23.906,9.017c9.075-4.131,13.072-14.859,8.951-23.944l-36.424-80.201\n\t\t\tc0,0-3.605-13.76-21.343-14.133l-43.873-2.572l21.009-55.166l31.671,20.588c5.584,3.663,10.997,3.682,15.1,1.722l55.051-24.997\n\t\t\tc17.069-7.755,6.952-30.036-10.108-22.29l-47.506,21.707l-53.55-34.846c0,0-11.638-8.013-24.241-2.285\n\t\t\tC102.205,73.858,91.112,77.243,87.517,89.072z"}),(0,l._)("path",{d:"M423.687,182.488l-2.61,15.042c-2.123,12.154-13.35,25.092-25.092,28.888l-3.711,1.195\n\t\t\tc3.041-16.543,1.282-34.148-6.215-50.633c-19.498-42.974-70.094-61.87-112.943-42.419\n\t\t\tc-42.878,19.479-61.936,70.017-42.438,112.981c17.069,37.562,57.881,56.744,96.534,47.966l-0.784,1.415\n\t\t\tc-5.968,10.796-20.817,19.221-33.144,18.8l-17.892-0.622c-12.336-0.411-30.514,5.002-40.603,12.116l-22.376,15.759\n\t\t\tc-10.107,7.104-28.276,12.632-40.612,12.354l-12.001-0.277c12.718-22.845,14.889-51.159,3.242-76.806\n\t\t\tc-19.517-42.955-70.074-61.879-113.019-42.381c-42.792,19.44-61.87,70.007-42.372,112.933\n\t\t\tc16.667,36.711,56.084,55.788,93.914,48.444l-1.32,2.056c-6.675,10.385-22.08,18.398-34.406,17.92l-32.79-1.291\n\t\t\tc-12.326-0.497-24.021,8.97-26.096,21.143l-2.62,15.339c-0.564,3.271-0.354,6.11,0.401,8.501c-0.43,1.778-0.736,3.548-0.736,5.326\n\t\t\tv9.562c0,10.557,8.568,19.125,19.125,19.125h460.932c10.557,0,19.115-8.568,19.106-19.125l-0.125-167.507\n\t\t\tc0-2.782-0.593-5.221-1.616-7.286c1.396-3.806,2.057-7.841,1.598-11.839l-4.677-40.497c-1.415-12.249-9.763-29.146-18.637-37.724\n\t\t\tl-36.127-34.951C434.712,167.418,425.79,170.325,423.687,182.488z"})])],-1),gt=[It,Ut];function Nt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Rt,gt)}var ht={name:"MountainBiking"};const zt=(0,h.Z)(ht,[["render",Nt]]);var wt=zt;const ft={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 503.162 503.162",style:{"enable-background":"new 0 0 503.162 503.162"},"xml:space":"preserve"},vt=(0,l.uE)(' silhouette of a person riding an electric mountain bike ',18),Ct=[vt];function Dt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",ft,Ct)}var kt={name:"MountainBikingElectric"};const Pt=(0,h.Z)(kt,[["render",Dt]]);var Lt=Pt;const Mt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 534.51 534.51",style:{"enable-background":"new 0 0 534.51 534.51"},"xml:space":"preserve"},bt=(0,l._)("desc",{id:"rowingDescription"},"silhouette of a person rowing",-1),yt=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M70.517,393.857h132.622l-67.205,68.631c-3.28,3.385-3.204,8.797,0.172,12.076c1.597,1.568,3.72,2.43,5.958,2.43\n\t\t\tc2.305,0,4.533-0.947,6.12-2.572l78.881-80.555h221.315c12.45,0,30.676-6.006,40.296-13.914\n\t\t\tc8.788-7.229,19.049-16.217,26.345-24.299c10.375-9.811,22.214-23.639-4.255-22.834c-6.98,0.248-206.789,0.02-223.926,0\n\t\t\tl47.144-48.139l22.176-22.032l28.209,9.17c10.414,3.385,22.472-0.803,26.919-9.362c4.446-8.558,0.268-18.407-9.343-21.993\n\t\t\tl-17.404-6.512l54.698-54.774c12.507,6.617,28.362,4.867,38.899-5.671l46.541-46.607c13.11-13.015,13.11-33.957,0-46.923\n\t\t\tc-12.909-13.034-34.042-13.034-46.942,0l-46.512,46.598c-10.892,10.815-12.508,27.139-5.26,39.742l-57.853,59.077L253.744,183.09\n\t\t\tc-1.482-0.851-14.153-5.786-26.833-10.643c-14.898-5.719-30.371,0.583-34.53,13.971l-7.525,24.241l-35.324,118.451\n\t\t\tc-0.468,1.34-0.603,2.562-0.746,3.711H14.136c-12.45,0-17.662,8.836-11.618,19.727l23.237,21.592\n\t\t\tC39.123,385.068,58.066,393.857,70.517,393.857z M272.63,248.727c1.797-5.967,8.099-9.39,14.075-7.64l51.37,14.975l-33.038,33.737\n\t\t\tl-43.453,43.012h-14.2L272.63,248.727z"}),(0,l._)("circle",{cx:"248.953",cy:"109.842",r:"52.326"})])],-1),Gt=[bt,yt];function Ft(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Mt,Gt)}var Wt={name:"Rowing"};const Kt=(0,h.Z)(Wt,[["render",Ft]]);var Yt=Kt;const xt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve"},$t=(0,l._)("desc",{id:"runningDescription"},"silhouette of a running person",-1),Bt=(0,l._)("g",null,[(0,l._)("path",{d:"M282.74,80.771c22.318,0,40.401-18.08,40.401-40.389C323.141,18.084,305.058,0,282.74,0\n\t\tc-22.281,0-40.378,18.084-40.378,40.383C242.362,62.691,260.458,80.771,282.74,80.771z"}),(0,l._)("path",{d:"M400.207,188.547H331.47l-38.766-55.03l0.123-0.944c1.384-10.514-1.475-21.146-7.94-29.556\n\t\tc-6.461-8.409-16.007-13.903-26.52-15.287c-10.926-1.429-22.619,3.12-31.206,8.646c-1.441,0.928-84.97,54.921-84.97,54.921\n\t\tc-5.175,3.358-8.542,8.877-9.165,15.016c-0.634,6.13,1.574,12.222,5.976,16.541l58.982,58l-6.417,48.954l-18.707,65.584l-67.8-19.4\n\t\tc-12.911-3.676-26.44,3.796-30.159,16.747c-3.699,12.951,3.799,26.459,16.758,30.168l91.271,26.109\n\t\tc2.192,0.627,4.444,0.936,6.7,0.936c4.113,0,8.195-1.04,11.848-3.073c5.655-3.146,9.833-8.409,11.611-14.635l21.963-77.057\n\t\tl26.365,36.639l6.684,119.628c0.73,12.991,11.501,23.036,24.349,23.036c0.441,0,0.92-0.016,1.379-0.039\n\t\tc13.453-0.748,23.745-12.262,23-25.713l-7.083-126.736c-0.271-4.643-1.846-9.116-4.56-12.887l-32.24-44.811l11.959-91.279\n\t\tl19.409,27.555c3.794,5.407,10.005,8.624,16.613,8.624h79.28c11.226,0,20.326-9.101,20.326-20.329\n\t\tC420.533,197.647,411.432,188.547,400.207,188.547z M204.606,190.357l-19.026-18.717l23.476-15.206L204.606,190.357z"})],-1),Zt=[$t,Bt];function Ht(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",xt,Zt)}var qt={name:"Running"};const Vt=(0,h.Z)(qt,[["render",Ht]]);var jt=Vt;const Xt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 522.362 522.362",style:{"enable-background":"new 0 0 522.362 522.362"},"xml:space":"preserve"},Jt=(0,l._)("desc",{id:"alpineSkiingDescription"},"silhouette of a person skiing",-1),Qt=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M14.314,351.859L408.088,461.78c4.484,1.311,9.104,1.97,13.731,1.97l0,0c17.471,0,33.746-9.429,42.467-24.604\n\t\t\tc2.716-4.724,3.137-10.27,1.157-15.214c-1.912-4.762-5.767-8.31-10.576-9.744c-7.373-2.237-15.481,1.109-22.146,9.229\n\t\t\tc-3.548,4.303-9.496,6.244-15.07,4.714l-136.467-38.078c1.396-0.555,2.812-1.195,4.236-2.065l103.266-63.15\n\t\t\tc15.443-9.362,18.493-33.957,7.812-43.883l-64.758-60.233l39.972-21.688l69.682,9.744c5.23,0.736,9.744-2.037,10.079-6.187\n\t\t\tc0.344-4.141-3.624-8.1-8.855-8.826l-48.605-6.828l22.472-12.192c39.895-23.275,5.823-85.192-35.334-63.112l-87.554,61.19\n\t\t\tl-117.503-16.515l2.543-12.087c0.545-2.582-1.109-5.116-3.691-5.661c-2.572-0.593-5.116,1.1-5.661,3.701l-2.678,12.709\n\t\t\tl-18.331-2.582c-5.231-0.727-9.467,2.123-9.467,6.369s4.236,8.281,9.467,9.017l15.176,2.123l-2.544,12.087\n\t\t\tc-0.545,2.582,1.109,5.125,3.691,5.671c0.334,0.076,0.66,0.105,0.994,0.105c2.209,0,4.198-1.54,4.676-3.787l2.678-12.737\n\t\t\tl102.414,14.315l-5.308,3.72c-4.332,3.022-10.155,9.151-11.723,14.201c-3.844,12.45-1.473,26.717,10.452,37.705l68.802,62.175\n\t\t\tc0,0-50.978,31.776-74.998,46.397c-14.219,8.606-13.674,23.858-6.129,33.393L23.705,318.199\n\t\t\tc-10.012-2.792-20.569,2.554-23.113,11.695C-2,339.169,4.159,349.029,14.314,351.859z"}),(0,l._)("path",{d:"M450.842,72.003c-15.291,16.715-14.201,42.667,2.639,58.121c16.706,15.31,42.716,14.086,58.073-2.668\n\t\t\tc15.386-16.677,14.172-42.734-2.544-58.016C492.305,54.064,466.17,55.192,450.842,72.003z"})])],-1),en=[Jt,Qt];function tn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Xt,en)}var nn={name:"SkiingAlpine"};const rn=(0,h.Z)(nn,[["render",tn]]);var an=rn;const on={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 296 296",style:{"enable-background":"new 0 0 296 296"},"xml:space":"preserve"},sn=(0,l._)("desc",{id:"crossCountrySkiingDescription"}," silhouette of a person skiing (cross country) ",-1),ln=(0,l._)("g",null,[(0,l._)("path",{d:"M241.313,246.906h-39.564l0.456-1.273c5.62-18.374,3.479-37.58-6.027-54.278c-5.653-9.929-13.443-18.018-22.745-23.959\n\t\tl12.886-51.126c3.035-12.05-4.272-24.266-16.322-27.301c-2.634-0.664-5.278-0.826-7.833-0.559\n\t\tc-0.151-0.011-0.299-0.032-0.452-0.038c-26.03-1.077-51.443,8.485-70.33,25.993L41.586,82.855\n\t\tc-4.332-2.741-10.065-1.451-12.806,2.881s-1.451,10.065,2.88,12.806l47.625,30.136c-2.557,6.013-0.962,13.224,4.375,17.531\n\t\tc2.774,2.24,6.104,3.33,9.413,3.33c4.377-0.001,8.717-1.907,11.68-5.579l0.478-0.591c8.686-10.766,20.465-18.479,33.484-22.317\n\t\tl-11.095,44.046c-1.061,4.214-0.854,8.448,0.374,12.305c-12.908,17.917-28.398,33.68-46.198,46.979l-14.649,10.727\n\t\tc-3.938,2.943-6.001,7.798-6.005,11.798H8.25c-4.556,0-8.083,4.131-8.083,8.688v2.063c0,4.556,3.527,8.25,8.083,8.25h55.188\n\t\th161.375H280c9.113,0,16.167-7.387,16.167-16.5v-2.5H241.313z M153.974,192.398c0.741-0.153,1.471-0.231,2.188-0.457\n\t\tc5.742,3.406,10.53,8.313,13.945,14.311c5.378,9.447,6.59,20.402,3.41,30.797l-1.799,5.674c-0.447,1.461-0.656,3.184-0.657,4.184\n\t\th-69.909C121.581,231.906,139.297,213.274,153.974,192.398z M167,57.938c0-15.378,12.466-27.844,27.844-27.844\n\t\ts27.844,12.466,27.844,27.844s-12.466,27.844-27.844,27.844S167,73.315,167,57.938z"})],-1),cn=[sn,ln];function un(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",on,cn)}var dn={name:"SkiingCrossCountry"};const mn=(0,h.Z)(dn,[["render",un]]);var _n=mn;const En={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Sn=(0,l.uE)('silhouette of a person with snowshoes',6),Tn=[Sn];function pn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",En,Tn)}var An={name:"Snowshoes"};const On=(0,h.Z)(An,[["render",pn]]);var Rn=On;const In={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 535.876 535.876",style:{"enable-background":"new 0 0 535.876 535.876"},"xml:space":"preserve"},Un=(0,l._)("desc",{id:"trailDescription"},"silhouette of a person running (trail)",-1),gn=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M505.204,326.949c-5.805-10.892-15.176-10.862-20.923,0.067l-7.114,13.512c-5.757,10.92-20.416,19.775-32.752,19.775\n\t\t\th-16.753c-12.346,0-29.645,6.847-38.643,15.29l-32.35,30.342l-1.233-105.388c0.822-18.446-10.596-24.634-10.596-24.634\n\t\t\tl-56.543-25.972l33.67-67.645l38.527,22.912c0,0,15.472,9.715,26.727-9.324l37.026-63.093c1.625-3.519,2.094-7.564,1.052-11.609\n\t\t\tc-2.381-9.256-11.81-14.86-21.095-12.479c-4.083,1.042-7.459,3.49-9.754,6.713l-30.772,51.962l-62.777-37.102\n\t\t\tc-4.733-2.716-10.519-3.691-16.257-2.209l-78.345,20.12c-5.03,1.291-8.96,4.762-11.017,9.142l-38.097,76.165\n\t\t\tc-2.591,3.854-3.624,8.73-2.371,13.607c2.285,8.941,11.456,14.363,20.435,12.059c5.04-1.291,8.951-4.743,10.997-9.161\n\t\t\tl35.314-70.858l28.936-7.296l-76.203,149.921l-65.981,16.734c-1.759,0.393-3.48,1.023-5.163,1.836\n\t\t\tc-10.596,5.412-14.679,18.179-9.267,28.803c4.733,9.266,15.252,13.636,24.901,10.978l78.067-20.187\n\t\t\tc18.6-4.093,23.313-14.449,23.313-14.449l30.581-58.79l62.28,35.678l0.593,86.216c0.01,1.08,0.259,2.161,0.421,3.241l-11.6-4.188\n\t\t\tc-11.608-4.188-30.57-4.608-42.361-0.956l-26.135,8.128c-11.79,3.663-30.791,3.338-42.447-0.717l-19.221-6.694\n\t\t\tc-11.657-4.054-28.831-0.984-38.374,6.838L109.9,433.954c-9.544,7.822-26.67,10.72-38.25,6.483L40.84,429.135\n\t\t\tc-11.58-4.256-25.608,1.157-31.336,12.097l-7.21,13.789c-5.728,10.93-0.354,19.794,11.982,19.794H500.27\n\t\t\tc12.336,0,24.309-9.802,26.728-21.907l8.004-39.981c2.409-12.097-0.325-30.733-6.14-41.616L505.204,326.949z"}),(0,l._)("path",{d:"M326.395,126.625c17.806-4.562,28.563-22.721,23.983-40.526c-4.581-17.844-22.74-28.554-40.555-23.983\n\t\t\tc-17.796,4.581-28.535,22.711-23.964,40.535C290.439,120.476,308.599,131.205,326.395,126.625z"})])],-1),Nn=[Un,gn];function hn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",In,Nn)}var zn={name:"Trail"};const wn=(0,h.Z)(zn,[["render",hn]]);var fn=wn;const vn={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Cn=(0,l.uE)('silhouette of a walking person',3),Dn=[Cn];function kn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",vn,Dn)}var Pn={name:"Walking"};const Ln=(0,h.Z)(Pn,[["render",kn]]);var Mn=Ln;const bn=["title"];var yn=(0,l.aZ)({__name:"index",props:{sportLabel:null,color:null,title:{default:""}},setup(e){const t=e,{color:n,sportLabel:r,title:a}=(0,c.BK)(t),o=(0,l.f3)("sportColors");return(e,t)=>((0,l.wg)(),(0,l.iD)("div",{class:"sport-img",style:(0,u.j5)({fill:(0,c.SU)(n)?(0,c.SU)(n):(0,c.SU)(o)[(0,c.SU)(r)]}),title:(0,c.SU)(a)?(0,c.SU)(a):e.$t(`sports.${(0,c.SU)(r)}.LABEL`)},["Cycling (Sport)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(je,{key:0})):(0,l.kq)("",!0),"Cycling (Transport)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(at,{key:1})):(0,l.kq)("",!0),"Cycling (Virtual)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(dt,{key:2})):(0,l.kq)("",!0),"Hiking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Ot,{key:3})):(0,l.kq)("",!0),"Mountain Biking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(wt,{key:4})):(0,l.kq)("",!0),"Mountain Biking (Electric)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Lt,{key:5})):(0,l.kq)("",!0),"Rowing"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Yt,{key:6})):(0,l.kq)("",!0),"Running"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(jt,{key:7})):(0,l.kq)("",!0),"Skiing (Alpine)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(an,{key:8})):(0,l.kq)("",!0),"Skiing (Cross Country)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(_n,{key:9})):(0,l.kq)("",!0),"Snowshoes"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Rn,{key:10})):(0,l.kq)("",!0),"Trail"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(fn,{key:11})):(0,l.kq)("",!0),"Walking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Mn,{key:12})):(0,l.kq)("",!0)],12,bn))}});const Gn=yn;var Fn=Gn;const Wn={class:"loader"};function Kn(e,t){return(0,l.wg)(),(0,l.iD)("div",Wn)}const Yn={},xn=(0,h.Z)(Yn,[["render",Kn],["__scopeId","data-v-4c9921ee"]]);var $n=xn;const Bn={id:"modal"},Zn={class:"custom-modal"},Hn={key:0,class:"modal-message"},qn={key:1,class:"modal-message"},Vn={class:"modal-buttons"};var jn=(0,l.aZ)({__name:"Modal",props:{title:null,message:null,strongMessage:{default:()=>null}},emits:["cancelAction","confirmAction"],setup(e,{emit:t}){const n=e,r=(0,C.o)(),{title:a,message:o,strongMessage:s}=(0,c.BK)(n),i=(0,l.Fl)((()=>r.getters[v.SY.GETTERS.ERROR_MESSAGES]));return(0,l.Ah)((()=>r.commit(v.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(e,n)=>{const r=(0,l.up)("i18n-t"),d=(0,l.up)("ErrorMessage"),m=(0,l.up)("Card");return(0,l.wg)(),(0,l.iD)("div",Bn,[(0,l._)("div",Zn,[(0,l.Wm)(m,null,{title:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,c.SU)(a)),1)])),content:(0,l.w5)((()=>[(0,c.SU)(s)?((0,l.wg)(),(0,l.iD)("div",Hn,[(0,l.Wm)(r,{keypath:(0,c.SU)(o)},{default:(0,l.w5)((()=>[(0,l._)("span",null,(0,u.zw)((0,c.SU)(s)),1)])),_:1},8,["keypath"])])):((0,l.wg)(),(0,l.iD)("div",qn,(0,u.zw)((0,c.SU)(o)),1)),(0,c.SU)(i)?((0,l.wg)(),(0,l.j4)(d,{key:2,message:(0,c.SU)(i)},null,8,["message"])):(0,l.kq)("",!0),(0,l._)("div",Vn,[(0,c.SU)(i)?(0,l.kq)("",!0):((0,l.wg)(),(0,l.iD)("button",{key:0,class:"confirm",onClick:n[0]||(n[0]=e=>t("confirmAction"))},(0,u.zw)(e.$t("buttons.YES")),1)),(0,l._)("button",{class:"cancel",onClick:n[1]||(n[1]=e=>t("cancelAction"))},(0,u.zw)(e.$t("buttons."+((0,c.SU)(i)?"CANCEL":"NO"))),1)])])),_:1})])])}}});const Xn=(0,h.Z)(jn,[["__scopeId","data-v-e8fcfaba"]]);var Jn=Xn;const Qn=[{target:Ae,name:"AlertMessage"},{target:Oe.Z,name:"Card"},{target:he,name:"CustomTextArea"},{target:ve,name:"Distance"},{target:be,name:"Dropdown"},{target:Ye,name:"ErrorMessage"},{target:$n,name:"Loader"},{target:Jn,name:"Modal"},{target:Fn,name:"SportImage"}],er={mounted:(e,t)=>{e.clickOutsideEvent=function(n){e===n.target||e.contains(n.target)||t.value(n)},document.body.addEventListener("click",e.clickOutsideEvent),document.body.addEventListener("touchstart",e.clickOutsideEvent)},unmounted:function(e){e.clickOutsideEvent&&(document.body.removeEventListener("click",e.clickOutsideEvent),document.body.removeEventListener("touchstart",e.clickOutsideEvent),e.clickOutsideEvent=void 0)}};var tr=n(631);r.kL.register(r.ZL,r.jn,r.od,r.De,r.Dx,r.u,r.Gu,r.vn,r.uw,r.ST,r.f$,a.Z);const nr=(0,o.ri)(ue).provide("sportColors",tr.Zo).use(de.Z).use(_e.Z).use(me.Z).use(s.ZP,{name:"VFullscreen"}).directive("click-outside",er);Qn.forEach((e=>{nr.component(e.name,e.target)})),nr.mount("#app")},5073:function(e,t,n){"use strict";n.d(t,{Z:function(){return wl}});var r=n(2201),a=(n(7658),n(6252)),o=n(3577),s=n(9963),i=n(2262),l=n(5801),c=n(9917),u=n(8966);const d=e=>((0,a.dD)("data-v-24ec93e2"),e=e(),(0,a.Cn)(),e),m={id:"admin-app",class:"admin-card"},_=["onSubmit"],E={for:"admin_contact"},S=["value"],T=["disabled"],p={for:"max_users"},A=["disabled"],O={class:"user-limit-help"},R={class:"info-box"},I=d((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),U={for:"max_single_file_size"},g=["disabled"],N={for:"max_zip_file_size"},h=["disabled"],z={for:"gpx_limit_import"},w=["disabled"],f={key:1,class:"form-buttons"},v={class:"confirm",type:"submit"},C=["onClick"],D={key:2,class:"form-buttons"};var k=(0,a.aZ)({__name:"AdminApplication",props:{appConfig:null,edition:{type:Boolean,default:!1}},setup(e){const t=e,{edition:n}=(0,i.BK)(t),d=(0,c.o)(),k=(0,r.tv)(),P=(0,i.qj)({admin_contact:"",max_users:0,max_single_file_size:0,max_zip_file_size:0,gpx_limit_import:0}),L=(0,a.Fl)((()=>d.getters[l.SY.GETTERS.ERROR_MESSAGES]));function M(e){Object.keys(P).map((t=>{["max_single_file_size","max_zip_file_size"].includes(t)?P[t]=(0,u.j)(e[t]):P[t]=e[t]}))}function b(){M(t.appConfig),d.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),k.push("/admin/application")}function y(){const e=Object.assign({},P);e.max_single_file_size*=1048576,e.max_zip_file_size*=1048576,d.dispatch(l.SY.ACTIONS.UPDATE_APPLICATION_CONFIG,e)}return(0,a.wF)((()=>{t.appConfig&&M(t.appConfig)})),(e,t)=>{const r=(0,a.up)("ErrorMessage"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",m,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.TITLE")),1)])),content:(0,a.w5)((()=>[(0,a._)("form",{class:"admin-form",onSubmit:(0,s.iM)(y,["prevent"])},[(0,a._)("label",E,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.ADMIN_CONTACT"))+": ",1),(0,i.SU)(n)||P.admin_contact?(0,a.wy)(((0,a.wg)(),(0,a.iD)("input",{key:1,id:"admin_contact",name:"admin_contact",type:"email","onUpdate:modelValue":t[0]||(t[0]=e=>P.admin_contact=e),disabled:!(0,i.SU)(n)},null,8,T)),[[s.nr,P.admin_contact]]):((0,a.wg)(),(0,a.iD)("input",{key:0,class:"no-contact",value:e.$t("admin.APP_CONFIG.NO_CONTACT_EMAIL"),disabled:""},null,8,S))]),(0,a._)("label",p,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.MAX_USERS_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_users",name:"max_users",type:"number",min:"0","onUpdate:modelValue":t[1]||(t[1]=e=>P.max_users=e),disabled:!(0,i.SU)(n)},null,8,A),[[s.nr,P.max_users]])]),(0,a._)("div",O,[(0,a._)("span",R,[I,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.APP_CONFIG.MAX_USERS_HELP")),1)])]),(0,a._)("label",U,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.SINGLE_UPLOAD_MAX_SIZE_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_single_file_size",name:"max_single_file_size",type:"number",step:"0.1",min:"0","onUpdate:modelValue":t[2]||(t[2]=e=>P.max_single_file_size=e),disabled:!(0,i.SU)(n)},null,8,g),[[s.nr,P.max_single_file_size]])]),(0,a._)("label",N,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.ZIP_UPLOAD_MAX_SIZE_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_zip_file_size",name:"max_zip_file_size",type:"number",step:"0.1",min:"0","onUpdate:modelValue":t[3]||(t[3]=e=>P.max_zip_file_size=e),disabled:!(0,i.SU)(n)},null,8,h),[[s.nr,P.max_zip_file_size]])]),(0,a._)("label",z,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.MAX_FILES_IN_ZIP_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"gpx_limit_import",name:"gpx_limit_import",type:"number",min:"0","onUpdate:modelValue":t[4]||(t[4]=e=>P.gpx_limit_import=e),disabled:!(0,i.SU)(n)},null,8,w),[[s.nr,P.gpx_limit_import]])]),(0,i.SU)(L)?((0,a.wg)(),(0,a.j4)(r,{key:0,message:(0,i.SU)(L)},null,8,["message"])):(0,a.kq)("",!0),(0,i.SU)(n)?((0,a.wg)(),(0,a.iD)("div",f,[(0,a._)("button",v,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:(0,s.iM)(b,["prevent"])},(0,o.zw)(e.$t("buttons.CANCEL")),9,C)])):((0,a.wg)(),(0,a.iD)("div",D,[(0,a._)("button",{class:"confirm",onClick:t[5]||(t[5]=(0,s.iM)((t=>e.$router.push("/admin/application/edit")),["prevent"]))},(0,o.zw)(e.$t("buttons.EDIT")),1),(0,a._)("button",{class:"cancel",onClick:t[6]||(t[6]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)]))],40,_)])),_:1})])}}}),P=n(3744);const L=(0,P.Z)(k,[["__scopeId","data-v-24ec93e2"]]);var M=L;const b={class:"stat-card"},y={class:"stat-content box"},G={class:"stat-icon"},F={class:"stat-details"},W={class:"stat-huge"},K={class:"stat"};var Y=(0,a.aZ)({__name:"StatCard",props:{icon:null,text:null,value:null},setup(e){const t=e,{icon:n,text:r,value:s}=(0,i.BK)(t);return(e,t)=>((0,a.wg)(),(0,a.iD)("div",b,[(0,a._)("div",y,[(0,a._)("div",G,[(0,a._)("i",{class:(0,o.C_)(["fa",`fa-${(0,i.SU)(n)}`])},null,2)]),(0,a._)("div",F,[(0,a._)("div",W,(0,o.zw)((0,i.SU)(s)),1),(0,a._)("div",K,(0,o.zw)((0,i.SU)(r)),1)])])]))}});const x=Y;var $=x;const B={id:"user-stats"};var Z=(0,a.aZ)({__name:"AppStatsCards",props:{appStatistics:null},setup(e){const t=e,{appStatistics:n}=(0,i.BK)(t),r=(0,a.Fl)((()=>(0,u.Z)(n.value.uploads_dir_size,!1)));return(e,t)=>((0,a.wg)(),(0,a.iD)("div",B,[(0,a.Wm)($,{icon:"users",value:(0,i.SU)(n).users,text:e.$t("admin.USER",(0,i.SU)(n).users)},null,8,["value","text"]),(0,a.Wm)($,{icon:"tags",value:(0,i.SU)(n).sports,text:e.$t("workouts.SPORT",(0,i.SU)(n).sports)},null,8,["value","text"]),(0,a.Wm)($,{icon:"calendar",value:(0,i.SU)(n).workouts,text:e.$t("workouts.WORKOUT",(0,i.SU)(n).workouts)},null,8,["value","text"]),(0,a.Wm)($,{icon:"folder-open",value:(0,i.SU)(r).size,text:(0,i.SU)(r).suffix},null,8,["value","text"])]))}});const H=Z;var q=H,V=n(2531);const j=e=>((0,a.dD)("data-v-0dd66f89"),e=e(),(0,a.Cn)(),e),X={id:"admin-menu",class:"center-card"},J={class:"admin-menu description-list"},Q={class:"application-config-details"},ee=j((()=>(0,a._)("br",null,null,-1))),te={class:"registration-status"},ne={key:0,class:"email-sending-status"},re=j((()=>(0,a._)("i",{class:"fa fa-exclamation-triangle","aria-hidden":"true"},null,-1)));var ae=(0,a.aZ)({__name:"AdminMenu",props:{appConfig:null,appStatistics:{default:()=>({})}},setup(e){const t=e,{appConfig:n,appStatistics:r}=(0,i.BK)(t);return(e,t)=>{const s=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("div",X,[(0,a.Wm)(V.Z,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.ADMINISTRATION")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(q,{appStatistics:(0,i.SU)(r)},null,8,["appStatistics"]),(0,a._)("div",J,[(0,a._)("dl",null,[(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/application"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.APPLICATION")),1)])),_:1})]),(0,a._)("dd",Q,[(0,a.Uk)((0,o.zw)(e.$t("admin.UPDATE_APPLICATION_DESCRIPTION")),1),ee,(0,a._)("span",te,(0,o.zw)(e.$t("admin.REGISTRATION_"+((0,i.SU)(n).is_registration_enabled?"ENABLED":"DISABLED"))),1),(0,i.SU)(n).is_email_sending_enabled?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("span",ne,[re,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.EMAIL_SENDING_DISABLED")),1)]))]),(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/sports"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("workouts.SPORT",0))),1)])),_:1})]),(0,a._)("dd",null,(0,o.zw)(e.$t("admin.ENABLE_DISABLE_SPORTS")),1),(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/users"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("admin.USER",0))),1)])),_:1})]),(0,a._)("dd",null,(0,o.zw)(e.$t("admin.ADMIN_RIGHTS_DELETE_USER_ACCOUNT")),1)])])])),_:1})])}}});const oe=(0,P.Z)(ae,[["__scopeId","data-v-0dd66f89"]]);var se=oe,ie=n(9150),le=n(631);const ce=e=>((0,a.dD)("data-v-6d62af67"),e=e(),(0,a.Cn)(),e),ue={id:"admin-sports",class:"admin-card"},de={class:"responsive-table"},me=ce((()=>(0,a._)("th",null,"#",-1))),_e={class:"text-left"},Ee={class:"text-left sport-action"},Se=ce((()=>(0,a._)("th",null,null,-1))),Te={class:"text-center"},pe=ce((()=>(0,a._)("span",{class:"cell-heading"},"id",-1))),Ae={class:"cell-heading"},Oe={class:"sport-label"},Re={class:"cell-heading"},Ie={class:"text-center"},Ue={class:"cell-heading"},ge={class:"sport-action"},Ne={class:"cell-heading"},he={class:"action-button"},ze=["onClick"],we={key:0,class:"has-workouts"},fe=ce((()=>(0,a._)("i",{class:"fa fa-warning","aria-hidden":"true"},null,-1)));var ve=(0,a.aZ)({__name:"AdminSports",setup(e){const{t:t}=(0,ie.QT)(),n=(0,c.o)(),r=(0,a.Fl)((()=>(0,le.xH)(n.getters[l.O8.GETTERS.SPORTS],t))),u=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function d(e,t){n.dispatch(l.O8.ACTIONS.UPDATE_SPORTS,{id:e,isActive:t})}return(e,t)=>{const n=(0,a.up)("SportImage"),l=(0,a.up)("ErrorMessage"),c=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",ue,[(0,a.Wm)(c,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.SPORTS.TITLE")),1)])),content:(0,a.w5)((()=>[(0,a._)("button",{class:"top-button",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1),(0,a._)("div",de,[(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[me,(0,a._)("th",null,(0,o.zw)(e.$t("admin.SPORTS.TABLE.IMAGE")),1),(0,a._)("th",_e,(0,o.zw)(e.$t("admin.SPORTS.TABLE.LABEL")),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.SPORTS.TABLE.ACTIVE")),1),(0,a._)("th",Ee,(0,o.zw)(e.$t("admin.ACTION")),1),Se])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(r),(t=>((0,a.wg)(),(0,a.iD)("tr",{key:t.id},[(0,a._)("td",Te,[pe,(0,a.Uk)(" "+(0,o.zw)(t.id),1)]),(0,a._)("td",null,[(0,a._)("span",Ae,(0,o.zw)(e.$t("admin.SPORTS.TABLE.IMAGE")),1),(0,a.Wm)(n,{title:t.translatedLabel,"sport-label":t.label,color:t.color},null,8,["title","sport-label","color"])]),(0,a._)("td",Oe,[(0,a._)("span",Re,(0,o.zw)(e.$t("admin.SPORTS.TABLE.LABEL")),1),(0,a.Uk)(" "+(0,o.zw)(t.translatedLabel),1)]),(0,a._)("td",Ie,[(0,a._)("span",Ue,(0,o.zw)(e.$t("admin.SPORTS.TABLE.ACTIVE")),1),(0,a._)("i",{class:(0,o.C_)("fa fa"+(t.is_active?"-check":"")),"aria-hidden":"true"},null,2)]),(0,a._)("td",ge,[(0,a._)("span",Ne,(0,o.zw)(e.$t("admin.ACTION")),1),(0,a._)("div",he,[(0,a._)("button",{class:(0,o.C_)({danger:t.is_active}),onClick:e=>d(t.id,!t.is_active)},(0,o.zw)(e.$t(`buttons.${t.is_active?"DIS":"EN"}ABLE`)),11,ze),t.has_workouts?((0,a.wg)(),(0,a.iD)("span",we,[fe,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.SPORTS.TABLE.HAS_WORKOUTS")),1)])):(0,a.kq)("",!0)])])])))),128))])]),(0,i.SU)(u)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(u)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("button",{onClick:t[1]||(t[1]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)])])),_:1})])}}});const Ce=(0,P.Z)(ve,[["__scopeId","data-v-6d62af67"]]);var De=Ce,ke=n(8626),Pe=n(5020),Le=n(6595);const Me={class:"users-filters"},be={class:"search-username"},ye=["onKeyup","placeholder"];var Ge=(0,a.aZ)({__name:"UsersNameFilter",emits:["filterOnUsername"],setup(e,{emit:t}){const n=(0,r.yj)(),l=(0,i.iH)(n.query.q?n.query.q:"");function c(){""!==l.value&&t("filterOnUsername",l)}function u(){l.value="",t("filterOnUsername",l.value)}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Me,[(0,a._)("div",be,[(0,a.wy)((0,a._)("input",{id:"username",name:"username","onUpdate:modelValue":t[0]||(t[0]=e=>l.value=e),onKeyup:(0,s.D2)(c,["enter"]),placeholder:e.$t("user.FILTER_ON_USERNAME")},null,40,ye),[[s.nr,l.value,void 0,{trim:!0}]]),""!==l.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-times","aria-hidden":"true",onClick:u})):(0,a.kq)("",!0)]),(0,a._)("i",{class:(0,o.C_)(["fa fa-search",{"fa-disabled":""===l.value}]),"aria-hidden":"true",onClick:c},null,2)]))}});const Fe=(0,P.Z)(Ge,[["__scopeId","data-v-627a8e91"]]);var We=Fe,Ke=n(2766),Ye=n(6558);const xe=e=>((0,a.dD)("data-v-dc12ff78"),e=e(),(0,a.Cn)(),e),$e={id:"admin-users",class:"admin-card"},Be={key:0,class:"no-users"},Ze={key:1,class:"responsive-table"},He=xe((()=>(0,a._)("th",null,"#",-1))),qe={class:"left-text"},Ve={class:"left-text"},je={class:"left-text"},Xe={class:"cell-heading"},Je={class:"cell-heading"},Qe={class:"cell-heading"},et={class:"cell-heading"},tt={class:"text-center"},nt={class:"cell-heading"},rt={class:"text-center"},at={class:"cell-heading"},ot={class:"text-center"},st={class:"cell-heading"},it={class:"text-center"},lt={class:"cell-heading"},ct=["disabled","onClick"];var ut=(0,a.aZ)({__name:"AdminUsers",setup(e){const t=(0,c.o)(),n=(0,r.yj)(),u=(0,r.tv)(),d=["is_active","admin","created_at","username","workouts_count"],m="created_at";let _=(0,i.qj)((0,Ke.pm)(n.query,d,m));const E=(0,a.Fl)((()=>t.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),S=(0,a.Fl)((()=>t.getters[l.RT.GETTERS.USERS])),T=(0,a.Fl)((()=>t.getters[l.RT.GETTERS.USERS_PAGINATION])),p=(0,a.Fl)((()=>t.getters[l.SY.GETTERS.ERROR_MESSAGES]));function A(e){t.dispatch(l.RT.ACTIONS.GET_USERS,e)}function O(e){I("q",e.value)}function R(e,n){t.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,admin:n})}function I(e,t){_[e]=t,"per_page"===e&&(_.page=1),u.push({path:"/admin/users",query:_})}return(0,a.wF)((()=>A(_))),(0,a.Ah)((()=>{t.dispatch(l.RT.ACTIONS.EMPTY_USERS)})),(0,a.YP)((()=>n.query),(e=>{_=(0,Ke.pm)(e,d,m,{query:_}),A(_)})),(e,t)=>{const n=(0,a.up)("router-link"),r=(0,a.up)("ErrorMessage"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",$e,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("admin.USER",0))),1)])),content:(0,a.w5)((()=>[(0,a._)("button",{class:"top-button",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1),(0,a.Wm)(We,{onFilterOnUsername:O}),(0,a.Wm)(ke.Z,{sort:(0,i.SU)(Ke.fS),order_by:d,query:(0,i.SU)(_),message:"admin.USERS.SELECTS.ORDER_BY",onUpdateSelect:I},null,8,["sort","query"]),0===(0,i.SU)(S).length?((0,a.wg)(),(0,a.iD)("div",Be,(0,o.zw)(e.$t("user.NO_USERS_FOUND")),1)):((0,a.wg)(),(0,a.iD)("div",Ze,[(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[He,(0,a._)("th",qe,(0,o.zw)(e.$t("user.USERNAME")),1),(0,a._)("th",Ve,(0,o.zw)(e.$t("user.EMAIL")),1),(0,a._)("th",je,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE")),1),(0,a._)("th",null,(0,o.zw)((0,o.kC)(e.$t("workouts.WORKOUT",0))),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.ACTIVE")),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.ADMIN")),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.ACTION")),1)])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(t=>((0,a.wg)(),(0,a.iD)("tr",{key:t.username},[(0,a._)("td",null,[(0,a._)("span",Xe,(0,o.zw)(e.$t("user.PROFILE.PICTURE")),1),(0,a.Wm)(Le.Z,{user:t},null,8,["user"])]),(0,a._)("td",null,[(0,a._)("span",Je,(0,o.zw)(e.$t("user.USERNAME")),1),(0,a.Wm)(n,{to:`/admin/users/${t.username}`},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.username),1)])),_:2},1032,["to"])]),(0,a._)("td",null,[(0,a._)("span",Qe,(0,o.zw)(e.$t("user.EMAIL")),1),(0,a.Uk)(" "+(0,o.zw)(t.email),1)]),(0,a._)("td",null,[(0,a._)("span",et,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE")),1),(0,a.Uk)(" "+(0,o.zw)((0,i.SU)(Ye.p6)(t.created_at,(0,i.SU)(E).timezone,(0,i.SU)(E).date_format)),1)]),(0,a._)("td",tt,[(0,a._)("span",nt,(0,o.zw)((0,o.kC)(e.$t("workouts.WORKOUT",0))),1),(0,a.Uk)(" "+(0,o.zw)(t.nb_workouts),1)]),(0,a._)("td",rt,[(0,a._)("span",at,(0,o.zw)(e.$t("admin.ACTIVE")),1),(0,a._)("i",{class:(0,o.C_)(`fa fa${t.is_active?"-check":""}-square-o`),"aria-hidden":"true"},null,2)]),(0,a._)("td",ot,[(0,a._)("span",st,(0,o.zw)(e.$t("user.ADMIN")),1),(0,a._)("i",{class:(0,o.C_)(`fa fa${t.admin?"-check":""}-square-o`),"aria-hidden":"true"},null,2)]),(0,a._)("td",it,[(0,a._)("span",lt,(0,o.zw)(e.$t("admin.ACTION")),1),(0,a._)("button",{class:(0,o.C_)({danger:t.admin}),disabled:t.username===(0,i.SU)(E).username,onClick:e=>R(t.username,!t.admin)},(0,o.zw)(e.$t(`admin.USERS.TABLE.${t.admin?"REMOVE":"ADD"}_ADMIN_RIGHTS`)),11,ct)])])))),128))])]),(0,i.SU)(T).page?((0,a.wg)(),(0,a.j4)(Pe.Z,{key:0,path:"/admin/users",pagination:(0,i.SU)(T),query:(0,i.SU)(_)},null,8,["pagination","query"])):(0,a.kq)("",!0),(0,i.SU)(p)?((0,a.wg)(),(0,a.j4)(r,{key:1,message:(0,i.SU)(p)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("button",{onClick:t[1]||(t[1]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)]))])),_:1})])}}});const dt=(0,P.Z)(ut,[["__scopeId","data-v-dc12ff78"]]);var mt=dt,_t=n(2179);const Et={class:"profile-tabs custom-checkboxes-group"},St={class:"profile-tabs-checkboxes custom-checkboxes"},Tt=["id","name","checked","disabled","onInput"];var pt=(0,a.aZ)({__name:"UserProfileTabs",props:{tabs:null,selectedTab:null,edition:{type:Boolean},disabled:{type:Boolean,default:!1}},setup(e){const t=e,{tabs:n,selectedTab:r,disabled:s}=(0,i.BK)(t);function l(e){switch(e){case"ACCOUNT":case"PICTURE":return`/profile/edit/${e.toLocaleLowerCase()}`;case"APPS":case"PREFERENCES":case"SPORTS":return`/profile${t.edition?"/edit":""}/${e.toLocaleLowerCase()}`;default:case"PROFILE":return"/profile"+(t.edition?"/edit":"")}}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Et,[(0,a._)("div",St,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(n),(t=>((0,a.wg)(),(0,a.iD)("div",{class:"profile-tab custom-checkbox",key:t},[(0,a._)("label",null,[(0,a._)("input",{type:"radio",id:t,name:t,checked:(0,i.SU)(r).split("/")[0]===t,disabled:(0,i.SU)(s),onInput:n=>e.$router.push(l(t))},null,40,Tt),(0,a._)("span",null,(0,o.zw)(e.$t(`user.PROFILE.TABS.${t}`)),1)])])))),128))])]))}});const At=pt;var Ot=At;const Rt={id:"user-profile"},It={class:"box"};var Ut=(0,a.aZ)({__name:"index",props:{user:null,tab:null},setup(e){const t=e,{user:n,tab:r}=(0,i.BK)(t),o=["PROFILE","PREFERENCES","SPORTS","APPS"];return(e,t)=>{const s=(0,a.up)("router-view");return(0,a.wg)(),(0,a.iD)("div",Rt,[(0,a.Wm)(_t.Z,{user:(0,i.SU)(n)},null,8,["user"]),(0,a._)("div",It,[(0,a.Wm)(Ot,{tabs:o,selectedTab:(0,i.SU)(r),edition:!1},null,8,["selectedTab"]),(0,a.Wm)(s,{user:(0,i.SU)(n)},null,8,["user"])])])}}});const gt=(0,P.Z)(Ut,[["__scopeId","data-v-9729cba4"]]);var Nt=gt,ht=n(1585),zt=n(6287);const wt={id:"user-preferences",class:"description-list"},ft={class:"profile-buttons"};var vt=(0,a.aZ)({__name:"UserPreferences",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LANGUAGE])),s=(0,a.Fl)((()=>t.user.language?zt.zK[t.user.language]:zt.zK.en)),u=(0,a.Fl)((()=>t.user.weekm?"MONDAY":"SUNDAY")),d=(0,a.Fl)((()=>t.user.timezone?t.user.timezone:"Europe/Paris")),m=(0,a.Fl)((()=>t.user.date_format?t.user.date_format:"MM/dd/yyyy")),_=(0,a.Fl)((()=>t.user.display_ascent?"DISPLAYED":"HIDDEN"));return(t,n)=>((0,a.wg)(),(0,a.iD)("div",wt,[(0,a._)("dl",null,[(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.LANGUAGE"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(s)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.TIMEZONE"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(d)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.DATE_FORMAT"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(Ye.mh)((0,i.SU)(m),(0,i.SU)(r))),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.FIRST_DAY_OF_WEEK"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t(`user.PROFILE.${(0,i.SU)(u)}`)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.UNITS.LABEL"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t("user.PROFILE.UNITS."+(e.user.imperial_units?"IMPERIAL":"METRIC"))),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.ASCENT_DATA"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t(`common.${(0,i.SU)(_)}`)),1)]),(0,a._)("div",ft,[(0,a._)("button",{onClick:n[0]||(n[0]=e=>t.$router.push("/profile/edit/preferences"))},(0,o.zw)(t.$t("user.PROFILE.EDIT_PREFERENCES")),1),(0,a._)("button",{onClick:n[1]||(n[1]=e=>t.$router.push("/"))},(0,o.zw)(t.$t("common.HOME")),1)])]))}});const Ct=vt;var Dt=Ct;const kt={id:"user-profile-edition",class:"center-card"};var Pt=(0,a.aZ)({__name:"index",props:{user:null,tab:null},setup(e){const t=e,n=(0,c.o)(),{user:r,tab:s}=(0,i.BK)(t),u=["PROFILE","ACCOUNT","PICTURE","PREFERENCES","SPORTS"],d=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING]));return(e,t)=>{const n=(0,a.up)("router-view"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",kt,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t(`user.PROFILE.${(0,i.SU)(s)}_EDITION`)),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(Ot,{tabs:u,selectedTab:(0,i.SU)(s),edition:!0,disabled:(0,i.SU)(d)},null,8,["selectedTab","disabled"]),(0,a.Wm)(n,{user:(0,i.SU)(r)},null,8,["user"])])),_:1})])}}});const Lt=Pt;var Mt=Lt,bt=n(8403);const yt={id:"user-infos-edition"},Gt={class:"profile-form form-box"},Ft={key:1,class:"info-box success-message"},Wt=["onSubmit"],Kt={class:"form-items",for:"email"},Yt=["disabled"],xt={class:"form-items",for:"password-field"},$t={class:"form-items",for:"new-password-field"},Bt={class:"form-buttons"},Zt={class:"confirm",type:"submit"};var Ht=(0,a.aZ)({__name:"UserAccountEdition",props:{user:null},setup(e){const t=e,{user:n}=(0,i.BK)(t),r=(0,c.o)(),u=(0,i.qj)({email:"",password:"",new_password:""}),d=(0,a.Fl)((()=>r.getters[l.YN.GETTERS.USER_LOADING])),m=(0,a.Fl)((()=>r.getters[l.SY.GETTERS.APP_CONFIG])),_=(0,a.Fl)((()=>r.getters[l.YN.GETTERS.IS_SUCCESS])),E=(0,i.iH)(!1),S=(0,a.Fl)((()=>r.getters[l.SY.GETTERS.ERROR_MESSAGES])),T=(0,i.iH)(!1),p=(0,i.iH)(!1);function A(){T.value=!0}function O(e){u.email=e.email}function R(e){u.password=e}function I(e){u.new_password=e}function U(){const e={email:u.email,password:u.password};u.new_password&&(e.new_password=u.new_password),E.value=u.email!==n.value.email,r.dispatch(l.YN.ACTIONS.UPDATE_USER_ACCOUNT,e)}function g(e){p.value=e}function N(e){r.dispatch(l.YN.ACTIONS.DELETE_ACCOUNT,{username:e})}return(0,a.bv)((()=>{t.user&&O(t.user)})),(0,a.Ah)((()=>{r.commit(l.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),r.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(0,a.YP)((()=>_.value),(async e=>{e&&(R(""),I(""),O(n.value),T.value=!1)})),(0,a.YP)((()=>n.value.email),(async()=>{O(n.value)})),(e,t)=>{const r=(0,a.up)("Modal"),l=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",yt,[p.value?((0,a.wg)(),(0,a.j4)(r,{key:0,title:e.$t("common.CONFIRMATION"),message:e.$t("user.CONFIRM_ACCOUNT_DELETION"),onConfirmAction:t[0]||(t[0]=e=>N((0,i.SU)(n).username)),onCancelAction:t[1]||(t[1]=e=>g(!1))},null,8,["title","message"])):(0,a.kq)("",!0),(0,a._)("div",Gt,[(0,i.SU)(S)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(S)},null,8,["message"])):(0,a.kq)("",!0),(0,i.SU)(_)?((0,a.wg)(),(0,a.iD)("div",Ft,(0,o.zw)(e.$t(`user.PROFILE.SUCCESSFUL_${E.value&&(0,i.SU)(m).is_email_sending_enabled?"EMAIL_":""}UPDATE`)),1)):(0,a.kq)("",!0),(0,a._)("form",{class:(0,o.C_)({errors:T.value}),onSubmit:(0,s.iM)(U,["prevent"])},[(0,a._)("label",Kt,[(0,a.Uk)((0,o.zw)(e.$t("user.EMAIL"))+"* ",1),(0,a.wy)((0,a._)("input",{id:"email","onUpdate:modelValue":t[2]||(t[2]=e=>u.email=e),disabled:(0,i.SU)(d),required:!0,onInvalid:A},null,40,Yt),[[s.nr,u.email]])]),(0,a._)("label",xt,[(0,a.Uk)((0,o.zw)(e.$t("user.CURRENT_PASSWORD"))+"* ",1),(0,a.Wm)(bt.Z,{id:"password-field",disabled:(0,i.SU)(d),password:u.password,required:!0,onUpdatePassword:R,onPasswordError:A},null,8,["disabled","password"])]),(0,a._)("label",$t,[(0,a.Uk)((0,o.zw)(e.$t("user.NEW_PASSWORD"))+" ",1),(0,a.Wm)(bt.Z,{id:"new-password-field",disabled:(0,i.SU)(d),checkStrength:!0,password:u.new_password,isSuccess:!1,onUpdatePassword:I,onPasswordError:A},null,8,["disabled","password"])]),(0,a._)("div",Bt,[(0,a._)("button",Zt,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[3]||(t[3]=(0,s.iM)((t=>e.$router.push("/profile")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1),(0,a._)("button",{class:"danger",onClick:t[4]||(t[4]=(0,s.iM)((e=>g(!0)),["prevent"]))},(0,o.zw)(e.$t("buttons.DELETE_MY_ACCOUNT")),1)])],42,Wt)])])}}});const qt=(0,P.Z)(Ht,[["__scopeId","data-v-37b8c4c8"]]);var Vt=qt,jt=n(4850);const Xt={id:"user-infos-edition"},Jt={class:"profile-form form-box"},Qt=["onSubmit"],en={class:"form-items",for:"registrationDate"},tn=["value"],nn={class:"form-items",for:"first_name"},rn=["disabled"],an={class:"form-items",for:"last_name"},on={class:"form-items",for:"birth_date"},sn=["disabled"],ln={class:"form-items",for:"location"},cn=["disabled"],un={class:"form-items"},dn={class:"form-buttons"},mn={class:"confirm",type:"submit"};var _n=(0,a.aZ)({__name:"UserInfosEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({first_name:"",last_name:"",birth_date:"",location:"",bio:""}),u=(0,a.Fl)((()=>t.user.created_at?(0,Ye.p6)(t.user.created_at,t.user.timezone,t.user.date_format):"")),d=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function _(e){r.first_name=e.first_name?e.first_name:"",r.last_name=e.last_name?e.last_name:"",r.birth_date=e.birth_date?(0,jt.Z)(new Date(e.birth_date),"yyyy-MM-dd"):"",r.location=e.location?e.location:"",r.bio=e.bio?e.bio:""}function E(e){r.bio=e}function S(){n.dispatch(l.YN.ACTIONS.UPDATE_USER_PROFILE,r)}return(0,a.bv)((()=>{t.user&&_(t.user)})),(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage"),l=(0,a.up)("CustomTextArea");return(0,a.wg)(),(0,a.iD)("div",Xt,[(0,a._)("div",Jt,[(0,i.SU)(m)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(m)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("form",{onSubmit:(0,s.iM)(S,["prevent"])},[(0,a._)("label",en,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE"))+" ",1),(0,a._)("input",{id:"registrationDate",value:(0,i.SU)(u),disabled:""},null,8,tn)]),(0,a._)("label",nn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.FIRST_NAME"))+" ",1),(0,a.wy)((0,a._)("input",{id:"first_name","onUpdate:modelValue":t[0]||(t[0]=e=>r.first_name=e),disabled:(0,i.SU)(d)},null,8,rn),[[s.nr,r.first_name]])]),(0,a._)("label",an,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LAST_NAME"))+" ",1),(0,a.wy)((0,a._)("input",{id:"last_name","onUpdate:modelValue":t[1]||(t[1]=e=>r.last_name=e)},null,512),[[s.nr,r.last_name]])]),(0,a._)("label",on,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.BIRTH_DATE"))+" ",1),(0,a.wy)((0,a._)("input",{id:"birth_date",type:"date",class:"birth-date","onUpdate:modelValue":t[2]||(t[2]=e=>r.birth_date=e),disabled:(0,i.SU)(d)},null,8,sn),[[s.nr,r.birth_date]])]),(0,a._)("label",ln,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LOCATION"))+" ",1),(0,a.wy)((0,a._)("input",{id:"location","onUpdate:modelValue":t[3]||(t[3]=e=>r.location=e),disabled:(0,i.SU)(d)},null,8,cn),[[s.nr,r.location]])]),(0,a._)("label",un,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.BIO"))+" ",1),(0,a.Wm)(l,{name:"bio",charLimit:200,input:r.bio,disabled:(0,i.SU)(d),onUpdateValue:E},null,8,["input","disabled"])]),(0,a._)("div",dn,[(0,a._)("button",mn,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[4]||(t[4]=(0,s.iM)((t=>e.$router.push("/profile")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,Qt)])])}}});const En=(0,P.Z)(_n,[["__scopeId","data-v-5e5a4552"]]);var Sn=En;const Tn=e=>((0,a.dD)("data-v-687e9604"),e=e(),(0,a.Cn)(),e),pn={id:"user-picture-edition"},An={class:"user-picture-form"},On=["onSubmit"],Rn={class:"picture-help"},In={class:"info-box"},Un=Tn((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),gn={class:"picture-buttons"},Nn=["disabled"];var hn=(0,a.aZ)({__name:"UserPictureEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),{user:r}=(0,i.BK)(t),d=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.APP_CONFIG])),_=m.value.max_single_file_size?(0,u.Z)(m.value.max_single_file_size):"",E=(0,i.iH)(null);function S(){n.dispatch(l.YN.ACTIONS.DELETE_PICTURE)}function T(e){e.target.files&&(E.value=e.target.files[0])}function p(){E.value&&n.dispatch(l.YN.ACTIONS.UPDATE_USER_PICTURE,{picture:E.value})}return(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",pn,[(0,a._)("div",An,[(0,i.SU)(d)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(d)},null,8,["message"])):(0,a.kq)("",!0),(0,a.Wm)(Le.Z,{user:(0,i.SU)(r)},null,8,["user"]),(0,a._)("form",{onSubmit:(0,s.iM)(p,["prevent"])},[(0,a._)("input",{type:"file",name:"picture",accept:".png,.jpg,.gif",onInput:T},null,32),(0,a._)("div",Rn,[(0,a._)("span",In,[Un,(0,a.Uk)(" "+(0,o.zw)(e.$t("workouts.MAX_SIZE"))+": "+(0,o.zw)((0,i.SU)(_)),1)])]),(0,a._)("div",gn,[(0,a._)("button",{type:"submit",disabled:!E.value},(0,o.zw)(e.$t("user.PROFILE.PICTURE_UPDATE")),9,Nn),(0,i.SU)(r).picture?((0,a.wg)(),(0,a.iD)("button",{key:0,class:"danger",onClick:S},(0,o.zw)(e.$t("user.PROFILE.PICTURE_REMOVE")),1)):(0,a.kq)("",!0),(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=t=>e.$router.push("/profile"))},(0,o.zw)(e.$t("user.PROFILE.BACK_TO_PROFILE")),1)])],40,On)])])}}});const zn=(0,P.Z)(hn,[["__scopeId","data-v-687e9604"]]);var wn=zn;const fn=["Africa/Abidjan","Africa/Accra","Africa/Algiers","Africa/Bissau","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/El_Aaiun","Africa/Johannesburg","Africa/Juba","Africa/Khartoum","Africa/Lagos","Africa/Maputo","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Sao_Tome","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Araguaina","America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Asuncion","America/Atikokan","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Cayenne","America/Chicago","America/Chihuahua","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Fortaleza","America/Fort_Nelson","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Inuvik","America/Iqaluit","America/Jamaica","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/La_Paz","America/Lima","America/Los_Angeles","America/Maceio","America/Managua","America/Manaus","America/Martinique","America/Matamoros","America/Mazatlan","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Sitka","America/St_Johns","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Atyrau","Asia/Baghdad","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Chita","Asia/Choibalsan","Asia/Colombo","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Kathmandu","Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Riyadh","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ulaanbaatar","Asia/Urumqi","Asia/Ust-Nera","Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faroe","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/Stanley","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/Perth","Australia/Sydney","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belgrade","Europe/Berlin","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Helsinki","Europe/Istanbul","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Oslo","Europe/Paris","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/Saratov","Europe/Simferopol","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zaporozhye","Europe/Zurich","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Reunion","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Chuuk","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Pohnpei","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Wake","Pacific/Wallis"],vn={id:"tz-dropdown"},Cn=["value","disabled","onKeydown"],Dn=["onClick","onMouseover","autofocus"];var kn=(0,a.aZ)({__name:"TimezoneDropdown",props:{input:null,disabled:{type:Boolean,default:!1}},emits:["updateTimezone"],setup(e,{emit:t}){const n=e,{input:r,disabled:l}=(0,i.BK)(n),c=(0,i.iH)(n.input),u=(0,i.iH)(!1),d=(0,i.iH)(null),m=(0,i.iH)(0);function _(e){return e.toLowerCase().match(c.value.toLowerCase())}function E(e){m.value=e}function S(e){c.value=e,u.value=!1,t("updateTimezone",e)}function T(e){e.preventDefault(),d.value?.firstElementChild?.innerHTML&&S(d.value?.firstElementChild?.innerHTML)}function p(e){e.preventDefault(),u.value=!0,c.value=e.target.value.trim()}return(0,a.YP)((()=>n.input),(e=>{c.value=e})),(e,t)=>((0,a.wg)(),(0,a.iD)("div",vn,[(0,a._)("input",{class:"tz-dropdown-input",id:"timezone",name:"timezone",value:c.value,disabled:(0,i.SU)(l),required:"",onKeydown:[t[0]||(t[0]=(0,s.D2)((e=>S((0,i.SU)(r))),["esc"])),(0,s.D2)(T,["enter"])],onInput:p},null,40,Cn),u.value?((0,a.wg)(),(0,a.iD)("ul",{key:0,class:"tz-dropdown-list",ref_key:"tzList",ref:d},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(fn).filter((e=>_(e))),((e,t)=>((0,a.wg)(),(0,a.iD)("li",{key:e,class:(0,o.C_)(["tz-dropdown-item",{focus:t===m.value}]),onClick:t=>S(e),onMouseover:e=>E(t),autofocus:t===m.value},(0,o.zw)(e),43,Dn)))),128))],512)):(0,a.kq)("",!0)]))}});const Pn=(0,P.Z)(kn,[["__scopeId","data-v-47ea2903"]]);var Ln=Pn;const Mn={id:"user-preferences-edition"},bn={class:"profile-form form-box"},yn=["onSubmit"],Gn={class:"form-items"},Fn=["disabled"],Wn=["value"],Kn={class:"form-items"},Yn={class:"form-items"},xn=["disabled"],$n=["value"],Bn={class:"form-items form-checkboxes"},Zn={class:"checkboxes-label"},Hn={class:"checkboxes"},qn=["id","name","checked","disabled","onInput"],Vn={class:"checkbox-label"},jn={class:"form-items form-checkboxes"},Xn={class:"checkboxes-label"},Jn={class:"checkboxes"},Qn=["id","name","checked","disabled","onInput"],er={class:"checkbox-label"},tr={class:"form-items form-checkboxes"},nr={class:"checkboxes-label"},rr={class:"checkboxes"},ar=["id","name","checked","disabled","onInput"],or={class:"checkbox-label"},sr={class:"form-buttons"},ir={class:"confirm",type:"submit"};var lr=(0,a.aZ)({__name:"UserPreferencesEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({display_ascent:!0,imperial_units:!1,language:"",timezone:"Europe/Paris",date_format:"dd/MM/yyyy",weekm:!1}),u=[{label:"SUNDAY",value:!1},{label:"MONDAY",value:!0}],d=[{label:"METRIC",value:!1},{label:"IMPERIAL",value:!0}],m=[{label:"DISPLAYED",value:!0},{label:"HIDDEN",value:!1}],_=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),E=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),S=(0,a.Fl)((()=>(0,Ye.d2)((new Date).toUTCString(),t.user.timezone,r.language)));function T(e){r.display_ascent=e.display_ascent,r.imperial_units=!!e.imperial_units&&e.imperial_units,r.language=e.language?e.language:"en",r.timezone=e.timezone?e.timezone:"Europe/Paris",r.date_format=e.date_format?e.date_format:"dd/MM/yyyy",r.weekm=!!e.weekm&&e.weekm}function p(){n.dispatch(l.YN.ACTIONS.UPDATE_USER_PREFERENCES,r)}function A(e){r.timezone=e}function O(e){r.display_ascent=e}function R(e){r.imperial_units=e}function I(e){r.weekm=e}return(0,a.bv)((()=>{t.user&&T(t.user)})),(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",Mn,[(0,a._)("div",bn,[(0,i.SU)(E)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(E)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("form",{onSubmit:(0,s.iM)(p,["prevent"])},[(0,a._)("label",Gn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LANGUAGE"))+" ",1),(0,a.wy)((0,a._)("select",{id:"language","onUpdate:modelValue":t[0]||(t[0]=e=>r.language=e),disabled:(0,i.SU)(_)},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(zt.mT),(e=>((0,a.wg)(),(0,a.iD)("option",{value:e.value,key:e.value},(0,o.zw)(e.label),9,Wn)))),128))],8,Fn),[[s.bM,r.language]])]),(0,a._)("label",Kn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.TIMEZONE"))+" ",1),(0,a.Wm)(Ln,{input:r.timezone,disabled:(0,i.SU)(_),onUpdateTimezone:A},null,8,["input","disabled"])]),(0,a._)("label",Yn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.DATE_FORMAT"))+" ",1),(0,a.wy)((0,a._)("select",{id:"date_format","onUpdate:modelValue":t[1]||(t[1]=e=>r.date_format=e),disabled:(0,i.SU)(_)},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(e=>((0,a.wg)(),(0,a.iD)("option",{value:e.value,key:e.value},(0,o.zw)(e.label),9,$n)))),128))],8,xn),[[s.bM,r.date_format]])]),(0,a._)("div",Bn,[(0,a._)("span",Zn,(0,o.zw)(e.$t("user.PROFILE.FIRST_DAY_OF_WEEK")),1),(0,a._)("div",Hn,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(u,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.weekm,disabled:(0,i.SU)(_),onInput:e=>I(t.value)},null,40,qn),(0,a._)("span",Vn,(0,o.zw)(e.$t(`user.PROFILE.${t.label}`)),1)]))),64))])]),(0,a._)("div",jn,[(0,a._)("span",Xn,(0,o.zw)(e.$t("user.PROFILE.UNITS.LABEL")),1),(0,a._)("div",Jn,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(d,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.imperial_units,disabled:(0,i.SU)(_),onInput:e=>R(t.value)},null,40,Qn),(0,a._)("span",er,(0,o.zw)(e.$t(`user.PROFILE.UNITS.${t.label}`)),1)]))),64))])]),(0,a._)("div",tr,[(0,a._)("span",nr,(0,o.zw)(e.$t("user.PROFILE.ASCENT_DATA")),1),(0,a._)("div",rr,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(m,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.display_ascent,disabled:(0,i.SU)(_),onInput:e=>O(t.value)},null,40,ar),(0,a._)("span",or,(0,o.zw)(e.$t(`common.${t.label}`)),1)]))),64))])]),(0,a._)("div",sr,[(0,a._)("button",ir,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[2]||(t[2]=(0,s.iM)((t=>e.$router.push("/profile/preferences")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,yn)])])}}});const cr=(0,P.Z)(lr,[["__scopeId","data-v-065d5e6c"]]);var ur=cr;const dr=["profile:read","profile:write","users:read","users:write","workouts:read","workouts:write"],mr=["application:write"],_r={id:"new-oauth2-app"},Er={id:"new-oauth2-title"},Sr={id:"apps-form"},Tr=["onSubmit"],pr={class:"form-items"},Ar={class:"form-item"},Or={for:"app-name"},Rr={class:"form-item"},Ir={for:"app-description"},Ur={class:"form-item"},gr={for:"app-url"},Nr={class:"form-item"},hr={for:"app-redirect-uri"},zr={class:"form-item-scope"},wr={class:"form-item-scope-label"},fr={class:"scope-label"},vr=["name","checked","onChange"],Cr=["innerHTML"],Dr={class:"form-buttons"},kr=["disabled"];var Pr=(0,a.aZ)({__name:"AddUserApp",props:{authUser:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({client_name:"",client_uri:"",client_description:"",redirect_uri:""}),u=(0,i.qj)([]),d=(0,a.Fl)((()=>S(t.authUser,mr,dr)));function m(){const e={client_name:r.client_name,client_description:r.client_description,client_uri:r.client_uri,redirect_uris:[r.redirect_uri],scope:u.sort().join(" ")};n.dispatch(l.Km.ACTIONS.CREATE_CLIENT,e)}function _(e){r.client_description=e}function E(e){const t=u.indexOf(e);t>-1?u.splice(t,1):u.push(e)}function S(e,t,n){const r=[...n];return e.admin&&r.push(...t),r.sort()}return(e,t)=>{const n=(0,a.up)("CustomTextArea");return(0,a.wg)(),(0,a.iD)("div",_r,[(0,a._)("h1",Er,(0,o.zw)(e.$t("oauth2.ADD_A_NEW_APP")),1),(0,a._)("div",Sr,[(0,a._)("form",{onSubmit:(0,s.iM)(m,["prevent"])},[(0,a._)("div",pr,[(0,a._)("div",Ar,[(0,a._)("label",Or,(0,o.zw)(e.$t("oauth2.APP.NAME"))+"*",1),(0,a.wy)((0,a._)("input",{id:"app-name",type:"text",required:"","onUpdate:modelValue":t[0]||(t[0]=e=>r.client_name=e)},null,512),[[s.nr,r.client_name]])]),(0,a._)("div",Rr,[(0,a._)("label",Ir,(0,o.zw)(e.$t("oauth2.APP.DESCRIPTION")),1),(0,a.Wm)(n,{name:"app-description",charLimit:200,input:r.description,onUpdateValue:_},null,8,["input"])]),(0,a._)("div",Ur,[(0,a._)("label",gr,(0,o.zw)(e.$t("oauth2.APP.URL"))+"*",1),(0,a.wy)((0,a._)("input",{id:"app-url",type:"text",required:"","onUpdate:modelValue":t[1]||(t[1]=e=>r.client_uri=e)},null,512),[[s.nr,r.client_uri]])]),(0,a._)("div",Nr,[(0,a._)("label",hr,(0,o.zw)(e.$t("oauth2.APP.REDIRECT_URL"))+"* ",1),(0,a.wy)((0,a._)("input",{id:"app-redirect-uri",type:"text",required:"","onUpdate:modelValue":t[2]||(t[2]=e=>r.redirect_uri=e)},null,512),[[s.nr,r.redirect_uri]])]),(0,a._)("div",zr,[(0,a._)("div",wr,(0,o.zw)(e.$t("oauth2.APP.SCOPE.LABEL"))+"* ",1),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(d),(t=>((0,a.wg)(),(0,a.iD)("div",{class:"form-item-scope-checkboxes",key:t},[(0,a._)("label",fr,[(0,a._)("input",{type:"checkbox",name:t,checked:u.includes(t),onChange:e=>E(t)},null,40,vr),(0,a._)("code",null,(0,o.zw)(t),1)]),(0,a._)("p",{class:"scope-description",innerHTML:e.$t(`oauth2.APP.SCOPE.${t}_DESCRIPTION`)},null,8,Cr)])))),128))])]),(0,a._)("div",Dr,[(0,a._)("button",{class:"confirm",type:"submit",disabled:0===u.length},(0,o.zw)(e.$t("buttons.SUBMIT")),9,kr),(0,a._)("button",{class:"cancel",onClick:t[3]||(t[3]=(0,s.iM)((()=>e.$router.push("/profile/apps")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,Tr)])])}}});const Lr=(0,P.Z)(Pr,[["__scopeId","data-v-0657ee77"]]);var Mr=Lr;const br={id:"authorize-oauth2-app"},yr={key:0},Gr={id:"authorize-oauth2-title"},Fr={class:"oauth2-access description-list"},Wr={class:"client-scope"},Kr=["innerHTML"],Yr={class:"authorize-oauth2-buttons"},xr={key:1},$r={class:"no-app"};var Br=(0,a.aZ)({__name:"AuthorizeUserApp",setup(e){const t=(0,r.yj)(),n=(0,c.o)(),s=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENT])),u=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function d(){t.query.client_id&&"string"===typeof t.query.client_id&&n.dispatch(l.Km.ACTIONS.GET_CLIENT_BY_CLIENT_ID,t.query.client_id)}function m(){n.dispatch(l.Km.ACTIONS.AUTHORIZE_CLIENT,{client_id:`${t.query.client_id}`,redirect_uri:`${t.query.redirect_uri}`,response_type:`${t.query.response_type}`,scope:`${t.query.scope}`,state:`${t.query.state?t.query.state:""}`,code_challenge:`${t.query.code_challenge?t.query.code_challenge:""}`,code_challenge_method:`${t.query.code_challenge_method?t.query.code_challenge_method:""}`})}return(0,a.wF)((()=>d())),(e,t)=>{const n=(0,a.up)("router-link"),r=(0,a.up)("i18n-t"),l=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",br,[(0,i.SU)(s).client_id?((0,a.wg)(),(0,a.iD)("div",yr,[(0,a._)("h1",Gr,[(0,a.Wm)(r,{keypath:"oauth2.AUTHORIZE_APP"},{default:(0,a.w5)((()=>[(0,a.Wm)(n,{to:{name:"UserApp",params:{id:(0,i.SU)(s).id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(s).name),1)])),_:1},8,["to"])])),_:1})]),(0,i.SU)(u)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(u)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("div",Fr,[(0,a._)("p",null,(0,o.zw)(e.$t("oauth2.APP_REQUESTING_ACCESS")),1),(0,a._)("dl",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(s).scope.split(" "),(t=>((0,a.wg)(),(0,a.iD)(a.HY,{key:t},[(0,a._)("dt",Wr,[(0,a._)("code",null,(0,o.zw)(t),1)]),(0,a._)("dd",{innerHTML:e.$t(`oauth2.APP.SCOPE.${t}_DESCRIPTION`)},null,8,Kr)],64)))),128))]),(0,a._)("div",Yr,[(0,a._)("button",{class:"danger",onClick:m},(0,o.zw)(e.$t("buttons.AUTHORIZE")),1),(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])])])):((0,a.wg)(),(0,a.iD)("div",xr,[(0,a._)("p",$r,(0,o.zw)(e.$t("oauth2.NO_APP")),1),(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)]))])}}});const Zr=(0,P.Z)(Br,[["__scopeId","data-v-3b2fe9ed"]]);var Hr=Zr;const qr={id:"oauth2-apps"};var Vr=(0,a.aZ)({__name:"index",props:{user:null},setup(e){const t=e,n=(0,c.o)(),{user:r}=(0,i.BK)(t);return(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),n.commit(l.Km.MUTATIONS.SET_CLIENTS,[])})),(e,t)=>{const n=(0,a.up)("router-view");return(0,a.wg)(),(0,a.iD)("div",qr,[(0,a.Wm)(n,{authUser:(0,i.SU)(r)},null,8,["authUser"])])}}});const jr=Vr;var Xr=jr;const Jr={id:"oauth2-app",class:"description-list"},Qr={key:1},ea={key:0,class:"info-box success-message"},ta=["title"],na={key:0},ra={key:1,class:"app-secret"},aa=["title"],oa={class:"client-scopes"},sa={class:"app-buttons"},ia={key:2},la={class:"no-app"};var ca=(0,a.aZ)({__name:"UserApp",props:{authUser:null,afterCreation:{type:Boolean,default:!1}},setup(e){const t=e,n=(0,r.yj)(),s=(0,c.o)(),{afterCreation:u,authUser:d}=(0,i.BK)(t),m=(0,a.Fl)((()=>s.getters[l.Km.GETTERS.CLIENT])),_=(0,a.Fl)((()=>s.getters[l.Km.GETTERS.REVOCATION_SUCCESSFUL])),E=(0,i.iH)(!1),S=(0,i.iH)(null),T=(0,i.iH)(!1),p=(0,i.iH)(!1),A=(0,i.iH)(!1);function O(){!u.value&&n.params.id&&"string"===typeof n.params.id&&s.dispatch(l.Km.ACTIONS.GET_CLIENT_BY_ID,+n.params.id)}function R(e){S.value=e?"oauth2.APP_DELETION_CONFIRMATION":"oauth2.TOKENS_REVOCATION_CONFIRMATION",I(!0)}function I(e){E.value=e,e||(S.value=null)}function U(e){"oauth2.APP_DELETION_CONFIRMATION"===S.value?s.dispatch(l.Km.ACTIONS.DELETE_CLIENT,e):s.dispatch(l.Km.ACTIONS.REVOKE_ALL_TOKENS,e)}function g(){navigator.clipboard.writeText(m.value.client_id),T.value=!0,p.value=!1,setTimeout((()=>{T.value=!1}),3e3)}function N(){m.value.client_secret&&(navigator.clipboard.writeText(m.value.client_secret),p.value=!0,T.value=!1,setTimeout((()=>{p.value=!1}),3e3))}return(0,a.wF)((()=>{O(),navigator.clipboard&&(A.value=!0)})),(0,a.Ah)((()=>{s.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),s.commit(l.Km.MUTATIONS.EMPTY_CLIENT),s.commit(l.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!1)})),(0,a.YP)((()=>_.value),(e=>{e&&I(!1)})),(e,t)=>{const n=(0,a.up)("Modal");return(0,a.wg)(),(0,a.iD)("div",Jr,[E.value?((0,a.wg)(),(0,a.j4)(n,{key:0,title:e.$t("common.CONFIRMATION"),message:e.$t(S.value),onConfirmAction:t[0]||(t[0]=e=>U((0,i.SU)(m).id)),onCancelAction:t[1]||(t[1]=e=>I(!1))},null,8,["title","message"])):(0,a.kq)("",!0),(0,i.SU)(m)&&(0,i.SU)(m).client_id?((0,a.wg)(),(0,a.iD)("div",Qr,[(0,i.SU)(u)||(0,i.SU)(_)?((0,a.wg)(),(0,a.iD)("div",ea,(0,o.zw)(e.$t((0,i.SU)(u)?"oauth2.APP_CREATED_SUCCESSFULLY":"oauth2.TOKENS_REVOKED")),1)):(0,a.kq)("",!0),(0,a._)("dl",null,[(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.CLIENT_ID"))+":",1),(0,a._)("dd",null,[(0,a.Uk)((0,o.zw)((0,i.SU)(m).client_id)+" ",1),(0,i.SU)(u)&&A.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:(0,o.C_)("fa fa-"+(T.value?"check":"copy")),"aria-hidden":"true",title:e.$t("oauth2.COPY_TO_CLIPBOARD"),onClick:g},null,10,ta)):(0,a.kq)("",!0)]),(0,i.SU)(u)&&(0,i.SU)(m).client_secret?((0,a.wg)(),(0,a.iD)("dt",na,(0,o.zw)(e.$t("oauth2.APP.CLIENT_SECRET"))+": ",1)):(0,a.kq)("",!0),(0,i.SU)(u)&&(0,i.SU)(m).client_secret?((0,a.wg)(),(0,a.iD)("dd",ra,[(0,a.Uk)((0,o.zw)((0,i.SU)(m).client_secret)+" ",1),A.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:(0,o.C_)("fa fa-"+(p.value?"check":"copy")),"aria-hidden":"true",title:e.$t("oauth2.COPY_TO_CLIPBOARD"),onClick:N},null,10,aa)):(0,a.kq)("",!0)])):(0,a.kq)("",!0),(0,a._)("dt",null,(0,o.zw)((0,o.kC)(e.$t("oauth2.APP.ISSUE_AT")))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(Ye.p6)((0,i.SU)(m).issued_at,(0,i.SU)(d).timezone,(0,i.SU)(d).date_format)),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.NAME"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).name),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.DESCRIPTION"))+":",1),(0,a._)("dd",{class:(0,o.C_)({"no-description":!(0,i.SU)(m).client_description})},(0,o.zw)((0,i.SU)(m).client_description?(0,i.SU)(m).client_description:e.$t("oauth2.NO_DESCRIPTION")),3),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.URL"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).website),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.REDIRECT_URL"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).redirect_uris.length>0?(0,i.SU)(m).redirect_uris[0]:""),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.SCOPE.LABEL"))+":",1),(0,a._)("dd",oa,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(m).scope.split(" "),(e=>((0,a.wg)(),(0,a.iD)("span",{class:"client-scope",key:e},[(0,a._)("code",null,(0,o.zw)(e),1)])))),128))])]),(0,a._)("div",sa,[(0,a._)("button",{class:"danger",onClick:t[2]||(t[2]=e=>R(!1))},(0,o.zw)(e.$t("oauth2.REVOKE_ALL_TOKENS")),1),(0,a._)("button",{class:"danger",onClick:t[3]||(t[3]=e=>R(!0))},(0,o.zw)(e.$t("oauth2.DELETE_APP")),1),(0,a._)("button",{onClick:t[4]||(t[4]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)])])):((0,a.wg)(),(0,a.iD)("div",ia,[(0,a._)("p",la,(0,o.zw)(e.$t("oauth2.NO_APP")),1),(0,a._)("button",{onClick:t[5]||(t[5]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)]))])}}});const ua=(0,P.Z)(ca,[["__scopeId","data-v-3a844fa2"]]);var da=ua;const ma={id:"oauth2-apps-list"},_a={class:"apps-list"},Ea={key:0},Sa={class:"app-issued-at"},Ta={key:1,class:"no-apps"},pa={class:"app-list-buttons"};var Aa=(0,a.aZ)({__name:"UserAppsList",props:{authUser:null},setup(e){const t=e,n=(0,c.o)(),s=(0,r.yj)(),{authUser:u}=(0,i.BK)(t),d=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENTS])),m=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENTS_PAGINATION]));let _=E(s.query);function E(e){const t={};return e.page&&(t.page=(0,Ke.z_)(e.page,Ke.Hf)),t}function S(e){n.dispatch(l.Km.ACTIONS.GET_CLIENTS,e)}return(0,a.wF)((()=>{S(_)})),(0,a.YP)((()=>s.query),(async e=>{_=E(e),S(_)})),(e,t)=>{const n=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("div",ma,[(0,a._)("p",_a,(0,o.zw)(e.$t("oauth2.APPS_LIST")),1),(0,i.SU)(d).length>0?((0,a.wg)(),(0,a.iD)("ul",Ea,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(d),(t=>((0,a.wg)(),(0,a.iD)("li",{key:t.client_id},[(0,a.Wm)(n,{to:{name:"UserApp",params:{id:t.id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.name),1)])),_:2},1032,["to"]),(0,a._)("span",Sa,(0,o.zw)(e.$t("oauth2.APP.ISSUE_AT"))+" "+(0,o.zw)((0,i.SU)(Ye.p6)(t.issued_at,(0,i.SU)(u).timezone,(0,i.SU)(u).date_format)),1)])))),128))])):((0,a.wg)(),(0,a.iD)("div",Ta,(0,o.zw)(e.$t("oauth2.NO_APPS")),1)),(0,i.SU)(d).length>0?((0,a.wg)(),(0,a.j4)(Pe.Z,{key:2,pagination:(0,i.SU)(m),path:"/profile/apps",query:(0,i.SU)(_)},null,8,["pagination","query"])):(0,a.kq)("",!0),(0,a._)("div",pa,[(0,a._)("button",{onClick:t[0]||(t[0]=t=>e.$router.push("/profile/apps/new"))},(0,o.zw)(e.$t("oauth2.NEW_APP")),1),(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)])])}}});const Oa=(0,P.Z)(Aa,[["__scopeId","data-v-efa45ea0"]]);var Ra=Oa;const Ia={id:"user-sport-preferences"},Ua={key:0,class:"responsive-table"},ga={class:"mobile-display"},Na={key:0,class:"profile-buttons mobile-display"},ha={key:1,class:"profile-buttons"},za={class:"text-left"},wa={key:0},fa={class:"cell-heading"},va=["value"],Ca={class:"cell-heading"},Da={key:0,class:"disabled-message"},ka={key:1,class:"fa fa-refresh fa-spin fa-fw"},Pa={class:"cell-heading"},La={class:"cell-heading"},Ma=["checked"],ba={class:"cell-heading"},ya=["value"],Ga={key:1},Fa={key:0,class:"action-buttons"},Wa={class:"cell-heading"},Ka=["onClick"],Ya={key:1,class:"edition-buttons"},xa=["disabled"],$a=["disabled","onClick"],Ba=["disabled"],Za={key:0,class:"profile-buttons"},Ha={key:1,class:"profile-buttons"};var qa=(0,a.aZ)({__name:"UserSportPreferences",props:{user:null,isEdition:{type:Boolean}},setup(e){const t=e,n=(0,c.o)(),{t:r}=(0,ie.QT)(),{isEdition:u,user:d}=(0,i.BK)(t),m="#838383",_=(0,a.f3)("sportColors"),E=(0,a.Fl)((()=>n.getters[l.O8.GETTERS.SPORTS])),S=(0,a.Fl)((()=>(0,le.xH)(E.value,r,"is_active",d.value.sports_list))),T=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),p=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),A=(0,i.qj)({sport_id:0,color:null,is_active:!0,stopped_speed_threshold:1});function O(e){null!==e?(A.sport_id=e.id,A.color=e.color?e.color:_?_[e.label]:m,A.is_active=e.is_active_for_user,A.stopped_speed_threshold=e.stopped_speed_threshold):N()}function R(e){return A.sport_id===e}function I(e){A.color=e.target.value}function U(e){A.stopped_speed_threshold=parseFloat(e.target.value)}function g(e){A.is_active=e.target.checked}function N(){A.sport_id=0,A.color=null,A.is_active=!0,A.stopped_speed_threshold=1,n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)}function h(e){e.preventDefault(),n.dispatch(l.YN.ACTIONS.UPDATE_USER_SPORT_PREFERENCES,A)}function z(e,t){e.preventDefault(),n.dispatch(l.YN.ACTIONS.RESET_USER_SPORT_PREFERENCES,t)}return(0,a.YP)((()=>T.value),(e=>{e||p.value||N()})),(e,t)=>{const n=(0,a.up)("SportImage"),r=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",Ia,[(0,i.SU)(E).length>0?((0,a.wg)(),(0,a.iD)("div",Ua,[(0,a._)("div",ga,[(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("div",Na,[(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/profile/sports")),["prevent"]))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,a.wg)(),(0,a.iD)("div",ha,[(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/profile/edit/sports"))},(0,o.zw)(e.$t("user.PROFILE.EDIT_SPORTS_PREFERENCES")),1),(0,a._)("button",{onClick:t[2]||(t[2]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))]),(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.COLOR")),1),(0,a._)("th",za,(0,o.zw)(e.$t("workouts.SPORT",0)),1),(0,a._)("th",null,(0,o.zw)(e.$t("workouts.WORKOUT",0)),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.IS_ACTIVE")),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD")),1),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("th",wa,(0,o.zw)(e.$t("user.PROFILE.SPORT.ACTION")),1)):(0,a.kq)("",!0)])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(s=>((0,a.wg)(),(0,a.iD)("tr",{key:s.id},[(0,a._)("td",null,[(0,a._)("span",fa,(0,o.zw)(e.$t("user.PROFILE.SPORT.COLOR")),1),R(s.id)?((0,a.wg)(),(0,a.iD)("input",{key:0,class:"sport-color",type:"color",value:A.color,onInput:I},null,40,va)):((0,a.wg)(),(0,a.j4)(n,{key:1,title:s.translatedLabel,"sport-label":s.label,color:s.color?s.color:(0,i.SU)(_)[s.label]},null,8,["title","sport-label","color"]))]),(0,a._)("td",{class:(0,o.C_)(["sport-label",{"disabled-sport":!s.is_active}])},[(0,a._)("span",Ca,(0,o.zw)(e.$t("user.PROFILE.SPORT.LABEL")),1),(0,a.Uk)(" "+(0,o.zw)(s.translatedLabel)+" ",1),s.is_active?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("span",Da," ("+(0,o.zw)(e.$t("user.PROFILE.SPORT.DISABLED_BY_ADMIN"))+") ",1)),(0,i.SU)(T)&&R(s.id)?((0,a.wg)(),(0,a.iD)("i",ka)):(0,a.kq)("",!0),(0,i.SU)(p)&&A.sport_id===s.id?((0,a.wg)(),(0,a.j4)(r,{key:2,message:(0,i.SU)(p)},null,8,["message"])):(0,a.kq)("",!0)],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",Pa,(0,o.zw)(e.$t("workouts.WORKOUT",0)),1),(0,a._)("i",{class:(0,o.C_)("fa fa"+((0,i.SU)(d).sports_list.includes(s.id)?"-check":"")),"aria-hidden":"true"},null,2)],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",La,(0,o.zw)(e.$t("user.PROFILE.SPORT.IS_ACTIVE")),1),R(s.id)&&s.is_active?((0,a.wg)(),(0,a.iD)("input",{key:0,type:"checkbox",checked:s.is_active_for_user,onChange:g},null,40,Ma)):((0,a.wg)(),(0,a.iD)("i",{key:1,class:(0,o.C_)("fa fa"+(s.is_active_for_user?"-check":"")),"aria-hidden":"true"},null,2))],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",ba,(0,o.zw)(e.$t("user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD")),1),R(s.id)&&s.is_active?((0,a.wg)(),(0,a.iD)("input",{key:0,class:"threshold-input",type:"number",min:"0",step:"0.1",value:A.stopped_speed_threshold,onInput:U},null,40,ya)):((0,a.wg)(),(0,a.iD)("span",Ga,(0,o.zw)(s.stopped_speed_threshold),1))],2),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("td",Fa,[(0,a._)("span",Wa,(0,o.zw)(e.$t("user.PROFILE.SPORT.ACTION")),1),0===A.sport_id?((0,a.wg)(),(0,a.iD)("button",{key:0,onClick:e=>O(s)},(0,o.zw)(e.$t("buttons.EDIT")),9,Ka)):(0,a.kq)("",!0),R(s.id)?((0,a.wg)(),(0,a.iD)("div",Ya,[(0,a._)("button",{disabled:(0,i.SU)(T),onClick:h},(0,o.zw)(e.$t("buttons.SUBMIT")),9,xa),(0,a._)("button",{disabled:(0,i.SU)(T),onClick:e=>z(e,s.id)},(0,o.zw)(e.$t("buttons.RESET")),9,$a),(0,a._)("button",{disabled:(0,i.SU)(T),onClick:t[3]||(t[3]=e=>O(null))},(0,o.zw)(e.$t("buttons.CANCEL")),9,Ba)])):(0,a.kq)("",!0)])):(0,a.kq)("",!0)])))),128))])]),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("div",Za,[(0,a._)("button",{class:"cancel",onClick:t[4]||(t[4]=(0,s.iM)((t=>e.$router.push("/profile/sports")),["prevent"]))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,a.wg)(),(0,a.iD)("div",Ha,[(0,a._)("button",{onClick:t[5]||(t[5]=t=>e.$router.push("/profile/edit/sports"))},(0,o.zw)(e.$t("user.PROFILE.EDIT_SPORTS_PREFERENCES")),1),(0,a._)("button",{onClick:t[6]||(t[6]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))])):(0,a.kq)("",!0)])}}});const Va=(0,P.Z)(qa,[["__scopeId","data-v-74e52489"]]);var ja=Va,Xa=n(2894);const Ja=e=>((0,a.dD)("data-v-74257266"),e=e(),(0,a.Cn)(),e),Qa={class:"about-text"},eo=["innerHTML"],to=Ja((()=>(0,a._)("i",{class:"fa fa-book fa-padding","aria-hidden":"true"},null,-1))),no={href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer"},ro=Ja((()=>(0,a._)("i",{class:"fa fa-github fa-padding","aria-hidden":"true"},null,-1))),ao={href:"https://github.com/SamR1/FitTrackee",target:"_blank",rel:"noopener noreferrer"},oo=Ja((()=>(0,a._)("i",{class:"fa fa-balance-scale fa-padding","aria-hidden":"true"},null,-1))),so=Ja((()=>(0,a._)("a",{href:"https://choosealicense.com/licenses/agpl-3.0/",target:"_blank",rel:"noopener noreferrer"}," AGPLv3 ",-1))),io={key:0},lo=Ja((()=>(0,a._)("i",{class:"fa fa-envelope-o fa-padding","aria-hidden":"true"},null,-1))),co=["href"];var uo=(0,a.aZ)({__name:"About",setup(e){const t=(0,c.o)(),n=(0,a.Fl)((()=>t.getters[l.SY.GETTERS.APP_CONFIG]));return(e,t)=>{const r=(0,a.up)("i18n-t");return(0,a.wg)(),(0,a.iD)("div",Qa,[(0,a._)("div",null,[(0,a._)("p",{class:"error-message",innerHTML:e.$t("about.FITTRACKEE_DESCRIPTION")},null,8,eo),(0,a._)("p",null,[to,(0,a._)("a",no,(0,o.zw)((0,o.kC)(e.$t("common.DOCUMENTATION"))),1)]),(0,a._)("p",null,[ro,(0,a._)("a",ao,(0,o.zw)(e.$t("about.SOURCE_CODE")),1)]),(0,a._)("p",null,[oo,(0,a.Wm)(r,{keypath:"about.FITTRACKEE_LICENSE"},{default:(0,a.w5)((()=>[so])),_:1})]),(0,i.SU)(n).admin_contact?((0,a.wg)(),(0,a.iD)("div",io,[lo,(0,a._)("a",{href:`mailto:${(0,i.SU)(n).admin_contact}`},(0,o.zw)(e.$t("about.CONTACT_ADMIN")),9,co)])):(0,a.kq)("",!0)])])}}});const mo=(0,P.Z)(uo,[["__scopeId","data-v-74257266"]]);var _o=mo;const Eo={id:"bike"},So=["src"];function To(e,t){return(0,a.wg)(),(0,a.iD)("div",Eo,[(0,a._)("img",{class:"bike-img",src:"/img/bike.svg",alt:"mountain bike"},null,8,So)])}const po={},Ao=(0,P.Z)(po,[["render",To],["__scopeId","data-v-795f7f5f"]]);var Oo=Ao;const Ro={id:"about",class:"view"},Io={class:"container"},Uo={class:"container-sub"},go={class:"container-sub about-details"};var No=(0,a.aZ)({__name:"AboutView",setup(e){return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ro,[(0,a._)("div",Io,[(0,a._)("div",Uo,[(0,a.Wm)(Oo)]),(0,a._)("div",go,[(0,a.Wm)(_o)])])]))}});const ho=(0,P.Z)(No,[["__scopeId","data-v-bffb50d0"]]);var zo=ho,wo=n(1818),fo=n(2056);const vo=e=>((0,a.dD)("data-v-96abcc38"),e=e(),(0,a.Cn)(),e),Co={class:"timeline-workout"},Do={class:"box"},ko={class:"workout-user-date"},Po={class:"workout-user"},Lo=["title"],Mo={key:0},bo={key:1,class:"no-map"},yo={class:"img"},Go={class:"data"},Fo=vo((()=>(0,a._)("i",{class:"fa fa-clock-o","aria-hidden":"true"},null,-1))),Wo={key:0},Ko={class:"data"},Yo=vo((()=>(0,a._)("i",{class:"fa fa-road","aria-hidden":"true"},null,-1))),xo={key:0,class:"data elevation"},$o=["alt"],Bo={class:"data-values"},Zo={key:1,class:"data altitude"},Ho=vo((()=>(0,a._)("i",{class:"fa fa-location-arrow","aria-hidden":"true"},null,-1))),qo={class:"data-values"};var Vo=(0,a.aZ)({__name:"WorkoutCard",props:{user:null,useImperialUnits:{type:Boolean},workout:{default:()=>({})},sport:{default:()=>({})}},setup(e){const t=e,n=(0,c.o)(),{user:r,workout:s,sport:u,useImperialUnits:d}=(0,i.BK)(t),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LOCALE]));return(e,t)=>{const n=(0,a.up)("router-link"),l=(0,a.up)("SportImage"),c=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",Co,[(0,a._)("div",Do,[(0,a._)("div",ko,[(0,a._)("div",Po,[(0,a.Wm)(Le.Z,{user:(0,i.SU)(r)},null,8,["user"]),(0,i.SU)(r).username?((0,a.wg)(),(0,a.j4)(n,{key:0,class:"workout-user-name",to:{name:"User",params:{username:(0,i.SU)(r).username}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(r).username),1)])),_:1},8,["to"])):(0,a.kq)("",!0)]),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(n,{key:0,class:"workout-title",to:{name:"Workout",params:{workoutId:(0,i.SU)(s).id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(s).title),1)])),_:1},8,["to"])):(0,a.kq)("",!0),(0,i.SU)(s).workout_date&&(0,i.SU)(r)?((0,a.wg)(),(0,a.iD)("div",{key:1,class:"workout-date",title:(0,i.SU)(Ye.p6)((0,i.SU)(s).workout_date,(0,i.SU)(r).timezone,(0,i.SU)(r).date_format)},(0,o.zw)((0,i.SU)(wo.Z)(new Date((0,i.SU)(s).workout_date),new Date,{addSuffix:!0,locale:(0,i.SU)(m)})),9,Lo)):(0,a.kq)("",!0)]),(0,a._)("div",{class:(0,o.C_)(["workout-map",{"no-cursor":!(0,i.SU)(s)}]),onClick:t[0]||(t[0]=t=>(0,i.SU)(s).id?e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(s).id}}):null)},[(0,i.SU)(s)?((0,a.wg)(),(0,a.iD)("div",Mo,[(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.j4)(fo.Z,{key:0,workout:(0,i.SU)(s)},null,8,["workout"])):((0,a.wg)(),(0,a.iD)("div",bo,(0,o.zw)(e.$t("workouts.NO_MAP")),1))])):(0,a.kq)("",!0)],2),(0,a._)("div",{class:(0,o.C_)(["workout-data",{"without-gpx":(0,i.SU)(s)&&!(0,i.SU)(s).with_gpx}]),onClick:t[1]||(t[1]=t=>(0,i.SU)(s).id?e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(s).id}}):null)},[(0,a._)("div",yo,[(0,i.SU)(u).label?((0,a.wg)(),(0,a.j4)(l,{key:0,"sport-label":(0,i.SU)(u).label,color:(0,i.SU)(u).color},null,8,["sport-label","color"])):(0,a.kq)("",!0)]),(0,a._)("div",Go,[Fo,(0,i.SU)(s)?((0,a.wg)(),(0,a.iD)("span",Wo,(0,o.zw)((0,i.SU)(s).moving),1)):(0,a.kq)("",!0)]),(0,a._)("div",Ko,[Yo,(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).distance,digits:3,unitFrom:"km",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)]),(0,i.SU)(s)&&(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.iD)("div",xo,[(0,a._)("img",{class:"mountains",src:"/img/workouts/mountains.svg",alt:e.$t("workouts.ELEVATION")},null,8,$o),(0,a._)("div",Bo,[(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).min_alt,unitFrom:"m",displayUnit:!1,useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0),(0,a.Uk)("/ "),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:1,distance:(0,i.SU)(s).max_alt,unitFrom:"m",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)])])):(0,a.kq)("",!0),(0,i.SU)(s)&&(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.iD)("div",Zo,[Ho,(0,a._)("div",qo,[(0,a.Uk)(" +"),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).ascent,unitFrom:"m",displayUnit:!1,useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0),(0,a.Uk)("/- "),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:1,distance:(0,i.SU)(s).descent,unitFrom:"m",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)])])):(0,a.kq)("",!0)],2)])])}}});const jo=(0,P.Z)(Vo,[["__scopeId","data-v-96abcc38"]]);var Xo=jo,Jo=n(5630),Qo=n(3768);const es={id:"timeline"},ts={class:"section-title"},ns={key:0},rs={key:1},as={key:1,class:"more-workouts"};var os=(0,a.aZ)({__name:"Timeline",props:{sports:null,user:null},setup(e){const t=e,n=(0,c.o)(),{sports:r,user:s}=(0,i.BK)(t),u=(0,i.iH)(1),d=5,m=t.user.nb_workouts>=d?d:t.user.nb_workouts;(0,a.wF)((()=>S()));const _=(0,a.Fl)((()=>n.getters[l.aX.GETTERS.TIMELINE_WORKOUTS])),E=(0,a.Fl)((()=>_.value.length>0&&null!==_.value[_.value.length-1].previous_workout));function S(){n.dispatch(l.aX.ACTIONS.GET_TIMELINE_WORKOUTS,{page:u.value,per_page:d,...Qo.eR})}function T(){u.value+=1,n.dispatch(l.aX.ACTIONS.GET_MORE_TIMELINE_WORKOUTS,{page:u.value,per_page:d,...Qo.eR})}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",es,[(0,a._)("div",ts,(0,o.zw)(e.$t("workouts.LATEST_WORKOUTS")),1),(0,i.SU)(s).nb_workouts>0&&0===(0,i.SU)(_).length?((0,a.wg)(),(0,a.iD)("div",ns,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)([...Array((0,i.SU)(m)).keys()],(e=>((0,a.wg)(),(0,a.j4)(Xo,{user:(0,i.SU)(s),useImperialUnits:(0,i.SU)(s).imperial_units,key:e},null,8,["user","useImperialUnits"])))),128))])):((0,a.wg)(),(0,a.iD)("div",rs,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(_),(e=>((0,a.wg)(),(0,a.j4)(Xo,{workout:e,sport:(0,i.SU)(_).length>0?(0,i.SU)(r).filter((t=>t.id===e.sport_id))[0]:null,user:(0,i.SU)(s),useImperialUnits:(0,i.SU)(s).imperial_units,key:e.id},null,8,["workout","sport","user","useImperialUnits"])))),128)),0===(0,i.SU)(_).length?((0,a.wg)(),(0,a.j4)(Jo.Z,{key:0})):(0,a.kq)("",!0),(0,i.SU)(E)?((0,a.wg)(),(0,a.iD)("div",as,[(0,a._)("button",{onClick:T},(0,o.zw)(e.$t("workouts.LOAD_MORE_WORKOUT")),1)])):(0,a.kq)("",!0)]))]))}});const ss=(0,P.Z)(os,[["__scopeId","data-v-35567bf2"]]);var is=ss,ls=n(1640),cs=n(4559),us=n(7349),ds=n(1743),ms=n(9160),_s=n(1085);const Es=["title"];var Ss=(0,a.aZ)({__name:"CalendarWorkout",props:{displayHARecord:{type:Boolean},workout:null,sportLabel:null,sportColor:null},setup(e){const t=e,{displayHARecord:n,workout:r,sportLabel:o,sportColor:s}=(0,i.BK)(t);return(e,t)=>{const l=(0,a.up)("SportImage");return(0,a.wg)(),(0,a.iD)("div",{class:"calendar-workout",onClick:t[0]||(t[0]=t=>e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(r).id}}))},[(0,a.Wm)(l,{"sport-label":(0,i.SU)(o),title:(0,i.SU)(r).title,color:(0,i.SU)(s)},null,8,["sport-label","title","color"]),(0,a._)("sup",null,[(0,i.SU)(r).records.length>0?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-trophy custom-fa-small","aria-hidden":"true",title:(0,i.SU)(r).records.filter((e=>!!(0,i.SU)(n)||"HA"!==e.record_type)).map((t=>` ${e.$t(`workouts.RECORD_${t.record_type}`)}`))},null,8,Es)):(0,a.kq)("",!0)])])}}});const Ts=Ss;var ps=Ts;const As={class:"donut-chart"},Os={height:"34",width:"34",viewBox:"0 0 34 34"},Rs=["stroke","stroke-dashoffset","transform"];var Is=(0,a.aZ)({__name:"DonutChart",props:{colors:null,datasets:null},setup(e){const t=e,{colors:n,datasets:r}=(0,i.BK)(t);let o=-90;const s=16,l=16,c=14,u=2*Math.PI*c;function d(e,t){return t-e*t}function m(e,t){const n=`rotate(${o}, ${s}, ${l})`;return o=360*t+o,n}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",As,[((0,a.wg)(),(0,a.iD)("svg",Os,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(Object.entries((0,i.SU)(r)),((e,t)=>((0,a.wg)(),(0,a.iD)("g",{key:t},[(0,a._)("circle",{cx:s,cy:l,r:c,fill:"transparent",stroke:(0,i.SU)(n)[+e[0]],"stroke-dashoffset":d(e[1].percentage,u),"stroke-dasharray":u,"stroke-width":"3","stroke-opacity":"0.8",transform:m(t,e[1].percentage)},null,8,Rs)])))),128))]))]))}});const Us=Is;var gs=Us;const Ns={class:"calendar-workouts-chart"},hs={class:"workouts-count"},zs={key:0,class:"workouts-pane"},ws={class:"more-workouts"};var fs=(0,a.aZ)({__name:"CalendarWorkoutsChart",props:{colors:null,datasets:null,sports:null,workouts:null},setup(e){const t=e,{colors:n,datasets:r,sports:s,workouts:l}=(0,i.BK)(t),c=(0,i.iH)(!0);function u(e){e.stopPropagation(),c.value=!c.value}return(e,t)=>{const d=(0,a.Q2)("click-outside");return(0,a.wg)(),(0,a.iD)("div",Ns,[(0,a._)("div",{class:"workouts-chart",onClick:u},[(0,a._)("div",hs,(0,o.zw)((0,i.SU)(l).length),1),(0,a.Wm)(gs,{datasets:(0,i.SU)(r),colors:(0,i.SU)(n)},null,8,["datasets","colors"])]),c.value?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("div",zs,[(0,a.wy)(((0,a.wg)(),(0,a.iD)("div",ws,[(0,a._)("i",{class:"fa fa-times calendar-more","aria-hidden":"true",onClick:u}),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(l),((e,t)=>((0,a.wg)(),(0,a.j4)(ps,{key:t,workout:e,sportLabel:(0,i.SU)(le.PA)(e,(0,i.SU)(s)),sportColor:(0,i.SU)(le.CM)(e,(0,i.SU)(s))},null,8,["workout","sportLabel","sportColor"])))),128))])),[[d,u]])]))])}}});const vs=(0,P.Z)(fs,[["__scopeId","data-v-52d4310a"]]);var Cs=vs;const Ds={class:"calendar-workouts"},ks={class:"desktop-display"},Ps={key:0,class:"workouts-display"},Ls={key:1,class:"donut-display"},Ms={class:"mobile-display"},bs={key:0,class:"donut-display"};var ys=(0,a.aZ)({__name:"CalendarWorkouts",props:{displayHARecord:{type:Boolean},workouts:null,sports:null},setup(e){const t=e,{displayHARecord:n,workouts:r,sports:o}=(0,i.BK)(t),s=(0,a.Fl)((()=>(0,Qo.BN)(t.workouts))),l=(0,a.Fl)((()=>(0,le.Yx)(t.sports))),c=6;return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ds,[(0,a._)("div",ks,[(0,i.SU)(r).length<=c?((0,a.wg)(),(0,a.iD)("div",Ps,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(r).slice(0,c),((e,t)=>((0,a.wg)(),(0,a.j4)(ps,{key:t,displayHARecord:(0,i.SU)(n),workout:e,sportLabel:(0,i.SU)(le.PA)(e,(0,i.SU)(o)),sportColor:(0,i.SU)(le.CM)(e,(0,i.SU)(o))},null,8,["displayHARecord","workout","sportLabel","sportColor"])))),128))])):((0,a.wg)(),(0,a.iD)("div",Ls,[(0,a.Wm)(Cs,{workouts:(0,i.SU)(r),sports:(0,i.SU)(o),datasets:(0,i.SU)(s),colors:(0,i.SU)(l)},null,8,["workouts","sports","datasets","colors"])]))]),(0,a._)("div",Ms,[(0,i.SU)(r).length>0?((0,a.wg)(),(0,a.iD)("div",bs,[(0,a.Wm)(Cs,{workouts:(0,i.SU)(r),sports:(0,i.SU)(o),datasets:(0,i.SU)(s),colors:(0,i.SU)(l)},null,8,["workouts","sports","datasets","colors"])])):(0,a.kq)("",!0)])]))}});const Gs=ys;var Fs=Gs;const Ws={class:"calendar-cells"},Ks={class:"calendar-cell-day"};var Ys=(0,a.aZ)({__name:"CalendarCells",props:{currentDay:null,displayHARecord:{type:Boolean},endDate:null,sports:null,startDate:null,timezone:null,weekStartingMonday:{type:Boolean},workouts:null},setup(e){const t=e,{currentDay:n,displayHARecord:r,endDate:s,sports:l,startDate:c,timezone:u,weekStartingMonday:d,workouts:m}=(0,i.BK)(t),_=(0,i.iH)([]);function E(){_.value=[];let e=c.value;while(e<=s.value){const t=[];for(let n=0;n<7;n++)t.push(e),e=(0,us.Z)(e,1);_.value.push(t)}}function S(e){return d.value?[5,6].includes(e):[0,6].includes(e)}function T(e,t){return t?t.filter((t=>(0,ds.Z)((0,Ye.eB)(t.workout_date,u.value),e))).reverse():[]}return(0,a.bv)((()=>E())),(0,a.YP)((()=>t.currentDay),(()=>E())),(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ws,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(_.value,((e,t)=>((0,a.wg)(),(0,a.iD)("div",{class:"calendar-row",key:t},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(e,((e,t)=>((0,a.wg)(),(0,a.iD)("div",{class:(0,o.C_)(["calendar-cell",{"disabled-cell":!(0,i.SU)(ms.Z)(e,(0,i.SU)(n)),"week-end":S(t),today:(0,i.SU)(_s.Z)(e)}]),key:t},[(0,a.Wm)(Fs,{workouts:T(e,(0,i.SU)(m)),sports:(0,i.SU)(l),displayHARecord:(0,i.SU)(r)},null,8,["workouts","sports","displayHARecord"]),(0,a._)("div",Ks,(0,o.zw)((0,i.SU)(jt.Z)(e,"d")),1)],2)))),128))])))),128))]))}});const xs=Ys;var $s=xs;const Bs={class:"calendar-days"};var Zs=(0,a.aZ)({__name:"CalendarDays",props:{startDate:null,localeOptions:null},setup(e){const t=e,n=[];for(let r=0;r<7;r++)n.push((0,us.Z)(t.startDate,r));return(t,r)=>((0,a.wg)(),(0,a.iD)("div",Bs,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(n,((t,n)=>(0,a._)("div",{class:"calendar-day",key:n},(0,o.zw)((0,i.SU)(jt.Z)(t,"EEE",{locale:e.localeOptions})),1))),64))]))}});const Hs=Zs;var qs=Hs;const Vs={class:"calendar-header"},js=(0,a._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1),Xs=[js],Js={class:"calendar-month"},Qs=(0,a._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1),ei=[Qs];var ti=(0,a.aZ)({__name:"CalendarHeader",props:{day:null,localeOptions:null},emits:["displayNextMonth","displayPreviousMonth"],setup(e,{emit:t}){const n=e,{day:r,localeOptions:s}=(0,i.BK)(n);return(e,n)=>((0,a.wg)(),(0,a.iD)("div",Vs,[(0,a._)("div",{class:"calendar-arrow calendar-arrow-left",onClick:n[0]||(n[0]=e=>t("displayPreviousMonth"))},Xs),(0,a._)("div",Js,[(0,a._)("span",null,(0,o.zw)((0,i.SU)(jt.Z)((0,i.SU)(r),"MMM yyyy",{locale:(0,i.SU)(s)})),1)]),(0,a._)("div",{class:"calendar-arrow calendar-arrow-right",onClick:n[1]||(n[1]=e=>t("displayNextMonth"))},ei)]))}});const ni=ti;var ri=ni;const ai={id:"user-calendar"},oi={class:"calendar-card box"};var si=(0,a.aZ)({__name:"index",props:{sports:null,user:null},setup(e){const t=e,n=(0,c.o)(),{sports:r,user:o}=(0,i.BK)(t),s="yyyy-MM-dd",u=(0,i.iH)(new Date),d=(0,i.iH)((0,Ye.yx)(u.value,t.user.weekm)),m=(0,a.Fl)((()=>n.getters[l.aX.GETTERS.CALENDAR_WORKOUTS])),_=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LOCALE]));function E(){d.value=(0,Ye.yx)(u.value,t.user.weekm);const e={from:(0,jt.Z)(d.value.start,s),to:(0,jt.Z)(d.value.end,s),page:1,per_page:100,...Qo.eR};n.dispatch(l.aX.ACTIONS.GET_CALENDAR_WORKOUTS,e)}function S(){u.value=(0,ls.Z)(u.value,1),E()}function T(){u.value=(0,cs.Z)(u.value,1),E()}return(0,a.wF)((()=>E())),(e,t)=>((0,a.wg)(),(0,a.iD)("div",ai,[(0,a._)("div",oi,[(0,a.Wm)(ri,{day:u.value,"locale-options":(0,i.SU)(_),onDisplayNextMonth:S,onDisplayPreviousMonth:T},null,8,["day","locale-options"]),(0,a.Wm)(qs,{"start-date":d.value.start,"locale-options":(0,i.SU)(_)},null,8,["start-date","locale-options"]),(0,a.Wm)($s,{currentDay:u.value,displayHARecord:(0,i.SU)(o).display_ascent,"end-date":d.value.end,sports:(0,i.SU)(r),"start-date":d.value.start,timezone:(0,i.SU)(o).timezone,workouts:(0,i.SU)(m),weekStartingMonday:(0,i.SU)(o).weekm},null,8,["currentDay","displayHARecord","end-date","sports","start-date","timezone","workouts","weekStartingMonday"])])]))}});const ii=si;var li=ii,ci=n(3703),ui=n(4135),di=n(3170);const mi={class:"user-month-stats"};var _i=(0,a.aZ)({__name:"UserMonthStats",props:{sports:null,user:null},setup(e){const t=e,{sports:n,user:r}=(0,i.BK)(t),s=new Date,l={duration:"week",start:(0,ci.Z)(s),end:(0,ui.Z)(s)},c=t.sports.map((e=>e.id));return(e,t)=>{const s=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",mi,[(0,a.Wm)(s,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("dashboard.THIS_MONTH")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(di.Z,{sports:(0,i.SU)(n),user:(0,i.SU)(r),"chart-params":l,"displayed-sport-ids":(0,i.SU)(c),"hide-chart-if-no-data":!0},null,8,["sports","user","displayed-sport-ids"])])),_:1})])}}});const Ei=(0,P.Z)(_i,[["__scopeId","data-v-1bcddc12"]]);var Si=Ei,Ti=n(2540),pi=n(3649);const{locale:Ai}=Ti.Z.global,Oi=(e,t,n,r)=>{const a="km",o=n?pi.Dl[a].defaultTarget:a,s="m",i=n?pi.Dl[s].defaultTarget:s;let l;switch(e.record_type){case"AS":case"MS":l=`${(0,pi.sC)(+e.value,a,o,2)} ${o}/h`;break;case"FD":l=`${(0,pi.sC)(+e.value,a,o,3)} ${o}`;break;case"HA":l=`${(0,pi.sC)(+e.value,s,i,2)} ${i}`;break;case"LD":l=e.value;break;default:throw new Error(`Invalid record type, expected: "AS", "FD", "HA", "LD", "MD", got: "${e.record_type}"`)}return{workout_date:(0,Ye.p6)(e.workout_date,t,r,!1),workout_id:e.workout_id,id:e.id,record_type:e.record_type,value:l}},Ri=(e,t)=>{const n=e.label.toLowerCase(),r=t.label.toLowerCase();return n>r?1:n(o=(0,Ye.mh)(o,Ai.value),e.filter((e=>!!a||"HA"!==e.record_type)).reduce(((e,a)=>{const s=t.find((e=>e.id===a.sport_id));return s&&s.label&&(void 0===e[s.translatedLabel]&&(e[s.translatedLabel]={label:s.label,color:s.color,records:[]}),e[s.translatedLabel].records.push(Oi(a,n,r,o))),e}),{})),Ui={class:"records-card"},gi={class:"record-type"},Ni={class:"record-value"},hi={class:"record-date"};var zi=(0,a.aZ)({__name:"RecordsCard",props:{records:null,sportTranslatedLabel:null},setup(e){const t=e,{records:n,sportTranslatedLabel:r}=(0,i.BK)(t),{t:s}=(0,ie.QT)();function l(e){const t=[];return e.map((e=>{t.push({...e,label:s(`workouts.RECORD_${e.record_type}`)})})),t.sort(Ri)}return(e,t)=>{const s=(0,a.up)("SportImage"),c=(0,a.up)("router-link"),u=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",Ui,[(0,a.Wm)(u,null,{title:(0,a.w5)((()=>[(0,a.Wm)(s,{"sport-label":(0,i.SU)(n).label,color:(0,i.SU)(n).color},null,8,["sport-label","color"]),(0,a.Uk)(" "+(0,o.zw)((0,i.SU)(r)),1)])),content:(0,a.w5)((()=>[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(l((0,i.SU)(n).records),(e=>((0,a.wg)(),(0,a.iD)("div",{class:"record",key:e.id},[(0,a._)("span",gi,(0,o.zw)(e.label),1),(0,a._)("span",Ni,(0,o.zw)(e.value),1),(0,a._)("span",hi,[(0,a.Wm)(c,{to:{name:"Workout",params:{workoutId:e.workout_id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.workout_date),1)])),_:2},1032,["to"])])])))),128))])),_:1})])}}});const wi=(0,P.Z)(zi,[["__scopeId","data-v-8d17c606"]]);var fi=wi;const vi=e=>((0,a.dD)("data-v-f0c85cb8"),e=e(),(0,a.Cn)(),e),Ci={class:"user-records-section"},Di={class:"section-title"},ki=vi((()=>(0,a._)("i",{class:"fa fa-trophy custom-fa-small","aria-hidden":"true"},null,-1))),Pi={class:"user-records"},Li={key:0,class:"no-records"};var Mi=(0,a.aZ)({__name:"index",props:{sports:null,user:null},setup(e){const t=e,{t:n}=(0,ie.QT)(),r=(0,a.Fl)((()=>Ii(t.user.records,(0,le.xH)(t.sports,n),t.user.timezone,t.user.imperial_units,t.user.display_ascent,t.user.date_format)));return(t,n)=>((0,a.wg)(),(0,a.iD)("div",Ci,[(0,a._)("div",Di,[ki,(0,a.Uk)(" "+(0,o.zw)(t.$t("workouts.RECORD",2)),1)]),(0,a._)("div",Pi,[0===Object.keys((0,i.SU)(r)).length?((0,a.wg)(),(0,a.iD)("div",Li,(0,o.zw)(t.$t("workouts.NO_RECORDS")),1)):(0,a.kq)("",!0),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(Object.keys((0,i.SU)(r)).sort(),(t=>((0,a.wg)(),(0,a.j4)(fi,{sportTranslatedLabel:t,records:(0,i.SU)(r)[t],key:t,useImperialUnits:e.user.imperial_units},null,8,["sportTranslatedLabel","records","useImperialUnits"])))),128))])]))}});const bi=(0,P.Z)(Mi,[["__scopeId","data-v-f0c85cb8"]]);var yi=bi;const Gi={id:"user-stats"};var Fi=(0,a.aZ)({__name:"index",props:{user:null},setup(e){const t=e,{t:n}=(0,ie.QT)(),{user:r}=(0,i.BK)(t),o=(0,a.Fl)((()=>t.user.total_duration)),s=(0,a.Fl)((()=>E(o))),l="km",c=r.value.imperial_units?pi.Dl[l].defaultTarget:l,u=(0,a.Fl)((()=>r.value.imperial_units?(0,pi.sC)(r.value.total_distance,l,c,2):parseFloat(r.value.total_distance.toFixed(2)))),d="m",m=r.value.imperial_units?pi.Dl[d].defaultTarget:d,_=(0,a.Fl)((()=>r.value.imperial_units?(0,pi.sC)(r.value.total_ascent,d,m,2):parseFloat(r.value.total_ascent.toFixed(2))));function E(e){const t=e.value.match(/day/g)?e.value.split(", ")[1]:e.value;return{days:e.value.match(/day/g)?`${e.value.split(" ")[0]} ${e.value.match(/days/g)?n("common.DAY",2):n("common.DAY",1)}`:`0 ${n("common.DAY",2)},`,duration:`${t.split(":")[0]}h ${t.split(":")[1]}min`}}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Gi,[(0,a.Wm)($,{icon:"calendar",value:(0,i.SU)(r).nb_workouts,text:e.$t("workouts.WORKOUT",(0,i.SU)(r).nb_workouts)},null,8,["value","text"]),(0,a.Wm)($,{icon:"road",value:(0,i.SU)(u),text:"mi"===(0,i.SU)(c)?"miles":(0,i.SU)(c)},null,8,["value","text"]),(0,i.SU)(r).display_ascent?((0,a.wg)(),(0,a.j4)($,{key:0,icon:"location-arrow",value:(0,i.SU)(_),text:"ft"===(0,i.SU)(m)?"feet":(0,i.SU)(m)},null,8,["value","text"])):(0,a.kq)("",!0),(0,a.Wm)($,{icon:"clock-o",value:(0,i.SU)(s).days,text:(0,i.SU)(s).duration},null,8,["value","text"]),(0,i.SU)(r).display_ascent?(0,a.kq)("",!0):((0,a.wg)(),(0,a.j4)($,{key:1,icon:"tags",value:(0,i.SU)(r).nb_sports,text:e.$t("workouts.SPORT",(0,i.SU)(r).nb_sports)},null,8,["value","text"]))]))}});const Wi=Fi;var Ki=Wi;const Yi=e=>((0,a.dD)("data-v-4c0893c1"),e=e(),(0,a.Cn)(),e),xi={key:0,id:"dashboard",class:"view"},$i={class:"container mobile-menu"},Bi={class:"box"},Zi=Yi((()=>(0,a._)("i",{class:"fa fa-calendar","aria-hidden":"true"},null,-1))),Hi=[Zi],qi=Yi((()=>(0,a._)("i",{class:"fa fa-bar-chart","aria-hidden":"true"},null,-1))),Vi=[qi],ji=Yi((()=>(0,a._)("i",{class:"fa fa-map-o","aria-hidden":"true"},null,-1))),Xi=[ji],Ji=Yi((()=>(0,a._)("i",{class:"fa fa-trophy","aria-hidden":"true"},null,-1))),Qi=[Ji],el={class:"container"},tl={class:"container dashboard-container"},nl={class:"left-container dashboard-sub-container"},rl={class:"right-container dashboard-sub-container"},al=Yi((()=>(0,a._)("div",{id:"bottom"},null,-1))),ol={key:1,class:"app-loading"};var sl=(0,a.aZ)({__name:"Dashboard",setup(e){const t=(0,c.o)(),n=(0,a.Fl)((()=>t.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),r=(0,a.Fl)((()=>t.getters[l.O8.GETTERS.SPORTS])),s=(0,i.iH)("calendar");function u(e){s.value=e}return(0,a.wF)((()=>t.dispatch(l.YN.ACTIONS.GET_USER_PROFILE))),(e,t)=>{const l=(0,a.up)("Loader");return(0,i.SU)(n).username&&(0,i.SU)(r).length>0?((0,a.wg)(),(0,a.iD)("div",xi,[(0,a._)("div",$i,[(0,a._)("div",Bi,[(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"calendar"===s.value}]),onClick:t[0]||(t[0]=e=>u("calendar"))},Hi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"chart"===s.value}]),onClick:t[1]||(t[1]=e=>u("chart"))},Vi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"timeline"===s.value}]),onClick:t[2]||(t[2]=e=>u("timeline"))},Xi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"records"===s.value}]),onClick:t[3]||(t[3]=e=>u("records"))},Qi,2)])]),(0,a._)("div",el,[(0,a.Wm)(Ki,{user:(0,i.SU)(n)},null,8,["user"])]),(0,a._)("div",tl,[(0,a._)("div",nl,[(0,a.Wm)(Si,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("chart"===s.value)})},null,8,["sports","user","class"]),(0,a.Wm)(yi,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("records"===s.value)})},null,8,["sports","user","class"])]),(0,a._)("div",rl,[(0,a.Wm)(li,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("calendar"===s.value)})},null,8,["sports","user","class"]),(0,a.Wm)(is,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("timeline"===s.value)})},null,8,["sports","user","class"])])]),al])):((0,a.wg)(),(0,a.iD)("div",ol,[(0,a.Wm)(l)]))}}});const il=(0,P.Z)(sl,[["__scopeId","data-v-4c0893c1"]]);var ll=il,cl=n(8273);const ul={class:"not-found view"};var dl=(0,a.aZ)({__name:"NotFoundView",setup(e){return(e,t)=>((0,a.wg)(),(0,a.iD)("div",ul,[(0,a.Wm)(cl.Z)]))}});const ml=dl;var _l=ml,El=n(2411);const Sl={id:"loginOrRegister",class:"view"},Tl={class:"container"},pl={class:"container-sub"},Al={class:"container-sub"};var Ol=(0,a.aZ)({__name:"LoginOrRegister",props:{action:null},setup(e){const t=e,{action:n}=(0,i.BK)(t);return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Sl,[(0,a._)("div",Tl,[(0,a._)("div",pl,[(0,a.Wm)(Oo)]),(0,a._)("div",Al,[(0,a.Wm)(El.Z,{action:(0,i.SU)(n)},null,8,["action"])])])]))}});const Rl=(0,P.Z)(Ol,[["__scopeId","data-v-6a38125b"]]);var Il=Rl;const Ul=e=>{const t=/(\/profile)(\/edit)*(\/*)/,n=e.replace(t,"").toUpperCase();return""===n?"PROFILE":n.toUpperCase()},gl=[{path:"/",name:"Dashboard",component:ll},{path:"/login",name:"Login",component:Il,props:{action:"login"}},{path:"/register",name:"Register",component:Il,props:{action:"register"}},{path:"/account-confirmation",name:"AccountConfirmation",component:()=>n.e(845).then(n.bind(n,4264))},{path:"/account-confirmation/resend",name:"AccountConfirmationResend",component:()=>n.e(24).then(n.bind(n,5639)),props:{action:"account-confirmation-resend"}},{path:"/account-confirmation/email-sent",name:"AccountConfirmationEmailSend",component:()=>n.e(24).then(n.bind(n,5639)),props:{action:"email-sent"}},{path:"/password-reset/sent",name:"PasswordEmailSent",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"request-sent"}},{path:"/password-reset/request",name:"PasswordResetRequest",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"reset-request"}},{path:"/password-reset/password-updated",name:"PasswordUpdated",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"password-updated"}},{path:"/password-reset",name:"PasswordReset",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"reset"}},{path:"/email-update",name:"EmailUpdate",component:()=>n.e(845).then(n.bind(n,8160))},{path:"/profile",name:"Profile",component:()=>n.e(845).then(n.bind(n,6266)),children:[{path:"",name:"UserProfile",component:Nt,props:e=>({tab:Ul(e.path)}),children:[{path:"",name:"UserInfos",component:ht.Z},{path:"preferences",name:"UserPreferences",component:Dt},{path:"sports",name:"UserSportPreferences",component:ja,props:{isEdition:!1}},{path:"apps",name:"UserApps",component:Xr,children:[{path:"",name:"UserAppsList",component:Ra},{path:":id",name:"UserApp",component:da},{path:":id/created",name:"CreatedUserApp",component:da,props:{afterCreation:!0}},{path:"new",name:"AddUserApp",component:Mr},{path:"authorize",name:"AuthorizeUserApp",component:Hr}]}]},{path:"edit",name:"UserProfileEdition",component:Mt,props:e=>({tab:Ul(e.path)}),children:[{path:"",name:"UserInfosEdition",component:Sn},{path:"account",name:"UserAccountEdition",component:Vt},{path:"picture",name:"UserPictureEdition",component:wn},{path:"preferences",name:"UserPreferencesEdition",component:ur},{path:"sports",name:"UserSportPreferencesEdition",component:ja,props:{isEdition:!0}}]}]},{path:"/statistics",name:"Statistics",component:()=>n.e(193).then(n.bind(n,7885))},{path:"/users/:username",name:"User",component:()=>n.e(845).then(n.bind(n,9453))},{path:"/workouts",name:"Workouts",component:()=>n.e(401).then(n.bind(n,5651))},{path:"/workouts/:workoutId",name:"Workout",component:()=>n.e(401).then(n.bind(n,4915)),props:{displaySegment:!1}},{path:"/workouts/:workoutId/edit",name:"EditWorkout",component:()=>n.e(401).then(n.bind(n,8237))},{path:"/workouts/:workoutId/segment/:segmentId",name:"WorkoutSegment",component:()=>n.e(401).then(n.bind(n,4915)),props:{displaySegment:!0}},{path:"/workouts/add",name:"AddWorkout",component:()=>n.e(401).then(n.bind(n,4189))},{path:"/admin",name:"Administration",component:()=>n.e(328).then(n.bind(n,6e3)),children:[{path:"",name:"AdministrationMenu",component:se},{path:"application",name:"ApplicationAdministration",component:M},{path:"application/edit",name:"ApplicationAdministrationEdition",component:M,props:{edition:!0}},{path:"sports",name:"SportsAdministration",component:De},{path:"users/:username",name:"UserFromAdmin",component:()=>n.e(845).then(n.bind(n,9453)),props:{fromAdmin:!0}},{path:"users",name:"UsersAdministration",component:mt}]},{path:"/about",name:"About",component:zo},{path:"/:pathMatch(.*)*",name:"not-found",component:_l}],Nl=(0,r.p7)({history:(0,r.PO)("/"),routes:gl}),hl=["/login","/password-reset","/password-reset/password-updated","/password-reset/request","/password-reset/sent","/register","/account-confirmation","/account-confirmation/resend","/account-confirmation/email-sent"],zl=["/email-update","/about"];Nl.beforeEach(((e,t,n)=>{Xa.Z.dispatch(l.YN.ACTIONS.CHECK_AUTH_USER).then((()=>{if(zl.includes(e.path))return n();if(Xa.Z.getters[l.YN.GETTERS.IS_AUTHENTICATED]&&hl.includes(e.path))return n("/");if(Xa.Z.getters[l.YN.GETTERS.IS_AUTHENTICATED]||hl.includes(e.path))n();else{const t="/"===e.path?{path:"/login"}:{path:"/login",query:{from:e.fullPath}};n(t)}})).catch((e=>{console.error(e),n()}))}));var wl=Nl},5801:function(e,t,n){"use strict";var r,a,o,s,i,l,c,u,d,m,_,E,S,T,p,A,O,R;n.d(t,{YN:function(){return h},Km:function(){return z},SY:function(){return U},O8:function(){return g},gu:function(){return N},RT:function(){return w},aX:function(){return f}}),function(e){e["CHECK_AUTH_USER"]="CHECK_AUTH_USER",e["CONFIRM_ACCOUNT"]="CONFIRM_ACCOUNT",e["CONFIRM_EMAIL"]="CONFIRM_EMAIL",e["DELETE_ACCOUNT"]="DELETE_ACCOUNT",e["DELETE_PICTURE"]="DELETE_PICTURE",e["GET_USER_PROFILE"]="GET_USER_PROFILE",e["LOGIN_OR_REGISTER"]="LOGIN_OR_REGISTER",e["LOGOUT"]="LOGOUT",e["SEND_PASSWORD_RESET_REQUEST"]="SEND_PASSWORD_RESET_REQUEST",e["RESEND_ACCOUNT_CONFIRMATION_EMAIL"]="RESEND_ACCOUNT_CONFIRMATION_EMAIL",e["RESET_USER_PASSWORD"]="RESET_USER_PASSWORD",e["RESET_USER_SPORT_PREFERENCES"]="RESET_USER_SPORT_PREFERENCES",e["UPDATE_USER_ACCOUNT"]="UPDATE_USER_ACCOUNT",e["UPDATE_USER_PICTURE"]="UPDATE_USER_PICTURE",e["UPDATE_USER_PROFILE"]="UPDATE_USER_PROFILE",e["UPDATE_USER_PREFERENCES"]="UPDATE_USER_PREFERENCES",e["UPDATE_USER_SPORT_PREFERENCES"]="UPDATE_USER_SPORT_PREFERENCES"}(r||(r={})),function(e){e["AUTH_TOKEN"]="AUTH_TOKEN",e["AUTH_USER_PROFILE"]="AUTH_USER_PROFILE",e["IS_ADMIN"]="IS_ADMIN",e["IS_AUTHENTICATED"]="IS_AUTHENTICATED",e["IS_SUCCESS"]="IS_SUCCESS",e["IS_REGISTRATION_SUCCESS"]="IS_REGISTRATION_SUCCESS",e["USER_LOADING"]="USER_LOADING"}(a||(a={})),function(e){e["CLEAR_AUTH_USER_TOKEN"]="CLEAR_AUTH_USER_TOKEN",e["UPDATE_AUTH_TOKEN"]="UPDATE_AUTH_TOKEN",e["UPDATE_AUTH_USER_PROFILE"]="UPDATE_AUTH_USER_PROFILE",e["UPDATE_IS_SUCCESS"]="UPDATE_USER_IS_SUCCESS",e["UPDATE_IS_REGISTRATION_SUCCESS"]="UPDATE_IS_REGISTRATION_SUCCESS",e["UPDATE_USER_LOADING"]="UPDATE_USER_LOADING"}(o||(o={})),function(e){e["AUTHORIZE_CLIENT"]="AUTHORIZE_CLIENT",e["CREATE_CLIENT"]="CREATE_CLIENT",e["DELETE_CLIENT"]="DELETE_CLIENT",e["GET_CLIENTS"]="GET_CLIENTS",e["GET_CLIENT_BY_CLIENT_ID"]="GET_CLIENT_BY_CLIENT_ID",e["GET_CLIENT_BY_ID"]="GET_CLIENT_BY_ID",e["REVOKE_ALL_TOKENS"]="REVOKE_ALL_TOKENS"}(s||(s={})),function(e){e["CLIENT"]="CLIENT",e["CLIENTS"]="CLIENTS",e["CLIENTS_PAGINATION"]="CLIENTS_PAGINATION",e["REVOCATION_SUCCESSFUL"]="REVOCATION_SUCCESSFUL"}(i||(i={})),function(e){e["EMPTY_CLIENT"]="EMPTY_CLIENT",e["SET_CLIENT"]="SET_CLIENT",e["SET_CLIENTS"]="SET_CLIENTS",e["SET_CLIENTS_PAGINATION"]="SET_CLIENTS_PAGINATION",e["SET_REVOCATION_SUCCESSFUL"]="SET_REVOCATION_SUCCESSFUL"}(l||(l={})),function(e){e["GET_APPLICATION_CONFIG"]="GET_APPLICATION_CONFIG",e["GET_APPLICATION_STATS"]="GET_APPLICATION_STATS",e["UPDATE_APPLICATION_CONFIG"]="UPDATE_APPLICATION_CONFIG",e["UPDATE_APPLICATION_LANGUAGE"]="UPDATE_APPLICATION_LANGUAGE"}(c||(c={})),function(e){e["APP_CONFIG"]="APP_CONFIG",e["APP_LOADING"]="APP_LOADING",e["APP_STATS"]="APP_STATS",e["ERROR_MESSAGES"]="ERROR_MESSAGES",e["LANGUAGE"]="LANGUAGE",e["LOCALE"]="LOCALE"}(u||(u={})),function(e){e["EMPTY_ERROR_MESSAGES"]="EMPTY_ERROR_MESSAGES",e["SET_ERROR_MESSAGES"]="SET_ERROR_MESSAGES",e["UPDATE_APPLICATION_CONFIG"]="UPDATE_APPLICATION_CONFIG",e["UPDATE_APPLICATION_LOADING"]="UPDATE_APPLICATION_LOADING",e["UPDATE_APPLICATION_STATS"]="UPDATE_APPLICATION_STATS",e["UPDATE_LANG"]="UPDATE_LANG"}(d||(d={})),function(e){e["GET_SPORTS"]="GET_SPORTS",e["UPDATE_SPORTS"]="UPDATE_SPORTS"}(m||(m={})),function(e){e["SPORTS"]="SPORTS"}(_||(_={})),function(e){e["SET_SPORTS"]="SET_SPORTS"}(E||(E={})),function(e){e["GET_USER_STATS"]="GET_USER_STATS"}(S||(S={})),function(e){e["USER_STATS"]="USER_STATS"}(T||(T={})),function(e){e["EMPTY_USER_STATS"]="EMPTY_USER_STATS",e["UPDATE_USER_STATS"]="UPDATE_USER_STATS"}(p||(p={})),function(e){e["EMPTY_USER"]="EMPTY_USER",e["EMPTY_USERS"]="EMPTY_USERS",e["GET_USER"]="GET_USER",e["GET_USERS"]="GET_USERS",e["UPDATE_USER"]="UPDATE_USER",e["DELETE_USER_ACCOUNT"]="DELETE_USER_ACCOUNT"}(A||(A={})),function(e){e["USER"]="USER",e["USERS"]="USERS",e["USERS_IS_SUCCESS"]="USERS_IS_SUCCESS",e["USERS_LOADING"]="USERS_LOADING",e["USERS_PAGINATION"]="USERS_PAGINATION"}(O||(O={})),function(e){e["UPDATE_USER"]="UPDATE_USER",e["UPDATE_USER_IN_USERS"]="UPDATE_USER_IN_USERS",e["UPDATE_USERS"]="UPDATE_USERS",e["UPDATE_USERS_LOADING"]="UPDATE_USERS_LOADING",e["UPDATE_USERS_PAGINATION"]="UPDATE_USERS_PAGINATION",e["UPDATE_IS_SUCCESS"]="UPDATE_IS_SUCCESS"}(R||(R={}));var I=n(52);const U={ACTIONS:c,GETTERS:u,MUTATIONS:d},g={ACTIONS:m,GETTERS:_,MUTATIONS:E},N={ACTIONS:S,GETTERS:T,MUTATIONS:p},h={ACTIONS:r,GETTERS:a,MUTATIONS:o},z={ACTIONS:s,GETTERS:i,MUTATIONS:l},w={ACTIONS:A,GETTERS:O,MUTATIONS:R},f={ACTIONS:I.tW,GETTERS:I.JP,MUTATIONS:I.CW}},2894:function(e,t,n){"use strict";n.d(t,{Z:function(){return me}});var r=n(3907),a=(n(7658),n(5167)),o=n(9669),s=n.n(o),i=n(8566),l=n(2024);const c=s().create({baseURL:(0,l.k)()});c.interceptors.request.use((e=>{const t=new AbortController;e.signal=t.signal;const n=(0,i.a)(e);return i.j.set(n,t),e}),(e=>Promise.reject(e))),c.interceptors.response.use((e=>((0,i.a)(e.config),e)),(e=>("canceled"!==e.message&&(0,i.a)(e.response.config),Promise.reject(e))));var u=c,d=n(5073),m=n(5801);const _=(e,t)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z["delete"](`users/${t.username}`).then((n=>{204===n.status?t.fromAdmin?d.Z.push("/admin/users"):e.dispatch(m.YN.ACTIONS.LOGOUT).then((()=>d.Z.push("/"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},E={[m.RT.ACTIONS.EMPTY_USER](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USER,{})},[m.RT.ACTIONS.EMPTY_USERS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS,[]),e.commit(m.RT.MUTATIONS.UPDATE_USERS_PAGINATION,{})},[m.RT.ACTIONS.GET_USER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!0),a.Z.get(`users/${t}`).then((t=>{"success"===t.data.status?e.commit(m.RT.MUTATIONS.UPDATE_USER,t.data.data.users[0]):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.GET_USERS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!0),a.Z.get("users",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.RT.MUTATIONS.UPDATE_USERS,t.data.data.users),e.commit(m.RT.MUTATIONS.UPDATE_USERS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.UPDATE_USER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1);const n={};void 0!==t.admin&&(n.admin=t.admin),t.resetPassword&&(n.reset_password=t.resetPassword),t.activate&&(n.activate=t.activate),void 0!==t.new_email&&(n.new_email=t.new_email),a.Z.patch(`users/${t.username}`,n).then((n=>{"success"===n.data.status?(e.commit(m.RT.MUTATIONS.UPDATE_USER_IN_USERS,n.data.data.users[0]),(t.resetPassword||t.new_email)&&e.commit(m.RT.MUTATIONS.UPDATE_IS_SUCCESS,!0),(t.activate||t.new_email)&&e.commit(m.RT.MUTATIONS.UPDATE_USER,n.data.data.users[0])):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.DELETE_USER_ACCOUNT](e,t){_(e,{username:t.username,fromAdmin:!0})}},S=e=>{localStorage.removeItem("authToken"),e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.gu.MUTATIONS.EMPTY_USER_STATS),e.commit(m.YN.MUTATIONS.CLEAR_AUTH_USER_TOKEN),e.commit(m.RT.MUTATIONS.UPDATE_USERS,[]),e.commit(m.aX.MUTATIONS.EMPTY_WORKOUTS),e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),d.Z.push("/login")},T={[m.YN.ACTIONS.CHECK_AUTH_USER](e){window.localStorage.authToken&&!e.getters[m.YN.GETTERS.IS_AUTHENTICATED]&&(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,window.localStorage.authToken),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE)),!window.localStorage.authToken&&e.getters[m.YN.GETTERS.IS_AUTHENTICATED]&&S(e)},[m.YN.ACTIONS.CONFIRM_ACCOUNT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/account/confirm",{token:t.token}).then((t=>{if("success"===t.data.status){const n=t.data.auth_token;window.localStorage.setItem("authToken",n),e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,n),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/")))}else(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t)}))},[m.YN.ACTIONS.CONFIRM_EMAIL](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),u.post("/auth/email/update",{token:t.token}).then((n=>{"success"===n.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!0),t.refreshUser&&e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile/edit/account"))),d.Z.push("/profile/edit/account")):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t)}))},[m.YN.ACTIONS.GET_USER_PROFILE](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("auth/profile").then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),t.data.data.language&&e.dispatch(m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,t.data.data.language),e.dispatch(m.O8.ACTIONS.GET_SPORTS)):((0,l.S)(e,null),S(e))})).catch((t=>{"canceled"!==t.message&&((0,l.S)(e,t),S(e))}))},[m.YN.ACTIONS.LOGIN_OR_REGISTER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!1),u.post(`/auth/${t.actionType}`,t.formData).then((n=>{if("success"===n.data.status)if("login"===t.actionType){const r=n.data.auth_token;window.localStorage.setItem("authToken",r),e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,r),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("string"===typeof t.redirectUrl?t.redirectUrl:"/")))}else d.Z.push("/login").then((()=>e.commit(m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!0)));else(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.LOGOUT](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.post("auth/logout").then((t=>{"success"===t.data.status?S(e):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.UPDATE_USER_PROFILE](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),d.Z.push("/profile")):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.UPDATE_USER_ACCOUNT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),a.Z.patch("auth/profile/edit/account",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!0)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.UPDATE_USER_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit/preferences",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),e.dispatch(m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,t.data.data.language).then((()=>d.Z.push("/profile/preferences")))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.RESET_USER_SPORT_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z["delete"](`auth/profile/reset/sports/${t}`).then((t=>{204===t.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)}))},[m.YN.ACTIONS.UPDATE_USER_SPORT_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit/sports",t).then((t=>{"success"===t.data.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)}))},[m.YN.ACTIONS.UPDATE_USER_PICTURE](e,t){if(e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),!t.picture)throw new Error("No file part");const n=new FormData;n.append("file",t.picture),a.Z.post("auth/picture",n,{headers:{"content-type":"multipart/form-data"}}).then((t=>{"success"===t.data.status?e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.DELETE_ACCOUNT](e,t){_(e,t)},[m.YN.ACTIONS.DELETE_PICTURE](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z["delete"]("auth/picture").then((t=>{204===t.status?e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.SEND_PASSWORD_RESET_REQUEST](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/password/reset-request",t).then((t=>{"success"===t.data.status?d.Z.push("/password-reset/sent"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/account/resend-confirmation",t).then((t=>{"success"===t.data.status?d.Z.push("/account-confirmation/email-sent"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.RESET_USER_PASSWORD](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/password/update",t).then((t=>{"success"===t.data.status?d.Z.push("/password-reset/password-updated"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},p={[m.YN.GETTERS.AUTH_TOKEN]:e=>e.authToken,[m.YN.GETTERS.AUTH_USER_PROFILE]:e=>e.authUserProfile,[m.YN.GETTERS.IS_AUTHENTICATED]:e=>null!==e.authToken,[m.YN.GETTERS.IS_ADMIN]:e=>e.authUserProfile&&e.authUserProfile.admin,[m.YN.GETTERS.IS_REGISTRATION_SUCCESS]:e=>e.isRegistrationSuccess,[m.YN.GETTERS.IS_SUCCESS]:e=>e.isSuccess,[m.YN.GETTERS.USER_LOADING]:e=>e.loading},A={[m.YN.MUTATIONS.CLEAR_AUTH_USER_TOKEN](e){e.authToken=null,e.authUserProfile={}},[m.YN.MUTATIONS.UPDATE_AUTH_TOKEN](e,t){e.authToken=t},[m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE](e,t){e.authUserProfile=t},[m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS](e,t){e.isRegistrationSuccess=t},[m.YN.MUTATIONS.UPDATE_IS_SUCCESS](e,t){e.isSuccess=t},[m.YN.MUTATIONS.UPDATE_USER_LOADING](e,t){e.loading=t}},O={authToken:null,authUserProfile:{},isSuccess:!1,isRegistrationSuccess:!1,loading:!1},R={state:O,actions:T,getters:p,mutations:A};var I=R;const U=(e,t)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get(t).then((t=>{"success"===t.data.status?e.commit(m.Km.MUTATIONS.SET_CLIENT,t.data.data.client):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},g={[m.Km.ACTIONS.AUTHORIZE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES);const n=new FormData;n.set("client_id",t.client_id),n.set("response_type",t.response_type),n.set("scope",t.scope),n.set("confirm","true"),t.state&&n.set("state",t.state),t.code_challenge&&n.set("code_challenge",t.code_challenge),t.code_challenge_method&&n.set("code_challenge_method",t.code_challenge_method),a.Z.post("oauth/authorize",n,{headers:{"Content-Type":"multipart/form-data"}}).then((t=>{200==t.status&&t.data.redirect_url?window.location.href=t.data.redirect_url:(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.CREATE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.post("oauth/apps",t).then((t=>{"created"===t.data.status?(e.commit(m.Km.MUTATIONS.SET_CLIENT,t.data.data.client),d.Z.push(`/profile/apps/${t.data.data.client.id}/created`)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.DELETE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z["delete"](`oauth/apps/${t}`).then((t=>{204===t.status?e.dispatch(m.Km.ACTIONS.GET_CLIENTS).then((()=>d.Z.push("/profile/apps"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.GET_CLIENT_BY_CLIENT_ID](e,t){U(e,`oauth/apps/${t}`)},[m.Km.ACTIONS.GET_CLIENT_BY_ID](e,t){U(e,`oauth/apps/${t}/by_id`)},[m.Km.ACTIONS.GET_CLIENTS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("oauth/apps",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.Km.MUTATIONS.SET_CLIENTS,t.data.data.clients),e.commit(m.Km.MUTATIONS.SET_CLIENTS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.REVOKE_ALL_TOKENS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!1),a.Z.post(`oauth/apps/${t}/revoke`).then((t=>{"success"===t.data.status?e.commit(m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!0):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},N={[m.Km.GETTERS.CLIENT]:e=>e.client,[m.Km.GETTERS.CLIENTS]:e=>e.clients,[m.Km.GETTERS.CLIENTS_PAGINATION]:e=>e.pagination,[m.Km.GETTERS.REVOCATION_SUCCESSFUL]:e=>e.revocationSuccessful},h={[m.Km.MUTATIONS.SET_CLIENT](e,t){e.client=t},[m.Km.MUTATIONS.EMPTY_CLIENT](e){e.client={}},[m.Km.MUTATIONS.SET_CLIENTS](e,t){e.clients=t},[m.Km.MUTATIONS.SET_CLIENTS_PAGINATION](e,t){e.pagination=t},[m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL](e,t){e.revocationSuccessful=t}},z={client:{},clients:[],pagination:{},revocationSuccessful:!1},w={state:z,actions:g,getters:N,mutations:h};var f=w,v=n(2540);const{locale:C}=v.Z.global,D={[m.SY.ACTIONS.GET_APPLICATION_CONFIG](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING,!0),a.Z.get("config").then((t=>{"success"===t.data.status?e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG,t.data.data):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING,!1)))},[m.SY.ACTIONS.GET_APPLICATION_STATS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("stats/all").then((t=>{"success"===t.data.status?e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_STATS,t.data.data):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.SY.ACTIONS.UPDATE_APPLICATION_CONFIG](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.patch("config",t).then((t=>{"success"===t.data.status?(e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG,t.data.data),d.Z.push("/admin/application")):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE](e,t){document.querySelector("html")?.setAttribute("lang",t),e.commit(m.SY.MUTATIONS.UPDATE_LANG,t),C.value=t}},k={[m.SY.GETTERS.APP_CONFIG]:e=>e.application.config,[m.SY.GETTERS.APP_LOADING]:e=>e.appLoading,[m.SY.GETTERS.APP_STATS]:e=>e.application.statistics,[m.SY.GETTERS.ERROR_MESSAGES]:e=>e.errorMessages,[m.SY.GETTERS.LANGUAGE]:e=>e.language,[m.SY.GETTERS.LOCALE]:e=>e.locale};var P=n(6287);const L={[m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES](e){e.errorMessages=null},[m.SY.MUTATIONS.SET_ERROR_MESSAGES](e,t){e.errorMessages=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG](e,t){e.application.config=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING](e,t){e.appLoading=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_STATS](e,t){e.application.statistics=t},[m.SY.MUTATIONS.UPDATE_LANG](e,t){e.language=t,e.locale=P.v1[t]}};var M=n(5826);const b={root:!0,language:"en",locale:M.Z,errorMessages:null,application:{statistics:{sports:0,uploads_dir_size:0,users:0,workouts:0}},appLoading:!1},y={[m.O8.ACTIONS.GET_SPORTS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("sports").then((t=>{"success"===t.data.status?(e.commit(m.O8.MUTATIONS.SET_SPORTS,t.data.data.sports),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.O8.ACTIONS.UPDATE_SPORTS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.patch(`sports/${t.id}`,{is_active:t.isActive}).then((t=>{"success"===t.data.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},G={[m.O8.GETTERS.SPORTS]:e=>e.sports},F={[m.O8.MUTATIONS.SET_SPORTS](e,t){e.sports=t}},W={sports:[]},K={state:W,actions:y,getters:G,mutations:F};var Y=K;const x={[m.gu.ACTIONS.GET_USER_STATS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get(`stats/${t.username}/${t.filterType}`,{params:t.params}).then((t=>{"success"===t.data.status?e.commit(m.gu.MUTATIONS.UPDATE_USER_STATS,t.data.data.statistics):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},$={[m.gu.GETTERS.USER_STATS]:e=>e.statistics},B={[m.gu.MUTATIONS.UPDATE_USER_STATS](e,t){e.statistics=t},[m.gu.MUTATIONS.EMPTY_USER_STATS](e){e.statistics={}}},Z={statistics:{}},H={state:Z,actions:x,getters:$,mutations:B};var q=H;const V={[m.RT.GETTERS.USER]:e=>e.user,[m.RT.GETTERS.USERS]:e=>e.users,[m.RT.GETTERS.USERS_IS_SUCCESS]:e=>e.isSuccess,[m.RT.GETTERS.USERS_LOADING]:e=>e.loading,[m.RT.GETTERS.USERS_PAGINATION]:e=>e.pagination},j={[m.RT.MUTATIONS.UPDATE_USER](e,t){e.user=t},[m.RT.MUTATIONS.UPDATE_USER_IN_USERS](e,t){e.users=e.users.map((e=>e.username===t.username?t:e))},[m.RT.MUTATIONS.UPDATE_USERS](e,t){e.users=t},[m.RT.MUTATIONS.UPDATE_USERS_LOADING](e,t){e.loading=t},[m.RT.MUTATIONS.UPDATE_USERS_PAGINATION](e,t){e.pagination=t},[m.RT.MUTATIONS.UPDATE_IS_SUCCESS](e,t){e.isSuccess=t}},X={user:{},users:[],loading:!1,isSuccess:!1,pagination:{}},J={state:X,actions:E,getters:V,mutations:j};var Q=J,ee=n(52);const te=(e,t,n)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("workouts",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.aX.MUTATIONS[n],t.data.data.workouts),n===ee.CW.SET_USER_WORKOUTS&&e.commit(m.aX.MUTATIONS.SET_WORKOUTS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},ne={[m.aX.ACTIONS.GET_CALENDAR_WORKOUTS](e,t){e.commit(m.aX.MUTATIONS.EMPTY_CALENDAR_WORKOUTS),te(e,t,ee.CW.SET_CALENDAR_WORKOUTS)},[m.aX.ACTIONS.GET_USER_WORKOUTS](e,t){te(e,t,ee.CW.SET_USER_WORKOUTS)},[m.aX.ACTIONS.GET_TIMELINE_WORKOUTS](e,t){te(e,t,ee.CW.SET_TIMELINE_WORKOUTS)},[m.aX.ACTIONS.GET_MORE_TIMELINE_WORKOUTS](e,t){te(e,t,ee.CW.ADD_TIMELINE_WORKOUTS)},[m.aX.ACTIONS.GET_WORKOUT_DATA](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0);const n=t.segmentId?`/segment/${t.segmentId}`:"";a.Z.get(`workouts/${t.workoutId}`).then((r=>{const o=r.data.data.workouts[0];if("success"===r.data.status){if(t.segmentId&&(0===o.segments.length||!o.segments[+t.segmentId-1]))throw new Error("WORKOUT_NOT_FOUND");e.commit(m.aX.MUTATIONS.SET_WORKOUT,r.data.data.workouts[0]),r.data.data.workouts[0].with_gpx&&(a.Z.get(`workouts/${t.workoutId}/chart_data${n}`).then((t=>{"success"===t.data.status&&e.commit(m.aX.MUTATIONS.SET_WORKOUT_CHART_DATA,t.data.data.chart_data)})),a.Z.get(`workouts/${t.workoutId}/gpx${n}`).then((t=>{"success"===t.data.status&&e.commit(m.aX.MUTATIONS.SET_WORKOUT_GPX,t.data.data.gpx)})))}else e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),(0,l.S)(e,null)})).catch((t=>{e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.DELETE_WORKOUT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z["delete"](`workouts/${t.workoutId}`).then((()=>{e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE),d.Z.push("/")})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.EDIT_WORKOUT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z.patch(`workouts/${t.workoutId}`,t.data).then((()=>{e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE),e.dispatch(m.aX.ACTIONS.GET_WORKOUT_DATA,{workoutId:t.workoutId}).then((()=>{d.Z.push({name:"Workout",params:{workoutId:t.workoutId}})}))})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.ADD_WORKOUT](e,t){if(e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),!t.file)throw new Error("No file part");const n=new FormData;n.append("file",t.file),n.append("data",`{"sport_id": ${t.sport_id}, "notes": "${t.notes}"}`),a.Z.post("workouts",n,{headers:{"content-type":"multipart/form-data"}}).then((t=>{if("created"===t.data.status){e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE);const n=t.data.data.workouts[0];d.Z.push(1===t.data.data.workouts.length?`/workouts/${n.id}`:"/")}})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.ADD_WORKOUT_WITHOUT_GPX](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z.post("workouts/no_gpx",t).then((t=>{if("created"===t.data.status){e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE);const n=t.data.data.workouts[0];d.Z.push(`/workouts/${n.id}`)}})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))}},re={[m.aX.GETTERS.CALENDAR_WORKOUTS]:e=>e.calendar_workouts,[m.aX.GETTERS.TIMELINE_WORKOUTS]:e=>e.timeline_workouts,[m.aX.GETTERS.USER_WORKOUTS]:e=>e.user_workouts,[m.aX.GETTERS.WORKOUT_DATA]:e=>e.workoutData,[m.aX.GETTERS.WORKOUTS_PAGINATION]:e=>e.pagination},ae={[m.aX.MUTATIONS.ADD_TIMELINE_WORKOUTS](e,t){e.timeline_workouts=e.timeline_workouts.concat(t)},[m.aX.MUTATIONS.SET_CALENDAR_WORKOUTS](e,t){e.calendar_workouts=t},[m.aX.MUTATIONS.SET_TIMELINE_WORKOUTS](e,t){e.timeline_workouts=t},[m.aX.MUTATIONS.SET_USER_WORKOUTS](e,t){e.user_workouts=t},[m.aX.MUTATIONS.SET_WORKOUTS_PAGINATION](e,t){e.pagination=t},[m.aX.MUTATIONS.SET_WORKOUT](e,t){e.workoutData.workout=t},[m.aX.MUTATIONS.SET_WORKOUT_CHART_DATA](e,t){e.workoutData.chartData=t},[m.aX.MUTATIONS.SET_WORKOUT_GPX](e,t){e.workoutData.gpx=t},[m.aX.MUTATIONS.SET_WORKOUT_LOADING](e,t){e.workoutData.loading=t},[m.aX.MUTATIONS.EMPTY_CALENDAR_WORKOUTS](e){e.calendar_workouts=[]},[m.aX.MUTATIONS.EMPTY_WORKOUTS](e){e.calendar_workouts=[],e.user_workouts=[],e.timeline_workouts=[]},[m.aX.MUTATIONS.EMPTY_WORKOUT](e){e.workoutData={gpx:"",loading:!1,workout:{},chartData:[]}}},oe={calendar_workouts:[],timeline_workouts:[],pagination:{},user_workouts:[],workoutData:{gpx:"",loading:!1,workout:{},chartData:[]}},se={state:oe,actions:ne,getters:re,mutations:ae};var ie=se;const le={authUserModule:I,oAuthModule:f,sportsModule:Y,statsModule:q,usersModule:Q,workoutsModule:ie},ce={state:b,actions:D,getters:k,mutations:L,modules:le};var ue=ce;const de=(0,r.MT)(ue);var me=de},52:function(e,t,n){"use strict";var r,a,o;n.d(t,{CW:function(){return o},JP:function(){return a},tW:function(){return r}}),function(e){e["ADD_WORKOUT"]="ADD_WORKOUT",e["ADD_WORKOUT_WITHOUT_GPX"]="ADD_WORKOUT_WITHOUT_GPX",e["DELETE_WORKOUT"]="DELETE_WORKOUT",e["EDIT_WORKOUT"]="EDIT_WORKOUT",e["GET_CALENDAR_WORKOUTS"]="GET_CALENDAR_WORKOUTS",e["GET_USER_WORKOUTS"]="GET_USER_WORKOUTS",e["GET_TIMELINE_WORKOUTS"]="GET_TIMELINE_WORKOUTS",e["GET_MORE_TIMELINE_WORKOUTS"]="GET_MORE_TIMELINE_WORKOUTS",e["GET_WORKOUT_DATA"]="GET_WORKOUT_DATA"}(r||(r={})),function(e){e["CALENDAR_WORKOUTS"]="CALENDAR_WORKOUTS",e["TIMELINE_WORKOUTS"]="TIMELINE_WORKOUTS",e["USER_WORKOUTS"]="USER_WORKOUTS",e["WORKOUT_DATA"]="WORKOUT_DATA",e["WORKOUTS_PAGINATION"]="WORKOUTS_PAGINATION"}(a||(a={})),function(e){e["ADD_TIMELINE_WORKOUTS"]="ADD_TIMELINE_WORKOUTS",e["EMPTY_WORKOUTS"]="EMPTY_WORKOUTS",e["EMPTY_CALENDAR_WORKOUTS"]="EMPTY_CALENDAR_WORKOUTS",e["EMPTY_WORKOUT"]="EMPTY_WORKOUT",e["SET_CALENDAR_WORKOUTS"]="SET_CALENDAR_WORKOUTS",e["SET_TIMELINE_WORKOUTS"]="SET_TIMELINE_WORKOUTS",e["SET_USER_WORKOUTS"]="SET_USER_WORKOUTS",e["SET_WORKOUT"]="SET_WORKOUT",e["SET_WORKOUT_GPX"]="SET_WORKOUT_GPX",e["SET_WORKOUT_CHART_DATA"]="SET_WORKOUT_CHART_DATA",e["SET_WORKOUT_LOADING"]="SET_WORKOUT_LOADING",e["SET_WORKOUTS_PAGINATION"]="SET_WORKOUTS_PAGINATION"}(o||(o={}))},9917:function(e,t,n){"use strict";n.d(t,{o:function(){return a}});var r=n(3907);function a(){return(0,r.oR)()}},2766:function(e,t,n){"use strict";n.d(t,{Hf:function(){return a},Ne:function(){return c},fS:function(){return r},lM:function(){return d},pm:function(){return l},z_:function(){return s}});const r=["asc","desc"],a=1,o=10,s=(e,t)=>e&&"string"===typeof e&&+e>0?+e:t,i=(e,t,n)=>e&&"string"===typeof e&&t.includes(e)?e:n,l=(e,t,n,l)=>{const c=l||{},u=c.defaultSort||"asc",d={};return d.page=s(e.page,a),d.per_page=s(e.per_page,o),d.order=i(e.order,r,u),d.order_by=i(e.order_by,t,n),"string"===typeof e.q?d.q=e.q:delete d.q,d},c=["from","to","ave_speed_from","ave_speed_to","max_speed_from","max_speed_to","distance_from","distance_to","duration_from","duration_to","sport_id"],u=(e,t=1)=>Array.from({length:e-t+1},((e,n)=>t+n)),d=(e,t)=>{if(e<0)return[];if(e<9)return u(e);let n=[1,2];return t<4?n=n.concat([3,4,5]):t<6?n=n.concat(u(t+2,3)):(n=n.concat(["..."]),t=e-2&&n[n.length-1]{switch(e){case"week":return(0,r.Z)(t,{weekStartsOn:n?1:0});case"year":return(0,a.Z)(t);case"month":return(0,o.Z)(t);default:throw new Error(`Invalid duration, expected: "week", "month", "year", got: "${e}"`)}},p=(e,t)=>{switch(e){case"week":return(0,s.Z)(t,7);case"year":return(0,i.Z)(t,1);case"month":return(0,l.Z)(t,1);default:throw new Error(`Invalid duration, expected: "week", "month", "year", got: "${e}"`)}},A=(e,t)=>(0,m.utcToZonedTime)(new Date(e),t),O=(e,t)=>{const n=(0,o.Z)(e),a=(0,c.Z)(e),s=t?1:0;return{start:(0,r.Z)(n,{weekStartsOn:s}),end:(0,u.Z)(a,{weekStartsOn:s})}},R=(e,t=null,n=null)=>(t||(t="yyyy/MM/dd"),t=g(t,S.value),n||(n="HH:mm"),{workout_date:(0,d.Z)(e,t,{locale:E.v1[S.value]}),workout_time:(0,d.Z)(e,n)}),I=["MM/dd/yyyy","dd/MM/yyyy","yyyy-MM-dd","date_string"],U={de:"do MMM yyyy",en:"MMM. do, yyyy",fr:"d MMM yyyy"},g=(e,t)=>"date_string"===e?U[t]:e,N=(e,t,n,r=!0,a=null)=>(a||(a=S.value),(0,d.Z)(A(e,t),`${g(n,a)}${r?" HH:mm":""}`,{locale:E.v1[a]})),h=(e,t,n=null)=>{const r=n||S.value,a=[];return I.map((n=>{const o=g(n,r);a.push({label:`${o} - ${N(e,t,o,!1,r)}`,value:n})})),a}},8966:function(e,t,n){"use strict";n.d(t,{Z:function(){return a},j:function(){return o}});const r=["bytes","KB","MB","GB","TB"],a=(e,t=!0)=>{const n=Math.floor(Math.log(e)/Math.log(1024));if(!e)return t?"0 bytes":{size:"0",suffix:"bytes"};const a=(e/Math.pow(1024,n)).toFixed(1),o=r[n];return t?`${a}${o}`:{size:a,suffix:o}},o=e=>{const t=e/1048576;return+t.toFixed(2)}},2024:function(e,t,n){"use strict";n.d(t,{S:function(){return o},k:function(){return a}});var r=n(5801);const a=()=>"/api/",o=(e,t,n="UNKNOWN")=>{if(t&&"canceled"===t.message)return;if(401===t?.response?.status&&"invalid_token"===t.response.data.error)return localStorage.removeItem("authToken"),void e.dispatch(r.YN.ACTIONS.CHECK_AUTH_USER);const a=t?t.response?413===t.response.status?"file size is greater than the allowed size":t.response.data.message?t.response.data.message:n:t.message?t.message:n:n;e.commit(r.SY.MUTATIONS.SET_ERROR_MESSAGES,a.includes("\n")?a.split("\n").filter((e=>""!==e)).map((e=>`api.ERROR.${e}`)):`api.ERROR.${a}`)}},6287:function(e,t,n){"use strict";n.d(t,{mT:function(){return u},v1:function(){return i},zK:function(){return l}});var r=n(879),a=n(5826),o=n(5830),s=n(2540);const i={de:r.Z,en:a.Z,fr:o.Z},l={de:"Deutsch",en:"English",fr:"Français"},{availableLocales:c}=s.Z.global,u=c.map((e=>({label:l[e],value:e})))},631:function(e,t,n){"use strict";n.d(t,{CM:function(){return l},PA:function(){return i},Yx:function(){return a},Zo:function(){return r},xH:function(){return s}});const r={"Cycling (Sport)":"#4c9792","Cycling (Transport)":"#88af98","Cycling (Virtual)":"#64a360",Hiking:"#bb757c","Mountain Biking":"#d4b371","Mountain Biking (Electric)":"#fc9d6f",Rowing:"#fcce72",Running:"#835b83","Skiing (Alpine)":"#67a4bd","Skiing (Cross Country)":"#9498d0",Snowshoes:"#5780a8",Trail:"#09a98a",Walking:"#838383"},a=e=>{const t={};return e.map((e=>t[e.id]=e.color?e.color:r[e.label])),t},o=(e,t)=>{const n=e.translatedLabel.toLowerCase(),r=t.translatedLabel.toLowerCase();return n>r?1:ne.filter((e=>"all"===n||(r.includes(e.id)||e[n]))).map((e=>({...e,translatedLabel:t(`sports.${e.label}.LABEL`)}))).sort(o),i=(e,t)=>t.filter((t=>t.id===e.sport_id)).map((e=>e.label))[0],l=(e,t)=>t.filter((t=>t.id===e.sport_id)).map((e=>e.color))[0]},9318:function(e,t,n){"use strict";n.d(t,{FN:function(){return C},aZ:function(){return v},v1:function(){return f}});n(7658);var r=n(4850),a=n(8148),o=n(9319),s=n(584),i=n(4559),l=n(3703),c=n(876),u=n(7090),d=n(4135),m=n(1593),_=n(7982),E=n(3500),S=n(1640),T=n(2540),p=n(6558),A=n(6287),O=n(631),R=n(3649);const{locale:I}=T.Z.global,U={week:{api:"yyyy-MM-dd",chart:"MM/dd/yyyy"},month:{api:"yyyy-MM",chart:"MM/yyyy"},year:{api:"yyyy",chart:"yyyy"}},g=["average_speed","nb_workouts","total_duration","total_distance","total_ascent","total_descent"],N=(e,t)=>{const n=[];for(let r=(0,p.Nh)(e.duration,e.start,t);r<=e.end;r=(0,p.xA)(e.duration,r))n.push(r);return n},h=(e,t,n=!1)=>{const r={label:e,backgroundColor:[t],data:[]};return n&&(r.type="line",r.borderColor=[t],r.spanGaps=!0),r},z=e=>{const t={average_speed:[],nb_workouts:[],total_distance:[],total_duration:[],total_ascent:[],total_descent:[]};return e.map((e=>{const n=e.color?e.color:O.Zo[e.label];t.average_speed.push(h(e.label,n,!0)),t.nb_workouts.push(h(e.label,n)),t.total_distance.push(h(e.label,n)),t.total_duration.push(h(e.label,n)),t.total_ascent.push(h(e.label,n)),t.total_descent.push(h(e.label,n))})),t},w=(e,t,n)=>{switch(e){case"average_speed":case"total_distance":case"total_ascent":case"total_descent":return(0,R.f3)(["average_speed","total_distance"].includes(e)?"km":"m",t,n);default:case"nb_workouts":case"total_duration":return t}},f=(e,t,n,a,o,s,i)=>{const l=N(e,t),c=U[e.duration],u=n.filter((e=>a.includes(e.id))),d=[],m=z(u),_={};return u.map((e=>_[e.label]=e.id)),l.map((t=>{const n=(0,r.Z)(t,c.api),a=(0,r.Z)(t,"week"===e.duration?(0,p.mh)(i,I.value):c.chart,{locale:A.v1[I.value]});d.push(a),g.map((e=>{m[e].map((t=>{t.data.push(n in o&&_[t.label]in o[n]?w(e,o[n][_[t.label]][e],s):"average_speed"===e?null:0)}))}))})),{labels:d,datasets:m}},v=(e,t,n)=>{const r=n?1:0,m="year"===t?(0,a.Z)((0,o.Z)(e,9)):"week"===t?(0,s.Z)((0,i.Z)(e,2),{weekStartsOn:r}):(0,l.Z)((0,i.Z)(e,11)),_="year"===t?(0,c.Z)(e):"week"===t?(0,u.Z)(e,{weekStartsOn:r}):(0,d.Z)(e);return{duration:t,end:_,start:m}},C=(e,t,n)=>{const{duration:r,start:T,end:p}=e,A=n?1:0;return{duration:r,end:"year"===r?(0,c.Z)(t?(0,o.Z)(p,1):(0,m.Z)(p,1)):"week"===r?(0,u.Z)(t?(0,_.Z)(p,1):(0,E.Z)(p,1),{weekStartsOn:A}):(0,d.Z)(t?(0,i.Z)(p,1):(0,S.Z)(p,1)),start:"year"===r?(0,a.Z)(t?(0,o.Z)(T,1):(0,m.Z)(T,1)):"week"===r?(0,s.Z)(t?(0,_.Z)(T,1):(0,E.Z)(T,1),{weekStartsOn:A}):(0,l.Z)(t?(0,i.Z)(T,1):(0,S.Z)(T,1))}}},3649:function(e,t,n){"use strict";n.d(t,{Dl:function(){return r},f3:function(){return s},sC:function(){return o}});const r={ft:{unit:"ft",system:"imperial",multiplier:1,defaultTarget:"m"},mi:{unit:"mi",system:"imperial",multiplier:5280,defaultTarget:"km"},m:{unit:"m",system:"metric",multiplier:1,defaultTarget:"ft"},km:{unit:"m",system:"metric",multiplier:1e3,defaultTarget:"mi"}},a={metric:{imperial:3.280839895,metric:1},imperial:{metric:1/3.280839895,imperial:1}},o=(e,t,n,o=3)=>{const s=r[t],i=r[n],l=e*s.multiplier*a[s.system][i.system]/i.multiplier;return null!==o?parseFloat(l.toFixed(o)):l},s=(e,t,n)=>{const a=n?r[e].defaultTarget:e;return n?o(t,e,a,2):t}},3768:function(e,t,n){"use strict";n.d(t,{BN:function(){return o},EX:function(){return a},eR:function(){return s}});n(7658);var r=n(3649);const a=(e,t,n)=>{const a={speed:{label:t("workouts.SPEED"),backgroundColor:["#FFFFFF"],borderColor:["#8884d8"],borderWidth:2,data:[],yAxisID:"ySpeed"},elevation:{label:t("workouts.ELEVATION"),backgroundColor:["#e5e5e5"],borderColor:["#cccccc"],borderWidth:1,fill:!0,data:[],yAxisID:"yElevation"}},o=[],s=[],i=[];return e.map((e=>{o.push(e.distance),s.push(e.duration),a.speed.data.push((0,r.f3)("km",e.speed,n)),a.elevation.data.push((0,r.f3)("m",e.elevation,n)),i.push({latitude:e.latitude,longitude:e.longitude})})),{distance_labels:o,duration_labels:s,datasets:a,coordinates:i}},o=e=>{const t=e.length;if(0===t)return{};const n={};return e.map((e=>{n[e.sport_id]||(n[e.sport_id]={count:0,percentage:0}),n[e.sport_id].count+=1,n[e.sport_id].percentage=n[e.sport_id].count/t})),n},s={order:"desc",order_by:"workout_date"}},2531:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(6252);const a={class:"card"},o={class:"card-title"},s={class:"card-content"};function i(e,t){return(0,r.wg)(),(0,r.iD)("div",a,[(0,r._)("div",o,[(0,r.WI)(e.$slots,"title")]),(0,r._)("div",s,[(0,r.WI)(e.$slots,"content")])])}var l=n(3744);const c={},u=(0,l.Z)(c,[["render",i]]);var d=u},8626:function(e,t,n){"use strict";n.d(t,{Z:function(){return T}});var r=n(6252),a=n(3577),o=n(2262);const s={class:"table-selects"},i=["value"],l=["value"],c=["value"],u=["value"],d=["value"],m=["value"];var _=(0,r.aZ)({__name:"FilterSelects",props:{order_by:null,query:null,sort:null,message:null},emits:["updateSelect"],setup(e,{emit:t}){const n=e,{order_by:_,query:E,sort:S,message:T}=(0,o.BK)(n),p=[10,25,50,100];function A(e){t("updateSelect",e.target.id,e.target.value)}return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.ORDER_BY.LABEL"))+": ",1),(0,r._)("select",{name:"order_by",id:"order_by",value:(0,o.SU)(E).order_by,onChange:A},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(_),(t=>((0,r.wg)(),(0,r.iD)("option",{value:t,key:t},(0,a.zw)(e.$t(`${(0,o.SU)(T)}.${t.toUpperCase()}`)),9,l)))),128))],40,i)]),(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.ORDER.LABEL"))+": ",1),(0,r._)("select",{name:"order",id:"order",value:(0,o.SU)(E).order,onChange:A},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(S),(t=>((0,r.wg)(),(0,r.iD)("option",{value:t,key:t},(0,a.zw)(e.$t(`common.SELECTS.ORDER.${t.toUpperCase()}`)),9,u)))),128))],40,c)]),(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.PER_PAGE.LABEL"))+": ",1),(0,r._)("select",{name:"per_page",id:"per_page",value:(0,o.SU)(E).per_page,onChange:A},[((0,r.wg)(),(0,r.iD)(r.HY,null,(0,r.Ko)(p,(e=>(0,r._)("option",{value:e,key:e},(0,a.zw)(e),9,m))),64))],40,d)])]))}}),E=n(3744);const S=(0,E.Z)(_,[["__scopeId","data-v-72463173"]]);var T=S},7167:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(6252);const a={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 -51 512 512"},o=(0,r.uE)('',1),s=[o];function i(e,t,n,o,i,l){return(0,r.wg)(),(0,r.iD)("svg",a,s)}var l={name:"ErrorImg"},c=n(3744);const u=(0,c.Z)(l,[["render",i]]);var d=u},8273:function(e,t,n){"use strict";n.d(t,{Z:function(){return E}});var r=n(6252),a=n(2262),o=(n(7658),n(3577));const s={id:"error"},i={class:"error-content"};var l=(0,r.aZ)({__name:"Error",props:{title:null,message:null,buttonText:null,path:{default:"/"}},setup(e){const t=e,{buttonText:n,title:l,message:c,path:u}=(0,a.BK)(t);return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[(0,r._)("div",i,[(0,r._)("h1",null,(0,o.zw)((0,a.SU)(l)),1),(0,r._)("p",null,(0,o.zw)((0,a.SU)(c)),1),(0,a.SU)(n)?((0,r.wg)(),(0,r.iD)("button",{key:0,onClick:t[0]||(t[0]=t=>e.$router.push((0,a.SU)(u))),class:"upper"},(0,o.zw)((0,a.SU)(n)),1)):(0,r.kq)("",!0)])]))}}),c=n(3744);const u=(0,c.Z)(l,[["__scopeId","data-v-b60bfa80"]]);var d=u,m=(0,r.aZ)({__name:"NotFound",props:{target:{default:"PAGE"}},setup(e){const t=e,{target:n}=(0,a.BK)(t),o=(0,a.iH)(),s=(0,a.iH)(!1);function i(){o.value=setTimeout((()=>{s.value=!0}),500)}return(0,r.bv)((()=>i())),(0,r.Ah)((()=>{o.value&&clearTimeout(o.value)})),(e,t)=>s.value?((0,r.wg)(),(0,r.j4)(d,{key:0,title:"404",message:e.$t(`error.NOT_FOUND.${(0,a.SU)(n)}`),"button-text":e.$t("common.HOME")},null,8,["message","button-text"])):(0,r.kq)("",!0)}});const _=m;var E=_},5020:function(e,t,n){"use strict";n.d(t,{Z:function(){return T}});var r=n(6252),a=n(3577),o=n(2262),s=n(2766);const i=e=>((0,r.dD)("data-v-3a9a4a65"),e=e(),(0,r.Cn)(),e),l={class:"pagination-center","aria-label":"navigation"},c={class:"pagination"},u=i((()=>(0,r._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1))),d={key:0},m=i((()=>(0,r._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1)));var _=(0,r.aZ)({__name:"Pagination",props:{pagination:null,path:null,query:null},setup(e){const t=e,{pagination:n,path:i,query:_}=(0,o.BK)(t);function E(e,t){const n=Object.assign({},_.value);return n.page=t?e+t:e,n}return(e,t)=>{const _=(0,r.up)("router-link");return(0,r.wg)(),(0,r.iD)("nav",l,[(0,r._)("ul",c,[(0,r._)("li",{class:(0,a.C_)(["page-prev",{disabled:!(0,o.SU)(n).has_prev}])},[(0,r.Wm)(_,{class:"page-link",to:{path:(0,o.SU)(i),query:E((0,o.SU)(n).page,-1)},disabled:!(0,o.SU)(n).has_prev},{default:(0,r.w5)((({navigate:t})=>[(0,r.WI)(e.$slots,"default",{onClick:e=>(0,o.SU)(n).has_next?t:null},(()=>[(0,r.Uk)((0,a.zw)(e.$t("api.PAGINATION.PREVIOUS"))+" ",1),u]))])),_:3},8,["to","disabled"])],2),((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(s.lM)((0,o.SU)(n).pages,(0,o.SU)(n).page),(e=>((0,r.wg)(),(0,r.iD)("li",{key:e,class:(0,a.C_)(["page",{active:e===(0,o.SU)(n).page}])},["..."===e?((0,r.wg)(),(0,r.iD)("span",d," ... ")):((0,r.wg)(),(0,r.j4)(_,{key:1,class:"page-link",to:{path:(0,o.SU)(i),query:E(+e)}},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e),1)])),_:2},1032,["to"]))],2)))),128)),(0,r._)("li",{class:(0,a.C_)(["page-next",{disabled:!(0,o.SU)(n).has_next}])},[(0,r.Wm)(_,{class:"page-link",to:{path:(0,o.SU)(i),query:E((0,o.SU)(n).page,1)},disabled:!(0,o.SU)(n).has_next},{default:(0,r.w5)((({navigate:t})=>[(0,r.WI)(e.$slots,"default",{onClick:e=>(0,o.SU)(n).has_next?t:null},(()=>[(0,r.Uk)((0,a.zw)(e.$t("api.PAGINATION.NEXT"))+" ",1),m]))])),_:3},8,["to","disabled"])],2)])])}}}),E=n(3744);const S=(0,E.Z)(_,[["__scopeId","data-v-3a9a4a65"]]);var T=S},8403:function(e,t,n){"use strict";n.d(t,{Z:function(){return v}});var r=n(6252),a=n(2262),o=n(9963),s=n(3577),i=n(4366),l=n(5801),c=n(9917);const u=async e=>{const t=await n.e(881).then(n.bind(n,410)),r=await n.e(881).then(n.bind(n,8288)),a=await n.e(881).then(n.bind(n,6947)),o=await n.e(881).then(n.bind(n,8056)),s={de:o,en:r,fr:a,nb:r},l=s[e],c={graphs:t.default.adjacencyGraphs,dictionary:{...t.default.dictionary,...l.default.dictionary}};i.Mu.setOptions(c)},d=e=>{switch(e){case 2:return"AVERAGE";case 3:return"GOOD";case 4:return"STRONG";default:return"WEAK"}},m={class:"password-strength"},_=["value"],E={key:0,class:"password-strength-details"},S={class:"password-strength-value"},T={key:0,class:"info-box"},p={class:"password-feedback"};var A=(0,r.aZ)({__name:"PasswordStength",props:{password:null},setup(e){const t=e,{password:n}=(0,a.BK)(t),o=(0,c.o)(),A=(0,r.Fl)((()=>o.getters[l.SY.GETTERS.LANGUAGE])),O=(0,r.Fl)((()=>o.getters[l.YN.GETTERS.IS_SUCCESS])),R=(0,a.iH)(0),I=(0,a.iH)(""),U=(0,a.iH)([]),g=(0,a.iH)("0% 100%");function N(e){const t=(0,i.tu)(e);R.value=t.score,I.value=d(R.value),U.value=t.feedback.suggestions,g.value=100*R.value/4+"% 100%"}return(0,r.wF)((async()=>await u(A.value))),(0,r.YP)((()=>A.value),(async e=>{await u(e)})),(0,r.YP)((()=>n.value),(async e=>{O.value?I.value="":N(e)})),(e,t)=>((0,r.wg)(),(0,r.iD)("div",m,[(0,r._)("input",{class:(0,s.C_)(["password-slider",`strength-${R.value}`]),style:(0,s.j5)({backgroundSize:g.value}),type:"range",value:R.value,min:"0",max:"4",step:"1"},null,14,_),I.value?((0,r.wg)(),(0,r.iD)("div",E,[(0,r._)("span",S,(0,s.zw)(e.$t("user.PASSWORD_STRENGTH.LABEL"))+": "+(0,s.zw)(e.$t(`user.PASSWORD_STRENGTH.${I.value}`)),1),U.value.length>0?((0,r.wg)(),(0,r.iD)("div",T,[(0,r._)("ul",p,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)(U.value,(t=>((0,r.wg)(),(0,r.iD)("li",{key:t},(0,s.zw)(e.$t(`user.PASSWORD_STRENGTH.SUGGESTIONS.${t}`)),1)))),128))])])):(0,r.kq)("",!0)])):(0,r.kq)("",!0)]))}}),O=n(3744);const R=(0,O.Z)(A,[["__scopeId","data-v-74e71df5"]]);var I=R;const U=e=>((0,r.dD)("data-v-5a126514"),e=e(),(0,r.Cn)(),e),g={class:"password-input"},N=["id","disabled","placeholder","required","type"],h={key:0,class:"form-info"},z=U((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1)));var w=(0,r.aZ)({__name:"PasswordInput",props:{checkStrength:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},id:{default:"password"},password:{default:""},placeholder:null,required:{type:Boolean,default:!1}},emits:["updatePassword","passwordError"],setup(e,{emit:t}){const n=e,{checkStrength:i,disabled:l,id:c,password:u,placeholder:d,required:m}=(0,a.BK)(n),_=(0,a.iH)(!1),E=(0,a.iH)("");function S(){_.value=!_.value}function T(e){t("updatePassword",e.target.value)}function p(){t("passwordError")}return(0,r.YP)((()=>u.value),(e=>{""===e&&(E.value="")})),(e,t)=>((0,r.wg)(),(0,r.iD)("div",g,[(0,r.wy)((0,r._)("input",{id:(0,a.SU)(c),disabled:(0,a.SU)(l),placeholder:(0,a.SU)(d),required:(0,a.SU)(m),type:_.value?"text":"password","onUpdate:modelValue":t[0]||(t[0]=e=>E.value=e),minlength:"8",onInput:T,onInvalid:p},null,40,N),[[o.YZ,E.value]]),(0,r._)("div",{class:"show-password",onClick:S},[(0,r.Uk)((0,s.zw)(e.$t(`user.${_.value?"HIDE":"SHOW"}_PASSWORD`))+" ",1),(0,r._)("i",{class:(0,s.C_)(["fa","fa-eye"+(_.value?"-slash":"")]),"aria-hidden":"true"},null,2)]),(0,a.SU)(i)?((0,r.wg)(),(0,r.iD)("div",h,[z,(0,r.Uk)(" "+(0,s.zw)(e.$t("user.PASSWORD_INFO")),1)])):(0,r.kq)("",!0),(0,a.SU)(i)?((0,r.wg)(),(0,r.j4)(I,{key:1,password:E.value},null,8,["password"])):(0,r.kq)("",!0)]))}});const f=(0,O.Z)(w,[["__scopeId","data-v-5a126514"]]);var v=f},2056:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(6252),a=n(3577),o=n(2262),s=n(2024);const i=(0,r._)("div",{class:"map-attribution"},[(0,r._)("span",{class:"map-attribution-text"},"©"),(0,r._)("a",{class:"map-attribution-text",href:"https://www.openstreetmap.org/copyright",target:"_blank",rel:"noopener noreferrer"}," OpenStreetMap ")],-1);var l=(0,r.aZ)({__name:"StaticMap",props:{workout:null,displayHover:{type:Boolean,default:!1}},setup(e){const t=e,{displayHover:n}=(0,o.BK)(t),l=`${(0,s.k)()}workouts/map/${t.workout.map}`;return(e,t)=>((0,r.wg)(),(0,r.iD)("div",{class:(0,a.C_)(["static-map",{"display-hover":(0,o.SU)(n)}])},[(0,o.SU)(n)?((0,r.wg)(),(0,r.iD)("img",{key:0,src:l,alt:""})):((0,r.wg)(),(0,r.iD)("div",{key:1,class:"bg-map-image",style:(0,a.j5)({backgroundImage:`url(${l})`})},null,4)),i],2))}});const c=l;var u=c},3170:function(e,t,n){"use strict";n.d(t,{Z:function(){return y}});var r=n(6252),a=n(3577);const o={class:"start-chart"},s={key:0},i={key:1},l={class:"chart-radio"},c=["checked"],u=["checked"],d=["checked"],m={key:0},_=["checked"],E={key:1},S=["checked"],T={key:2},p=["checked"];function A(e,t,n,A,O,R){const I=(0,r.up)("Chart");return(0,r.wg)(),(0,r.iD)("div",o,[e.hideChartIfNoData&&e.emptyStats?((0,r.wg)(),(0,r.iD)("div",s,(0,a.zw)(e.$t("workouts.NO_WORKOUTS")),1)):((0,r.wg)(),(0,r.iD)("div",i,[(0,r._)("div",l,[(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"total_distance",checked:"total_distance"===e.displayedData,onClick:t[0]||(t[0]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,c),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DISTANCE")),1)]),(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"total_duration",checked:"total_duration"===e.displayedData,onClick:t[1]||(t[1]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,u),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DURATION")),1)]),(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"nb_workouts",checked:"nb_workouts"===e.displayedData,onClick:t[2]||(t[2]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,d),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.WORKOUT",2)),1)]),e.fullStats?((0,r.wg)(),(0,r.iD)("label",m,[(0,r._)("input",{type:"radio",name:"average_speed",checked:"average_speed"===e.displayedData,onClick:t[3]||(t[3]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,_),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.AVERAGE_SPEED")),1)])):(0,r.kq)("",!0),e.fullStats?((0,r.wg)(),(0,r.iD)("label",E,[(0,r._)("input",{type:"radio",name:"total_ascent",checked:"total_ascent"===e.displayedData,onClick:t[4]||(t[4]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,S),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.ASCENT")),1)])):(0,r.kq)("",!0),e.fullStats?((0,r.wg)(),(0,r.iD)("label",T,[(0,r._)("input",{type:"radio",name:"total_descent",checked:"total_descent"===e.displayedData,onClick:t[5]||(t[5]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,p),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DESCENT")),1)])):(0,r.kq)("",!0)]),e.labels.length>0?((0,r.wg)(),(0,r.j4)(I,{key:0,datasets:e.datasets,labels:e.labels,displayedData:e.displayedData,displayedSportIds:e.displayedSportIds,fullStats:e.fullStats,useImperialUnits:e.user.imperial_units},null,8,["datasets","labels","displayedData","displayedSportIds","fullStats","useImperialUnits"])):(0,r.kq)("",!0)]))])}var O=n(4850),R=n(2262);const I={class:"chart"};function U(e,t,n,a,o,s){const i=(0,r.up)("BarChart");return(0,r.wg)(),(0,r.iD)("div",I,[(0,r.Wm)(i,(0,r.dG)(e.barChartProps,{class:"bar-chart"}),null,16)])}var g=n(6518),N=n(9150);const h=(e,t=!1)=>{let n="0";t&&(n=String(Math.floor(e/86400)),e%=86400);const r=String(Math.floor(e/3600)).padStart(2,"0");e%=3600;const a=String(Math.floor(e/60)).padStart(2,"0"),o=String(e%60).padStart(2,"0");return t?`${"0"===n?"":`${n}d `}${"00"===r?"":`${r}h `}${a}m ${o}s`:`${"00"===r?"":`${r}:`}${a}:${o}`};var z=n(3649);const w=(e,t,n,r=!0,a="km")=>{const o=n?z.Dl[a].defaultTarget:a;switch(e){case"average_speed":return`${t.toFixed(2)} ${o}/h`;case"total_duration":return h(t,r);case"total_distance":case"total_ascent":case"total_descent":return`${t.toFixed(2)} ${o}`;default:return t.toString()}};var f=(0,r.aZ)({name:"Chart",components:{BarChart:g.vz},props:{datasets:{type:Object,required:!0},labels:{type:Object,required:!0},displayedData:{type:String,required:!0},displayedSportIds:{type:Array,required:!0},fullStats:{type:Boolean,required:!0},useImperialUnits:{type:Boolean,required:!0}},setup(e){const{t:t}=(0,N.QT)();function n(e){return isNaN(e)?0:+e}function a(e,t){return n(e)+n(t)}function o(e){return["total_ascent","total_descent"].includes(e)?"m":"km"}const s=(0,r.Fl)((()=>({labels:e.labels,datasets:JSON.parse(JSON.stringify(e.datasets))}))),i=(0,r.Fl)((()=>({responsive:!0,maintainAspectRatio:!0,animation:!1,layout:{padding:{top:e.fullStats?40:22}},scales:{x:{stacked:!0,grid:{drawOnChartArea:!1}},y:{stacked:"average_speed"!==e.displayedData,grid:{drawOnChartArea:!1},ticks:{maxTicksLimit:6,callback:function(t){return w(e.displayedData,+t,e.useImperialUnits,!1,o(e.displayedData))}},afterFit:function(t){t.width=e.fullStats?90:60}}},plugins:{datalabels:{anchor:"end",align:"end",color:function(t){return"average_speed"===e.displayedData&&t.dataset.backgroundColor?t.dataset.backgroundColor[0]:"#666666"},rotation:function(t){return e.fullStats&&t.chart.chartArea.width<580?310:0},display:function(t){return!(e.fullStats&&t.chart.chartArea.width<300)&&("average_speed"!==e.displayedData||1==e.displayedSportIds.length&&"auto")},formatter:function(t,n){if("average_speed"===e.displayedData)return w(e.displayedData,t,e.useImperialUnits,!1);{const t=n.chart.data.datasets.map((e=>e.data[n.dataIndex])).reduce(((e,t)=>a(e,t)),0);return n.datasetIndex===e.displayedSportIds.length-1&&t>0?w(e.displayedData,t,e.useImperialUnits,!1,o(e.displayedData)):null}}},legend:{display:!1},tooltip:{interaction:{intersect:!0,mode:"index",position:"average_speed"===e.displayedData?"nearest":"average"},filter:function(e){return"0"!==e.formattedValue},callbacks:{label:function(n){let r=t(`sports.${n.dataset.label}.LABEL`)||"";return r&&(r+=": "),null!==n.parsed.y&&(r+=w(e.displayedData,n.parsed.y,e.useImperialUnits,!0,o(e.displayedData))),r},footer:function(n){if("average_speed"===e.displayedData)return"";let r=0;return n.map((e=>{r+=e.parsed.y})),`${t("common.TOTAL")}: `+w(e.displayedData,r,e.useImperialUnits,!0,o(e.displayedData))}}}}}))),{barChartProps:l}=(0,g.xZ)({chartData:s,options:i});return{barChartProps:l}}}),v=n(3744);const C=(0,v.Z)(f,[["render",U]]);var D=C,k=n(5801),P=n(9917),L=n(9318),M=(0,r.aZ)({name:"UserMonthStats",components:{Chart:D},props:{sports:{type:Object,required:!0},user:{type:Object,required:!0},chartParams:{type:Object,required:!0},displayedSportIds:{type:Array,default:()=>[]},fullStats:{type:Boolean,default:!1},hideChartIfNoData:{type:Boolean,default:!1}},setup(e){const t=(0,P.o)(),n=(0,R.iH)("total_distance"),a=(0,r.Fl)((()=>t.getters[k.gu.GETTERS.USER_STATS])),o=(0,r.Fl)((()=>(0,L.v1)(e.chartParams,e.user.weekm,e.sports,e.displayedSportIds,a.value,e.user.imperial_units,e.user.date_format)));function s(n){t.dispatch(k.gu.ACTIONS.GET_USER_STATS,{username:e.user.username,filterType:"by_time",params:n})}function i(e){n.value=e.target.name}function l(e,t){return{from:(0,O.Z)(e.start,"yyyy-MM-dd"),to:(0,O.Z)(e.end,"yyyy-MM-dd"),time:"week"===e.duration?"week"+(t.weekm?"m":""):e.duration}}return(0,r.wF)((()=>s(l(e.chartParams,e.user)))),(0,r.YP)((()=>e.chartParams),(async t=>{s(l(t,e.user))})),{datasets:(0,r.Fl)((()=>o.value.datasets[n.value])),labels:(0,r.Fl)((()=>o.value.labels)),emptyStats:(0,r.Fl)((()=>0===Object.keys(a.value).length)),displayedData:n,updateDisplayData:i}}});const b=(0,v.Z)(M,[["render",A],["__scopeId","data-v-d5e9b348"]]);var y=b},2179:function(e,t,n){"use strict";n.d(t,{Z:function(){return N}});var r=n(6252),a=n(2262),o=n(3577),s=n(6595),i=n(5801),l=n(9917);const c={class:"box user-header"},u={class:"user-details"},d={class:"user-name"},m={class:"user-stats"},_={class:"user-stat"},E={class:"stat-number"},S={class:"stat-label"},T={class:"user-stat"},p={class:"stat-label"},A={class:"user-stat hide-small"},O={class:"stat-number"},R={class:"stat-label"};var I=(0,r.aZ)({__name:"UserHeader",props:{user:null},setup(e){const t=e,{user:n}=(0,a.BK)(t),I=(0,l.o)(),U=(0,r.Fl)((()=>I.getters[i.YN.GETTERS.AUTH_USER_PROFILE]));return(e,t)=>{const i=(0,r.up)("Distance");return(0,r.wg)(),(0,r.iD)("div",c,[(0,r.Wm)(s.Z,{user:(0,a.SU)(n)},null,8,["user"]),(0,r._)("div",u,[(0,r._)("div",d,(0,o.zw)((0,a.SU)(n).username),1),(0,r._)("div",m,[(0,r._)("div",_,[(0,r._)("span",E,(0,o.zw)((0,a.SU)(n).nb_workouts),1),(0,r._)("span",S,(0,o.zw)(e.$t("workouts.WORKOUT",(0,a.SU)(n).nb_workouts)),1)]),(0,r._)("div",T,[(0,r.Wm)(i,{distance:(0,a.SU)(n).total_distance,unitFrom:"km",digits:0,displayUnit:!1,useImperialUnits:(0,a.SU)(U).imperial_units},null,8,["distance","useImperialUnits"]),(0,r._)("span",p,(0,o.zw)((0,a.SU)(U).imperial_units?"miles":"km"),1)]),(0,r._)("div",A,[(0,r._)("span",O,(0,o.zw)((0,a.SU)(n).nb_sports),1),(0,r._)("span",R,(0,o.zw)(e.$t("workouts.SPORT",(0,a.SU)(n).nb_sports)),1)])])])])}}}),U=n(3744);const g=(0,U.Z)(I,[["__scopeId","data-v-20291951"]]);var N=g},1585:function(e,t,n){"use strict";n.d(t,{Z:function(){return f}});n(7658);var r=n(6252),a=n(2262),o=n(3577),s=n(9963),i=n(4850),l=n(5801),c=n(9917),u=n(6558),d=n(6287);const m={id:"user-infos",class:"description-list"},_={key:1,class:"info-box success-message"},E={key:4,class:"email-form form-box"},S={class:"form-items",for:"email"},T={class:"form-items",for:"email"},p={class:"form-buttons"},A={class:"confirm",type:"submit"},O=["onClick"],R={key:5},I={class:"user-bio"},U={key:0,class:"profile-buttons"},g=["onClick"],N={key:1,class:"profile-buttons"};var h=(0,r.aZ)({__name:"UserInfos",props:{user:null,fromAdmin:{type:Boolean,default:!1}},setup(e){const t=e,n=(0,c.o)(),{user:h,fromAdmin:z}=(0,a.BK)(t),w=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.LANGUAGE])),f=(0,r.Fl)((()=>n.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),v=(0,r.Fl)((()=>t.user.created_at?(0,u.p6)(t.user.created_at,f.value.timezone,f.value.date_format):"")),C=(0,r.Fl)((()=>t.user.birth_date?(0,i.Z)(new Date(t.user.birth_date),`${(0,u.mh)(f.value.date_format,w.value)}`,{locale:d.v1[w.value]}):"")),D=(0,r.Fl)((()=>n.getters[l.RT.GETTERS.USERS_IS_SUCCESS])),k=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),P=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.APP_CONFIG])),L=(0,a.iH)(""),M=(0,a.iH)(!1),b=(0,a.iH)(!1),y=(0,a.iH)(""),G=(0,a.iH)("");function F(e){L.value=e,""!==e&&n.commit(l.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1)}function W(e){n.dispatch(l.RT.ACTIONS.DELETE_USER_ACCOUNT,{username:e})}function K(e){G.value="password-reset",n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,resetPassword:!0})}function Y(e){n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,activate:!0})}function x(){Z(),y.value=h.value.email_to_confirm?h.value.email_to_confirm:"",b.value=!0,G.value="email-update"}function $(){y.value="",b.value=!1}function B(e){n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,new_email:y.value})}function Z(){n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),n.commit(l.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1),G.value=""}return(0,r.Ah)((()=>Z())),(0,r.YP)((()=>D.value),(e=>{e&&(F(""),$())})),(e,t)=>{const n=(0,r.up)("Modal"),i=(0,r.up)("AlertMessage"),l=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",m,[L.value?((0,r.wg)(),(0,r.j4)(n,{key:0,title:e.$t("common.CONFIRMATION"),message:"delete"===L.value?"admin.CONFIRM_USER_ACCOUNT_DELETION":"admin.CONFIRM_USER_PASSWORD_RESET",strongMessage:(0,a.SU)(h).username,onConfirmAction:t[0]||(t[0]=e=>"delete"===L.value?W((0,a.SU)(h).username):K((0,a.SU)(h).username)),onCancelAction:t[1]||(t[1]=e=>F(""))},null,8,["title","message","strongMessage"])):(0,r.kq)("",!0),(0,a.SU)(D)?((0,r.wg)(),(0,r.iD)("div",_,(0,o.zw)(e.$t(`admin.${"password-reset"===G.value?"PASSWORD_RESET":"USER_EMAIL_UPDATE"}_SUCCESSFUL`)),1)):(0,r.kq)("",!0),(0,a.SU)(h).is_active?(0,r.kq)("",!0):((0,r.wg)(),(0,r.j4)(i,{key:2,message:"user.THIS_USER_ACCOUNT_IS_INACTIVE"})),(0,a.SU)(k)?((0,r.wg)(),(0,r.j4)(l,{key:3,message:(0,a.SU)(k)},null,8,["message"])):(0,r.kq)("",!0),b.value?((0,r.wg)(),(0,r.iD)("div",E,[(0,r._)("form",{class:(0,o.C_)({errors:M.value}),onSubmit:t[4]||(t[4]=(0,s.iM)((e=>B((0,a.SU)(h).username)),["prevent"]))},[(0,r._)("label",S,[(0,r.Uk)((0,o.zw)(e.$t("admin.CURRENT_EMAIL"))+" ",1),(0,r.wy)((0,r._)("input",{id:"email",type:"email","onUpdate:modelValue":t[2]||(t[2]=e=>(0,a.SU)(h).email=e),disabled:""},null,512),[[s.nr,(0,a.SU)(h).email]])]),(0,r._)("label",T,[(0,r.Uk)((0,o.zw)(e.$t("admin.NEW_EMAIL"))+"* ",1),(0,r.wy)((0,r._)("input",{id:"new-email",type:"email",required:"","onUpdate:modelValue":t[3]||(t[3]=e=>y.value=e)},null,512),[[s.nr,y.value]])]),(0,r._)("div",p,[(0,r._)("button",A,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,r._)("button",{class:"cancel",onClick:(0,s.iM)($,["prevent"])},(0,o.zw)(e.$t("buttons.CANCEL")),9,O)])],34)])):((0,r.wg)(),(0,r.iD)("div",R,[(0,r._)("dl",null,[(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(v)),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.FIRST_NAME"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(h).first_name),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.LAST_NAME"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(h).last_name),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.BIRTH_DATE"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(C)),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.LOCATION"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(h).location),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.BIO"))+":",1),(0,r._)("dd",I,(0,o.zw)((0,a.SU)(h).bio),1)]),(0,a.SU)(z)?((0,r.wg)(),(0,r.iD)("div",U,[(0,a.SU)(f).username!==(0,a.SU)(h).username?((0,r.wg)(),(0,r.iD)("button",{key:0,class:"danger",onClick:t[5]||(t[5]=(0,s.iM)((e=>F("delete")),["prevent"]))},(0,o.zw)(e.$t("admin.DELETE_USER")),1)):(0,r.kq)("",!0),(0,a.SU)(h).is_active?(0,r.kq)("",!0):((0,r.wg)(),(0,r.iD)("button",{key:1,onClick:t[6]||(t[6]=(0,s.iM)((e=>Y((0,a.SU)(h).username)),["prevent"]))},(0,o.zw)(e.$t("admin.ACTIVATE_USER_ACCOUNT")),1)),(0,a.SU)(f).username!==(0,a.SU)(h).username?((0,r.wg)(),(0,r.iD)("button",{key:2,onClick:(0,s.iM)(x,["prevent"])},(0,o.zw)(e.$t("admin.UPDATE_USER_EMAIL")),9,g)):(0,r.kq)("",!0),(0,a.SU)(f).username!==(0,a.SU)(h).username&&(0,a.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("button",{key:3,onClick:t[7]||(t[7]=(0,s.iM)((e=>F("reset")),["prevent"]))},(0,o.zw)(e.$t("admin.RESET_USER_PASSWORD")),1)):(0,r.kq)("",!0),(0,r._)("button",{onClick:t[8]||(t[8]=t=>e.$router.go(-1))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,r.wg)(),(0,r.iD)("div",N,[(0,r._)("button",{onClick:t[9]||(t[9]=t=>e.$router.push("/profile/edit"))},(0,o.zw)(e.$t("user.PROFILE.EDIT")),1),(0,r._)("button",{onClick:t[10]||(t[10]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))]))])}}}),z=n(3744);const w=(0,z.Z)(h,[["__scopeId","data-v-217519af"]]);var f=w},2411:function(e,t,n){"use strict";n.d(t,{Z:function(){return C}});var r=n(6252),a=n(3577),o=n(2262),s=n(9963),i=n(2201),l=n(8403),c=n(5801),u=n(9917);const d=e=>((0,r.dD)("data-v-b3c885de"),e=e(),(0,r.Cn)(),e),m={id:"user-form"},_={key:2,class:"info-box success-message"},E={class:"form-items"},S=["disabled","placeholder"],T={key:1,class:"form-info"},p=d((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),A=["disabled","placeholder"],O={key:3,class:"form-info"},R=d((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),I=["disabled"],U={key:3},g={key:0},N={key:4},h={class:"account"},z={key:5};var w=(0,r.aZ)({__name:"UserAuthForm",props:{action:null,token:{default:""}},setup(e){const t=e,n=(0,i.yj)(),d=(0,u.o)(),{action:w}=(0,o.BK)(t),f=(0,o.qj)({username:"",email:"",password:""}),v=(0,r.Fl)((()=>G(t.action))),C=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.ERROR_MESSAGES])),D=(0,r.Fl)((()=>d.getters[c.YN.GETTERS.IS_REGISTRATION_SUCCESS])),k=(0,r.Fl)((()=>d.getters[c.YN.GETTERS.IS_SUCCESS])),P=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.APP_CONFIG])),L=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.LANGUAGE])),M=(0,r.Fl)((()=>"register"===t.action&&!P.value.is_registration_enabled)),b=(0,r.Fl)((()=>["reset-request","account-confirmation-resend"].includes(t.action)&&!P.value.is_email_sending_enabled)),y=(0,o.iH)(!1);function G(e){switch(e){case"reset-request":case"reset":return"buttons.SUBMIT";default:return`buttons.${t.action.toUpperCase()}`}}function F(){y.value=!0}function W(e){f.password=e}function K(e){switch(e){case"reset":return t.token?d.dispatch(c.YN.ACTIONS.RESET_USER_PASSWORD,{password:f.password,token:t.token}):d.commit(c.SY.MUTATIONS.SET_ERROR_MESSAGES,"user.INVALID_TOKEN");case"reset-request":return d.dispatch(c.YN.ACTIONS.SEND_PASSWORD_RESET_REQUEST,{email:f.email});case"account-confirmation-resend":return d.dispatch(c.YN.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL,{email:f.email});default:f["language"]=L.value,d.dispatch(c.YN.ACTIONS.LOGIN_OR_REGISTER,{actionType:e,formData:f,redirectUrl:n.query.from})}}function Y(){f.username="",f.email="",f.password=""}return(0,r.Ah)((()=>d.commit(c.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(0,r.YP)((()=>n.path),(async()=>{d.commit(c.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),d.commit(c.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),d.commit(c.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!1),y.value=!1,Y()})),(e,t)=>{const n=(0,r.up)("AlertMessage"),i=(0,r.up)("router-link"),c=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",{id:"user-auth-form",class:(0,a.C_)(`${["reset","reset-request"].includes((0,o.SU)(w))?(0,o.SU)(w):"user-form"}`)},[(0,r._)("div",m,[(0,r._)("div",{class:(0,a.C_)(["form-box",{disabled:(0,o.SU)(M)}])},[(0,o.SU)(M)?((0,r.wg)(),(0,r.j4)(n,{key:0,message:"user.REGISTER_DISABLED"})):(0,r.kq)("",!0),(0,o.SU)(b)?((0,r.wg)(),(0,r.j4)(n,{key:1,message:"admin.EMAIL_SENDING_DISABLED"})):(0,r.kq)("",!0),(0,o.SU)(k)||(0,o.SU)(D)?((0,r.wg)(),(0,r.iD)("div",_,(0,a.zw)(e.$t("user.PROFILE.SUCCESSFUL_"+((0,o.SU)(D)?"REGISTRATION"+((0,o.SU)(P).is_email_sending_enabled?"_WITH_EMAIL":""):"UPDATE"))),1)):(0,r.kq)("",!0),(0,r._)("form",{class:(0,a.C_)({errors:y.value}),onSubmit:t[2]||(t[2]=(0,s.iM)((e=>K((0,o.SU)(w))),["prevent"]))},[(0,r._)("div",E,["register"===(0,o.SU)(w)?(0,r.wy)(((0,r.wg)(),(0,r.iD)("input",{key:0,id:"username",disabled:(0,o.SU)(M),required:"",pattern:"[a-zA-Z0-9_]+",minlength:"3",maxlength:"30",onInvalid:F,"onUpdate:modelValue":t[0]||(t[0]=e=>f.username=e),placeholder:e.$t("user.USERNAME")},null,40,S)),[[s.nr,f.username]]):(0,r.kq)("",!0),"register"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",T,[p,(0,r.Uk)(" "+(0,a.zw)(e.$t("user.USERNAME_INFO")),1)])):(0,r.kq)("",!0),"reset"!==(0,o.SU)(w)?(0,r.wy)(((0,r.wg)(),(0,r.iD)("input",{key:2,id:"email",disabled:(0,o.SU)(M)||(0,o.SU)(b),required:"",onInvalid:F,type:"email","onUpdate:modelValue":t[1]||(t[1]=e=>f.email=e),placeholder:e.$t("user.EMAIL")},null,40,A)),[[s.nr,f.email]]):(0,r.kq)("",!0),["reset-request","register","account-confirmation-resend"].includes((0,o.SU)(w))?((0,r.wg)(),(0,r.iD)("div",O,[R,(0,r.Uk)(" "+(0,a.zw)(e.$t("user.EMAIL_INFO")),1)])):(0,r.kq)("",!0),["account-confirmation-resend","reset-request"].includes((0,o.SU)(w))?(0,r.kq)("",!0):((0,r.wg)(),(0,r.j4)(l.Z,{key:4,disabled:(0,o.SU)(M),required:!0,placeholder:"reset"===(0,o.SU)(w)?e.$t("user.ENTER_PASSWORD"):e.$t("user.PASSWORD"),password:f.password,checkStrength:["reset","register"].includes((0,o.SU)(w)),onUpdatePassword:W,onPasswordError:F},null,8,["disabled","placeholder","password","checkStrength"]))]),(0,r._)("button",{type:"submit",disabled:(0,o.SU)(M)||(0,o.SU)(b)},(0,a.zw)(e.$t((0,o.SU)(v))),9,I)],34),"login"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",U,[(0,r.Wm)(i,{class:"links",to:"/register"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.REGISTER")),1)])),_:1}),(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("span",g,"-")):(0,r.kq)("",!0),(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.j4)(i,{key:1,class:"links",to:"/password-reset/request"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.PASSWORD_FORGOTTEN")),1)])),_:1})):(0,r.kq)("",!0)])):(0,r.kq)("",!0),"register"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",N,[(0,r._)("span",h,(0,a.zw)(e.$t("user.ALREADY_HAVE_ACCOUNT")),1),(0,r.Wm)(i,{class:"links",to:"/login"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.LOGIN")),1)])),_:1})])):(0,r.kq)("",!0),["login","register"].includes((0,o.SU)(w))&&(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("div",z,[(0,r.Wm)(i,{class:"links",to:"/account-confirmation/resend"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.ACCOUNT_CONFIRMATION_NOT_RECEIVED")),1)])),_:1})])):(0,r.kq)("",!0),(0,o.SU)(C)?((0,r.wg)(),(0,r.j4)(c,{key:6,message:(0,o.SU)(C)},null,8,["message"])):(0,r.kq)("",!0)],2)])],2)}}}),f=n(3744);const v=(0,f.Z)(w,[["__scopeId","data-v-b3c885de"]]);var C=v},6595:function(e,t,n){"use strict";n.d(t,{Z:function(){return _}});var r=n(6252),a=n(2262),o=n(2024);const s={class:"user-picture"},i=["alt","src"],l={key:1,class:"no-picture"},c=(0,r._)("i",{class:"fa fa-user-circle-o","aria-hidden":"true"},null,-1),u=[c];var d=(0,r.aZ)({__name:"UserPicture",props:{user:null},setup(e){const t=e,n=(0,r.Fl)((()=>t.user.picture?`${(0,o.k)()}users/${t.user.username}/picture?${Date.now()}`:""));return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[""!==(0,a.SU)(n)?((0,r.wg)(),(0,r.iD)("img",{key:0,class:"profile-user-img",alt:e.$t("user.USER_PICTURE"),src:(0,a.SU)(n)},null,8,i)):((0,r.wg)(),(0,r.iD)("div",l,u))]))}});const m=d;var _=m},5630:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(6252),a=n(3577);const o={class:"no-workouts box"};function s(e,t){const n=(0,r.up)("router-link");return(0,r.wg)(),(0,r.iD)("div",o,[(0,r._)("div",null,[(0,r.Uk)((0,a.zw)(e.$t("workouts.NO_WORKOUTS"))+" ",1),(0,r.Wm)(n,{to:"/workouts/add"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("workouts.UPLOAD_FIRST_WORKOUT")),1)])),_:1})])])}var i=n(3744);const l={},c=(0,i.Z)(l,[["render",s],["__scopeId","data-v-4b4d15fb"]]);var u=c},4612:function(e,t,n){var r={"./de/de.ts":9923,"./en/en.ts":8757,"./fr/fr.ts":6625,"./nb/nb.ts":8891};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=4612}},t={};function n(r){var a=t[r];if(void 0!==a)return a.exports;var o=t[r]={exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.m=e,function(){var e=[];n.O=function(t,r,a,o){if(!r){var s=1/0;for(u=0;u=o)&&Object.keys(n.O).every((function(e){return n.O[e](r[l])}))?r.splice(l--,1):(i=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]}}(),function(){n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,{a:t}),t}}(),function(){var e,t=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__};n.t=function(r,a){if(1&a&&(r=this(r)),8&a)return r;if("object"===typeof r&&r){if(4&a&&r.__esModule)return r;if(16&a&&"function"===typeof r.then)return r}var o=Object.create(null);n.r(o);var s={};e=e||[null,t({}),t([]),t(t)];for(var i=2&a&&r;"object"==typeof i&&!~e.indexOf(i);i=t(i))Object.getOwnPropertyNames(i).forEach((function(e){s[e]=function(){return r[e]}}));return s["default"]=function(){return r},n.d(o,s),o}}(),function(){n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}}(),function(){n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce((function(t,r){return n.f[r](e,t),t}),[]))}}(),function(){n.u=function(e){return"static/js/"+({24:"reset",193:"statistics",328:"admin",401:"workouts",845:"profile",881:"password"}[e]||e)+"."+{24:"3194c9f0",93:"02cf293c",193:"04a17f2e",243:"e551248f",328:"9bc68088",401:"a514f12a",431:"e5102e07",633:"81a8ddc8",845:"430ae7df",858:"3f2a93f2",881:"43430dfc"}[e]+".js"}}(),function(){n.miniCssF=function(e){return"static/css/"+{24:"reset",193:"statistics",328:"admin",401:"workouts",845:"profile"}[e]+"."+{24:"e2527ec6",193:"40e24e75",328:"73df498d",401:"41709693",845:"203e78e2"}[e]+".css"}}(),function(){n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){var e={},t="fittrackee_client:";n.l=function(r,a,o,s){if(e[r])e[r].push(a);else{var i,l;if(void 0!==o)for(var c=document.getElementsByTagName("script"),u=0;u {\n const controller = new AbortController()\n config.signal = controller.signal\n const requestKey = removeRequestIfPending(config)\n pendingRequests.set(requestKey, controller)\n\n const authToken = store.getters[AUTH_USER_STORE.GETTERS.AUTH_TOKEN]\n if (authToken) {\n const auth = `Bearer ${authToken}`\n if (config.headers && config.headers.Authorization !== auth) {\n config.headers.Authorization = `Bearer ${authToken}`\n }\n }\n return config\n },\n (error) => Promise.reject(error)\n)\n\nauthApi.interceptors.response.use(\n (response) => {\n removeRequestIfPending(response.config)\n return response\n },\n (error) => {\n if (error.message !== 'canceled') {\n removeRequestIfPending(error.response.config)\n }\n return Promise.reject(error)\n }\n)\n\nexport default authApi\n","import { AxiosRequestConfig } from 'axios'\n\nexport const pendingRequests = new Map()\n\nconst generateRequestKey = (config: AxiosRequestConfig): string => {\n const { method, url, params = {}, data = {} } = config\n return [method, url, JSON.stringify(params), JSON.stringify(data)].join('')\n}\n\nexport const removeRequestIfPending = (config: AxiosRequestConfig): string => {\n const requestKey = generateRequestKey(config)\n if (pendingRequests.has(requestKey)) {\n const controller = pendingRequests.get(requestKey) || {}\n controller?.abort()\n pendingRequests.delete(requestKey)\n }\n return requestKey\n}\n","import { createI18n, LocaleMessages, VueMessageType } from 'vue-i18n'\n\n/**\n * Load locale messages\n *\n * The loaded `JSON` locale messages is pre-compiled by `@intlify/vue-i18n-loader`, which is integrated into `vue-cli-plugin-i18n`.\n * See: https://github.com/intlify/vue-i18n-loader#rocket-i18n-resource-pre-compilation\n */\nconst disabledLanguages = ['nb'] // to remove after norwegian translations release\n\nfunction loadLocaleMessages(): Record> {\n const locales = require.context('./locales', true, /[A-Za-z0-9-_,\\s]+\\.ts$/i)\n const messages: Record> = {}\n locales.keys().forEach((key) => {\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i)\n if (\n matched &&\n matched.length > 1 &&\n !disabledLanguages.includes(matched[1])\n ) {\n const locale = matched[1]\n messages[locale] = locales(key).default\n }\n })\n return messages\n}\n\nexport default createI18n({\n legacy: false,\n locale: 'en',\n fallbackLocale: 'en',\n globalInjection: true,\n messages: loadLocaleMessages(),\n})\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontaktiere den Administrator\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee ist ein selbst-gehosteter Outdoor-Aktivitäts-Tracker.\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"unter \", _interpolate(_list(0)), \" Lizenz \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Quellkode\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktion\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiviere Konto\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiv\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hinzufügen/Entfernen von Administratorrechten, Lösche Nutzerkonto.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontakt-E-Mail des Administrators\"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Anzahl aktiver Nutzer\"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wenn 0, gibt es keine Registrierungslimitierung..\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Dateianzahl im zip Archiv\"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Kontakt-E-Mail\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Größe der hochgeladenen Dateien (in Mb)\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungskonfiguration\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Größe des zip Archives (in Mb)\"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück zu Admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Möchtest du wirklich das \", _interpolate(_list(0)), \" Konto löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Möchtest du wirklich das \", _interpolate(_list(0)), \" Passwort zurücksetzen?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktuelle E-Mail\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lösche Nutzer\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail-Versand ist deaktiviert.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktivieren/Deaktivieren von Sportarten.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Neue E-Mail\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Das wasswort wurde zurückgesetzt.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung ist derzeit deaktiviert.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung ist derzeit aktiviert.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiv\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainings existieren\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten Administration\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktualisiere Anwemdungskonfiguration (maximale Anzahl an registrierten Nutzern, maximale Dateigröße).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktualisiere E-Mail\"])},\n \"USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzer\"])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die E-Mail Adresse wurde aktualisiert.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administratorrechte hinzufügen\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administratorrechte entfernen\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Adminstatus\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierungsdatum\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accountstatus\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzername\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainingsanzahl\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail: Eine gültige E-Mail muss angegeben werden.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler bei der GPX-Verarbeitung.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Einlesen der GPX-Datei\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Abrufen der Konfiguration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Aktualisieren der Konfiguration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Die Registrierung ist deaktiviert.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dateierweiterung ist nicht erlaubt.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die Datei ist größer als erlaubt.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültige Anmeldedaten.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die bereitgestellten Daten sind ungültig.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte erneut anmelden.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte erneut anmelden.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Netzwerkfehler.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die neue E-Mail muss sich von der aktuellen E-Mail unterscheiden\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei angegeben.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei ausgewählt.\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort: Passwort und Passwortbestätigung stimmen nicht überein.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe ein gültiges Authentifizierungstoken an.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Es tut mir leid, der Benutzername ist schon vergeben.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportart existiert nicht.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die Signatur ist abgelaufen. Bitte melde dich erneut an.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung erfolgreich.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Der Nutzer existiert nicht.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Um den Administrator zu kontaktieren, muss eine gültige E-Mail-Adresse angegeben werden\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du kannst Dein Konto nicht löschen, da kein anderer Nutzer hat Administratorrechte besitzt.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du hast keine Berechtigung.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorhergehende\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächste\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bestätigungs-E-Mail erneut senden\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Autorisieren\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abbrechen\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter löschen\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mein Konto löschen\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Deaktivieren\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bearbeiten\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktivieren\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmelden\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nein\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrieren\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurücksetzen\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Speichern\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ja\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Über\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bestätigung\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontakt\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Tag\"]), _normalize([\"Tage\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Angezeigt\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dokumentation (en)\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hier\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Versteckt\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Startseite\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sortiert nach\"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sortieren\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"aufsteigend\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"absteigend\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pro Seite\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Insgesamt\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dashboard\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dieser Monat\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bei der Anwendung scheinen einige Probleme aufgetreten zu sein.
Bitte versuche es später noch einmal oder kontaktiere den Administrator.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Seite nicht gefunden\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training nicht gefunden\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Etwas lief schief\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Eine neue OAuth2-Anwendung hinzufügen\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ID\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geheimnis\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungsbeschreibung\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erstellt am\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungsname\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Weiterleitungs-URL\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geltungsbereich\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf auth-Endpunkte\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf auth-Endpunkte\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf users-Endpunkte\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf users-Endpunkte\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf workouts-Endpunkte\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf workouts-Endpunkte\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf die Anwendungskonfiguration\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungs-URL\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung erfolgreich erstellt. Stelle sicher, dass du das Geheimnis kopierst, du kannst es nicht erneut anzeigen.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist sicher, dass du diese App löschen willst?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Die Anwendung \", _interpolate(_list(0)), \" fragt an:\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OAuth2-Anwendungen\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" den Zugriff auf deinen Account erlauben?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"in Zwischenablage kopieren\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung löschen\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung hinzufügen\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung wurde nicht gefunden!\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Anwendungen\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Beschreibung\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alle Tokens zurückrufen\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist du sicher, dass du alle Tokens zurückrufen möchtest?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alle vorhandenen und vergebenen Tokens wurde zurückgerufen.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Pendeln)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Virtuell)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wandern\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountainbiken\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountainbiken (elektrisch)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Rudern\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Laufen\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skifahren (Alpin)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skifahren (Langlauf)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schneeschuhe\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gehen\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistik\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Woche\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Monat\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jahr\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hast du keine Anweisungen erhalten?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prüfe deine E-Mail. Eine neue Bestätigungs-E-Mail wurde an die angegebene Adresse geschickt.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hast du bereits ein Konto?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Möchtest du dein Konto wirklich löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktuelles Passwort\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe eine gültige E-Mail-Adresse an.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe ein Passwort ein\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nach Benutzernamen filtern\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort verbergen\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte fordere ein neues Passworts an.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sprache\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmelden\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmeldung\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abmelden\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Neues Passwort\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Nutzer gefunden.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mindestens 8 Zeichen sind erforderlich.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort vergessen?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prüfe Deine E-Mail. Wenn Deine Adresse in der Datenbank enthalten ist, wirst du eine E-Mail mit einem Link erhalten um Dein Passwort zurückzusetzen.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"schwach\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mittel\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"gut\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwortstärke\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide vorhersehbare Buchstabenersetzungen wie \", \"@\", \" für a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide umgekehrte Schreibweisen gebräuchlicher Wörter.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schreibe einige, aber nicht alle Buchstaben groß.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schreibe mehr als nur den ersten Buchstaben groß.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Daten und Jahreszahlen, die mit Dir in Verbindung gebracht werden.\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Angabe von letzten Jahreszahlen.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Jahreszahlen, die mit Dir in Verbindung gebracht werden.\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide gebräuchliche Zeichenfolgen.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide wiederholungen von Wörtern und Zeichen.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Verwende längere Tastaturmuster und ändere mehrmals die Schreibrichtung.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Füge weitere weniger gebräuchliche Wörter hinzu.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Verwenden Sie mehrere Wörter, aber vermeide gebräuchliche Ausdrücke.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du kannst sichere Passwörter erstellen, ohne Symbole, Zahlen oder Großbuchstaben zu verwenden.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wenn Sie dieses Passwort auch anderweitig verwenden, sollten Sie es ändern.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Dein Passwort wurde aktualisiert. Klicke \", _interpolate(_list(0)), \" um dich anzumelden.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontoausgabe\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anstiegs-bezogene Daten (Aufnahmen, gesamt)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück zum Profil\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Biographie\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geburtsdatum\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Datumsanzeigeformat\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil bearbeiten\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen ändern\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen für Sportarten ändern\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Bitte \", _interpolate(_list(0)), \" um Deine E-Mail Adresse nochmals zu ändern oder kontaktiere den Administrator\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorname\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erster Tag der Woche\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sprache\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nachname\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ort\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Montag\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bildausgabe\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild aktualisieren\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild entfernen\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungsausgabe\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil-Ausgabe\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Regirierungsdatum\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten-Einstellungsausgabe\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sontag\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Konto\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungen\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktion\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Farbe\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vom Admin deaktiviert\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"aktiv\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geschwindigkeitsschwellenwert für Stopp\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich aktualisiert. Bitte prüfe Deine E-Mail um die neue E-Mail Adresse zu bestätigen.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich erstellt.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ein Aktivierungslink für Dein Konto wurde an die angegebene E-Mail Adresse geschickt.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich aktualisiert.\"])},\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einheiten für die Distanz\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Imperiales System (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Metrisches System (m, km)\"])}\n },\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zeitzone\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrieren\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail zur Kontobestätigung erneut senden\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Entschuldigung, die Registrierung ist deaktiviert.\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort anzeigen\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dieser Account ist inaktiv.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Benutzerbild\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzername\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 bis 30 Zeichen sind erforderlich, nur alphanumerische Zeichen und der Unterstrich _ sind erlaubt.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training hinzufügen\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Analyse\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aufstieg\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschn. Geschwindigkeit\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschnittsgeschwindigkeit\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"zurück zum Training\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Datum\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abstieg\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"zeige Filter\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Entfernung\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dauer\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training bearbeiten\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höhe\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ende\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Von\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".gpx Datei\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"verberge Filter\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Letzte Trainings\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lade mehr Trainings\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"maximale Höhe\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Maximale Dateianzahl\"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Maximalgröße\"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Geschwindigkeit\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"minimale Höhe\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächstes Segment\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächstes Training\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Daten aus gpx, ohne Bereinigung\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei angegeben\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"enthält keinen Ordner\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Karte\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein nächstes Segment\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein nächstes Training\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Anmerkungen\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein vorheriges Segment\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein vorheriges Training\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Aufzeichnungen.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Trainings.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmerkungen\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pausen\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorheriges Segment\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorheriges Training\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Aufzeichnung\"]), _normalize([\"Aufzeichnungen\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschn. Geschwindigkeit\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Weiteste Entfernung\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höchster Anstieg\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Längste Dauer\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Geschwindigkeit\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"verbleibende Zeichen\"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Segment\"]), _normalize([\"Segmente\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geschwindigkeit\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Sportart\"]), _normalize([\"Sportarten\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start und Ziel\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höhenachse bei Null starten\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"bis\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gesamtdauer\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Füge erstes Training hinzu!\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Luftfeuchtigkeit\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Temperatur\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wind\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNO\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NO\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ONO\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"O\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OSO\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SO\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSO\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSW\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SW\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WSW\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"W\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WNW\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NW\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNW\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"klarer Tag\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"klare Nacht\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wolkig\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nebel\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"teilweise bewölkter Tag\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"teilweise bewölkte Nacht\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Regen\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schneeregen\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schnee\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wind\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mit .gpx Datei\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ohne .gpx Datei\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Training\"]), _normalize([\"Trainings\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainingsdatum\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist du sicher, dass du dieses Training löschen möchtest?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".zip Datei\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"oder .zip Datei mit .gpx Dateien\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Contact the administrator\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee is a self-hosted outdoor activity tracker.\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"under \", _interpolate(_list(0)), \" license \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Source code\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Action\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activate account\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Active\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add/remove admin rights, delete user account.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administrator email for contact\"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. number of active users\"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"If 0, no limitation on registration.\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. files of zip archive\"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no contact email\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. size of uploaded files (in Mb)\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application configuration\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. size of zip archive (in Mb)\"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back to admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Are you sure you want to delete \", _interpolate(_list(0)), \" account? All data will be deleted, this cannot be undone.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Are you sure you want to reset \", _interpolate(_list(0)), \" password?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Current email\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete user\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email sending is disabled.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enable/disable sports.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New email\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The password has been reset.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration is currently disabled.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration is currently enabled.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset password\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Active\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workouts exist\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Label\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sports administration\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update application configuration (maximum number of registered users, maximum files size).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update email\"])},\n \"USER\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"user\"]), _normalize([\"users\"])])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The email address has been updated.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add admin rights\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove admin rights\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"admin status\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"registration date\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"account status\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"username\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workout count\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error. Please try again or contact the administrator.\"])},\n \"at least one file in zip archive exceeds size limit, please check the archive\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"At least one file in zip archive exceeds size limit, please check the archive.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email: valid email must be provided.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error during gpx processing.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error during gpx file parsing.\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error on getting configuration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error when updating configuration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error, please try again or contact the administrator.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error, registration is disabled.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File extension not allowed.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File size is greater than the allowed size.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid credentials.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Provided data are invalid.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please log in again.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please log in again.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Network Error.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The new email must be different than curent email\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No file provided.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No selected file.\"])},\n \"the number of files in the archive exceeds the limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The number of files in the archive exceeds the limit.\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password: password and password confirmation don't match.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Provide a valid auth token.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sorry, that username is already taken.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sport does not exist.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Signature expired. Please log in again.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Successfully registered.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User does not exist.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"A valid email must be provided for administrator contact\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You can not delete your account, no other user has admin rights.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You do not have permissions.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"previous\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"next\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Resend confirmation email\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Authorize\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cancel\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Clear filters\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete my account\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disable\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enable\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Log in\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Register\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Submit\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Yes\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"about\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirmation\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"contact\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"day\"]), _normalize([\"days\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Displayed\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"here\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hidden\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Home\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"order by\"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sort\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascending\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descending\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"par page\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Total\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dashboard\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This month\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error. Please try again or contact the administrator.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The application seems to have encountered some issues.
Please try again later or contact the administrator.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Page not found\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Workout not found\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Something went wrong\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add a new OAuth2 application\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Id\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Secret\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application description\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Issue at\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application name\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Redirect URL\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scope\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to application configuration.\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to auth endpoints.\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to auth endpoints.\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to users endpoints.\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to users endpoints.\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to workouts endpoints.\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to workouts endpoints.\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application URL\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application created successfully. Make sure to copy the secret now, it won't show up again.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete this app?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"The application \", _interpolate(_list(0)), \" is requesting:\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OAuth2 applications\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Authorize \", _interpolate(_list(0)), \" to use your account?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"copy to the clipboard\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete application\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add an application\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application not found!\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no applications\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no description\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revoke all tokens\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to revoke all tokens?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"All existing associated tokens have been revoked.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Transport)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Virtual)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hiking\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountain Biking\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountain Biking (Electric)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Rowing\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Running\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skiing (Alpine)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skiing (Cross Country)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Snowshoes\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Walking\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistics\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"week\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"month\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"year\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Didn't received instructions?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Check your email. A new confirmation email has been sent to the address provided.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Already have an account?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete your account? All data will be deleted, this cannot be undone\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Current password\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter a valid email address.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter a password\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter on username\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hide password\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please request a new password reset.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Language\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"log in\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Login\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Logout\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New password\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No users found.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"At least 8 characters required.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Forgot password?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password reset\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Check your email. If your address is in our database, you'll received an email with a link to reset your password.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"weak\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"average\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"good\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"strong\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"password strength\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid predictable letter substitutions like \", \"@\", \" for a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid reversed spellings of common words.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalize some, but not all letters.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalize more than the first letter.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid dates and years that are associated with you.\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid recent years.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid years that are associated with you.\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid common character sequences.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid repeated words and characters.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Use longer keyboard patterns and change typing direction multiple times.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add more words that are less common.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Use multiple words, but avoid common phrases.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You can create strong passwords without using symbols, numbers, or uppercase letters.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"If you use this password elsewhere, you should change it.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Your password have been updated. Click \", _interpolate(_list(0)), \" to log in.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Account edition\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ascent-related data (records, total)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back to profile\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bio\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Birth date\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date display format\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit profile\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit preferences\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit sports preferences\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Please \", _interpolate(_list(0)), \" to change your email address again or contact the administrator\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"First name\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"First day of week\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Language\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Last name\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Location\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Monday\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Picture\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Picture edition\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update picture\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove picture\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preferences edition\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile edition\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration date\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sports preferences edition\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sunday\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"account\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"apps\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"picture\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"preferences\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"profile\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sports\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"action\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"color\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"disabled by admin\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"active\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"label\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"stopped speed threshold\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been updated successfully. Please check your email to confirm your new email address.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been created successfully.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"A link to activate your account has been emailed to the address provided.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been updated successfully.\"])},\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Units for distance\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Imperial system (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Metric system (m, km)\"])}\n },\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Timezone\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Register\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Resend account confirmation email\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sorry, registration is disabled.\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset your password\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"show password\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This user account is inactive.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"user picture\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Username\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 to 30 characters required, only alphanumeric characters and the underscore character \\\"_\\\" allowed.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add a workout\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"analysis\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascent\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ave. speed\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"average speed\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"back to workout\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descent\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"display filters\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"distance\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"duration\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit the workout\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"elevation\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"end\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"from\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".gpx file\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hide filters\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Latest workouts\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load more workouts\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max. altitude\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max files\"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max size\"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max. speed\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"min. altitude\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next segment\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Next workout\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"data from gpx, without any cleaning\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No file provided\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no folder inside\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No map\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next segment\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next workout\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No notes\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No previous segment\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No previous workout\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No records.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No workouts.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"notes\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pauses\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Previous segment\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Previous workout\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"record\"]), _normalize([\"records\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ave. speed\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Farthest distance\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Highest ascent\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Longest duration\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. speed\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"remaining characters\"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"segment\"]), _normalize([\"segments\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"speed\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"sport\"]), _normalize([\"sports\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start and finish\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start elevation axis at zero\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"title\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"to\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"total duration\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Upload one!\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"humidity\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"temperature\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wind\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNE\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NE\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ENE\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ESE\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SE\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSE\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSW\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SW\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WSW\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"W\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WNW\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NW\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNW\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"clear day\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"clear night\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cloudy\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fog\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partly cloudy day\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partly cloudy night\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"rain\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sleet\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"snow\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wind\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"with .gpx file\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"without .gpx file\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"workout\"]), _normalize([\"workouts\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workout date\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete this workout?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".zip file\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"or .zip file containing .gpx files\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Contacter l'administrateur\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee est un tracker d'activités sportives (en extérieur).\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"sous licence \", _interpolate(_list(0)), \" (en) \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Code source (en)\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Action\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer le compte\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Actif\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter/retirer des droits d'administration, supprimer des comptes utilisateurs.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email de l'administrateur pour contact \"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nombre maximum d'utilisateurs actifs \"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Si égal à 0, pas limite d'inscription\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nombre max. de fichiers dans une archive zip \"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"non renseigné\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Taille max. des fichiers (en Mo) \"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Configuration de l'application\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Taille max. des archives zip (en Mo) \"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revenir à l'admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Êtes-vous sûr de vouloir supprimer le compte de l'utilisateur \", _interpolate(_list(0)), \" ? Toutes les données seront définitivement.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Êtes-vous sûr de vouloir réinitialiser le mot de passe de l'utilisateur \", _interpolate(_list(0)), \" ?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Adresse email actuelle\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer l'utilisateur\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'envoi d'emails est désactivé.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer/désactiver des sports.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nouvelle adresse email\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Le mot de passe a été réinitialisé.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Les inscriptions sont actuellement désactivées.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Les inscriptions sont actuellement activées.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinit. le mot de passe\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Actif\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"des séances existent\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Label\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration - Sports\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Configurer l'application (nombre maximum d'utilisateurs inscrits, taille maximale des fichers).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Changer l'email\"])},\n \"USER\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"utilisateur\"]), _normalize([\"utilisateurs\"])])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'adresse email a été mise à jour.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter les droits d'admin\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Retirer les droits d'admin\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"status administrateur\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date d'inscription\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"statut du compte\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nom d'utilisateur\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nombre de séances\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur. Veuillez réessayer ou contacter l'administrateur.\"])},\n \"at least one file in zip archive exceeds size limit, please check the archive\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Au moins un fichier de l'archive zip dépasse la taille maximale, veuillez vérifier l'archive.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Courriel : une adresse électronique valide doit être fournie.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors du traitement du fichier gpx.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de l'analyse du fichier.\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de la récupération de la configuration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de la mise à jour de la configuration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur, veuillez réessayer ou contacter l'administrateur.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur, les inscriptions sont désactivées.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Extension de fichier non autorisée.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"La taille du fichier est supérieure à la limite autorisée.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Identifiants invalides.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Données fournies incorrectes.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton de connexion invalide, merci de vous reconnecter.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton de connexion, merci de vous reconnecter.\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier fourni.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier sélectionné.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur réseau.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"La nouvelle addresse électronique doit être differente de l'adresse actuelle\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe : les mots de passe saisis sont différents.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Merci de fournir un jeton de connexion valide.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ce sport n'existe pas.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Signature expirée. Merci de vous reconnecter.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désolé, ce nom d'utilisateur est déjà utilisé.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Inscription validée.\"])},\n \"the number of files in the archive exceeds the limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Le nombre de fichiers de l'archive dépasse la limite.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'utilisateur n'existe pas.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Une adresse électronique doit être fournie pour le contact de l'administrateur\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous ne pouvez pas supprimer votre compte, aucun autre utilisateur n'a des droits d'administration.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous n'avez pas les permissions nécessaires.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"précédent\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"suivant\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Renvoyer le message de confirmation\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Autoriser\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Retour\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Annuler\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialiser\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer mon compte\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désactiver\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filtrer\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se connecter\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Non\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S'inscrire\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinit.\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Valider\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Oui\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"à propos\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirmation\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"contact\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"jour\"]), _normalize([\"jours\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Affiché\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation (en)\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ici\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Masqué\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accueil\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"trier par \"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"tri\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascendant\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descendant\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"par page\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Total\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tableau de bord\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ce mois-ci\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur. Veuillez réessayer ou contacter l'administrateur.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'application semble rencontrer quelques problèmes.
Veuillez réessayer plus tard ou contacter l'administrateur.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Page introuvable\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance introuvable\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Une erreur s'est produite\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une nouvelle application OAuth2\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Identifiant\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Secret\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Description de l'application\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Créée le\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom de l'application\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"URL de redirection\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scope\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture à la configuration de l'application.\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes auth.\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes auth.\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes users.\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes users.\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes workouts.\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes workouts.\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"URL de l'application\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application créée avec succès. Assurez-vous de copier le secret maintenant, il ne s'affichera plus.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr de vouloir supprimer cette application ?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"L'application \", _interpolate(_list(0)), \" demande les accès suivants :\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Applications OAuth2\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Autoriser \", _interpolate(_list(0)), \" à utiliser votre compte ?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"copier dans le presse papier\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer l'application\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une application\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application introuvable !\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de applications\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de description\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Révoquer tous les jetons\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr de vouloir révoquer tous les jetons ?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tous les jetons associés existants ont été révoqués.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Transport)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Virtuel)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Randonnée\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"VTT\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"VTT (Électrique)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aviron\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Course\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ski (Alpin)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ski (Randonnée)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Raquettes\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Marche\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistiques\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"semaine\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mois\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"année\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous n'avez pas reçu les instructions ?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vérifiez vos courriels. Un nouveau courriel de confirmation a été envoyé à l'adresse électronique fournie.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous avez déjà un compte ?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr·e de vouloir supprimer votre compte ? Toutes les données seront définitivement effacés\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe actuel\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Courriel\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Saisissez une adresse électronique valide.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Saisissez un mot de passe\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filtrer sur le nom d'utilisateur\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"masquer le mot de passe\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton invalide, veuillez demander une nouvelle réinitialisation de mot de passe.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Langue\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"connecter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se connecter\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se déconnecter\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nouveau mot de passe\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aucun utilisateur trouvé.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"8 caractères minimum.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe oublié ?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialisation du mot de passe\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vérifiez vos courriels. Si vote adresse est dans notre base de données, vous recevrez un courriel avec un lien pour réinitialiser votre mot de passe.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"faible\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"moyenne\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"bonne\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"forte\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"robustesse du mot de passe\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les substitutions de lettres prévisibles comme \", \"@\", \" pour a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les orthographes inversées des mots courants.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mettez quelques lettres en majuscules, mais pas toutes.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalisez mais pas seulement la première lettre.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les dates et les années qui vous sont associées. (ex : date ou année de naissance).\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les dernières années.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les années qui vous sont associées. (ex : date de naissance).\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les séquences de caractères courantes.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les mots et les caractères répétés.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Utilisez des motifs de clavier plus longs et changez de sens de frappe plusieurs fois.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajoutez des mots moins courants.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Utilisez plusieurs mots, mais évitez les phrases courantes.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous pouvez créer des mots de passe forts sans utiliser de symboles, de chiffres ou de lettres majuscules.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Si vous utilisez ce mot de passe ailleurs, vous devriez le modifier.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Votre mot de passe a été mis à jour. Cliquez \", _interpolate(_list(0)), \" pour vous connecter.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour du compte\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Données relatives au dénivelé positif (records, total)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revenir au profil\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bio\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date de naissance\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Format d'affichage de la date\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier le profil\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier les préférences\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier les préférences des sports\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Veuillez vous \", _interpolate(_list(0)), \" pour changer de nouveau votre adresse électronique ou contacter l'administrateur\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Premier jour de la semaine\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prénom\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Langue\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lieu\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lundi\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image de profil\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour de l'image de profil\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mettre à jour l'image\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour des préférences\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour du profil\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date d'inscription\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour des préférences des sports\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dimanche\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"compte\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"apps\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"image\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"préférences\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"profil\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sports\"])}\n },\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unités pour les distances\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Système impérial (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Système métrique (m, km)\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"action\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"couleur\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"désactivé par l'administrateur\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"actif\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"label\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"seuil de vitesse arrêtée\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été modifié avec succès. Veuillez vérifier votre boîte de réception pour valider votre nouvelle adresse électronique.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été créé avec succès.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Un lien pour activer votre compte a été envoyé à l'adresse électronique fournie.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été modifié avec succès.\"])},\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fuseau horaire\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S'inscrire\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désolé, les inscriptions sont désactivées.\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Envoyer à nouveau le courriel de confirmation de compte\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialiser votre mot de passe\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"afficher le mot de passe\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Le compte de cet utilisateur est inactif.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"photo de l'utilisateur\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom d'utilisateur\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 à 30 caractères requis, seuls les caractères alphanumériques et le caractère _ sont autorisés.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une séance\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"analyse\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"dénivelé positif\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse moyenne\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse moy.\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"revenir à la séance\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"dénivelé négatif\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"afficher les filtres\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"distance\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"durée\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier la séance\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fin\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"à partir de\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fichier .gpx\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"masquer les filtres\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séances récentes\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Charger les séances suivantes\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude max\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fichiers max. \"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"taille max. \"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse max\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude min\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Segment suivant\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance suivante\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"données issues du fichier gpx, sans correction\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier fourni\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de répertoire\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de carte\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de segment suivant\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séance suivante\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de notes\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de segment précédent\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séance précédente\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de records.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séances.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"notes\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pauses\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Segment précédent\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance précédente\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"record\"]), _normalize([\"records\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vitesse moy.\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Distance la + longue\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dénivelé positif le + élevé\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durée la + longue\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vitesse max.\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nombre de caractères restants \"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"segment\"]), _normalize([\"segments\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"sport\"]), _normalize([\"sports\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"début\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Départ et arrivée\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"démarrer l'axe de l'altitude à 0\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"titre\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"jusqu'au\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"durée totale\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajoutez votre première séance !\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"humidité\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"température\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vent\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNE\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NE\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ENE\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ESE\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SE\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSE\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSO\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SO\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OSO\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"O\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ONO\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NO\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNO\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ensoleillé\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuit claire\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuageux\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"brouillard\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partiellement nuageux\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuit partiellement nuageuse\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pluie\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"neige fondue\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"neige\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"venteux\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"avec un fichier .gpx\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sans fichier .gpx\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"séance\"]), _normalize([\"séances\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date de la séance\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Etes-vous sûr de vouloir supprimer cette séance ?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"archive .zip\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ou une archive .zip contenant des fichiers .gpx\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","/* eslint-disable no-console */\n\nimport { register } from 'register-service-worker'\n\nif (process.env.NODE_ENV === 'production') {\n register(`${process.env.BASE_URL}service-worker.js`, {\n ready() {\n console.log(\n 'App is being served from cache by a service worker.\\n' +\n 'For more details, visit https://goo.gl/AFskqB'\n )\n },\n registered() {\n console.log('Service worker has been registered.')\n },\n cached() {\n console.log('Content has been cached for offline use.')\n },\n updatefound() {\n console.log('New content is downloading.')\n },\n updated() {\n console.log('New content is available; please refresh.')\n },\n offline() {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n )\n },\n error(error) {\n console.error('Error during service worker registration:', error)\n },\n })\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2c73279e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"footer\" }\nconst _hoisted_2 = { class: \"footer-items\" }\nconst _hoisted_3 = { class: \"footer-item\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"strong\", null, \"FitTrackee\", -1))\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"footer-item bullet\" }, \"•\", -1))\nconst _hoisted_6 = { class: \"footer-item\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"footer-item bullet\"\n}\nconst _hoisted_8 = {\n key: 1,\n class: \"footer-item\"\n}\nconst _hoisted_9 = [\"href\"]\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"footer-item bullet\" }, \"•\", -1))\nconst _hoisted_11 = { class: \"footer-item\" }\nconst _hoisted_12 = {\n href: \"https://samr1.github.io/FitTrackee/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\n\nimport { toRefs } from 'vue'\n\n interface Props {\n version: string\n adminContact?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Footer',\n props: {\n version: null,\n adminContact: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n version: string\n adminContact?: string\n }\n\n \n\n const { adminContact, version } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _hoisted_4,\n _createTextVNode(\" v\" + _toDisplayString(_unref(version)), 1)\n ]),\n _hoisted_5,\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_router_link, { to: \"/about\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('common.ABOUT')), 1)\n ]),\n _: 1\n })\n ]),\n (_unref(adminContact))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, \"•\"))\n : _createCommentVNode(\"\", true),\n (_unref(adminContact))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"a\", {\n href: `mailto:${_unref(adminContact)}`\n }, _toDisplayString(_ctx.$t('common.CONTACT')), 9, _hoisted_9)\n ]))\n : _createCommentVNode(\"\", true),\n _hoisted_10,\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"a\", _hoisted_12, _toDisplayString(_ctx.$t('common.DOCUMENTATION')), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./Footer.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Footer.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Footer.vue?vue&type=style&index=0&id=2c73279e&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2c73279e\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-95c1cc02\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"nav\" }\nconst _hoisted_2 = { class: \"nav-container\" }\nconst _hoisted_3 = { class: \"nav-app-name\" }\nconst _hoisted_4 = { class: \"nav-items-close\" }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"app-name\" }, \"FitTrackee\", -1))\nconst _hoisted_6 = {\n key: 0,\n class: \"nav-items-group\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"nav-item nav-separator\" }, null, -1))\nconst _hoisted_8 = { class: \"nav-items-user-menu\" }\nconst _hoisted_9 = {\n key: 0,\n class: \"nav-items-group\"\n}\nconst _hoisted_10 = { class: \"nav-item nav-profile-img\" }\nconst _hoisted_11 = {\n key: 1,\n class: \"nav-items-group\"\n}\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", { class: \"fa fa-language\" }, null, -1))\n\nimport { ComputedRef, computed, ref, capitalize } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IDropdownOption } from '@/types/forms'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { availableLanguages } from '@/utils/locales'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'NavBar',\n emits: ['menuInteraction'],\n setup(__props, { emit }) {\n\n \n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const isAuthenticated: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n )\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const isMenuOpen = ref(false)\n\n function openMenu() {\n isMenuOpen.value = true\n emit('menuInteraction', true)\n }\n function closeMenu() {\n isMenuOpen.value = false\n emit('menuInteraction', false)\n }\n function updateLanguage(option: IDropdownOption) {\n store.dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n option.value.toString()\n )\n }\n function logout() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.LOGOUT)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Dropdown = _resolveComponent(\"Dropdown\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: \"nav-item app-name\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/')))\n }, \" FitTrackee \")\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"nav-icon-open\", { 'menu-open': isMenuOpen.value }])\n }, [\n _createElementVNode(\"i\", {\n class: \"fa fa-bars hamburger-icon\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (openMenu()))\n })\n ], 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"nav-items\", { 'menu-open': isMenuOpen.value }])\n }, [\n _createElementVNode(\"div\", _hoisted_4, [\n _hoisted_5,\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa fa-close close-icon nav-item\", { 'menu-closed': !isMenuOpen.value }]),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (closeMenu()))\n }, null, 2)\n ]),\n _createElementVNode(\"div\", {\n class: \"nav-items-app-menu\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (closeMenu()))\n }, [\n (_unref(isAuthenticated))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('dashboard.DASHBOARD')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/workouts\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 2))), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/statistics\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('statistics.STATISTICS')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/workouts/add\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.ADD_WORKOUT')), 1)\n ]),\n _: 1\n }),\n (_unref(isAuthenticated) && _unref(authUser).admin)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"nav-item\",\n to: \"/admin\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.ADMIN')), 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n _hoisted_7\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n (_unref(isAuthenticated))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _createVNode(UserPicture, { user: _unref(authUser) }, null, 8, [\"user\"])\n ]),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/profile\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(authUser).username), 1)\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", {\n class: \"nav-item nav-link\",\n onClick: logout\n }, _toDisplayString(_ctx.$t('user.LOGOUT')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/login\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.LOGIN')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/register\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.REGISTER')), 1)\n ]),\n _: 1\n })\n ])),\n (_unref(availableLanguages) && _unref(language))\n ? (_openBlock(), _createBlock(_component_Dropdown, {\n key: 2,\n class: \"nav-item\",\n options: _unref(availableLanguages),\n selected: _unref(language),\n onSelected: updateLanguage\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }, 8, [\"options\", \"selected\"]))\n : _createCommentVNode(\"\", true)\n ])\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./NavBar.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NavBar.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./NavBar.vue?vue&type=style&index=0&id=95c1cc02&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-95c1cc02\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-47759238\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"no-config\" }\nconst _hoisted_2 = { class: \"error-page\" }\nconst _hoisted_3 = { class: \"error-img\" }\nconst _hoisted_4 = [\"innerHTML\"]\n\nimport ErrorImg from '@/components/Common/Images/ErrorImg.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'NoConfig',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(ErrorImg)\n ]),\n _createElementVNode(\"p\", {\n class: \"error-message\",\n innerHTML: _ctx.$t('error.APP_ERROR')\n }, null, 8, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./NoConfig.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./NoConfig.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./NoConfig.vue?vue&type=style&index=0&id=47759238&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-47759238\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, createVNode as _createVNode, unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, normalizeClass as _normalizeClass, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { id: \"top\" }, null, -1)\nconst _hoisted_2 = {\n key: 0,\n class: \"app-container\"\n}\nconst _hoisted_3 = { class: \"app-loading\" }\nconst _hoisted_4 = { class: \"container scroll\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-up\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_6 = [\n _hoisted_5\n]\n\nimport { ComputedRef, computed, ref, onBeforeMount, onMounted } from 'vue'\n\n import Footer from '@/components/Footer.vue'\n import NavBar from '@/components/NavBar.vue'\n import NoConfig from '@/components/NoConfig.vue'\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { useStore } from '@/use/useStore'\n import { localeFromLanguage } from '@/utils/locales'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'App',\n setup(__props) {\n\n const store = useStore()\n\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const appLoading: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_LOADING]\n )\n const hideScrollBar = ref(false)\n const displayScrollButton = ref(false)\n\n onBeforeMount(() => {\n initLanguage()\n store.dispatch(ROOT_STORE.ACTIONS.GET_APPLICATION_CONFIG)\n })\n onMounted(() => scroll())\n\n function updateHideScrollBar(isMenuOpen: boolean) {\n hideScrollBar.value = isMenuOpen\n }\n function isScrolledToBottom(element: Element): boolean {\n return (\n element.getBoundingClientRect().top < window.innerHeight &&\n element.getBoundingClientRect().bottom >= 0\n )\n }\n function scroll() {\n window.onscroll = () => {\n const bottom = document.querySelector('#bottom')\n displayScrollButton.value = bottom !== null && isScrolledToBottom(bottom)\n }\n }\n function scrollToTop() {\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n })\n setTimeout(() => {\n displayScrollButton.value = false\n }, 300)\n }\n function initLanguage() {\n let language = 'en'\n try {\n const navigatorLanguage = navigator.language.split('-')[0]\n if (navigatorLanguage in localeFromLanguage) {\n language = navigatorLanguage\n }\n } catch (e) {\n language = 'en'\n }\n store.dispatch(ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE, language)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Loader = _resolveComponent(\"Loader\")!\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _hoisted_1,\n _createVNode(NavBar, { onMenuInteraction: updateHideScrollBar }),\n (_unref(appLoading))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Loader)\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([\"app-container\", { 'hide-scroll': hideScrollBar.value }])\n }, [\n (_unref(appConfig))\n ? (_openBlock(), _createBlock(_component_router_view, { key: 0 }))\n : (_openBlock(), _createBlock(NoConfig, { key: 1 }))\n ], 2)),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"scroll-button\", { 'display-button': displayScrollButton.value }]),\n onClick: scrollToTop\n }, _hoisted_6, 2)\n ]),\n (_unref(appConfig))\n ? (_openBlock(), _createBlock(Footer, {\n key: 2,\n version: _unref(appConfig) ? _unref(appConfig).version : '',\n adminContact: _unref(appConfig).admin_contact\n }, null, 8, [\"version\", \"adminContact\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n}\n}\n\n})","import script from \"./App.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./App.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./App.vue?vue&type=style&index=0&id=2930d5e0&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-69d7e4ff\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"alert-message\" }\nconst _hoisted_2 = [\"innerHTML\"]\n\nimport { toRefs } from 'vue'\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AlertMessage',\n props: {\n message: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n message: string\n }\n\n \n const { message } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n innerHTML: _ctx.$t(_unref(message))\n }, null, 8, _hoisted_2)\n ]))\n}\n}\n\n})","import script from \"./AlertMessage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AlertMessage.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AlertMessage.vue?vue&type=style&index=0&id=69d7e4ff&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-69d7e4ff\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8cf5cc64\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"custom-textarea\" }\nconst _hoisted_2 = [\"id\", \"name\", \"maxLenght\", \"disabled\"]\nconst _hoisted_3 = { class: \"remaining-chars\" }\n\nimport { ref, watch, withDefaults } from 'vue'\n\n interface Props {\n name: string\n charLimit?: number\n disabled?: boolean\n input?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CustomTextArea',\n props: {\n name: null,\n charLimit: { default: 500 },\n disabled: { type: Boolean, default: false },\n input: { default: '' }\n },\n emits: ['updateValue'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { name: string, charLimit: number, disabled: boolean, input: string | null }\n\n \n\n \n\n const text = ref('')\n\n function updateText(event: Event & { target: HTMLInputElement }) {\n emit('updateValue', event.target.value)\n }\n\n watch(\n () => props.input,\n (value) => {\n text.value = value === null ? '' : value\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _withDirectives(_createElementVNode(\"textarea\", {\n id: __props.name,\n name: __props.name,\n maxLenght: __props.charLimit,\n disabled: __props.disabled,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((text).value = $event)),\n onInput: updateText\n }, null, 40, _hoisted_2), [\n [_vModelText, text.value]\n ]),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('workouts.REMAINING_CHARS')) + \": \" + _toDisplayString(text.value.length) + \"/\" + _toDisplayString(__props.charLimit), 1)\n ]))\n}\n}\n\n})","import script from \"./CustomTextArea.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CustomTextArea.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CustomTextArea.vue?vue&type=style&index=0&id=8cf5cc64&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8cf5cc64\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, Fragment as _Fragment } from \"vue\"\n\nimport { ComputedRef, computed, toRefs, withDefaults } from 'vue'\n\n import { TUnit } from '@/types/units'\n import { units, convertDistance } from '@/utils/units'\n\n interface Props {\n distance: number\n unitFrom: TUnit\n useImperialUnits: boolean\n digits?: number\n displayUnit?: boolean\n speed?: boolean\n strong?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Distance',\n props: {\n distance: null,\n unitFrom: null,\n useImperialUnits: { type: Boolean },\n digits: { default: 2 },\n displayUnit: { type: Boolean, default: true },\n speed: { type: Boolean, default: false },\n strong: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { distance: number, unitFrom: TUnit, useImperialUnits: boolean, digits: number, displayUnit: boolean, speed: boolean, strong: boolean }\n\n \n\n const {\n digits,\n displayUnit,\n distance,\n speed,\n strong,\n unitFrom,\n useImperialUnits,\n } = toRefs(props)\n const unitTo: ComputedRef = computed(() =>\n useImperialUnits.value\n ? units[unitFrom.value].defaultTarget\n : unitFrom.value\n )\n const convertedDistance = computed(() =>\n useImperialUnits.value\n ? convertDistance(\n distance.value,\n unitFrom.value,\n unitTo.value,\n digits.value\n )\n : parseFloat(distance.value.toFixed(digits.value))\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"distance\", { strong: _unref(strong) }])\n }, _toDisplayString(_unref(convertedDistance)), 3),\n _createTextVNode(\" \" + _toDisplayString(' ') + \" \"),\n (_unref(displayUnit))\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n class: _normalizeClass([\"unit\", { strong: _unref(strong) }])\n }, _toDisplayString(_unref(unitTo)) + _toDisplayString(_unref(speed) ? '/h' : ''), 3))\n : _createCommentVNode(\"\", true)\n ], 64))\n}\n}\n\n})","import script from \"./Distance.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Distance.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Distance.vue?vue&type=style&index=0&id=f46ff1d6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-f46ff1d6\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2d3b4eac\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"dropdown-wrapper\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"dropdown-list\"\n}\nconst _hoisted_3 = [\"onClick\"]\n\nimport { ref, watch } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { IDropdownOption, TDropdownOptions } from '@/types/forms'\n interface Props {\n options: TDropdownOptions\n selected: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Dropdown',\n props: {\n options: null,\n selected: null\n },\n emits: {\n selected: (option: IDropdownOption) => option,\n },\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n options: TDropdownOptions\n selected: string\n }\n\n \n\n \n\n const route = useRoute()\n const isOpen = ref(false)\n const dropdownOptions = props.options.map((option) => option)\n\n function toggleDropdown() {\n isOpen.value = !isOpen.value\n }\n function updateSelected(option: IDropdownOption) {\n emit('selected', option)\n isOpen.value = false\n }\n\n watch(\n () => route.path,\n () => (isOpen.value = false)\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"dropdown-selected\",\n onClick: toggleDropdown\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n (isOpen.value)\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(dropdownOptions), (option, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n class: _normalizeClass([\"dropdown-item\", { selected: option.value === __props.selected }]),\n key: index,\n onClick: ($event: any) => (updateSelected(option))\n }, _toDisplayString(option.label), 11, _hoisted_3))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./Dropdown.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Dropdown.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Dropdown.vue?vue&type=style&index=0&id=2d3b4eac&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2d3b4eac\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2659a79a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"error-message\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { key: 1 }\n\nimport { toRefs } from 'vue'\n\n interface Props {\n message: string | string[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'ErrorMessage',\n props: {\n message: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n message: string | string[]\n }\n\n \n const { message } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (Array.isArray(_unref(message)))\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(message), (subMessage, index) => {\n return (_openBlock(), _createElementBlock(\"li\", { key: index }, _toDisplayString(_ctx.$t(subMessage)), 1))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(_unref(message))), 1))\n ]))\n}\n}\n\n})","import script from \"./ErrorMessage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ErrorMessage.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./ErrorMessage.vue?vue&type=style&index=0&id=2659a79a&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2659a79a\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingSport.vue?vue&type=template&id=be8023a2\"\nimport script from \"./CyclingSport.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingSport.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingTransport.vue?vue&type=template&id=97af5148\"\nimport script from \"./CyclingTransport.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingTransport.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingVirtual.vue?vue&type=template&id=ec8f7bb6\"\nimport script from \"./CyclingVirtual.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingVirtual.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Hiking.vue?vue&type=template&id=40903dc4\"\nimport script from \"./Hiking.vue?vue&type=script&lang=js\"\nexport * from \"./Hiking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./MountainBiking.vue?vue&type=template&id=5bdbc6e8\"\nimport script from \"./MountainBiking.vue?vue&type=script&lang=js\"\nexport * from \"./MountainBiking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./MountainBikingElectric.vue?vue&type=template&id=21e72aec\"\nimport script from \"./MountainBikingElectric.vue?vue&type=script&lang=js\"\nexport * from \"./MountainBikingElectric.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Rowing.vue?vue&type=template&id=31ae2dd5\"\nimport script from \"./Rowing.vue?vue&type=script&lang=js\"\nexport * from \"./Rowing.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Running.vue?vue&type=template&id=4d47a4fe\"\nimport script from \"./Running.vue?vue&type=script&lang=js\"\nexport * from \"./Running.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./SkiingAlpine.vue?vue&type=template&id=3ebf3bca\"\nimport script from \"./SkiingAlpine.vue?vue&type=script&lang=js\"\nexport * from \"./SkiingAlpine.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./SkiingCrossCountry.vue?vue&type=template&id=1561bbe6\"\nimport script from \"./SkiingCrossCountry.vue?vue&type=script&lang=js\"\nexport * from \"./SkiingCrossCountry.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Snowshoes.vue?vue&type=template&id=67df2761\"\nimport script from \"./Snowshoes.vue?vue&type=script&lang=js\"\nexport * from \"./Snowshoes.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Trail.vue?vue&type=template&id=32a14156\"\nimport script from \"./Trail.vue?vue&type=script&lang=js\"\nexport * from \"./Trail.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Walking.vue?vue&type=template&id=2ed4f5f4\"\nimport script from \"./Walking.vue?vue&type=script&lang=js\"\nexport * from \"./Walking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"title\"]\n\nimport { inject, toRefs, withDefaults } from 'vue'\n\n import CyclingSport from '@/components/Common/Images/SportImage/CyclingSport.vue'\n import CyclingTransport from '@/components/Common/Images/SportImage/CyclingTransport.vue'\n import CyclingVirtual from '@/components/Common/Images/SportImage/CyclingVirtual.vue'\n import Hiking from '@/components/Common/Images/SportImage/Hiking.vue'\n import MountainBiking from '@/components/Common/Images/SportImage/MountainBiking.vue'\n import MountainBikingElectric from '@/components/Common/Images/SportImage/MountainBikingElectric.vue'\n import Rowing from '@/components/Common/Images/SportImage/Rowing.vue'\n import Running from '@/components/Common/Images/SportImage/Running.vue'\n import SkiingAlpine from '@/components/Common/Images/SportImage/SkiingAlpine.vue'\n import SkiingCrossCountry from '@/components/Common/Images/SportImage/SkiingCrossCountry.vue'\n import Snowshoes from '@/components/Common/Images/SportImage/Snowshoes.vue'\n import Trail from '@/components/Common/Images/SportImage/Trail.vue'\n import Walking from '@/components/Common/Images/SportImage/Walking.vue'\n\n interface Props {\n sportLabel: string\n color: string | null\n title?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sportLabel: null,\n color: null,\n title: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { sportLabel: string, color: string | null, title: string }\n\n \n\n const { color, sportLabel, title } = toRefs(props)\n const sportColors = inject('sportColors')\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"sport-img\",\n style: _normalizeStyle({ fill: _unref(color) ? _unref(color) : _unref(sportColors)[_unref(sportLabel)] }),\n title: _unref(title) ? _unref(title) : _ctx.$t(`sports.${_unref(sportLabel)}.LABEL`)\n }, [\n (_unref(sportLabel) === 'Cycling (Sport)')\n ? (_openBlock(), _createBlock(CyclingSport, { key: 0 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Cycling (Transport)')\n ? (_openBlock(), _createBlock(CyclingTransport, { key: 1 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Cycling (Virtual)')\n ? (_openBlock(), _createBlock(CyclingVirtual, { key: 2 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Hiking')\n ? (_openBlock(), _createBlock(Hiking, { key: 3 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Mountain Biking')\n ? (_openBlock(), _createBlock(MountainBiking, { key: 4 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Mountain Biking (Electric)')\n ? (_openBlock(), _createBlock(MountainBikingElectric, { key: 5 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Rowing')\n ? (_openBlock(), _createBlock(Rowing, { key: 6 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Running')\n ? (_openBlock(), _createBlock(Running, { key: 7 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Skiing (Alpine)')\n ? (_openBlock(), _createBlock(SkiingAlpine, { key: 8 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Skiing (Cross Country)')\n ? (_openBlock(), _createBlock(SkiingCrossCountry, { key: 9 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Snowshoes')\n ? (_openBlock(), _createBlock(Snowshoes, { key: 10 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Trail')\n ? (_openBlock(), _createBlock(Trail, { key: 11 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Walking')\n ? (_openBlock(), _createBlock(Walking, { key: 12 }))\n : _createCommentVNode(\"\", true)\n ], 12, _hoisted_1))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","\n\n\n","import { render } from \"./Loader.vue?vue&type=template&id=4c9921ee&scoped=true\"\nconst script = {}\n\nimport \"./Loader.vue?vue&type=style&index=0&id=4c9921ee&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4c9921ee\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-e8fcfaba\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"modal\" }\nconst _hoisted_2 = { class: \"custom-modal\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"modal-message\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"modal-message\"\n}\nconst _hoisted_5 = { class: \"modal-buttons\" }\n\nimport { ComputedRef, computed, toRefs, withDefaults, onUnmounted } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n title: string\n message: string\n strongMessage?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Modal',\n props: {\n title: null,\n message: null,\n strongMessage: { default: () => null }\n },\n emits: ['cancelAction', 'confirmAction'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { title: string, message: string, strongMessage: string | null }\n\n \n\n \n\n const store = useStore()\n\n const { title, message, strongMessage } = toRefs(props)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\nreturn (_ctx: any,_cache: any) => {\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(title)), 1)\n ]),\n content: _withCtx(() => [\n (_unref(strongMessage))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createVNode(_component_i18n_t, { keypath: _unref(message) }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(strongMessage)), 1)\n ]),\n _: 1\n }, 8, [\"keypath\"])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, _toDisplayString(_unref(message)), 1)),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 2,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_5, [\n (!_unref(errorMessages))\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"confirm\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('confirmAction')))\n }, _toDisplayString(_ctx.$t('buttons.YES')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('cancelAction')))\n }, _toDisplayString(_ctx.$t(`buttons.${_unref(errorMessages) ? 'CANCEL' : 'NO'}`)), 1)\n ])\n ]),\n _: 1\n })\n ])\n ]))\n}\n}\n\n})","import script from \"./Modal.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Modal.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Modal.vue?vue&type=style&index=0&id=e8fcfaba&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-e8fcfaba\"]])\n\nexport default __exports__","import AlertMessage from '@/components/Common/AlertMessage.vue'\nimport Card from '@/components/Common/Card.vue'\nimport CustomTextArea from '@/components/Common/CustomTextArea.vue'\nimport Distance from '@/components/Common/Distance.vue'\nimport Dropdown from '@/components/Common/Dropdown.vue'\nimport ErrorMessage from '@/components/Common/ErrorMessage.vue'\nimport SportImage from '@/components/Common/Images/SportImage/index.vue'\nimport Loader from '@/components/Common/Loader.vue'\nimport Modal from '@/components/Common/Modal.vue'\n\nexport const customComponents = [\n { target: AlertMessage, name: 'AlertMessage' },\n { target: Card, name: 'Card' },\n { target: CustomTextArea, name: 'CustomTextArea' },\n { target: Distance, name: 'Distance' },\n { target: Dropdown, name: 'Dropdown' },\n { target: ErrorMessage, name: 'ErrorMessage' },\n { target: Loader, name: 'Loader' },\n { target: Modal, name: 'Modal' },\n { target: SportImage, name: 'SportImage' },\n]\n","import { Directive, DirectiveBinding } from 'vue'\n\ninterface ClickOutsideHTMLElement extends HTMLElement {\n clickOutsideEvent?: (event: MouseEvent | TouchEvent) => void\n}\n\nexport const clickOutsideDirective: Directive = {\n mounted: (\n element: ClickOutsideHTMLElement,\n binding: DirectiveBinding\n ): void => {\n element.clickOutsideEvent = function (event) {\n if (!(element === event.target || element.contains(event.target))) {\n binding.value(event)\n }\n }\n document.body.addEventListener('click', element.clickOutsideEvent)\n document.body.addEventListener('touchstart', element.clickOutsideEvent)\n },\n unmounted: function (element: ClickOutsideHTMLElement): void {\n if (element.clickOutsideEvent) {\n document.body.removeEventListener('click', element.clickOutsideEvent)\n document.body.removeEventListener('touchstart', element.clickOutsideEvent)\n element.clickOutsideEvent = undefined\n }\n },\n}\n","import {\n Chart,\n BarElement,\n LineElement,\n PointElement,\n Legend,\n Title,\n Tooltip,\n Filler,\n BarController,\n CategoryScale,\n LineController,\n LinearScale,\n} from 'chart.js'\nimport ChartDataLabels from 'chartjs-plugin-datalabels'\nimport { createApp } from 'vue'\nimport VueFullscreen from 'vue-fullscreen'\n\nimport './registerServiceWorker'\nimport App from './App.vue'\nimport i18n from './i18n'\nimport router from './router'\nimport store from './store'\n\nimport { customComponents } from '@/custom-components'\nimport { clickOutsideDirective } from '@/directives'\nimport { sportColors } from '@/utils/sports'\n\nChart.register(\n BarElement,\n LineElement,\n PointElement,\n Legend,\n Title,\n Tooltip,\n Filler,\n BarController,\n CategoryScale,\n LineController,\n LinearScale,\n ChartDataLabels\n)\n\nconst app = createApp(App)\n .provide('sportColors', sportColors)\n .use(i18n)\n .use(store)\n .use(router)\n .use(VueFullscreen, { name: 'VFullscreen' })\n .directive('click-outside', clickOutsideDirective)\n\ncustomComponents.forEach((component) => {\n app.component(component.name, component.target)\n})\n\napp.mount('#app')\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, vModelText as _vModelText, withDirectives as _withDirectives, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, withModifiers as _withModifiers, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-24ec93e2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-app\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = [\"onSubmit\"]\nconst _hoisted_3 = { for: \"admin_contact\" }\nconst _hoisted_4 = [\"value\"]\nconst _hoisted_5 = [\"disabled\"]\nconst _hoisted_6 = { for: \"max_users\" }\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = { class: \"user-limit-help\" }\nconst _hoisted_9 = { class: \"info-box\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { for: \"max_single_file_size\" }\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = { for: \"max_zip_file_size\" }\nconst _hoisted_14 = [\"disabled\"]\nconst _hoisted_15 = { for: \"gpx_limit_import\" }\nconst _hoisted_16 = [\"disabled\"]\nconst _hoisted_17 = {\n key: 1,\n class: \"form-buttons\"\n}\nconst _hoisted_18 = {\n class: \"confirm\",\n type: \"submit\"\n}\nconst _hoisted_19 = [\"onClick\"]\nconst _hoisted_20 = {\n key: 2,\n class: \"form-buttons\"\n}\n\nimport {\n ComputedRef,\n computed,\n reactive,\n withDefaults,\n onBeforeMount,\n toRefs,\n } from 'vue'\n import { useRouter } from 'vue-router'\n\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig, TAppConfigForm } from '@/types/application'\n import { useStore } from '@/use/useStore'\n import { getFileSizeInMB } from '@/utils/files'\n\n interface Props {\n appConfig: TAppConfig\n edition?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminApplication',\n props: {\n appConfig: null,\n edition: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { appConfig: TAppConfig, edition: boolean }\n\n \n const { edition } = toRefs(props)\n\n const store = useStore()\n const router = useRouter()\n\n const appData: TAppConfigForm = reactive({\n admin_contact: '',\n max_users: 0,\n max_single_file_size: 0,\n max_zip_file_size: 0,\n gpx_limit_import: 0,\n })\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => {\n if (props.appConfig) {\n updateForm(props.appConfig)\n }\n })\n\n function updateForm(appConfig: TAppConfig) {\n Object.keys(appData).map((key) => {\n ['max_single_file_size', 'max_zip_file_size'].includes(key)\n ? // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (appData[key] = getFileSizeInMB(appConfig[key]))\n : // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (appData[key] = appConfig[key])\n })\n }\n function onCancel() {\n updateForm(props.appConfig)\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n router.push('/admin/application')\n }\n function onSubmit() {\n const formData: TAppConfigForm = Object.assign({}, appData)\n formData.max_single_file_size *= 1048576\n formData.max_zip_file_size *= 1048576\n store.dispatch(ROOT_STORE.ACTIONS.UPDATE_APPLICATION_CONFIG, formData)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.TITLE')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"form\", {\n class: \"admin-form\",\n onSubmit: _withModifiers(onSubmit, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_3, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.ADMIN_CONTACT')) + \": \", 1),\n (!_unref(edition) && !appData.admin_contact)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"no-contact\",\n value: _ctx.$t('admin.APP_CONFIG.NO_CONTACT_EMAIL'),\n disabled: \"\"\n }, null, 8, _hoisted_4))\n : _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 1,\n id: \"admin_contact\",\n name: \"admin_contact\",\n type: \"email\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((appData.admin_contact) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_5)), [\n [_vModelText, appData.admin_contact]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_USERS_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_users\",\n name: \"max_users\",\n type: \"number\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((appData.max_users) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_7), [\n [_vModelText, appData.max_users]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"span\", _hoisted_9, [\n _hoisted_10,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_USERS_HELP')), 1)\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.SINGLE_UPLOAD_MAX_SIZE_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_single_file_size\",\n name: \"max_single_file_size\",\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((appData.max_single_file_size) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_12), [\n [_vModelText, appData.max_single_file_size]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_13, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.ZIP_UPLOAD_MAX_SIZE_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_zip_file_size\",\n name: \"max_zip_file_size\",\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((appData.max_zip_file_size) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_14), [\n [_vModelText, appData.max_zip_file_size]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_15, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_FILES_IN_ZIP_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"gpx_limit_import\",\n name: \"gpx_limit_import\",\n type: \"number\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((appData.gpx_limit_import) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_16), [\n [_vModelText, appData.gpx_limit_import]\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(edition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createElementVNode(\"button\", _hoisted_18, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(onCancel, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_19)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: _cache[5] || (_cache[5] = _withModifiers(($event: any) => (_ctx.$router.push('/admin/application/edit')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.EDIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[6] || (_cache[6] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ]))\n ], 40, _hoisted_2)\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminApplication.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminApplication.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminApplication.vue?vue&type=style&index=0&id=24ec93e2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-24ec93e2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"stat-card\" }\nconst _hoisted_2 = { class: \"stat-content box\" }\nconst _hoisted_3 = { class: \"stat-icon\" }\nconst _hoisted_4 = { class: \"stat-details\" }\nconst _hoisted_5 = { class: \"stat-huge\" }\nconst _hoisted_6 = { class: \"stat\" }\n\nimport { toRefs } from 'vue'\n\n interface Props {\n icon: string\n text: string\n value: string | number\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatCard',\n props: {\n icon: null,\n text: null,\n value: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n icon: string\n text: string\n value: string | number\n }\n\n \n const { icon, text, value } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa\", `fa-${_unref(icon)}`])\n }, null, 2)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, _toDisplayString(_unref(value)), 1),\n _createElementVNode(\"div\", _hoisted_6, _toDisplayString(_unref(text)), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./StatCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatCard.vue?vue&type=style&index=0&id=6cbb3351&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-stats\" }\n\nimport { computed, toRefs } from 'vue'\n\n import StatCard from '@/components/Common/StatCard.vue'\n import { IAppStatistics } from '@/types/application'\n import { getReadableFileSize } from '@/utils/files'\n\n interface Props {\n appStatistics: IAppStatistics\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AppStatsCards',\n props: {\n appStatistics: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n appStatistics: IAppStatistics\n }\n\n \n\n const { appStatistics } = toRefs(props)\n const uploadDirSize = computed(() =>\n getReadableFileSize(appStatistics.value.uploads_dir_size, false)\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatCard, {\n icon: \"users\",\n value: _unref(appStatistics).users,\n text: _ctx.$t('admin.USER', _unref(appStatistics).users)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"tags\",\n value: _unref(appStatistics).sports,\n text: _ctx.$t('workouts.SPORT', _unref(appStatistics).sports)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"calendar\",\n value: _unref(appStatistics).workouts,\n text: _ctx.$t('workouts.WORKOUT', _unref(appStatistics).workouts)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"folder-open\",\n value: _unref(uploadDirSize).size,\n text: _unref(uploadDirSize).suffix\n }, null, 8, [\"value\", \"text\"])\n ]))\n}\n}\n\n})","import script from \"./AppStatsCards.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStatsCards.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AppStatsCards.vue?vue&type=style&index=0&id=61c5053e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0dd66f89\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-menu\",\n class: \"center-card\"\n}\nconst _hoisted_2 = { class: \"admin-menu description-list\" }\nconst _hoisted_3 = { class: \"application-config-details\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_5 = { class: \"registration-status\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"email-sending-status\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-exclamation-triangle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { capitalize, toRefs, withDefaults } from 'vue'\n\n import AppStatsCards from '@/components/Administration/AppStatsCards.vue'\n import Card from '@/components/Common/Card.vue'\n import { IAppStatistics, TAppConfig } from '@/types/application'\n\n interface Props {\n appConfig: TAppConfig\n appStatistics?: IAppStatistics\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminMenu',\n props: {\n appConfig: null,\n appStatistics: { default: () => ({} as IAppStatistics) }\n },\n setup(__props: any) {\n\nconst props = __props as { appConfig: TAppConfig, appStatistics: IAppStatistics }\n\n \n\n const { appConfig, appStatistics } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.ADMINISTRATION')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(AppStatsCards, { appStatistics: _unref(appStatistics) }, null, 8, [\"appStatistics\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/application\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APPLICATION')), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", _hoisted_3, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.UPDATE_APPLICATION_DESCRIPTION')), 1),\n _hoisted_4,\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.$t(\n `admin.REGISTRATION_${\n _unref(appConfig).is_registration_enabled ? 'ENABLED' : 'DISABLED'\n }`\n )), 1),\n (!_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_6, [\n _hoisted_7,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.EMAIL_SENDING_DISABLED')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/sports\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('workouts.SPORT', 0))), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t('admin.ENABLE_DISABLE_SPORTS')), 1),\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/users\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('admin.USER', 0))), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t('admin.ADMIN_RIGHTS_DELETE_USER_ACCOUNT')), 1)\n ])\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminMenu.vue?vue&type=style&index=0&id=0dd66f89&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0dd66f89\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withModifiers as _withModifiers, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, createBlock as _createBlock, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6d62af67\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-sports\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = { class: \"responsive-table\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, \"#\", -1))\nconst _hoisted_4 = { class: \"text-left\" }\nconst _hoisted_5 = { class: \"text-left sport-action\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, null, -1))\nconst _hoisted_7 = { class: \"text-center\" }\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"cell-heading\" }, \"id\", -1))\nconst _hoisted_9 = { class: \"cell-heading\" }\nconst _hoisted_10 = { class: \"sport-label\" }\nconst _hoisted_11 = { class: \"cell-heading\" }\nconst _hoisted_12 = { class: \"text-center\" }\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"sport-action\" }\nconst _hoisted_15 = { class: \"cell-heading\" }\nconst _hoisted_16 = { class: \"action-button\" }\nconst _hoisted_17 = [\"onClick\"]\nconst _hoisted_18 = {\n key: 0,\n class: \"has-workouts\"\n}\nconst _hoisted_19 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-warning\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { ComputedRef, computed } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ROOT_STORE, SPORTS_STORE } from '@/store/constants'\n import { ITranslatedSport } from '@/types/sports'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminSports',\n setup(__props) {\n\n const { t } = useI18n()\n const store = useStore()\n\n const translatedSports: ComputedRef = computed(() =>\n translateSports(store.getters[SPORTS_STORE.GETTERS.SPORTS], t)\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n function updateSportStatus(id: number, isActive: boolean) {\n store.dispatch(SPORTS_STORE.ACTIONS.UPDATE_SPORTS, {\n id,\n isActive,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.SPORTS.TITLE')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"button\", {\n class: \"top-button\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_3,\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.IMAGE')), 1),\n _createElementVNode(\"th\", _hoisted_4, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.LABEL')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.ACTIVE')), 1),\n _createElementVNode(\"th\", _hoisted_5, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _hoisted_6\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: sport.id\n }, [\n _createElementVNode(\"td\", _hoisted_7, [\n _hoisted_8,\n _createTextVNode(\" \" + _toDisplayString(sport.id), 1)\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.IMAGE')), 1),\n _createVNode(_component_SportImage, {\n title: sport.translatedLabel,\n \"sport-label\": sport.label,\n color: sport.color\n }, null, 8, [\"title\", \"sport-label\", \"color\"])\n ]),\n _createElementVNode(\"td\", _hoisted_10, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.LABEL')), 1),\n _createTextVNode(\" \" + _toDisplayString(sport.translatedLabel), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_12, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.ACTIVE')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${sport.is_active ? '-check' : ''}`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_14, [\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"button\", {\n class: _normalizeClass({ danger: sport.is_active }),\n onClick: ($event: any) => (updateSportStatus(sport.id, !sport.is_active))\n }, _toDisplayString(_ctx.$t(`buttons.${sport.is_active ? 'DIS' : 'EN'}ABLE`)), 11, _hoisted_17),\n (sport.has_workouts)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_18, [\n _hoisted_19,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.HAS_WORKOUTS')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ]))\n }), 128))\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminSports.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminSports.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminSports.vue?vue&type=style&index=0&id=6d62af67&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6d62af67\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { vModelText as _vModelText, withKeys as _withKeys, createElementVNode as _createElementVNode, withDirectives as _withDirectives, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-627a8e91\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"users-filters\" }\nconst _hoisted_2 = { class: \"search-username\" }\nconst _hoisted_3 = [\"onKeyup\", \"placeholder\"]\n\nimport { ref } from 'vue'\n import { useRoute } from 'vue-router'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UsersNameFilter',\n emits: ['filterOnUsername'],\n setup(__props, { emit }) {\n\n const route = useRoute()\n const username = ref(route.query.q ? route.query.q : '')\n\n \n function searchUsers() {\n if (username.value !== '') {\n emit('filterOnUsername', username)\n }\n }\n function resetFilter() {\n username.value = ''\n emit('filterOnUsername', username.value)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"username\",\n name: \"username\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((username).value = $event)),\n onKeyup: _withKeys(searchUsers, [\"enter\"]),\n placeholder: _ctx.$t('user.FILTER_ON_USERNAME')\n }, null, 40, _hoisted_3), [\n [\n _vModelText,\n username.value,\n void 0,\n { trim: true }\n ]\n ]),\n (username.value !== '')\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-times\",\n \"aria-hidden\": \"true\",\n onClick: resetFilter\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa fa-search\", { 'fa-disabled': username.value === '' }]),\n \"aria-hidden\": \"true\",\n onClick: searchUsers\n }, null, 2)\n ]))\n}\n}\n\n})","import script from \"./UsersNameFilter.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./UsersNameFilter.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./UsersNameFilter.vue?vue&type=style&index=0&id=627a8e91&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-627a8e91\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withModifiers as _withModifiers, createElementVNode as _createElementVNode, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, withCtx as _withCtx, normalizeClass as _normalizeClass, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-dc12ff78\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-users\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"no-users\"\n}\nconst _hoisted_3 = {\n key: 1,\n class: \"responsive-table\"\n}\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, \"#\", -1))\nconst _hoisted_5 = { class: \"left-text\" }\nconst _hoisted_6 = { class: \"left-text\" }\nconst _hoisted_7 = { class: \"left-text\" }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = { class: \"cell-heading\" }\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = { class: \"cell-heading\" }\nconst _hoisted_12 = { class: \"text-center\" }\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"text-center\" }\nconst _hoisted_15 = { class: \"cell-heading\" }\nconst _hoisted_16 = { class: \"text-center\" }\nconst _hoisted_17 = { class: \"cell-heading\" }\nconst _hoisted_18 = { class: \"text-center\" }\nconst _hoisted_19 = { class: \"cell-heading\" }\nconst _hoisted_20 = [\"disabled\", \"onClick\"]\n\nimport {\n ComputedRef,\n Ref,\n computed,\n reactive,\n watch,\n capitalize,\n onBeforeMount,\n onUnmounted,\n } from 'vue'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import FilterSelects from '@/components/Common/FilterSelects.vue'\n import Pagination from '@/components/Common/Pagination.vue'\n import UserPicture from '@/components/User/UserPicture.vue'\n import UsersNameFilter from '@/components/Users/UsersNameFilter.vue'\n import { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\n import { IPagination, TPaginationPayload } from '@/types/api'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getQuery, sortList } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminUsers',\n setup(__props) {\n\n const store = useStore()\n const route = useRoute()\n const router = useRouter()\n\n const orderByList: string[] = [\n 'is_active',\n 'admin',\n 'created_at',\n 'username',\n 'workouts_count',\n ]\n const defaultOrderBy = 'created_at'\n let query: TPaginationPayload = reactive(\n getQuery(route.query, orderByList, defaultOrderBy)\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const users: ComputedRef = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS]\n )\n const pagination: ComputedRef = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS_PAGINATION]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => loadUsers(query))\n\n function loadUsers(queryParams: TPaginationPayload) {\n store.dispatch(USERS_STORE.ACTIONS.GET_USERS, queryParams)\n }\n function searchUsers(username: Ref) {\n reloadUsers('q', username.value)\n }\n\n function updateUser(username: string, admin: boolean) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n admin,\n })\n }\n function reloadUsers(queryParam: string, queryValue: string) {\n query[queryParam] = queryValue\n if (queryParam === 'per_page') {\n query.page = 1\n }\n router.push({ path: '/admin/users', query })\n }\n\n onUnmounted(() => {\n store.dispatch(USERS_STORE.ACTIONS.EMPTY_USERS)\n })\n\n watch(\n () => route.query,\n (newQuery: LocationQuery) => {\n query = getQuery(newQuery, orderByList, defaultOrderBy, { query })\n loadUsers(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('admin.USER', 0))), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"button\", {\n class: \"top-button\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1),\n _createVNode(UsersNameFilter, { onFilterOnUsername: searchUsers }),\n _createVNode(FilterSelects, {\n sort: _unref(sortList),\n order_by: orderByList,\n query: _unref(query),\n message: \"admin.USERS.SELECTS.ORDER_BY\",\n onUpdateSelect: reloadUsers\n }, null, 8, [\"sort\", \"query\"]),\n (_unref(users).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('user.NO_USERS_FOUND')), 1))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_4,\n _createElementVNode(\"th\", _hoisted_5, _toDisplayString(_ctx.$t('user.USERNAME')), 1),\n _createElementVNode(\"th\", _hoisted_6, _toDisplayString(_ctx.$t('user.EMAIL')), 1),\n _createElementVNode(\"th\", _hoisted_7, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 0))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.ACTIVE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.ADMIN')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.ACTION')), 1)\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(users), (user) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: user.username\n }, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE')), 1),\n _createVNode(UserPicture, { user: user }, null, 8, [\"user\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_ctx.$t('user.USERNAME')), 1),\n _createVNode(_component_router_link, {\n to: `/admin/users/${user.username}`\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(user.username), 1)\n ]),\n _: 2\n }, 1032, [\"to\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('user.EMAIL')), 1),\n _createTextVNode(\" \" + _toDisplayString(user.email), 1)\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')), 1),\n _createTextVNode(\" \" + _toDisplayString(_unref(formatDate)(\n user.created_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_12, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 0))), 1),\n _createTextVNode(\" \" + _toDisplayString(user.nb_workouts), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_14, [\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('admin.ACTIVE')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${user.is_active ? '-check' : ''}-square-o`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_16, [\n _createElementVNode(\"span\", _hoisted_17, _toDisplayString(_ctx.$t('user.ADMIN')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${user.admin ? '-check' : ''}-square-o`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_18, [\n _createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _createElementVNode(\"button\", {\n class: _normalizeClass({ danger: user.admin }),\n disabled: user.username === _unref(authUser).username,\n onClick: ($event: any) => (updateUser(user.username, !user.admin))\n }, _toDisplayString(_ctx.$t(\n `admin.USERS.TABLE.${\n user.admin ? 'REMOVE' : 'ADD'\n }_ADMIN_RIGHTS`\n )), 11, _hoisted_20)\n ])\n ]))\n }), 128))\n ])\n ]),\n (_unref(pagination).page)\n ? (_openBlock(), _createBlock(Pagination, {\n key: 0,\n path: \"/admin/users\",\n pagination: _unref(pagination),\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 1,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ]))\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminUsers.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminUsers.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminUsers.vue?vue&type=style&index=0&id=dc12ff78&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-dc12ff78\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = { class: \"profile-tabs custom-checkboxes-group\" }\nconst _hoisted_2 = { class: \"profile-tabs-checkboxes custom-checkboxes\" }\nconst _hoisted_3 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n tabs: string[]\n selectedTab: string\n edition: boolean\n disabled?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserProfileTabs',\n props: {\n tabs: null,\n selectedTab: null,\n edition: { type: Boolean },\n disabled: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { tabs: string[], selectedTab: string, edition: boolean, disabled: boolean }\n\n \n\n const { tabs, selectedTab, disabled } = toRefs(props)\n\n function getPath(tab: string) {\n switch (tab) {\n case 'ACCOUNT':\n case 'PICTURE':\n return `/profile/edit/${tab.toLocaleLowerCase()}`\n case 'APPS':\n case 'PREFERENCES':\n case 'SPORTS':\n return `/profile${\n props.edition ? '/edit' : ''\n }/${tab.toLocaleLowerCase()}`\n default:\n case 'PROFILE':\n return `/profile${props.edition ? '/edit' : ''}`\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(tabs), (tab) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"profile-tab custom-checkbox\",\n key: tab\n }, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: tab,\n name: tab,\n checked: _unref(selectedTab).split('/')[0] === tab,\n disabled: _unref(disabled),\n onInput: ($event: any) => (_ctx.$router.push(getPath(tab)))\n }, null, 40, _hoisted_3),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`user.PROFILE.TABS.${tab}`)), 1)\n ])\n ]))\n }), 128))\n ])\n ]))\n}\n}\n\n})","import script from \"./UserProfileTabs.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserProfileTabs.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserProfileTabs.vue?vue&type=style&index=0&id=01b05f01&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9729cba4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-profile\" }\nconst _hoisted_2 = { class: \"box\" }\n\nimport { toRefs } from 'vue'\n\n import UserHeader from '@/components/User/ProfileDisplay/UserHeader.vue'\n import UserProfileTabs from '@/components/User/UserProfileTabs.vue'\n import { IUserProfile } from '@/types/user'\n\n interface Props {\n user: IUserProfile\n tab: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null,\n tab: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n tab: string\n }\n\n \n\n const { user, tab } = toRefs(props)\n const tabs = ['PROFILE', 'PREFERENCES', 'SPORTS', 'APPS']\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(UserHeader, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(UserProfileTabs, {\n tabs: tabs,\n selectedTab: _unref(tab),\n edition: false\n }, null, 8, [\"selectedTab\"]),\n _createVNode(_component_router_view, { user: _unref(user) }, null, 8, [\"user\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=9729cba4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9729cba4\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"user-preferences\",\n class: \"description-list\"\n}\nconst _hoisted_2 = { class: \"profile-buttons\" }\n\nimport { computed, ComputedRef } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getDateFormat } from '@/utils/dates'\n import { languageLabels } from '@/utils/locales'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPreferences',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const appLanguage: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const userLanguage = computed(() =>\n props.user.language\n ? languageLabels[props.user.language]\n : languageLabels['en']\n )\n const fistDayOfWeek = computed(() => (props.user.weekm ? 'MONDAY' : 'SUNDAY'))\n const timezone = computed(() =>\n props.user.timezone ? props.user.timezone : 'Europe/Paris'\n )\n const date_format = computed(() =>\n props.user.date_format ? props.user.date_format : 'MM/dd/yyyy'\n )\n const display_ascent = computed(() =>\n props.user.display_ascent ? 'DISPLAYED' : 'HIDDEN'\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LANGUAGE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(userLanguage)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.TIMEZONE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(timezone)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.DATE_FORMAT')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(getDateFormat)(_unref(date_format), _unref(appLanguage))), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_DAY_OF_WEEK')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(`user.PROFILE.${_unref(fistDayOfWeek)}`)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.UNITS.LABEL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(\n `user.PROFILE.UNITS.${__props.user.imperial_units ? 'IMPERIAL' : 'METRIC'}`\n )), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.ASCENT_DATA')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(`common.${_unref(display_ascent)}`)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"button\", {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/edit/preferences')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPreferences.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPreferences.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"user-profile-edition\",\n class: \"center-card\"\n}\n\nimport { computed, toRefs } from 'vue'\n\n import UserProfileTabs from '@/components/User/UserProfileTabs.vue'\n import { AUTH_USER_STORE } from '@/store/constants'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n tab: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null,\n tab: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n tab: string\n }\n\n \n\n const store = useStore()\n\n const { user, tab } = toRefs(props)\n const tabs = ['PROFILE', 'ACCOUNT', 'PICTURE', 'PREFERENCES', 'SPORTS']\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(`user.PROFILE.${_unref(tab)}_EDITION`)), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserProfileTabs, {\n tabs: tabs,\n selectedTab: _unref(tab),\n edition: true,\n disabled: _unref(loading)\n }, null, 8, [\"selectedTab\", \"disabled\"]),\n _createVNode(_component_router_view, { user: _unref(user) }, null, 8, [\"user\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, createVNode as _createVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-37b8c4c8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-infos-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = {\n key: 1,\n class: \"info-box success-message\"\n}\nconst _hoisted_4 = [\"onSubmit\"]\nconst _hoisted_5 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_6 = [\"disabled\"]\nconst _hoisted_7 = {\n class: \"form-items\",\n for: \"password-field\"\n}\nconst _hoisted_8 = {\n class: \"form-items\",\n for: \"new-password-field\"\n}\nconst _hoisted_9 = { class: \"form-buttons\" }\nconst _hoisted_10 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport {\n ComputedRef,\n Ref,\n computed,\n reactive,\n ref,\n toRefs,\n onMounted,\n watch,\n onUnmounted,\n } from 'vue'\n\n import PasswordInput from '@/components/Common/PasswordInput.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IUserProfile, IUserAccountPayload } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAccountEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n const { user } = toRefs(props)\n\n const store = useStore()\n const userForm: IUserAccountPayload = reactive({\n email: '',\n password: '',\n new_password: '',\n })\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const emailUpdate = ref(false)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const formErrors = ref(false)\n const displayModal: Ref = ref(false)\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function invalidateForm() {\n formErrors.value = true\n }\n function updateUserForm(user: IUserProfile) {\n userForm.email = user.email\n }\n function updatePassword(password: string) {\n userForm.password = password\n }\n function updateNewPassword(new_password: string) {\n userForm.new_password = new_password\n }\n function updateProfile() {\n const payload: IUserAccountPayload = {\n email: userForm.email,\n password: userForm.password,\n }\n if (userForm.new_password) {\n payload.new_password = userForm.new_password\n }\n emailUpdate.value = userForm.email !== user.value.email\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_ACCOUNT, payload)\n }\n function updateDisplayModal(value: boolean) {\n displayModal.value = value\n }\n function deleteAccount(username: string) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.DELETE_ACCOUNT, { username })\n }\n\n onUnmounted(() => {\n store.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\n watch(\n () => isSuccess.value,\n async (isSuccessValue) => {\n if (isSuccessValue) {\n updatePassword('')\n updateNewPassword('')\n updateUserForm(user.value)\n formErrors.value = false\n }\n }\n )\n watch(\n () => user.value.email,\n async () => {\n updateUserForm(user.value)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t('user.CONFIRM_ACCOUNT_DELETION'),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (deleteAccount(_unref(user).username))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\n `user.PROFILE.SUCCESSFUL_${\n emailUpdate.value && _unref(appConfig).is_email_sending_enabled ? 'EMAIL_' : ''\n }UPDATE`\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_5, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.EMAIL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"email\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((userForm.email) = $event)),\n disabled: _unref(loading),\n required: true,\n onInvalid: invalidateForm\n }, null, 40, _hoisted_6), [\n [_vModelText, userForm.email]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.CURRENT_PASSWORD')) + \"* \", 1),\n _createVNode(PasswordInput, {\n id: \"password-field\",\n disabled: _unref(loading),\n password: userForm.password,\n required: true,\n onUpdatePassword: updatePassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"password\"])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.NEW_PASSWORD')) + \" \", 1),\n _createVNode(PasswordInput, {\n id: \"new-password-field\",\n disabled: _unref(loading),\n checkStrength: true,\n password: userForm.new_password,\n isSuccess: false,\n onUpdatePassword: updateNewPassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"password\"])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"button\", _hoisted_10, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[3] || (_cache[3] = _withModifiers(($event: any) => (_ctx.$router.push('/profile')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1),\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (updateDisplayModal(true)), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.DELETE_MY_ACCOUNT')), 1)\n ])\n ], 42, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserAccountEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAccountEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAccountEdition.vue?vue&type=style&index=0&id=37b8c4c8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-37b8c4c8\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, vModelText as _vModelText, withDirectives as _withDirectives, createVNode as _createVNode, withModifiers as _withModifiers, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5e5a4552\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-infos-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = {\n class: \"form-items\",\n for: \"registrationDate\"\n}\nconst _hoisted_5 = [\"value\"]\nconst _hoisted_6 = {\n class: \"form-items\",\n for: \"first_name\"\n}\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = {\n class: \"form-items\",\n for: \"last_name\"\n}\nconst _hoisted_9 = {\n class: \"form-items\",\n for: \"birth_date\"\n}\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = {\n class: \"form-items\",\n for: \"location\"\n}\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = { class: \"form-items\" }\nconst _hoisted_14 = { class: \"form-buttons\" }\nconst _hoisted_15 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport { format } from 'date-fns'\n import { ComputedRef, computed, reactive, onMounted, onUnmounted } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IUserProfile, IUserPayload, IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserInfosEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const userForm: IUserPayload = reactive({\n first_name: '',\n last_name: '',\n birth_date: '',\n location: '',\n bio: '',\n })\n const registrationDate = computed(() =>\n props.user.created_at\n ? formatDate(\n props.user.created_at,\n props.user.timezone,\n props.user.date_format\n )\n : ''\n )\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function updateUserForm(user: IUserProfile) {\n userForm.first_name = user.first_name ? user.first_name : ''\n userForm.last_name = user.last_name ? user.last_name : ''\n userForm.birth_date = user.birth_date\n ? format(new Date(user.birth_date), 'yyyy-MM-dd')\n : ''\n userForm.location = user.location ? user.location : ''\n userForm.bio = user.bio ? user.bio : ''\n }\n function updateBio(value: string) {\n userForm.bio = value\n }\n function updateProfile() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PROFILE, userForm)\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')) + \" \", 1),\n _createElementVNode(\"input\", {\n id: \"registrationDate\",\n value: _unref(registrationDate),\n disabled: \"\"\n }, null, 8, _hoisted_5)\n ]),\n _createElementVNode(\"label\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.FIRST_NAME')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"first_name\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((userForm.first_name) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_7), [\n [_vModelText, userForm.first_name]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LAST_NAME')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"last_name\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((userForm.last_name) = $event))\n }, null, 512), [\n [_vModelText, userForm.last_name]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_9, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.BIRTH_DATE')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"birth_date\",\n type: \"date\",\n class: \"birth-date\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((userForm.birth_date) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_10), [\n [_vModelText, userForm.birth_date]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LOCATION')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"location\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((userForm.location) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_12), [\n [_vModelText, userForm.location]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_13, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.BIO')) + \" \", 1),\n _createVNode(_component_CustomTextArea, {\n name: \"bio\",\n charLimit: 200,\n input: userForm.bio,\n disabled: _unref(loading),\n onUpdateValue: updateBio\n }, null, 8, [\"input\", \"disabled\"])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"button\", _hoisted_15, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (_ctx.$router.push('/profile')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserInfosEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserInfosEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserInfosEdition.vue?vue&type=style&index=0&id=5e5a4552&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5e5a4552\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-687e9604\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-picture-edition\" }\nconst _hoisted_2 = { class: \"user-picture-form\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = { class: \"picture-help\" }\nconst _hoisted_5 = { class: \"info-box\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = { class: \"picture-buttons\" }\nconst _hoisted_8 = [\"disabled\"]\n\nimport { ComputedRef, Ref, computed, ref, toRefs, onUnmounted } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getReadableFileSize } from '@/utils/files'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPictureEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const store = useStore()\n\n const { user } = toRefs(props)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const appConfig: ComputedRef = 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 pictureFile: Ref = ref(null)\n\n function deleteUserPicture() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.DELETE_PICTURE)\n }\n function updatePictureFile(event: Event & { target: HTMLInputElement }) {\n if (event.target.files) {\n pictureFile.value = event.target.files[0]\n }\n }\n function updateUserPicture() {\n if (pictureFile.value) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PICTURE, {\n picture: pictureFile.value,\n })\n }\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateUserPicture, [\"prevent\"])\n }, [\n _createElementVNode(\"input\", {\n type: \"file\",\n name: \"picture\",\n accept: \".png,.jpg,.gif\",\n onInput: updatePictureFile\n }, null, 32),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"span\", _hoisted_5, [\n _hoisted_6,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(fileSizeLimit)), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"button\", {\n type: \"submit\",\n disabled: !pictureFile.value\n }, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE_UPDATE')), 9, _hoisted_8),\n (_unref(user).picture)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"danger\",\n onClick: deleteUserPicture\n }, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE_REMOVE')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.BACK_TO_PROFILE')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPictureEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPictureEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPictureEdition.vue?vue&type=style&index=0&id=687e9604&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-687e9604\"]])\n\nexport default __exports__","export const timeZones = [\n 'Africa/Abidjan',\n 'Africa/Accra',\n 'Africa/Algiers',\n 'Africa/Bissau',\n 'Africa/Cairo',\n 'Africa/Casablanca',\n 'Africa/Ceuta',\n 'Africa/El_Aaiun',\n 'Africa/Johannesburg',\n 'Africa/Juba',\n 'Africa/Khartoum',\n 'Africa/Lagos',\n 'Africa/Maputo',\n 'Africa/Monrovia',\n 'Africa/Nairobi',\n 'Africa/Ndjamena',\n 'Africa/Sao_Tome',\n 'Africa/Tripoli',\n 'Africa/Tunis',\n 'Africa/Windhoek',\n 'America/Adak',\n 'America/Anchorage',\n 'America/Araguaina',\n 'America/Argentina/Buenos_Aires',\n 'America/Argentina/Catamarca',\n 'America/Argentina/Cordoba',\n 'America/Argentina/Jujuy',\n 'America/Argentina/La_Rioja',\n 'America/Argentina/Mendoza',\n 'America/Argentina/Rio_Gallegos',\n 'America/Argentina/Salta',\n 'America/Argentina/San_Juan',\n 'America/Argentina/San_Luis',\n 'America/Argentina/Tucuman',\n 'America/Argentina/Ushuaia',\n 'America/Asuncion',\n 'America/Atikokan',\n 'America/Bahia',\n 'America/Bahia_Banderas',\n 'America/Barbados',\n 'America/Belem',\n 'America/Belize',\n 'America/Blanc-Sablon',\n 'America/Boa_Vista',\n 'America/Bogota',\n 'America/Boise',\n 'America/Cambridge_Bay',\n 'America/Campo_Grande',\n 'America/Cancun',\n 'America/Caracas',\n 'America/Cayenne',\n 'America/Chicago',\n 'America/Chihuahua',\n 'America/Costa_Rica',\n 'America/Creston',\n 'America/Cuiaba',\n 'America/Curacao',\n 'America/Danmarkshavn',\n 'America/Dawson',\n 'America/Dawson_Creek',\n 'America/Denver',\n 'America/Detroit',\n 'America/Edmonton',\n 'America/Eirunepe',\n 'America/El_Salvador',\n 'America/Fortaleza',\n 'America/Fort_Nelson',\n 'America/Glace_Bay',\n 'America/Godthab',\n 'America/Goose_Bay',\n 'America/Grand_Turk',\n 'America/Guatemala',\n 'America/Guayaquil',\n 'America/Guyana',\n 'America/Halifax',\n 'America/Havana',\n 'America/Hermosillo',\n 'America/Indiana/Indianapolis',\n 'America/Indiana/Knox',\n 'America/Indiana/Marengo',\n 'America/Indiana/Petersburg',\n 'America/Indiana/Tell_City',\n 'America/Indiana/Vevay',\n 'America/Indiana/Vincennes',\n 'America/Indiana/Winamac',\n 'America/Inuvik',\n 'America/Iqaluit',\n 'America/Jamaica',\n 'America/Juneau',\n 'America/Kentucky/Louisville',\n 'America/Kentucky/Monticello',\n 'America/La_Paz',\n 'America/Lima',\n 'America/Los_Angeles',\n 'America/Maceio',\n 'America/Managua',\n 'America/Manaus',\n 'America/Martinique',\n 'America/Matamoros',\n 'America/Mazatlan',\n 'America/Menominee',\n 'America/Merida',\n 'America/Metlakatla',\n 'America/Mexico_City',\n 'America/Miquelon',\n 'America/Moncton',\n 'America/Monterrey',\n 'America/Montevideo',\n 'America/Nassau',\n 'America/New_York',\n 'America/Nipigon',\n 'America/Nome',\n 'America/Noronha',\n 'America/North_Dakota/Beulah',\n 'America/North_Dakota/Center',\n 'America/North_Dakota/New_Salem',\n 'America/Ojinaga',\n 'America/Panama',\n 'America/Pangnirtung',\n 'America/Paramaribo',\n 'America/Phoenix',\n 'America/Port-au-Prince',\n 'America/Port_of_Spain',\n 'America/Porto_Velho',\n 'America/Puerto_Rico',\n 'America/Punta_Arenas',\n 'America/Rainy_River',\n 'America/Rankin_Inlet',\n 'America/Recife',\n 'America/Regina',\n 'America/Resolute',\n 'America/Rio_Branco',\n 'America/Santarem',\n 'America/Santiago',\n 'America/Santo_Domingo',\n 'America/Sao_Paulo',\n 'America/Scoresbysund',\n 'America/Sitka',\n 'America/St_Johns',\n 'America/Swift_Current',\n 'America/Tegucigalpa',\n 'America/Thule',\n 'America/Thunder_Bay',\n 'America/Tijuana',\n 'America/Toronto',\n 'America/Vancouver',\n 'America/Whitehorse',\n 'America/Winnipeg',\n 'America/Yakutat',\n 'America/Yellowknife',\n 'Antarctica/Casey',\n 'Antarctica/Davis',\n 'Antarctica/DumontDUrville',\n 'Antarctica/Macquarie',\n 'Antarctica/Mawson',\n 'Antarctica/Palmer',\n 'Antarctica/Rothera',\n 'Antarctica/Syowa',\n 'Antarctica/Troll',\n 'Antarctica/Vostok',\n 'Asia/Almaty',\n 'Asia/Amman',\n 'Asia/Anadyr',\n 'Asia/Aqtau',\n 'Asia/Aqtobe',\n 'Asia/Ashgabat',\n 'Asia/Atyrau',\n 'Asia/Baghdad',\n 'Asia/Baku',\n 'Asia/Bangkok',\n 'Asia/Barnaul',\n 'Asia/Beirut',\n 'Asia/Bishkek',\n 'Asia/Brunei',\n 'Asia/Chita',\n 'Asia/Choibalsan',\n 'Asia/Colombo',\n 'Asia/Damascus',\n 'Asia/Dhaka',\n 'Asia/Dili',\n 'Asia/Dubai',\n 'Asia/Dushanbe',\n 'Asia/Famagusta',\n 'Asia/Gaza',\n 'Asia/Hebron',\n 'Asia/Ho_Chi_Minh',\n 'Asia/Hong_Kong',\n 'Asia/Hovd',\n 'Asia/Irkutsk',\n 'Asia/Jakarta',\n 'Asia/Jayapura',\n 'Asia/Jerusalem',\n 'Asia/Kabul',\n 'Asia/Kamchatka',\n 'Asia/Karachi',\n 'Asia/Kathmandu',\n 'Asia/Khandyga',\n 'Asia/Kolkata',\n 'Asia/Krasnoyarsk',\n 'Asia/Kuala_Lumpur',\n 'Asia/Kuching',\n 'Asia/Macau',\n 'Asia/Magadan',\n 'Asia/Makassar',\n 'Asia/Manila',\n 'Asia/Nicosia',\n 'Asia/Novokuznetsk',\n 'Asia/Novosibirsk',\n 'Asia/Omsk',\n 'Asia/Oral',\n 'Asia/Pontianak',\n 'Asia/Pyongyang',\n 'Asia/Qatar',\n 'Asia/Qostanay',\n 'Asia/Qyzylorda',\n 'Asia/Riyadh',\n 'Asia/Sakhalin',\n 'Asia/Samarkand',\n 'Asia/Seoul',\n 'Asia/Shanghai',\n 'Asia/Singapore',\n 'Asia/Srednekolymsk',\n 'Asia/Taipei',\n 'Asia/Tashkent',\n 'Asia/Tbilisi',\n 'Asia/Tehran',\n 'Asia/Thimphu',\n 'Asia/Tokyo',\n 'Asia/Tomsk',\n 'Asia/Ulaanbaatar',\n 'Asia/Urumqi',\n 'Asia/Ust-Nera',\n 'Asia/Vladivostok',\n 'Asia/Yakutsk',\n 'Asia/Yangon',\n 'Asia/Yekaterinburg',\n 'Asia/Yerevan',\n 'Atlantic/Azores',\n 'Atlantic/Bermuda',\n 'Atlantic/Canary',\n 'Atlantic/Cape_Verde',\n 'Atlantic/Faroe',\n 'Atlantic/Madeira',\n 'Atlantic/Reykjavik',\n 'Atlantic/South_Georgia',\n 'Atlantic/Stanley',\n 'Australia/Adelaide',\n 'Australia/Brisbane',\n 'Australia/Broken_Hill',\n 'Australia/Currie',\n 'Australia/Darwin',\n 'Australia/Eucla',\n 'Australia/Hobart',\n 'Australia/Lindeman',\n 'Australia/Lord_Howe',\n 'Australia/Melbourne',\n 'Australia/Perth',\n 'Australia/Sydney',\n 'Europe/Amsterdam',\n 'Europe/Andorra',\n 'Europe/Astrakhan',\n 'Europe/Athens',\n 'Europe/Belgrade',\n 'Europe/Berlin',\n 'Europe/Brussels',\n 'Europe/Bucharest',\n 'Europe/Budapest',\n 'Europe/Chisinau',\n 'Europe/Copenhagen',\n 'Europe/Dublin',\n 'Europe/Gibraltar',\n 'Europe/Helsinki',\n 'Europe/Istanbul',\n 'Europe/Kaliningrad',\n 'Europe/Kiev',\n 'Europe/Kirov',\n 'Europe/Lisbon',\n 'Europe/London',\n 'Europe/Luxembourg',\n 'Europe/Madrid',\n 'Europe/Malta',\n 'Europe/Minsk',\n 'Europe/Monaco',\n 'Europe/Moscow',\n 'Europe/Oslo',\n 'Europe/Paris',\n 'Europe/Prague',\n 'Europe/Riga',\n 'Europe/Rome',\n 'Europe/Samara',\n 'Europe/Saratov',\n 'Europe/Simferopol',\n 'Europe/Sofia',\n 'Europe/Stockholm',\n 'Europe/Tallinn',\n 'Europe/Tirane',\n 'Europe/Ulyanovsk',\n 'Europe/Uzhgorod',\n 'Europe/Vienna',\n 'Europe/Vilnius',\n 'Europe/Volgograd',\n 'Europe/Warsaw',\n 'Europe/Zaporozhye',\n 'Europe/Zurich',\n 'Indian/Chagos',\n 'Indian/Christmas',\n 'Indian/Cocos',\n 'Indian/Kerguelen',\n 'Indian/Mahe',\n 'Indian/Maldives',\n 'Indian/Mauritius',\n 'Indian/Reunion',\n 'Pacific/Apia',\n 'Pacific/Auckland',\n 'Pacific/Bougainville',\n 'Pacific/Chatham',\n 'Pacific/Chuuk',\n 'Pacific/Easter',\n 'Pacific/Efate',\n 'Pacific/Enderbury',\n 'Pacific/Fakaofo',\n 'Pacific/Fiji',\n 'Pacific/Funafuti',\n 'Pacific/Galapagos',\n 'Pacific/Gambier',\n 'Pacific/Guadalcanal',\n 'Pacific/Guam',\n 'Pacific/Honolulu',\n 'Pacific/Kiritimati',\n 'Pacific/Kosrae',\n 'Pacific/Kwajalein',\n 'Pacific/Majuro',\n 'Pacific/Marquesas',\n 'Pacific/Nauru',\n 'Pacific/Niue',\n 'Pacific/Norfolk',\n 'Pacific/Noumea',\n 'Pacific/Pago_Pago',\n 'Pacific/Palau',\n 'Pacific/Pitcairn',\n 'Pacific/Pohnpei',\n 'Pacific/Port_Moresby',\n 'Pacific/Rarotonga',\n 'Pacific/Tahiti',\n 'Pacific/Tarawa',\n 'Pacific/Tongatapu',\n 'Pacific/Wake',\n 'Pacific/Wallis',\n]\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, withKeys as _withKeys, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-47ea2903\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"tz-dropdown\" }\nconst _hoisted_2 = [\"value\", \"disabled\", \"onKeydown\"]\nconst _hoisted_3 = [\"onClick\", \"onMouseover\", \"autofocus\"]\n\nimport { Ref, ref, toRefs, watch, withDefaults } from 'vue'\n\n import { timeZones } from '@/utils/timezone'\n\n interface Props {\n input: string\n disabled?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'TimezoneDropdown',\n props: {\n input: null,\n disabled: { type: Boolean, default: false }\n },\n emits: ['updateTimezone'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { input: string, disabled: boolean }\n\n \n\n \n\n const { input, disabled } = toRefs(props)\n const timezone: Ref = ref(props.input)\n const isOpen: Ref = ref(false)\n const tzList: Ref = ref(null)\n const focusItemIndex: Ref = ref(0)\n\n function matchTimezone(t: string): RegExpMatchArray | null {\n return t.toLowerCase().match(timezone.value.toLowerCase())\n }\n function onMouseOver(index: number) {\n focusItemIndex.value = index\n }\n function onUpdateTimezone(value: string) {\n timezone.value = value\n isOpen.value = false\n emit('updateTimezone', value)\n }\n function onEnter(event: Event & { target: HTMLInputElement }) {\n event.preventDefault()\n if (tzList.value?.firstElementChild?.innerHTML) {\n onUpdateTimezone(tzList.value?.firstElementChild?.innerHTML)\n }\n }\n function openDropdown(event: Event & { target: HTMLInputElement }) {\n event.preventDefault()\n isOpen.value = true\n timezone.value = event.target.value.trim()\n }\n\n watch(\n () => props.input,\n (value) => {\n timezone.value = value\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"input\", {\n class: \"tz-dropdown-input\",\n id: \"timezone\",\n name: \"timezone\",\n value: timezone.value,\n disabled: _unref(disabled),\n required: \"\",\n onKeydown: [\n _cache[0] || (_cache[0] = _withKeys(($event: any) => (onUpdateTimezone(_unref(input))), [\"esc\"])),\n _withKeys(onEnter, [\"enter\"])\n ],\n onInput: openDropdown\n }, null, 40, _hoisted_2),\n (isOpen.value)\n ? (_openBlock(), _createElementBlock(\"ul\", {\n key: 0,\n class: \"tz-dropdown-list\",\n ref_key: \"tzList\",\n ref: tzList\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(timeZones).filter((t) => matchTimezone(t)), (tz, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: tz,\n class: _normalizeClass([\"tz-dropdown-item\", { focus: index === focusItemIndex.value }]),\n onClick: ($event: any) => (onUpdateTimezone(tz)),\n onMouseover: ($event: any) => (onMouseOver(index)),\n autofocus: index === focusItemIndex.value\n }, _toDisplayString(tz), 43, _hoisted_3))\n }), 128))\n ], 512))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./TimezoneDropdown.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./TimezoneDropdown.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./TimezoneDropdown.vue?vue&type=style&index=0&id=47ea2903&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-47ea2903\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, vModelSelect as _vModelSelect, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, createVNode as _createVNode, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-065d5e6c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-preferences-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = { class: \"form-items\" }\nconst _hoisted_5 = [\"disabled\"]\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = { class: \"form-items\" }\nconst _hoisted_8 = { class: \"form-items\" }\nconst _hoisted_9 = [\"disabled\"]\nconst _hoisted_10 = [\"value\"]\nconst _hoisted_11 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_12 = { class: \"checkboxes-label\" }\nconst _hoisted_13 = { class: \"checkboxes\" }\nconst _hoisted_14 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_15 = { class: \"checkbox-label\" }\nconst _hoisted_16 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_17 = { class: \"checkboxes-label\" }\nconst _hoisted_18 = { class: \"checkboxes\" }\nconst _hoisted_19 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_20 = { class: \"checkbox-label\" }\nconst _hoisted_21 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_22 = { class: \"checkboxes-label\" }\nconst _hoisted_23 = { class: \"checkboxes\" }\nconst _hoisted_24 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_25 = { class: \"checkbox-label\" }\nconst _hoisted_26 = { class: \"form-buttons\" }\nconst _hoisted_27 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport { ComputedRef, computed, reactive, onMounted, onUnmounted } from 'vue'\n\n import TimezoneDropdown from '@/components/User/ProfileEdition/TimezoneDropdown.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IUserPreferencesPayload, IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { availableDateFormatOptions } from '@/utils/dates'\n import { availableLanguages } from '@/utils/locales'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPreferencesEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const userForm: IUserPreferencesPayload = reactive({\n display_ascent: true,\n imperial_units: false,\n language: '',\n timezone: 'Europe/Paris',\n date_format: 'dd/MM/yyyy',\n weekm: false,\n })\n const weekStart = [\n {\n label: 'SUNDAY',\n value: false,\n },\n {\n label: 'MONDAY',\n value: true,\n },\n ]\n const imperialUnits = [\n {\n label: 'METRIC',\n value: false,\n },\n {\n label: 'IMPERIAL',\n value: true,\n },\n ]\n const ascentData = [\n {\n label: 'DISPLAYED',\n value: true,\n },\n {\n label: 'HIDDEN',\n value: false,\n },\n ]\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const dateFormatOptions = computed(() =>\n availableDateFormatOptions(\n new Date().toUTCString(),\n props.user.timezone,\n userForm.language\n )\n )\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function updateUserForm(user: IAuthUserProfile) {\n userForm.display_ascent = user.display_ascent\n userForm.imperial_units = user.imperial_units ? user.imperial_units : false\n userForm.language = user.language ? user.language : 'en'\n userForm.timezone = user.timezone ? user.timezone : 'Europe/Paris'\n userForm.date_format = user.date_format ? user.date_format : 'dd/MM/yyyy'\n userForm.weekm = user.weekm ? user.weekm : false\n }\n function updateProfile() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PREFERENCES, userForm)\n }\n function updateTZ(value: string) {\n userForm.timezone = value\n }\n function updateAscentDisplay(value: boolean) {\n userForm.display_ascent = value\n }\n function updateImperialUnit(value: boolean) {\n userForm.imperial_units = value\n }\n function updateWeekM(value: boolean) {\n userForm.weekm = value\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LANGUAGE')) + \" \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"language\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((userForm.language) = $event)),\n disabled: _unref(loading)\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(availableLanguages), (lang) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: lang.value,\n key: lang.value\n }, _toDisplayString(lang.label), 9, _hoisted_6))\n }), 128))\n ], 8, _hoisted_5), [\n [_vModelSelect, userForm.language]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.TIMEZONE')) + \" \", 1),\n _createVNode(TimezoneDropdown, {\n input: userForm.timezone,\n disabled: _unref(loading),\n onUpdateTimezone: updateTZ\n }, null, 8, [\"input\", \"disabled\"])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.DATE_FORMAT')) + \" \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"date_format\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((userForm.date_format) = $event)),\n disabled: _unref(loading)\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(dateFormatOptions), (dateFormat) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: dateFormat.value,\n key: dateFormat.value\n }, _toDisplayString(dateFormat.label), 9, _hoisted_10))\n }), 128))\n ], 8, _hoisted_9), [\n [_vModelSelect, userForm.date_format]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_DAY_OF_WEEK')), 1),\n _createElementVNode(\"div\", _hoisted_13, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(weekStart, (start) => {\n return _createElementVNode(\"label\", {\n key: start.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: start.label,\n name: start.label,\n checked: start.value === userForm.weekm,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateWeekM(start.value))\n }, null, 40, _hoisted_14),\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t(`user.PROFILE.${start.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"span\", _hoisted_17, _toDisplayString(_ctx.$t('user.PROFILE.UNITS.LABEL')), 1),\n _createElementVNode(\"div\", _hoisted_18, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(imperialUnits, (unit) => {\n return _createElementVNode(\"label\", {\n key: unit.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: unit.label,\n name: unit.label,\n checked: unit.value === userForm.imperial_units,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateImperialUnit(unit.value))\n }, null, 40, _hoisted_19),\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t(`user.PROFILE.UNITS.${unit.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"span\", _hoisted_22, _toDisplayString(_ctx.$t('user.PROFILE.ASCENT_DATA')), 1),\n _createElementVNode(\"div\", _hoisted_23, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(ascentData, (status) => {\n return _createElementVNode(\"label\", {\n key: status.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: status.label,\n name: status.label,\n checked: status.value === userForm.display_ascent,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateAscentDisplay(status.value))\n }, null, 40, _hoisted_24),\n _createElementVNode(\"span\", _hoisted_25, _toDisplayString(_ctx.$t(`common.${status.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_26, [\n _createElementVNode(\"button\", _hoisted_27, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/preferences')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPreferencesEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPreferencesEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPreferencesEdition.vue?vue&type=style&index=0&id=065d5e6c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-065d5e6c\"]])\n\nexport default __exports__","export const oauth2_scopes = [\n 'profile:read',\n 'profile:write',\n 'users:read',\n 'users:write',\n 'workouts:read',\n 'workouts:write',\n]\n\nexport const admin_oauth2_scopes = ['application:write']\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, vModelText as _vModelText, withDirectives as _withDirectives, resolveComponent as _resolveComponent, createVNode as _createVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0657ee77\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"new-oauth2-app\" }\nconst _hoisted_2 = { id: \"new-oauth2-title\" }\nconst _hoisted_3 = { id: \"apps-form\" }\nconst _hoisted_4 = [\"onSubmit\"]\nconst _hoisted_5 = { class: \"form-items\" }\nconst _hoisted_6 = { class: \"form-item\" }\nconst _hoisted_7 = { for: \"app-name\" }\nconst _hoisted_8 = { class: \"form-item\" }\nconst _hoisted_9 = { for: \"app-description\" }\nconst _hoisted_10 = { class: \"form-item\" }\nconst _hoisted_11 = { for: \"app-url\" }\nconst _hoisted_12 = { class: \"form-item\" }\nconst _hoisted_13 = { for: \"app-redirect-uri\" }\nconst _hoisted_14 = { class: \"form-item-scope\" }\nconst _hoisted_15 = { class: \"form-item-scope-label\" }\nconst _hoisted_16 = { class: \"scope-label\" }\nconst _hoisted_17 = [\"name\", \"checked\", \"onChange\"]\nconst _hoisted_18 = [\"innerHTML\"]\nconst _hoisted_19 = { class: \"form-buttons\" }\nconst _hoisted_20 = [\"disabled\"]\n\nimport { computed, reactive } from 'vue'\n\n import { OAUTH2_STORE } from '@/store/constants'\n import { IOAuth2ClientPayload } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { admin_oauth2_scopes, oauth2_scopes } from '@/utils/oauth'\n\n interface Props {\n authUser: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AddUserApp',\n props: {\n authUser: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n const appForm = reactive({\n client_name: '',\n client_uri: '',\n client_description: '',\n redirect_uri: '',\n })\n const scopes: string[] = reactive([])\n const filtered_scopes = computed(() =>\n getScopes(props.authUser, admin_oauth2_scopes, oauth2_scopes)\n )\n\n function createApp() {\n const payload: IOAuth2ClientPayload = {\n client_name: appForm.client_name,\n client_description: appForm.client_description,\n client_uri: appForm.client_uri,\n redirect_uris: [appForm.redirect_uri],\n scope: scopes.sort().join(' '),\n }\n store.dispatch(OAUTH2_STORE.ACTIONS.CREATE_CLIENT, payload)\n }\n function updateDescription(value: string) {\n appForm.client_description = value\n }\n function updateScopes(scope: string) {\n const index = scopes.indexOf(scope)\n if (index > -1) {\n scopes.splice(index, 1)\n } else {\n scopes.push(scope)\n }\n }\n function getScopes(\n authUser: IAuthUserProfile,\n admin_scopes: string[],\n scopes: string[]\n ) {\n const filtered_scopes = [...scopes]\n if (authUser.admin) {\n filtered_scopes.push(...admin_scopes)\n }\n return filtered_scopes.sort()\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"h1\", _hoisted_2, _toDisplayString(_ctx.$t('oauth2.ADD_A_NEW_APP')), 1),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(createApp, [\"prevent\"])\n }, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"label\", _hoisted_7, _toDisplayString(_ctx.$t('oauth2.APP.NAME')) + \"*\", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-name\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((appForm.client_name) = $event))\n }, null, 512), [\n [_vModelText, appForm.client_name]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"label\", _hoisted_9, _toDisplayString(_ctx.$t('oauth2.APP.DESCRIPTION')), 1),\n _createVNode(_component_CustomTextArea, {\n name: \"app-description\",\n charLimit: 200,\n input: appForm.description,\n onUpdateValue: updateDescription\n }, null, 8, [\"input\"])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"label\", _hoisted_11, _toDisplayString(_ctx.$t('oauth2.APP.URL')) + \"*\", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-url\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((appForm.client_uri) = $event))\n }, null, 512), [\n [_vModelText, appForm.client_uri]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"label\", _hoisted_13, _toDisplayString(_ctx.$t('oauth2.APP.REDIRECT_URL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-redirect-uri\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((appForm.redirect_uri) = $event))\n }, null, 512), [\n [_vModelText, appForm.redirect_uri]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", _hoisted_15, _toDisplayString(_ctx.$t('oauth2.APP.SCOPE.LABEL')) + \"* \", 1),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(filtered_scopes), (scope) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"form-item-scope-checkboxes\",\n key: scope\n }, [\n _createElementVNode(\"label\", _hoisted_16, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n name: scope,\n checked: scopes.includes(scope),\n onChange: ($event: any) => (updateScopes(scope))\n }, null, 40, _hoisted_17),\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]),\n _createElementVNode(\"p\", {\n class: \"scope-description\",\n innerHTML: _ctx.$t(`oauth2.APP.SCOPE.${scope}_DESCRIPTION`)\n }, null, 8, _hoisted_18)\n ]))\n }), 128))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n type: \"submit\",\n disabled: scopes.length === 0\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_20),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[3] || (_cache[3] = _withModifiers(() => _ctx.$router.push('/profile/apps'), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./AddUserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AddUserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AddUserApp.vue?vue&type=style&index=0&id=0657ee77&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0657ee77\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3b2fe9ed\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"authorize-oauth2-app\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { id: \"authorize-oauth2-title\" }\nconst _hoisted_4 = { class: \"oauth2-access description-list\" }\nconst _hoisted_5 = { class: \"client-scope\" }\nconst _hoisted_6 = [\"innerHTML\"]\nconst _hoisted_7 = { class: \"authorize-oauth2-buttons\" }\nconst _hoisted_8 = { key: 1 }\nconst _hoisted_9 = { class: \"no-app\" }\n\nimport { computed, ComputedRef, onBeforeMount } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IOAuth2Client } from '@/types/oauth'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AuthorizeUserApp',\n setup(__props) {\n\n const route = useRoute()\n const store = useStore()\n\n const client: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENT]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => loadApp())\n\n function loadApp() {\n if (route.query.client_id && typeof route.query.client_id === 'string') {\n store.dispatch(\n OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_CLIENT_ID,\n route.query.client_id\n )\n }\n }\n\n function authorizeApp() {\n store.dispatch(OAUTH2_STORE.ACTIONS.AUTHORIZE_CLIENT, {\n client_id: `${route.query.client_id}`,\n redirect_uri: `${route.query.redirect_uri}`,\n response_type: `${route.query.response_type}`,\n scope: `${route.query.scope}`,\n state: `${route.query.state ? route.query.state : ''}`,\n code_challenge: `${\n route.query.code_challenge ? route.query.code_challenge : ''\n }`,\n code_challenge_method: `${\n route.query.code_challenge_method\n ? route.query.code_challenge_method\n : ''\n }`,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(client).client_id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"h1\", _hoisted_3, [\n _createVNode(_component_i18n_t, { keypath: \"oauth2.AUTHORIZE_APP\" }, {\n default: _withCtx(() => [\n _createVNode(_component_router_link, {\n to: { name: 'UserApp', params: { id: _unref(client).id } }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(client).name), 1)\n ]),\n _: 1\n }, 8, [\"to\"])\n ]),\n _: 1\n })\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t('oauth2.APP_REQUESTING_ACCESS')), 1),\n _createElementVNode(\"dl\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(client).scope.split(' '), (scope) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: scope }, [\n _createElementVNode(\"dt\", _hoisted_5, [\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]),\n _createElementVNode(\"dd\", {\n innerHTML: _ctx.$t(`oauth2.APP.SCOPE.${scope}_DESCRIPTION`)\n }, null, 8, _hoisted_6)\n ], 64))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: authorizeApp\n }, _toDisplayString(_ctx.$t('buttons.AUTHORIZE')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"p\", _hoisted_9, _toDisplayString(_ctx.$t('oauth2.NO_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n ]))\n}\n}\n\n})","import script from \"./AuthorizeUserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AuthorizeUserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AuthorizeUserApp.vue?vue&type=style&index=0&id=3b2fe9ed&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3b2fe9ed\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"oauth2-apps\" }\n\nimport { onUnmounted, toRefs } from 'vue'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const { user } = toRefs(props)\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(OAUTH2_STORE.MUTATIONS.SET_CLIENTS, [])\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_router_view, { authUser: _unref(user) }, null, 8, [\"authUser\"])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3a844fa2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"oauth2-app\",\n class: \"description-list\"\n}\nconst _hoisted_2 = { key: 1 }\nconst _hoisted_3 = {\n key: 0,\n class: \"info-box success-message\"\n}\nconst _hoisted_4 = [\"title\"]\nconst _hoisted_5 = { key: 0 }\nconst _hoisted_6 = {\n key: 1,\n class: \"app-secret\"\n}\nconst _hoisted_7 = [\"title\"]\nconst _hoisted_8 = { class: \"client-scopes\" }\nconst _hoisted_9 = { class: \"app-buttons\" }\nconst _hoisted_10 = { key: 2 }\nconst _hoisted_11 = { class: \"no-app\" }\n\nimport {\n ComputedRef,\n Ref,\n capitalize,\n computed,\n onBeforeMount,\n toRefs,\n ref,\n onUnmounted,\n withDefaults,\n watch,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IOAuth2Client } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n authUser: IAuthUserProfile\n afterCreation?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserApp',\n props: {\n authUser: null,\n afterCreation: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, afterCreation: boolean }\n\n \n const route = useRoute()\n const store = useStore()\n\n const { afterCreation, authUser } = toRefs(props)\n const client: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENT]\n )\n const revocationSuccessful: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.REVOCATION_SUCCESSFUL]\n )\n const displayModal: Ref = ref(false)\n const messageToDisplay: Ref = ref(null)\n const idCopied: Ref = ref(false)\n const secretCopied: Ref = ref(false)\n const clipboardSupport: Ref = ref(false)\n\n onBeforeMount(() => {\n loadClient()\n if (navigator.clipboard) {\n clipboardSupport.value = true\n }\n })\n\n function loadClient() {\n // after creation, client is already in store\n if (\n !afterCreation.value &&\n route.params.id &&\n typeof route.params.id === 'string'\n ) {\n store.dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_ID, +route.params.id)\n }\n }\n function updateMessageToDisplay(forDelete: boolean) {\n messageToDisplay.value = forDelete\n ? 'oauth2.APP_DELETION_CONFIRMATION'\n : 'oauth2.TOKENS_REVOCATION_CONFIRMATION'\n updateDisplayModal(true)\n }\n function updateDisplayModal(value: boolean) {\n displayModal.value = value\n if (!value) {\n messageToDisplay.value = null\n }\n }\n function confirmAction(clientId: number) {\n if (messageToDisplay.value === 'oauth2.APP_DELETION_CONFIRMATION') {\n store.dispatch(OAUTH2_STORE.ACTIONS.DELETE_CLIENT, clientId)\n } else {\n store.dispatch(OAUTH2_STORE.ACTIONS.REVOKE_ALL_TOKENS, clientId)\n }\n }\n function copyIdToClipboard() {\n navigator.clipboard.writeText(client.value.client_id)\n idCopied.value = true\n secretCopied.value = false\n setTimeout(() => {\n idCopied.value = false\n }, 3000)\n }\n function copySecretToClipboard() {\n if (client.value.client_secret) {\n navigator.clipboard.writeText(client.value.client_secret)\n secretCopied.value = true\n idCopied.value = false\n setTimeout(() => {\n secretCopied.value = false\n }, 3000)\n }\n }\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(OAUTH2_STORE.MUTATIONS.EMPTY_CLIENT)\n store.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, false)\n })\n\n watch(\n () => revocationSuccessful.value,\n (newValue) => {\n if (newValue) {\n updateDisplayModal(false)\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t(messageToDisplay.value),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (confirmAction(_unref(client).id))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(client) && _unref(client).client_id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (_unref(afterCreation) || _unref(revocationSuccessful))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\n _unref(afterCreation)\n ? 'oauth2.APP_CREATED_SUCCESSFULLY'\n : 'oauth2.TOKENS_REVOKED'\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.CLIENT_ID')) + \":\", 1),\n _createElementVNode(\"dd\", null, [\n _createTextVNode(_toDisplayString(_unref(client).client_id) + \" \", 1),\n (_unref(afterCreation) && clipboardSupport.value)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: _normalizeClass(`fa fa-${idCopied.value ? 'check' : 'copy'}`),\n \"aria-hidden\": \"true\",\n title: _ctx.$t('oauth2.COPY_TO_CLIPBOARD'),\n onClick: copyIdToClipboard\n }, null, 10, _hoisted_4))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(afterCreation) && _unref(client).client_secret)\n ? (_openBlock(), _createElementBlock(\"dt\", _hoisted_5, _toDisplayString(_ctx.$t('oauth2.APP.CLIENT_SECRET')) + \": \", 1))\n : _createCommentVNode(\"\", true),\n (_unref(afterCreation) && _unref(client).client_secret)\n ? (_openBlock(), _createElementBlock(\"dd\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_unref(client).client_secret) + \" \", 1),\n (clipboardSupport.value)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: _normalizeClass(`fa fa-${secretCopied.value ? 'check' : 'copy'}`),\n \"aria-hidden\": \"true\",\n title: _ctx.$t('oauth2.COPY_TO_CLIPBOARD'),\n onClick: copySecretToClipboard\n }, null, 10, _hoisted_7))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"dt\", null, _toDisplayString(capitalize(_ctx.$t('oauth2.APP.ISSUE_AT'))) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(formatDate)(\n _unref(client).issued_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.DESCRIPTION')) + \":\", 1),\n _createElementVNode(\"dd\", {\n class: _normalizeClass({ 'no-description': !_unref(client).client_description })\n }, _toDisplayString(_unref(client).client_description\n ? _unref(client).client_description\n : _ctx.$t('oauth2.NO_DESCRIPTION')), 3),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.URL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).website), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.REDIRECT_URL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).redirect_uris.length > 0 ? _unref(client).redirect_uris[0] : ''), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.SCOPE.LABEL')) + \":\", 1),\n _createElementVNode(\"dd\", _hoisted_8, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(client).scope.split(' '), (scope) => {\n return (_openBlock(), _createElementBlock(\"span\", {\n class: \"client-scope\",\n key: scope\n }, [\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]))\n }), 128))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (updateMessageToDisplay(false)))\n }, _toDisplayString(_ctx.$t('oauth2.REVOKE_ALL_TOKENS')), 1),\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateMessageToDisplay(true)))\n }, _toDisplayString(_ctx.$t('oauth2.DELETE_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [\n _createElementVNode(\"p\", _hoisted_11, _toDisplayString(_ctx.$t('oauth2.NO_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n ]))\n}\n}\n\n})","import script from \"./UserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserApp.vue?vue&type=style&index=0&id=3a844fa2&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3a844fa2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-efa45ea0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"oauth2-apps-list\" }\nconst _hoisted_2 = { class: \"apps-list\" }\nconst _hoisted_3 = { key: 0 }\nconst _hoisted_4 = { class: \"app-issued-at\" }\nconst _hoisted_5 = {\n key: 1,\n class: \"no-apps\"\n}\nconst _hoisted_6 = { class: \"app-list-buttons\" }\n\nimport { ComputedRef, computed, onBeforeMount, toRefs, watch } from 'vue'\n import { LocationQuery, useRoute } from 'vue-router'\n\n import Pagination from '@/components/Common/Pagination.vue'\n import { OAUTH2_STORE } from '@/store/constants'\n import { IPagination } from '@/types/api'\n import { IOAuth2Client, IOauth2ClientsPayload } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { defaultPage, getNumberQueryValue } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n authUser: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAppsList',\n props: {\n authUser: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n const route = useRoute()\n\n const { authUser } = toRefs(props)\n const clients: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENTS]\n )\n\n const pagination: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENTS_PAGINATION]\n )\n let query: IOauth2ClientsPayload = getClientsQuery(route.query)\n\n onBeforeMount(() => {\n loadClients(query)\n })\n\n function getClientsQuery(newQuery: LocationQuery): IOauth2ClientsPayload {\n const clientsQuery: IOauth2ClientsPayload = {}\n if (newQuery.page) {\n clientsQuery.page = getNumberQueryValue(newQuery.page, defaultPage)\n }\n return clientsQuery\n }\n function loadClients(payload: IOauth2ClientsPayload) {\n store.dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENTS, payload)\n }\n\n watch(\n () => route.query,\n async (newQuery) => {\n query = getClientsQuery(newQuery)\n loadClients(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"p\", _hoisted_2, _toDisplayString(_ctx.$t('oauth2.APPS_LIST')), 1),\n (_unref(clients).length > 0)\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(clients), (client) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: client.client_id\n }, [\n _createVNode(_component_router_link, {\n to: { name: 'UserApp', params: { id: client.id } }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(client.name), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('oauth2.APP.ISSUE_AT')) + \" \" + _toDisplayString(_unref(formatDate)(\n client.issued_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1)\n ]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('oauth2.NO_APPS')), 1)),\n (_unref(clients).length > 0)\n ? (_openBlock(), _createBlock(Pagination, {\n key: 2,\n pagination: _unref(pagination),\n path: \"/profile/apps\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"button\", {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/apps/new')))\n }, _toDisplayString(_ctx.$t('oauth2.NEW_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserAppsList.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAppsList.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAppsList.vue?vue&type=style&index=0&id=efa45ea0&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-efa45ea0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, withModifiers as _withModifiers, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createBlock as _createBlock, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74e52489\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-sport-preferences\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"responsive-table\"\n}\nconst _hoisted_3 = { class: \"mobile-display\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"profile-buttons mobile-display\"\n}\nconst _hoisted_5 = {\n key: 1,\n class: \"profile-buttons\"\n}\nconst _hoisted_6 = { class: \"text-left\" }\nconst _hoisted_7 = { key: 0 }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = [\"value\"]\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"disabled-message\"\n}\nconst _hoisted_12 = {\n key: 1,\n class: \"fa fa-refresh fa-spin fa-fw\"\n}\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"cell-heading\" }\nconst _hoisted_15 = [\"checked\"]\nconst _hoisted_16 = { class: \"cell-heading\" }\nconst _hoisted_17 = [\"value\"]\nconst _hoisted_18 = { key: 1 }\nconst _hoisted_19 = {\n key: 0,\n class: \"action-buttons\"\n}\nconst _hoisted_20 = { class: \"cell-heading\" }\nconst _hoisted_21 = [\"onClick\"]\nconst _hoisted_22 = {\n key: 1,\n class: \"edition-buttons\"\n}\nconst _hoisted_23 = [\"disabled\"]\nconst _hoisted_24 = [\"disabled\", \"onClick\"]\nconst _hoisted_25 = [\"disabled\"]\nconst _hoisted_26 = {\n key: 0,\n class: \"profile-buttons\"\n}\nconst _hoisted_27 = {\n key: 1,\n class: \"profile-buttons\"\n}\n\nimport { ComputedRef, computed, inject, reactive, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { AUTH_USER_STORE, ROOT_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IUserProfile, IUserSportPreferencesPayload } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n user: IUserProfile\n isEdition: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserSportPreferences',\n props: {\n user: null,\n isEdition: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n isEdition: boolean\n }\n\n \n\n const store = useStore()\n const { t } = useI18n()\n\n const { isEdition, user } = toRefs(props)\n const defaultColor = '#838383'\n const sportColors: Record | undefined = inject('sportColors')\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(sports.value, t, 'is_active', user.value.sports_list)\n )\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const sportPayload: IUserSportPreferencesPayload = reactive({\n sport_id: 0,\n color: null,\n is_active: true,\n stopped_speed_threshold: 1,\n })\n\n function updateSportInEdition(sport: ISport | null) {\n if (sport !== null) {\n sportPayload.sport_id = sport.id\n sportPayload.color = sport.color\n ? sport.color\n : sportColors\n ? sportColors[sport.label]\n : defaultColor\n sportPayload.is_active = sport.is_active_for_user\n sportPayload.stopped_speed_threshold = sport.stopped_speed_threshold\n } else {\n resetSportPayload()\n }\n }\n function isSportInEdition(sportId: number) {\n return sportPayload.sport_id === sportId\n }\n function updateColor(event: Event & { target: HTMLInputElement }) {\n sportPayload.color = event.target.value\n }\n function updateThreshold(event: Event & { target: HTMLInputElement }) {\n sportPayload.stopped_speed_threshold = parseFloat(event.target.value)\n }\n function updateIsActive(event: Event & { target: HTMLInputElement }) {\n sportPayload.is_active = event.target.checked\n }\n function resetSportPayload() {\n sportPayload.sport_id = 0\n sportPayload.color = null\n sportPayload.is_active = true\n sportPayload.stopped_speed_threshold = 1\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n }\n function updateSport(event: Event) {\n event.preventDefault()\n store.dispatch(\n AUTH_USER_STORE.ACTIONS.UPDATE_USER_SPORT_PREFERENCES,\n sportPayload\n )\n }\n function resetSport(event: Event, sportId: number) {\n event.preventDefault()\n store.dispatch(\n AUTH_USER_STORE.ACTIONS.RESET_USER_SPORT_PREFERENCES,\n sportId\n )\n }\n\n watch(\n () => loading.value,\n (newIsLoading) => {\n if (!newIsLoading && !errorMessages.value) {\n resetSportPayload()\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/sports')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/profile/edit/sports')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_SPORTS_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]),\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.COLOR')), 1),\n _createElementVNode(\"th\", _hoisted_6, _toDisplayString(_ctx.$t('workouts.SPORT', 0)), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('workouts.WORKOUT', 0)), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.IS_ACTIVE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD')), 1),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"th\", _hoisted_7, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.ACTION')), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: sport.id\n }, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.COLOR')), 1),\n (isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"sport-color\",\n type: \"color\",\n value: sportPayload.color,\n onInput: updateColor\n }, null, 40, _hoisted_9))\n : (_openBlock(), _createBlock(_component_SportImage, {\n key: 1,\n title: sport.translatedLabel,\n \"sport-label\": sport.label,\n color: sport.color ? sport.color : _unref(sportColors)[sport.label]\n }, null, 8, [\"title\", \"sport-label\", \"color\"]))\n ]),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"sport-label\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.LABEL')), 1),\n _createTextVNode(\" \" + _toDisplayString(sport.translatedLabel) + \" \", 1),\n (!sport.is_active)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, \" (\" + _toDisplayString(_ctx.$t('user.PROFILE.SPORT.DISABLED_BY_ADMIN')) + \") \", 1))\n : _createCommentVNode(\"\", true),\n (_unref(loading) && isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"i\", _hoisted_12))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages) && sportPayload.sport_id === sport.id)\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 2,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('workouts.WORKOUT', 0)), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${\n _unref(user).sports_list.includes(sport.id) ? '-check' : ''\n }`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.IS_ACTIVE')), 1),\n (isSportInEdition(sport.id) && sport.is_active)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n type: \"checkbox\",\n checked: sport.is_active_for_user,\n onChange: updateIsActive\n }, null, 40, _hoisted_15))\n : (_openBlock(), _createElementBlock(\"i\", {\n key: 1,\n class: _normalizeClass(`fa fa${sport.is_active_for_user ? '-check' : ''}`),\n \"aria-hidden\": \"true\"\n }, null, 2))\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD')), 1),\n (isSportInEdition(sport.id) && sport.is_active)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"threshold-input\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: sportPayload.stopped_speed_threshold,\n onInput: updateThreshold\n }, null, 40, _hoisted_17))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_18, _toDisplayString(sport.stopped_speed_threshold), 1))\n ], 2),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"td\", _hoisted_19, [\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.ACTION')), 1),\n (sportPayload.sport_id === 0)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n onClick: ($event: any) => (updateSportInEdition(sport))\n }, _toDisplayString(_ctx.$t('buttons.EDIT')), 9, _hoisted_21))\n : _createCommentVNode(\"\", true),\n (isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_22, [\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: updateSport\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_23),\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: (e) => resetSport(e, sport.id)\n }, _toDisplayString(_ctx.$t('buttons.RESET')), 9, _hoisted_24),\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateSportInEdition(null)))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_25)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n }), 128))\n ])\n ]),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_26, [\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/sports')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_27, [\n _createElementVNode(\"button\", {\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.$router.push('/profile/edit/sports')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_SPORTS_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./UserSportPreferences.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserSportPreferences.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserSportPreferences.vue?vue&type=style&index=0&id=74e52489&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74e52489\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74257266\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"about-text\" }\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-book fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = {\n href: \"https://samr1.github.io/FitTrackee/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-github fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_6 = {\n href: \"https://github.com/SamR1/FitTrackee\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-balance-scale fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://choosealicense.com/licenses/agpl-3.0/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}, \" AGPLv3 \", -1))\nconst _hoisted_9 = { key: 0 }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-envelope-o fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = [\"href\"]\n\nimport { ComputedRef, computed, capitalize } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'About',\n setup(__props) {\n\n const store = useStore()\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"p\", {\n class: \"error-message\",\n innerHTML: _ctx.$t('about.FITTRACKEE_DESCRIPTION')\n }, null, 8, _hoisted_2),\n _createElementVNode(\"p\", null, [\n _hoisted_3,\n _createElementVNode(\"a\", _hoisted_4, _toDisplayString(capitalize(_ctx.$t('common.DOCUMENTATION'))), 1)\n ]),\n _createElementVNode(\"p\", null, [\n _hoisted_5,\n _createElementVNode(\"a\", _hoisted_6, _toDisplayString(_ctx.$t('about.SOURCE_CODE')), 1)\n ]),\n _createElementVNode(\"p\", null, [\n _hoisted_7,\n _createVNode(_component_i18n_t, { keypath: \"about.FITTRACKEE_LICENSE\" }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n })\n ]),\n (_unref(appConfig).admin_contact)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _hoisted_10,\n _createElementVNode(\"a\", {\n href: `mailto:${_unref(appConfig).admin_contact}`\n }, _toDisplayString(_ctx.$t('about.CONTACT_ADMIN')), 9, _hoisted_11)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./About.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./About.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./About.vue?vue&type=style&index=0&id=74257266&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74257266\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./BikePic.vue?vue&type=template&id=795f7f5f&scoped=true\"\nconst script = {}\n\nimport \"./BikePic.vue?vue&type=style&index=0&id=795f7f5f&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-795f7f5f\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-bffb50d0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"about\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = { class: \"container-sub\" }\nconst _hoisted_4 = { class: \"container-sub about-details\" }\n\nimport About from '@/components/About.vue'\n import BikePic from '@/components/BikePic.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'AboutView',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(BikePic)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(About)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./AboutView.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./AboutView.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./AboutView.vue?vue&type=style&index=0&id=bffb50d0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-bffb50d0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-96abcc38\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"timeline-workout\" }\nconst _hoisted_2 = { class: \"box\" }\nconst _hoisted_3 = { class: \"workout-user-date\" }\nconst _hoisted_4 = { class: \"workout-user\" }\nconst _hoisted_5 = [\"title\"]\nconst _hoisted_6 = { key: 0 }\nconst _hoisted_7 = {\n key: 1,\n class: \"no-map\"\n}\nconst _hoisted_8 = { class: \"img\" }\nconst _hoisted_9 = { class: \"data\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-clock-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { key: 0 }\nconst _hoisted_12 = { class: \"data\" }\nconst _hoisted_13 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-road\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_14 = {\n key: 0,\n class: \"data elevation\"\n}\nconst _hoisted_15 = [\"alt\"]\nconst _hoisted_16 = { class: \"data-values\" }\nconst _hoisted_17 = {\n key: 1,\n class: \"data altitude\"\n}\nconst _hoisted_18 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-location-arrow\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_19 = { class: \"data-values\" }\n\nimport { Locale, formatDistance } from 'date-fns'\n import { ComputedRef, computed, toRefs, withDefaults } from 'vue'\n\n import StaticMap from '@/components/Common/StaticMap.vue'\n import UserPicture from '@/components/User/UserPicture.vue'\n import { ROOT_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkout } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n user: IUserProfile\n useImperialUnits: boolean\n workout?: IWorkout\n sport?: ISport\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutCard',\n props: {\n user: null,\n useImperialUnits: { type: Boolean },\n workout: { default: () => ({} as IWorkout) },\n sport: { default: () => ({} as ISport) }\n },\n setup(__props: any) {\n\nconst props = __props as { user: IUserProfile, useImperialUnits: boolean, workout: IWorkout, sport: ISport }\n\n \n\n const store = useStore()\n\n const { user, workout, sport, useImperialUnits } = toRefs(props)\n const locale: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LOCALE]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n (_unref(user).username)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"workout-user-name\",\n to: {\n name: 'User',\n params: { username: _unref(user).username },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(user).username), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"workout-title\",\n to: {\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(workout).title), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true),\n (_unref(workout).workout_date && _unref(user))\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"workout-date\",\n title: \n _unref(formatDate)(_unref(workout).workout_date, _unref(user).timezone, _unref(user).date_format)\n \n }, _toDisplayString(_unref(formatDistance)(new Date(_unref(workout).workout_date), new Date(), {\n addSuffix: true,\n locale: _unref(locale),\n })), 9, _hoisted_5))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-map\", { 'no-cursor': !_unref(workout) }]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _unref(workout).id\n ? _ctx.$router.push({\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n })\n : null\n ))\n }, [\n (_unref(workout))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n (_unref(workout).with_gpx)\n ? (_openBlock(), _createBlock(StaticMap, {\n key: 0,\n workout: _unref(workout)\n }, null, 8, [\"workout\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.NO_MAP')), 1))\n ]))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-data\", { 'without-gpx': _unref(workout) && !_unref(workout).with_gpx }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (\n _unref(workout).id\n ? _ctx.$router.push({\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n })\n : null\n ))\n }, [\n _createElementVNode(\"div\", _hoisted_8, [\n (_unref(sport).label)\n ? (_openBlock(), _createBlock(_component_SportImage, {\n key: 0,\n \"sport-label\": _unref(sport).label,\n color: _unref(sport).color\n }, null, 8, [\"sport-label\", \"color\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n (_unref(workout))\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, _toDisplayString(_unref(workout).moving), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _hoisted_13,\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).distance,\n digits: 3,\n unitFrom: \"km\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(workout) && _unref(workout).with_gpx)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n _createElementVNode(\"img\", {\n class: \"mountains\",\n src: \"/img/workouts/mountains.svg\",\n alt: _ctx.$t('workouts.ELEVATION')\n }, null, 8, _hoisted_15),\n _createElementVNode(\"div\", _hoisted_16, [\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).min_alt,\n unitFrom: \"m\",\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\"/ \"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 1,\n distance: _unref(workout).max_alt,\n unitFrom: \"m\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(workout) && _unref(workout).with_gpx)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _hoisted_18,\n _createElementVNode(\"div\", _hoisted_19, [\n _createTextVNode(\" +\"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).ascent,\n unitFrom: \"m\",\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\"/- \"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 1,\n distance: _unref(workout).descent,\n unitFrom: \"m\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./WorkoutCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutCard.vue?vue&type=style&index=0&id=96abcc38&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-96abcc38\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-35567bf2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"timeline\" }\nconst _hoisted_2 = { class: \"section-title\" }\nconst _hoisted_3 = { key: 0 }\nconst _hoisted_4 = { key: 1 }\nconst _hoisted_5 = {\n key: 1,\n class: \"more-workouts\"\n}\n\nimport { ComputedRef, computed, ref, onBeforeMount, toRefs } from 'vue'\n\n import WorkoutCard from '@/components/Workout/WorkoutCard.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkout } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n sports: ISport[]\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Timeline',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IUserProfile\n }\n\n \n\n const store = useStore()\n\n const { sports, user } = toRefs(props)\n const page = ref(1)\n const per_page = 5\n const initWorkoutsCount =\n props.user.nb_workouts >= per_page ? per_page : props.user.nb_workouts\n onBeforeMount(() => loadWorkouts())\n const workouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.TIMELINE_WORKOUTS]\n )\n const moreWorkoutsExist: ComputedRef = computed(() =>\n workouts.value.length > 0\n ? workouts.value[workouts.value.length - 1].previous_workout !== null\n : false\n )\n\n function loadWorkouts() {\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_TIMELINE_WORKOUTS, {\n page: page.value,\n per_page,\n ...defaultOrder,\n })\n }\n function loadMoreWorkouts() {\n page.value += 1\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_MORE_TIMELINE_WORKOUTS, {\n page: page.value,\n per_page,\n ...defaultOrder,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('workouts.LATEST_WORKOUTS')), 1),\n (_unref(user).nb_workouts > 0 && _unref(workouts).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList([...Array(_unref(initWorkoutsCount)).keys()], (index) => {\n return (_openBlock(), _createBlock(WorkoutCard, {\n user: _unref(user),\n useImperialUnits: _unref(user).imperial_units,\n key: index\n }, null, 8, [\"user\", \"useImperialUnits\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout) => {\n return (_openBlock(), _createBlock(WorkoutCard, {\n workout: workout,\n sport: \n _unref(workouts).length > 0\n ? _unref(sports).filter((s) => s.id === workout.sport_id)[0]\n : null\n ,\n user: _unref(user),\n useImperialUnits: _unref(user).imperial_units,\n key: workout.id\n }, null, 8, [\"workout\", \"sport\", \"user\", \"useImperialUnits\"]))\n }), 128)),\n (_unref(workouts).length === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true),\n (_unref(moreWorkoutsExist))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"button\", { onClick: loadMoreWorkouts }, _toDisplayString(_ctx.$t('workouts.LOAD_MORE_WORKOUT')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n}\n}\n\n})","import script from \"./Timeline.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Timeline.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Timeline.vue?vue&type=style&index=0&id=35567bf2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-35567bf2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = [\"title\"]\n\nimport { toRefs } from 'vue'\n\n import { IWorkout } from '@/types/workouts'\n interface Props {\n displayHARecord: boolean\n workout: IWorkout\n sportLabel: string\n sportColor: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkout',\n props: {\n displayHARecord: { type: Boolean },\n workout: null,\n sportLabel: null,\n sportColor: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n displayHARecord: boolean\n workout: IWorkout\n sportLabel: string\n sportColor: string | null\n }\n\n \n\n const { displayHARecord, workout, sportLabel, sportColor } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"calendar-workout\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _ctx.$router.push({ name: 'Workout', params: { workoutId: _unref(workout).id } })\n ))\n }, [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(sportLabel),\n title: _unref(workout).title,\n color: _unref(sportColor)\n }, null, 8, [\"sport-label\", \"title\", \"color\"]),\n _createElementVNode(\"sup\", null, [\n (_unref(workout).records.length > 0)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-trophy custom-fa-small\",\n \"aria-hidden\": \"true\",\n title: \n _unref(workout).records\n .filter((record) =>\n _unref(displayHARecord) ? true : record.record_type !== 'HA'\n )\n .map((record) => ` ${_ctx.$t(`workouts.RECORD_${record.record_type}`)}`)\n \n }, null, 8, _hoisted_1))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkout.vue?vue&type=style&index=0&id=331e1c8b&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"donut-chart\" }\nconst _hoisted_2 = {\n height: \"34\",\n width: \"34\",\n viewBox: \"0 0 34 34\"\n}\nconst _hoisted_3 = [\"stroke\", \"stroke-dashoffset\", \"transform\"]\n\nimport { toRefs } from 'vue'\n\n interface Props {\n colors: Record\n datasets: Record>\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'DonutChart',\n props: {\n colors: null,\n datasets: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n colors: Record\n datasets: Record>\n }\n\n \n\n const { colors, datasets } = toRefs(props)\n let angleOffset = -90\n const cx = 16\n const cy = 16\n const radius = 14\n const circumference = 2 * Math.PI * radius\n\n function calculateStrokeDashOffset(\n percentage: number,\n circumference: number\n ): number {\n return circumference - percentage * circumference\n }\n function returnCircleTransformValue(\n index: number,\n percentage: number\n ): string {\n const rotation = `rotate(${angleOffset}, ${cx}, ${cy})`\n angleOffset = percentage * 360 + angleOffset\n return rotation\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(Object.entries(_unref(datasets)), (data, index) => {\n return (_openBlock(), _createElementBlock(\"g\", { key: index }, [\n _createElementVNode(\"circle\", {\n cx: cx,\n cy: cy,\n r: radius,\n fill: \"transparent\",\n stroke: _unref(colors)[+data[0]],\n \"stroke-dashoffset\": \n calculateStrokeDashOffset(data[1].percentage, circumference)\n ,\n \"stroke-dasharray\": circumference,\n \"stroke-width\": \"3\",\n \"stroke-opacity\": \"0.8\",\n transform: returnCircleTransformValue(index, data[1].percentage)\n }, null, 8, _hoisted_3)\n ]))\n }), 128))\n ]))\n ]))\n}\n}\n\n})","import script from \"./DonutChart.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./DonutChart.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-52d4310a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"calendar-workouts-chart\" }\nconst _hoisted_2 = { class: \"workouts-count\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workouts-pane\"\n}\nconst _hoisted_4 = { class: \"more-workouts\" }\n\nimport { ref, toRefs } from 'vue'\n\n import CalendarWorkout from '@/components/Dashboard/UserCalendar/CalendarWorkout.vue'\n import DonutChart from '@/components/Dashboard/UserCalendar/DonutChart.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getSportColor, getSportLabel } from '@/utils/sports'\n\n interface Props {\n colors: Record\n datasets: Record>\n sports: ISport[]\n workouts: IWorkout[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkoutsChart',\n props: {\n colors: null,\n datasets: null,\n sports: null,\n workouts: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n colors: Record\n datasets: Record>\n sports: ISport[]\n workouts: IWorkout[]\n }\n\n \n\n const { colors, datasets, sports, workouts } = toRefs(props)\n const isHidden = ref(true)\n\n function togglePane(event: Event & { target: HTMLElement }) {\n event.stopPropagation()\n isHidden.value = !isHidden.value\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _directive_click_outside = _resolveDirective(\"click-outside\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"workouts-chart\",\n onClick: togglePane\n }, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_unref(workouts).length), 1),\n _createVNode(DonutChart, {\n datasets: _unref(datasets),\n colors: _unref(colors)\n }, null, 8, [\"datasets\", \"colors\"])\n ]),\n (!isHidden.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"i\", {\n class: \"fa fa-times calendar-more\",\n \"aria-hidden\": \"true\",\n onClick: togglePane\n }),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout, index) => {\n return (_openBlock(), _createBlock(CalendarWorkout, {\n key: index,\n workout: workout,\n sportLabel: _unref(getSportLabel)(workout, _unref(sports)),\n sportColor: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"workout\", \"sportLabel\", \"sportColor\"]))\n }), 128))\n ])), [\n [_directive_click_outside, togglePane]\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkoutsChart.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkoutsChart.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkoutsChart.vue?vue&type=style&index=0&id=52d4310a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-52d4310a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-workouts\" }\nconst _hoisted_2 = { class: \"desktop-display\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workouts-display\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"donut-display\"\n}\nconst _hoisted_5 = { class: \"mobile-display\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"donut-display\"\n}\n\nimport { computed, toRefs } from 'vue'\n\n import CalendarWorkout from '@/components/Dashboard/UserCalendar/CalendarWorkout.vue'\n import CalendarWorkoutsChart from '@/components/Dashboard/UserCalendar/CalendarWorkoutsChart.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getSportColor, getSportLabel, sportIdColors } from '@/utils/sports'\n import { getDonutDatasets } from '@/utils/workouts'\n\n interface Props {\n displayHARecord: boolean\n workouts: IWorkout[]\n sports: ISport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkouts',\n props: {\n displayHARecord: { type: Boolean },\n workouts: null,\n sports: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n displayHARecord: boolean\n workouts: IWorkout[]\n sports: ISport[]\n }\n\n \n\n const { displayHARecord, workouts, sports } = toRefs(props)\n const chartDatasets = computed(() => getDonutDatasets(props.workouts))\n const colors = computed(() => sportIdColors(props.sports))\n const displayedWorkoutCount = 6\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(workouts).length <= displayedWorkoutCount)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts).slice(0, displayedWorkoutCount), (workout, index) => {\n return (_openBlock(), _createBlock(CalendarWorkout, {\n key: index,\n displayHARecord: _unref(displayHARecord),\n workout: workout,\n sportLabel: _unref(getSportLabel)(workout, _unref(sports)),\n sportColor: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"displayHARecord\", \"workout\", \"sportLabel\", \"sportColor\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(CalendarWorkoutsChart, {\n workouts: _unref(workouts),\n sports: _unref(sports),\n datasets: _unref(chartDatasets),\n colors: _unref(colors)\n }, null, 8, [\"workouts\", \"sports\", \"datasets\", \"colors\"])\n ]))\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n (_unref(workouts).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(CalendarWorkoutsChart, {\n workouts: _unref(workouts),\n sports: _unref(sports),\n datasets: _unref(chartDatasets),\n colors: _unref(colors)\n }, null, 8, [\"workouts\", \"sports\", \"datasets\", \"colors\"])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkouts.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkouts.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkouts.vue?vue&type=style&index=0&id=5aab7455&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-cells\" }\nconst _hoisted_2 = { class: \"calendar-cell-day\" }\n\nimport { addDays, format, isSameDay, isSameMonth, isToday } from 'date-fns'\n import { Ref, ref, toRefs, watch, onMounted } from 'vue'\n\n import CalendarWorkouts from '@/components/Dashboard/UserCalendar/CalendarWorkouts.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getDateWithTZ } from '@/utils/dates'\n\n interface Props {\n currentDay: Date\n displayHARecord: boolean\n endDate: Date\n sports: ISport[]\n startDate: Date\n timezone: string\n weekStartingMonday: boolean\n workouts: IWorkout[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarCells',\n props: {\n currentDay: null,\n displayHARecord: { type: Boolean },\n endDate: null,\n sports: null,\n startDate: null,\n timezone: null,\n weekStartingMonday: { type: Boolean },\n workouts: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n currentDay: Date\n displayHARecord: boolean\n endDate: Date\n sports: ISport[]\n startDate: Date\n timezone: string\n weekStartingMonday: boolean\n workouts: IWorkout[]\n }\n\n \n\n const {\n currentDay,\n displayHARecord,\n endDate,\n sports,\n startDate,\n timezone,\n weekStartingMonday,\n workouts,\n } = toRefs(props)\n const rows: Ref = ref([])\n\n onMounted(() => getDays())\n\n function getDays() {\n rows.value = []\n let day = startDate.value\n while (day <= endDate.value) {\n const days: Date[] = []\n for (let i = 0; i < 7; i++) {\n days.push(day)\n day = addDays(day, 1)\n }\n rows.value.push(days)\n }\n }\n function isWeekEnd(day: number): boolean {\n return weekStartingMonday.value\n ? [5, 6].includes(day)\n : [0, 6].includes(day)\n }\n function filterWorkouts(day: Date, workouts: IWorkout[]) {\n if (workouts) {\n return workouts\n .filter((workout) =>\n isSameDay(getDateWithTZ(workout.workout_date, timezone.value), day)\n )\n .reverse()\n }\n return []\n }\n\n watch(\n () => props.currentDay,\n () => getDays()\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(rows.value, (row, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"calendar-row\",\n key: index\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(row, (day, i) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"calendar-cell\", {\n 'disabled-cell': !_unref(isSameMonth)(day, _unref(currentDay)),\n 'week-end': isWeekEnd(i),\n today: _unref(isToday)(day),\n }]),\n key: i\n }, [\n _createVNode(CalendarWorkouts, {\n workouts: filterWorkouts(day, _unref(workouts)),\n sports: _unref(sports),\n displayHARecord: _unref(displayHARecord)\n }, null, 8, [\"workouts\", \"sports\", \"displayHARecord\"]),\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_unref(format)(day, 'd')), 1)\n ], 2))\n }), 128))\n ]))\n }), 128))\n ]))\n}\n}\n\n})","import script from \"./CalendarCells.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarCells.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarCells.vue?vue&type=style&index=0&id=34b99f0e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-days\" }\n\nimport { Locale, format, addDays } from 'date-fns'\n\n interface Props {\n startDate: Date\n localeOptions: Locale\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarDays',\n props: {\n startDate: null,\n localeOptions: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n startDate: Date\n localeOptions: Locale\n }\n\n \n\n const days = []\n for (let i = 0; i < 7; i++) {\n days.push(addDays(props.startDate, i))\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(days, (day, index) => {\n return _createElementVNode(\"div\", {\n class: \"calendar-day\",\n key: index\n }, _toDisplayString(_unref(format)(day, 'EEE', { locale: __props.localeOptions })), 1)\n }), 64))\n ]))\n}\n}\n\n})","import script from \"./CalendarDays.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarDays.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarDays.vue?vue&type=style&index=0&id=4f3dc99e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, unref as _unref, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-header\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\nconst _hoisted_4 = { class: \"calendar-month\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_6 = [\n _hoisted_5\n]\n\nimport { Locale, format } from 'date-fns'\n import { toRefs } from 'vue'\n\n interface Props {\n day: Date\n localeOptions: Locale\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarHeader',\n props: {\n day: null,\n localeOptions: null\n },\n emits: ['displayNextMonth', 'displayPreviousMonth'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n day: Date\n localeOptions: Locale\n }\n\n \n\n \n\n const { day, localeOptions } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"calendar-arrow calendar-arrow-left\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('displayPreviousMonth')))\n }, _hoisted_3),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(format)(_unref(day), 'MMM yyyy', { locale: _unref(localeOptions) })), 1)\n ]),\n _createElementVNode(\"div\", {\n class: \"calendar-arrow calendar-arrow-right\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('displayNextMonth')))\n }, _hoisted_6)\n ]))\n}\n}\n\n})","import script from \"./CalendarHeader.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarHeader.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarHeader.vue?vue&type=style&index=0&id=79a65a70&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-calendar\" }\nconst _hoisted_2 = { class: \"calendar-card box\" }\n\nimport { Locale, addMonths, format, subMonths } from 'date-fns'\n import { ComputedRef, computed, ref, toRefs, onBeforeMount } from 'vue'\n\n import CalendarCells from '@/components/Dashboard/UserCalendar/CalendarCells.vue'\n import CalendarDays from '@/components/Dashboard/UserCalendar/CalendarDays.vue'\n import CalendarHeader from '@/components/Dashboard/UserCalendar/CalendarHeader.vue'\n import { ROOT_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkout, TWorkoutsPayload } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { getCalendarStartAndEnd } from '@/utils/dates'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const { sports, user } = toRefs(props)\n const dateFormat = 'yyyy-MM-dd'\n const day = ref(new Date())\n const calendarDates = ref(getCalendarStartAndEnd(day.value, props.user.weekm))\n const calendarWorkouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.CALENDAR_WORKOUTS]\n )\n const localeOptions: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LOCALE]\n )\n\n onBeforeMount(() => getCalendarWorkouts())\n\n function getCalendarWorkouts() {\n calendarDates.value = getCalendarStartAndEnd(day.value, props.user.weekm)\n const apiParams: TWorkoutsPayload = {\n from: format(calendarDates.value.start, dateFormat),\n to: format(calendarDates.value.end, dateFormat),\n page: 1,\n per_page: 100,\n ...defaultOrder,\n }\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_CALENDAR_WORKOUTS, apiParams)\n }\n function displayNextMonth() {\n day.value = addMonths(day.value, 1)\n getCalendarWorkouts()\n }\n function displayPreviousMonth() {\n day.value = subMonths(day.value, 1)\n getCalendarWorkouts()\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(CalendarHeader, {\n day: day.value,\n \"locale-options\": _unref(localeOptions),\n onDisplayNextMonth: displayNextMonth,\n onDisplayPreviousMonth: displayPreviousMonth\n }, null, 8, [\"day\", \"locale-options\"]),\n _createVNode(CalendarDays, {\n \"start-date\": calendarDates.value.start,\n \"locale-options\": _unref(localeOptions)\n }, null, 8, [\"start-date\", \"locale-options\"]),\n _createVNode(CalendarCells, {\n currentDay: day.value,\n displayHARecord: _unref(user).display_ascent,\n \"end-date\": calendarDates.value.end,\n sports: _unref(sports),\n \"start-date\": calendarDates.value.start,\n timezone: _unref(user).timezone,\n workouts: _unref(calendarWorkouts),\n weekStartingMonday: _unref(user).weekm\n }, null, 8, [\"currentDay\", \"displayHARecord\", \"end-date\", \"sports\", \"start-date\", \"timezone\", \"workouts\", \"weekStartingMonday\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=3e7444d9&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1bcddc12\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"user-month-stats\" }\n\nimport { endOfMonth, startOfMonth } from 'date-fns'\n import { toRefs } from 'vue'\n\n import StatChart from '@/components/Common/StatsChart/index.vue'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n\n interface Props {\n sports: ISport[]\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserMonthStats',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IUserProfile\n }\n\n \n\n const { sports, user } = toRefs(props)\n const date = new Date()\n const chartParams = {\n duration: 'week',\n start: startOfMonth(date),\n end: endOfMonth(date),\n }\n const selectedSportIds = props.sports.map((sport) => sport.id)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('dashboard.THIS_MONTH')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(StatChart, {\n sports: _unref(sports),\n user: _unref(user),\n \"chart-params\": chartParams,\n \"displayed-sport-ids\": _unref(selectedSportIds),\n \"hide-chart-if-no-data\": true\n }, null, 8, [\"sports\", \"user\", \"displayed-sport-ids\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./UserMonthStats.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserMonthStats.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserMonthStats.vue?vue&type=style&index=0&id=1bcddc12&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1bcddc12\"]])\n\nexport default __exports__","import createI18n from '@/i18n'\nimport { ITranslatedSport } from '@/types/sports'\nimport { TUnit } from '@/types/units'\nimport { ICardRecord, IRecord, IRecordsBySports } from '@/types/workouts'\nimport { formatDate, getDateFormat } from '@/utils/dates'\nimport { convertDistance, units } from '@/utils/units'\n\nconst { locale } = createI18n.global\n\nexport const formatRecord = (\n record: IRecord,\n tz: string,\n useImperialUnits: boolean,\n date_format: string\n): Record => {\n const distanceUnitFrom: TUnit = 'km'\n const distanceUnitTo: TUnit = useImperialUnits\n ? units[distanceUnitFrom].defaultTarget\n : distanceUnitFrom\n const ascentUnitFrom: TUnit = 'm'\n const ascentUnitTo: TUnit = useImperialUnits\n ? units[ascentUnitFrom].defaultTarget\n : ascentUnitFrom\n let value\n switch (record.record_type) {\n case 'AS':\n case 'MS':\n value = `${convertDistance(\n +record.value,\n distanceUnitFrom,\n distanceUnitTo,\n 2\n )} ${distanceUnitTo}/h`\n break\n case 'FD':\n value = `${convertDistance(\n +record.value,\n distanceUnitFrom,\n distanceUnitTo,\n 3\n )} ${distanceUnitTo}`\n break\n case 'HA':\n value = `${convertDistance(\n +record.value,\n ascentUnitFrom,\n ascentUnitTo,\n 2\n )} ${ascentUnitTo}`\n break\n case 'LD':\n value = record.value\n break\n default:\n throw new Error(\n `Invalid record type, expected: \"AS\", \"FD\", \"HA\", \"LD\", \"MD\", got: \"${record.record_type}\"`\n )\n }\n return {\n workout_date: formatDate(record.workout_date, tz, date_format, false),\n workout_id: record.workout_id,\n id: record.id,\n record_type: record.record_type,\n value: value,\n }\n}\n\nexport const sortRecords = (a: ICardRecord, b: ICardRecord): number => {\n const recordALabel = a.label.toLowerCase()\n const recordBLabel = b.label.toLowerCase()\n return recordALabel > recordBLabel ? 1 : recordALabel < recordBLabel ? -1 : 0\n}\n\nexport const getRecordsBySports = (\n records: IRecord[],\n translatedSports: ITranslatedSport[],\n tz: string,\n useImperialUnits: boolean,\n display_ascent: boolean,\n date_format: string\n): IRecordsBySports => {\n date_format = getDateFormat(date_format, locale.value)\n return records\n .filter((r) => (display_ascent ? true : r.record_type !== 'HA'))\n .reduce((sportList: IRecordsBySports, record) => {\n const sport = translatedSports.find((s) => s.id === record.sport_id)\n if (sport && sport.label) {\n if (sportList[sport.translatedLabel] === void 0) {\n sportList[sport.translatedLabel] = {\n label: sport.label,\n color: sport.color,\n records: [],\n }\n }\n sportList[sport.translatedLabel].records.push(\n formatRecord(record, tz, useImperialUnits, date_format)\n )\n }\n return sportList\n }, {})\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8d17c606\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"records-card\" }\nconst _hoisted_2 = { class: \"record-type\" }\nconst _hoisted_3 = { class: \"record-value\" }\nconst _hoisted_4 = { class: \"record-date\" }\n\nimport { toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ICardRecord, IRecord, IRecordsBySports } from '@/types/workouts'\n import { sortRecords } from '@/utils/records'\n\n interface Props {\n records: IRecordsBySports\n sportTranslatedLabel: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'RecordsCard',\n props: {\n records: null,\n sportTranslatedLabel: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n records: IRecordsBySports\n sportTranslatedLabel: string\n }\n\n \n\n const { records, sportTranslatedLabel } = toRefs(props)\n\n const { t } = useI18n()\n\n function getTranslatedRecords(records: IRecord[]): ICardRecord[] {\n const translatedRecords: ICardRecord[] = []\n records.map((record) => {\n translatedRecords.push({\n ...record,\n label: t(`workouts.RECORD_${record.record_type}`),\n })\n })\n return translatedRecords.sort(sortRecords)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(records).label,\n color: _unref(records).color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createTextVNode(\" \" + _toDisplayString(_unref(sportTranslatedLabel)), 1)\n ]),\n content: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(getTranslatedRecords(_unref(records).records), (record) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"record\",\n key: record.id\n }, [\n _createElementVNode(\"span\", _hoisted_2, _toDisplayString(record.label), 1),\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(record.value), 1),\n _createElementVNode(\"span\", _hoisted_4, [\n _createVNode(_component_router_link, {\n to: {\n name: 'Workout',\n params: { workoutId: record.workout_id },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(record.workout_date), 1)\n ]),\n _: 2\n }, 1032, [\"to\"])\n ])\n ]))\n }), 128))\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./RecordsCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RecordsCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./RecordsCard.vue?vue&type=style&index=0&id=8d17c606&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8d17c606\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-f0c85cb8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"user-records-section\" }\nconst _hoisted_2 = { class: \"section-title\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy custom-fa-small\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { class: \"user-records\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"no-records\"\n}\n\nimport { computed } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import RecordsCard from '@/components/Dashboard/UserRecords/RecordsCard.vue'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { getRecordsBySports } from '@/utils/records'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const recordsBySport = computed(() =>\n getRecordsBySports(\n props.user.records,\n translateSports(props.sports, t),\n props.user.timezone,\n props.user.imperial_units,\n props.user.display_ascent,\n props.user.date_format\n )\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.RECORD', 2)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n (Object.keys(_unref(recordsBySport)).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('workouts.NO_RECORDS')), 1))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(Object.keys(_unref(recordsBySport)).sort(), (sportTranslatedLabel) => {\n return (_openBlock(), _createBlock(RecordsCard, {\n sportTranslatedLabel: sportTranslatedLabel,\n records: _unref(recordsBySport)[sportTranslatedLabel],\n key: sportTranslatedLabel,\n useImperialUnits: __props.user.imperial_units\n }, null, 8, [\"sportTranslatedLabel\", \"records\", \"useImperialUnits\"]))\n }), 128))\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=f0c85cb8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-f0c85cb8\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-stats\" }\n\nimport { ComputedRef, computed, toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import StatCard from '@/components/Common/StatCard.vue'\n import { TUnit } from '@/types/units'\n import { IAuthUserProfile } from '@/types/user'\n import { convertDistance, units } from '@/utils/units'\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const { user } = toRefs(props)\n const userTotalDuration: ComputedRef = computed(\n () => props.user.total_duration\n )\n const totalDuration = computed(() => get_duration(userTotalDuration))\n const distanceUnitFrom: TUnit = 'km'\n const distanceUnitTo: TUnit = user.value.imperial_units\n ? units[distanceUnitFrom].defaultTarget\n : distanceUnitFrom\n const totalDistance: ComputedRef = computed(() =>\n user.value.imperial_units\n ? convertDistance(user.value.total_distance, distanceUnitFrom, distanceUnitTo, 2)\n : parseFloat(user.value.total_distance.toFixed(2)))\n const ascentUnitFrom: TUnit = 'm'\n const ascentUnitTo: TUnit = user.value.imperial_units\n ? units[ascentUnitFrom].defaultTarget\n : ascentUnitFrom\n const totalAscent: ComputedRef = computed(() =>\n user.value.imperial_units\n ? convertDistance(user.value.total_ascent, ascentUnitFrom, ascentUnitTo, 2)\n : parseFloat(user.value.total_ascent.toFixed(2)))\n\n\n function get_duration(total_duration: ComputedRef) {\n const duration = total_duration.value.match(/day/g)\n ? total_duration.value.split(', ')[1]\n : total_duration.value\n return {\n days: total_duration.value.match(/day/g)\n ? `${total_duration.value.split(' ')[0]} ${\n total_duration.value.match(/days/g)\n ? t('common.DAY', 2)\n : t('common.DAY', 1)\n }`\n : `0 ${t('common.DAY', 2)},`,\n duration: `${duration.split(':')[0]}h ${duration.split(':')[1]}min`,\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatCard, {\n icon: \"calendar\",\n value: _unref(user).nb_workouts,\n text: _ctx.$t('workouts.WORKOUT', _unref(user).nb_workouts)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"road\",\n value: _unref(totalDistance),\n text: _unref(distanceUnitTo) === 'mi' ? 'miles' : _unref(distanceUnitTo)\n }, null, 8, [\"value\", \"text\"]),\n (_unref(user).display_ascent)\n ? (_openBlock(), _createBlock(StatCard, {\n key: 0,\n icon: \"location-arrow\",\n value: _unref(totalAscent),\n text: _unref(ascentUnitTo) === 'ft' ? 'feet' : _unref(ascentUnitTo)\n }, null, 8, [\"value\", \"text\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(StatCard, {\n icon: \"clock-o\",\n value: _unref(totalDuration).days,\n text: _unref(totalDuration).duration\n }, null, 8, [\"value\", \"text\"]),\n (!_unref(user).display_ascent)\n ? (_openBlock(), _createBlock(StatCard, {\n key: 1,\n icon: \"tags\",\n value: _unref(user).nb_sports,\n text: _ctx.$t('workouts.SPORT', _unref(user).nb_sports)\n }, null, 8, [\"value\", \"text\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=22dcb990&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4c0893c1\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"dashboard\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container mobile-menu\" }\nconst _hoisted_3 = { class: \"box\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-calendar\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_5 = [\n _hoisted_4\n]\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-bar-chart\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = [\n _hoisted_6\n]\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-map-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_9 = [\n _hoisted_8\n]\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = [\n _hoisted_10\n]\nconst _hoisted_12 = { class: \"container\" }\nconst _hoisted_13 = { class: \"container dashboard-container\" }\nconst _hoisted_14 = { class: \"left-container dashboard-sub-container\" }\nconst _hoisted_15 = { class: \"right-container dashboard-sub-container\" }\nconst _hoisted_16 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\nconst _hoisted_17 = {\n key: 1,\n class: \"app-loading\"\n}\n\nimport { ComputedRef, Ref, computed, onBeforeMount, ref } from 'vue'\n\n import Timeline from '@/components/Dashboard/Timeline.vue'\n import UserCalendar from '@/components/Dashboard/UserCalendar/index.vue'\n import UserMonthStats from '@/components/Dashboard/UserMonthStats.vue'\n import UserRecords from '@/components/Dashboard/UserRecords/index.vue'\n import UserStatsCards from '@/components/Dashboard/UserStatsCards/index.vue'\n import { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Dashboard',\n setup(__props) {\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const isSelected: Ref = ref('calendar')\n\n onBeforeMount(() => store.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE))\n\n function updateDisplayColumn(target: string) {\n isSelected.value = target\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Loader = _resolveComponent(\"Loader\")!\n\n return (_unref(authUser).username && _unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'calendar' }]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (updateDisplayColumn('calendar')))\n }, _hoisted_5, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'chart' }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayColumn('chart')))\n }, _hoisted_7, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'timeline' }]),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (updateDisplayColumn('timeline')))\n }, _hoisted_9, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'records' }]),\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateDisplayColumn('records')))\n }, _hoisted_11, 2)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createVNode(UserStatsCards, { user: _unref(authUser) }, null, 8, [\"user\"])\n ]),\n _createElementVNode(\"div\", _hoisted_13, [\n _createElementVNode(\"div\", _hoisted_14, [\n _createVNode(UserMonthStats, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'chart') })\n }, null, 8, [\"sports\", \"user\", \"class\"]),\n _createVNode(UserRecords, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'records') })\n }, null, 8, [\"sports\", \"user\", \"class\"])\n ]),\n _createElementVNode(\"div\", _hoisted_15, [\n _createVNode(UserCalendar, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'calendar') })\n }, null, 8, [\"sports\", \"user\", \"class\"]),\n _createVNode(Timeline, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'timeline') })\n }, null, 8, [\"sports\", \"user\", \"class\"])\n ])\n ]),\n _hoisted_16\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createVNode(_component_Loader)\n ]))\n}\n}\n\n})","import script from \"./Dashboard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Dashboard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Dashboard.vue?vue&type=style&index=0&id=4c0893c1&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4c0893c1\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"not-found view\" }\n\nimport NotFound from '@/components/Common/NotFound.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'NotFoundView',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(NotFound)\n ]))\n}\n}\n\n})","import script from \"./NotFoundView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NotFoundView.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6a38125b\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"loginOrRegister\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = { class: \"container-sub\" }\nconst _hoisted_4 = { class: \"container-sub\" }\n\nimport { toRefs } from 'vue'\n\n import BikePic from '@/components/BikePic.vue'\n import LoginOrRegisterForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'LoginOrRegister',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(BikePic)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(LoginOrRegisterForm, { action: _unref(action) }, null, 8, [\"action\"])\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./LoginOrRegister.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./LoginOrRegister.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./LoginOrRegister.vue?vue&type=style&index=0&id=6a38125b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6a38125b\"]])\n\nexport default __exports__","import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'\n\nimport AdminApplication from '@/components/Administration/AdminApplication.vue'\nimport AdminMenu from '@/components/Administration/AdminMenu.vue'\nimport AdminSports from '@/components/Administration/AdminSports.vue'\nimport AdminUsers from '@/components/Administration/AdminUsers.vue'\nimport Profile from '@/components/User/ProfileDisplay/index.vue'\nimport UserInfos from '@/components/User/ProfileDisplay/UserInfos.vue'\nimport UserPreferences from '@/components/User/ProfileDisplay/UserPreferences.vue'\nimport ProfileEdition from '@/components/User/ProfileEdition/index.vue'\nimport UserAccountEdition from '@/components/User/ProfileEdition/UserAccountEdition.vue'\nimport UserInfosEdition from '@/components/User/ProfileEdition/UserInfosEdition.vue'\nimport UserPictureEdition from '@/components/User/ProfileEdition/UserPictureEdition.vue'\nimport UserPreferencesEdition from '@/components/User/ProfileEdition/UserPreferencesEdition.vue'\nimport AddUserApp from '@/components/User/UserApps/AddUserApp.vue'\nimport AuthorizeUserApp from '@/components/User/UserApps/AuthorizeUserApp.vue'\nimport UserApps from '@/components/User/UserApps/index.vue'\nimport UserApp from '@/components/User/UserApps/UserApp.vue'\nimport UserAppsList from '@/components/User/UserApps/UserAppsList.vue'\nimport UserSportPreferences from '@/components/User/UserSportPreferences.vue'\nimport store from '@/store'\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport AboutView from '@/views/AboutView.vue'\nimport Dashboard from '@/views/Dashboard.vue'\nimport NotFoundView from '@/views/NotFoundView.vue'\nimport LoginOrRegister from '@/views/user/LoginOrRegister.vue'\n\nconst getTabFromPath = (path: string): string => {\n const regex = /(\\/profile)(\\/edit)*(\\/*)/\n const tag = path.replace(regex, '').toUpperCase()\n return tag === '' ? 'PROFILE' : tag.toUpperCase()\n}\n\nconst routes: Array = [\n {\n path: '/',\n name: 'Dashboard',\n component: Dashboard,\n },\n {\n path: '/login',\n name: 'Login',\n component: LoginOrRegister,\n props: { action: 'login' },\n },\n {\n path: '/register',\n name: 'Register',\n component: LoginOrRegister,\n props: { action: 'register' },\n },\n {\n path: '/account-confirmation',\n name: 'AccountConfirmation',\n component: () =>\n import(\n /* webpackChunkName: 'profile' */ '@/views/user/AccountConfirmationView.vue'\n ),\n },\n {\n path: '/account-confirmation/resend',\n name: 'AccountConfirmationResend',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/AccountConfirmationResendView.vue'\n ),\n props: { action: 'account-confirmation-resend' },\n },\n {\n path: '/account-confirmation/email-sent',\n name: 'AccountConfirmationEmailSend',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/AccountConfirmationResendView.vue'\n ),\n props: { action: 'email-sent' },\n },\n {\n path: '/password-reset/sent',\n name: 'PasswordEmailSent',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'request-sent' },\n },\n {\n path: '/password-reset/request',\n name: 'PasswordResetRequest',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'reset-request' },\n },\n {\n path: '/password-reset/password-updated',\n name: 'PasswordUpdated',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'password-updated' },\n },\n {\n path: '/password-reset',\n name: 'PasswordReset',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'reset' },\n },\n {\n path: '/email-update',\n name: 'EmailUpdate',\n component: () =>\n import(\n /* webpackChunkName: 'profile' */ '@/views/user/EmailUpdateView.vue'\n ),\n },\n {\n path: '/profile',\n name: 'Profile',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/ProfileView.vue'),\n children: [\n {\n path: '',\n name: 'UserProfile',\n component: Profile,\n props: (route) => ({\n tab: getTabFromPath(route.path),\n }),\n children: [\n {\n path: '',\n name: 'UserInfos',\n component: UserInfos,\n },\n {\n path: 'preferences',\n name: 'UserPreferences',\n component: UserPreferences,\n },\n {\n path: 'sports',\n name: 'UserSportPreferences',\n component: UserSportPreferences,\n props: { isEdition: false },\n },\n {\n path: 'apps',\n name: 'UserApps',\n component: UserApps,\n children: [\n {\n path: '',\n name: 'UserAppsList',\n component: UserAppsList,\n },\n {\n path: ':id',\n name: 'UserApp',\n component: UserApp,\n },\n {\n path: ':id/created',\n name: 'CreatedUserApp',\n component: UserApp,\n props: { afterCreation: true },\n },\n {\n path: 'new',\n name: 'AddUserApp',\n component: AddUserApp,\n },\n {\n path: 'authorize',\n name: 'AuthorizeUserApp',\n component: AuthorizeUserApp,\n },\n ],\n },\n ],\n },\n {\n path: 'edit',\n name: 'UserProfileEdition',\n component: ProfileEdition,\n props: (route) => ({\n tab: getTabFromPath(route.path),\n }),\n children: [\n {\n path: '',\n name: 'UserInfosEdition',\n component: UserInfosEdition,\n },\n {\n path: 'account',\n name: 'UserAccountEdition',\n component: UserAccountEdition,\n },\n {\n path: 'picture',\n name: 'UserPictureEdition',\n component: UserPictureEdition,\n },\n {\n path: 'preferences',\n name: 'UserPreferencesEdition',\n component: UserPreferencesEdition,\n },\n {\n path: 'sports',\n name: 'UserSportPreferencesEdition',\n component: UserSportPreferences,\n props: { isEdition: true },\n },\n ],\n },\n ],\n },\n {\n path: '/statistics',\n name: 'Statistics',\n component: () =>\n import(/* webpackChunkName: 'statistics' */ '@/views/StatisticsView.vue'),\n },\n {\n path: '/users/:username',\n name: 'User',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/UserView.vue'),\n },\n {\n path: '/workouts',\n name: 'Workouts',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/WorkoutsView.vue'\n ),\n },\n {\n path: '/workouts/:workoutId',\n name: 'Workout',\n component: () =>\n import(/* webpackChunkName: 'workouts' */ '@/views/workouts/Workout.vue'),\n props: { displaySegment: false },\n },\n {\n path: '/workouts/:workoutId/edit',\n name: 'EditWorkout',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/EditWorkout.vue'\n ),\n },\n {\n path: '/workouts/:workoutId/segment/:segmentId',\n name: 'WorkoutSegment',\n component: () =>\n import(/* webpackChunkName: 'workouts' */ '@/views/workouts/Workout.vue'),\n props: { displaySegment: true },\n },\n {\n path: '/workouts/add',\n name: 'AddWorkout',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/AddWorkout.vue'\n ),\n },\n {\n path: '/admin',\n name: 'Administration',\n component: () =>\n import(/* webpackChunkName: 'admin' */ '@/views/AdminView.vue'),\n children: [\n {\n path: '',\n name: 'AdministrationMenu',\n component: AdminMenu,\n },\n {\n path: 'application',\n name: 'ApplicationAdministration',\n component: AdminApplication,\n },\n {\n path: 'application/edit',\n name: 'ApplicationAdministrationEdition',\n component: AdminApplication,\n props: { edition: true },\n },\n {\n path: 'sports',\n name: 'SportsAdministration',\n component: AdminSports,\n },\n {\n path: 'users/:username',\n name: 'UserFromAdmin',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/UserView.vue'),\n props: { fromAdmin: true },\n },\n {\n path: 'users',\n name: 'UsersAdministration',\n component: AdminUsers,\n },\n ],\n },\n {\n path: '/about',\n name: 'About',\n component: AboutView,\n },\n {\n path: '/:pathMatch(.*)*',\n name: 'not-found',\n component: NotFoundView,\n },\n]\n\nconst router = createRouter({\n history: createWebHistory(process.env.BASE_URL),\n routes,\n})\n\nconst pathsWithoutAuthentication = [\n '/login',\n '/password-reset',\n '/password-reset/password-updated',\n '/password-reset/request',\n '/password-reset/sent',\n '/register',\n '/account-confirmation',\n '/account-confirmation/resend',\n '/account-confirmation/email-sent',\n]\n\nconst pathsWithoutChecks = ['/email-update', '/about']\n\nrouter.beforeEach((to, from, next) => {\n store\n .dispatch(AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER)\n .then(() => {\n if (pathsWithoutChecks.includes(to.path)) {\n return next()\n }\n if (\n store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED] &&\n pathsWithoutAuthentication.includes(to.path)\n ) {\n return next('/')\n }\n if (\n !store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED] &&\n !pathsWithoutAuthentication.includes(to.path)\n ) {\n const path =\n to.path === '/'\n ? { path: '/login' }\n : { path: '/login', query: { from: to.fullPath } }\n next(path)\n } else {\n next()\n }\n })\n .catch((error) => {\n console.error(error)\n next()\n })\n})\n\nexport default router\n","export enum AuthUserActions {\n CHECK_AUTH_USER = 'CHECK_AUTH_USER',\n CONFIRM_ACCOUNT = 'CONFIRM_ACCOUNT',\n CONFIRM_EMAIL = 'CONFIRM_EMAIL',\n DELETE_ACCOUNT = 'DELETE_ACCOUNT',\n DELETE_PICTURE = 'DELETE_PICTURE',\n GET_USER_PROFILE = 'GET_USER_PROFILE',\n LOGIN_OR_REGISTER = 'LOGIN_OR_REGISTER',\n LOGOUT = 'LOGOUT',\n SEND_PASSWORD_RESET_REQUEST = 'SEND_PASSWORD_RESET_REQUEST',\n RESEND_ACCOUNT_CONFIRMATION_EMAIL = 'RESEND_ACCOUNT_CONFIRMATION_EMAIL',\n RESET_USER_PASSWORD = 'RESET_USER_PASSWORD',\n RESET_USER_SPORT_PREFERENCES = 'RESET_USER_SPORT_PREFERENCES',\n UPDATE_USER_ACCOUNT = 'UPDATE_USER_ACCOUNT',\n UPDATE_USER_PICTURE = 'UPDATE_USER_PICTURE',\n UPDATE_USER_PROFILE = 'UPDATE_USER_PROFILE',\n UPDATE_USER_PREFERENCES = 'UPDATE_USER_PREFERENCES',\n UPDATE_USER_SPORT_PREFERENCES = 'UPDATE_USER_SPORT_PREFERENCES',\n}\n\nexport enum AuthUserGetters {\n AUTH_TOKEN = 'AUTH_TOKEN',\n AUTH_USER_PROFILE = 'AUTH_USER_PROFILE',\n IS_ADMIN = 'IS_ADMIN',\n IS_AUTHENTICATED = 'IS_AUTHENTICATED',\n IS_SUCCESS = 'IS_SUCCESS',\n IS_REGISTRATION_SUCCESS = 'IS_REGISTRATION_SUCCESS',\n USER_LOADING = 'USER_LOADING',\n}\n\nexport enum AuthUserMutations {\n CLEAR_AUTH_USER_TOKEN = 'CLEAR_AUTH_USER_TOKEN',\n UPDATE_AUTH_TOKEN = 'UPDATE_AUTH_TOKEN',\n UPDATE_AUTH_USER_PROFILE = 'UPDATE_AUTH_USER_PROFILE',\n UPDATE_IS_SUCCESS = 'UPDATE_USER_IS_SUCCESS',\n UPDATE_IS_REGISTRATION_SUCCESS = 'UPDATE_IS_REGISTRATION_SUCCESS',\n UPDATE_USER_LOADING = 'UPDATE_USER_LOADING',\n}\n","export enum OAuth2Actions {\n AUTHORIZE_CLIENT = 'AUTHORIZE_CLIENT',\n CREATE_CLIENT = 'CREATE_CLIENT',\n DELETE_CLIENT = 'DELETE_CLIENT',\n GET_CLIENTS = 'GET_CLIENTS',\n GET_CLIENT_BY_CLIENT_ID = 'GET_CLIENT_BY_CLIENT_ID',\n GET_CLIENT_BY_ID = 'GET_CLIENT_BY_ID',\n REVOKE_ALL_TOKENS = 'REVOKE_ALL_TOKENS',\n}\n\nexport enum OAuth2Getters {\n CLIENT = 'CLIENT',\n CLIENTS = 'CLIENTS',\n CLIENTS_PAGINATION = 'CLIENTS_PAGINATION',\n REVOCATION_SUCCESSFUL = 'REVOCATION_SUCCESSFUL',\n}\n\nexport enum OAuth2Mutations {\n EMPTY_CLIENT = 'EMPTY_CLIENT',\n SET_CLIENT = 'SET_CLIENT',\n SET_CLIENTS = 'SET_CLIENTS',\n SET_CLIENTS_PAGINATION = 'SET_CLIENTS_PAGINATION',\n SET_REVOCATION_SUCCESSFUL = 'SET_REVOCATION_SUCCESSFUL',\n}\n","export enum RootActions {\n GET_APPLICATION_CONFIG = 'GET_APPLICATION_CONFIG',\n GET_APPLICATION_STATS = 'GET_APPLICATION_STATS',\n UPDATE_APPLICATION_CONFIG = 'UPDATE_APPLICATION_CONFIG',\n UPDATE_APPLICATION_LANGUAGE = 'UPDATE_APPLICATION_LANGUAGE',\n}\n\nexport enum RootGetters {\n APP_CONFIG = 'APP_CONFIG',\n APP_LOADING = 'APP_LOADING',\n APP_STATS = 'APP_STATS',\n ERROR_MESSAGES = 'ERROR_MESSAGES',\n LANGUAGE = 'LANGUAGE',\n LOCALE = 'LOCALE', // date-fns\n}\n\nexport enum RootMutations {\n EMPTY_ERROR_MESSAGES = 'EMPTY_ERROR_MESSAGES',\n SET_ERROR_MESSAGES = 'SET_ERROR_MESSAGES',\n UPDATE_APPLICATION_CONFIG = 'UPDATE_APPLICATION_CONFIG',\n UPDATE_APPLICATION_LOADING = 'UPDATE_APPLICATION_LOADING',\n UPDATE_APPLICATION_STATS = 'UPDATE_APPLICATION_STATS',\n UPDATE_LANG = 'UPDATE_LANG',\n}\n","export enum SportsActions {\n GET_SPORTS = 'GET_SPORTS',\n UPDATE_SPORTS = 'UPDATE_SPORTS',\n}\n\nexport enum SportsGetters {\n SPORTS = 'SPORTS',\n}\n\nexport enum SportsMutation {\n SET_SPORTS = 'SET_SPORTS',\n}\n","export enum StatisticsActions {\n GET_USER_STATS = 'GET_USER_STATS',\n}\n\nexport enum StatisticsGetters {\n USER_STATS = 'USER_STATS',\n}\n\nexport enum StatisticsMutations {\n EMPTY_USER_STATS = 'EMPTY_USER_STATS',\n UPDATE_USER_STATS = 'UPDATE_USER_STATS',\n}\n","export enum UsersActions {\n EMPTY_USER = 'EMPTY_USER',\n EMPTY_USERS = 'EMPTY_USERS',\n GET_USER = 'GET_USER',\n GET_USERS = 'GET_USERS',\n UPDATE_USER = 'UPDATE_USER',\n DELETE_USER_ACCOUNT = 'DELETE_USER_ACCOUNT',\n}\n\nexport enum UsersGetters {\n USER = 'USER',\n USERS = 'USERS',\n USERS_IS_SUCCESS = 'USERS_IS_SUCCESS',\n USERS_LOADING = 'USERS_LOADING',\n USERS_PAGINATION = 'USERS_PAGINATION',\n}\n\nexport enum UsersMutations {\n UPDATE_USER = 'UPDATE_USER',\n UPDATE_USER_IN_USERS = 'UPDATE_USER_IN_USERS',\n UPDATE_USERS = 'UPDATE_USERS',\n UPDATE_USERS_LOADING = 'UPDATE_USERS_LOADING',\n UPDATE_USERS_PAGINATION = 'UPDATE_USERS_PAGINATION',\n UPDATE_IS_SUCCESS = 'UPDATE_IS_SUCCESS',\n}\n","import {\n AuthUserActions,\n AuthUserGetters,\n AuthUserMutations,\n} from '@/store/modules/authUser/enums'\nimport {\n OAuth2Actions,\n OAuth2Getters,\n OAuth2Mutations,\n} from '@/store/modules/oauth2/enums'\nimport {\n RootActions,\n RootGetters,\n RootMutations,\n} from '@/store/modules/root/enums'\nimport {\n SportsActions,\n SportsGetters,\n SportsMutation,\n} from '@/store/modules/sports/enums'\nimport {\n StatisticsActions,\n StatisticsGetters,\n StatisticsMutations,\n} from '@/store/modules/statistics/enums'\nimport {\n UsersActions,\n UsersGetters,\n UsersMutations,\n} from '@/store/modules/users/enums'\nimport {\n WorkoutsActions,\n WorkoutsGetters,\n WorkoutsMutations,\n} from '@/store/modules/workouts/enums'\n\nexport const ROOT_STORE = {\n ACTIONS: RootActions,\n GETTERS: RootGetters,\n MUTATIONS: RootMutations,\n}\n\nexport const SPORTS_STORE = {\n ACTIONS: SportsActions,\n GETTERS: SportsGetters,\n MUTATIONS: SportsMutation,\n}\n\nexport const STATS_STORE = {\n ACTIONS: StatisticsActions,\n GETTERS: StatisticsGetters,\n MUTATIONS: StatisticsMutations,\n}\n\nexport const AUTH_USER_STORE = {\n ACTIONS: AuthUserActions,\n GETTERS: AuthUserGetters,\n MUTATIONS: AuthUserMutations,\n}\nexport const OAUTH2_STORE = {\n ACTIONS: OAuth2Actions,\n GETTERS: OAuth2Getters,\n MUTATIONS: OAuth2Mutations,\n}\n\nexport const USERS_STORE = {\n ACTIONS: UsersActions,\n GETTERS: UsersGetters,\n MUTATIONS: UsersMutations,\n}\n\nexport const WORKOUTS_STORE = {\n ACTIONS: WorkoutsActions,\n GETTERS: WorkoutsGetters,\n MUTATIONS: WorkoutsMutations,\n}\n","import axios from 'axios'\n\nimport { pendingRequests, removeRequestIfPending } from '@/api/pending'\nimport { getApiUrl } from '@/utils'\n\nconst api = axios.create({\n baseURL: getApiUrl(),\n})\n\napi.interceptors.request.use(\n (config) => {\n const controller = new AbortController()\n config.signal = controller.signal\n const requestKey = removeRequestIfPending(config)\n pendingRequests.set(requestKey, controller)\n return config\n },\n (error) => Promise.reject(error)\n)\n\napi.interceptors.response.use(\n (response) => {\n removeRequestIfPending(response.config)\n return response\n },\n (error) => {\n if (error.message !== 'canceled') {\n removeRequestIfPending(error.response.config)\n }\n return Promise.reject(error)\n }\n)\n\nexport default api\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { IUsersActions, IUsersState } from '@/store/modules/users/types'\nimport { TPaginationPayload } from '@/types/api'\nimport { IAdminUserPayload, IUserDeletionPayload } from '@/types/user'\nimport { handleError } from '@/utils'\n\nexport const deleteUserAccount = (\n context:\n | ActionContext\n | ActionContext,\n payload: IUserDeletionPayload\n): void => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .delete(`users/${payload.username}`)\n .then((res) => {\n if (res.status === 204) {\n if (payload.fromAdmin) {\n router.push('/admin/users')\n } else {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.LOGOUT)\n .then(() => router.push('/'))\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree & IUsersActions = {\n [USERS_STORE.ACTIONS.EMPTY_USER](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USER, {})\n },\n [USERS_STORE.ACTIONS.EMPTY_USERS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS, [])\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION, {})\n },\n [USERS_STORE.ACTIONS.GET_USER](\n context: ActionContext,\n username: string\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, true)\n authApi\n .get(`users/${username}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER,\n res.data.data.users[0]\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.GET_USERS](\n context: ActionContext,\n payload: TPaginationPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, true)\n authApi\n .get('users', { params: payload })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USERS,\n res.data.data.users\n )\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION,\n res.data.pagination\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.UPDATE_USER](\n context: ActionContext,\n payload: IAdminUserPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n const data: Record = {}\n if (payload.admin !== undefined) {\n data.admin = payload.admin\n }\n if (payload.resetPassword) {\n data.reset_password = payload.resetPassword\n }\n if (payload.activate) {\n data.activate = payload.activate\n }\n if (payload.new_email !== undefined) {\n data.new_email = payload.new_email\n }\n authApi\n .patch(`users/${payload.username}`, data)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER_IN_USERS,\n res.data.data.users[0]\n )\n if (payload.resetPassword || payload.new_email) {\n context.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n }\n if (payload.activate || payload.new_email) {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER,\n res.data.data.users[0]\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.DELETE_USER_ACCOUNT](\n context: ActionContext,\n payload: IUserDeletionPayload\n ): void {\n deleteUserAccount(context, {\n username: payload.username,\n fromAdmin: true,\n })\n },\n}\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport api from '@/api/defaultApi'\nimport router from '@/router'\nimport {\n AUTH_USER_STORE,\n ROOT_STORE,\n SPORTS_STORE,\n STATS_STORE,\n USERS_STORE,\n WORKOUTS_STORE,\n} from '@/store/constants'\nimport {\n IAuthUserActions,\n IAuthUserState,\n} from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { deleteUserAccount } from '@/store/modules/users/actions'\nimport {\n ILoginOrRegisterData,\n IUserAccountPayload,\n IUserDeletionPayload,\n IUserAccountUpdatePayload,\n IUserEmailPayload,\n IUserPasswordResetPayload,\n IUserPayload,\n IUserPicturePayload,\n IUserPreferencesPayload,\n IUserSportPreferencesPayload,\n} from '@/types/user'\nimport { handleError } from '@/utils'\n\nconst removeAuthUserData = (\n context: ActionContext\n) => {\n localStorage.removeItem('authToken')\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(STATS_STORE.MUTATIONS.EMPTY_USER_STATS)\n context.commit(AUTH_USER_STORE.MUTATIONS.CLEAR_AUTH_USER_TOKEN)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS, [])\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUTS)\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n router.push('/login')\n}\n\nexport const actions: ActionTree &\n IAuthUserActions = {\n [AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER](\n context: ActionContext\n ): void {\n if (\n window.localStorage.authToken &&\n !context.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n ) {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN,\n window.localStorage.authToken\n )\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n }\n // after logout in another tab\n if (\n !window.localStorage.authToken &&\n context.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n ) {\n removeAuthUserData(context)\n }\n },\n [AUTH_USER_STORE.ACTIONS.CONFIRM_ACCOUNT](\n context: ActionContext,\n payload: IUserAccountUpdatePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/account/confirm', { token: payload.token })\n .then((res) => {\n if (res.data.status === 'success') {\n const token = res.data.auth_token\n window.localStorage.setItem('authToken', token)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN, token)\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n },\n [AUTH_USER_STORE.ACTIONS.CONFIRM_EMAIL](\n context: ActionContext,\n payload: IUserAccountUpdatePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n api\n .post('/auth/email/update', { token: payload.token })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n if (payload.refreshUser) {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => {\n return router.push('/profile/edit/account')\n })\n }\n router.push('/profile/edit/account')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n },\n [AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('auth/profile')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n if (res.data.data.language) {\n context.dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n res.data.data.language\n )\n }\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n removeAuthUserData(context)\n }\n })\n .catch((error) => {\n if (error.message !== 'canceled') {\n handleError(context, error)\n removeAuthUserData(context)\n }\n })\n },\n [AUTH_USER_STORE.ACTIONS.LOGIN_OR_REGISTER](\n context: ActionContext,\n data: ILoginOrRegisterData\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n false\n )\n api\n .post(`/auth/${data.actionType}`, data.formData)\n .then((res) => {\n if (res.data.status === 'success') {\n if (data.actionType === 'login') {\n const token = res.data.auth_token\n window.localStorage.setItem('authToken', token)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN, token)\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() =>\n router.push(\n typeof data.redirectUrl === 'string' ? data.redirectUrl : '/'\n )\n )\n } else {\n router\n .push('/login')\n .then(() =>\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n true\n )\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.LOGOUT](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .post('auth/logout')\n .then((res) => {\n if (res.data.status === 'success') {\n removeAuthUserData(context)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PROFILE](\n context: ActionContext,\n payload: IUserPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n router.push('/profile')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_ACCOUNT](\n context: ActionContext,\n payload: IUserAccountPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n authApi\n .patch('auth/profile/edit/account', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PREFERENCES](\n context: ActionContext,\n payload: IUserPreferencesPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit/preferences', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n context\n .dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n res.data.data.language\n )\n .then(() => router.push('/profile/preferences'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.RESET_USER_SPORT_PREFERENCES](\n context: ActionContext,\n sportId: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .delete(`auth/profile/reset/sports/${sportId}`)\n .then((res) => {\n if (res.status === 204) {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n })\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_SPORT_PREFERENCES](\n context: ActionContext,\n payload: IUserSportPreferencesPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit/sports', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n })\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PICTURE](\n context: ActionContext,\n payload: IUserPicturePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n if (!payload.picture) {\n throw new Error('No file part')\n }\n const form = new FormData()\n form.append('file', payload.picture)\n authApi\n .post('auth/picture', form, {\n headers: {\n 'content-type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/profile'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.DELETE_ACCOUNT](\n context: ActionContext,\n payload: IUserDeletionPayload\n ): void {\n deleteUserAccount(context, payload)\n },\n [AUTH_USER_STORE.ACTIONS.DELETE_PICTURE](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .delete(`auth/picture`)\n .then((res) => {\n if (res.status === 204) {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/profile'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.SEND_PASSWORD_RESET_REQUEST](\n context: ActionContext,\n payload: IUserEmailPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/password/reset-request', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/password-reset/sent')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL](\n context: ActionContext,\n payload: IUserEmailPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/account/resend-confirmation', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/account-confirmation/email-sent')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.RESET_USER_PASSWORD](\n context: ActionContext,\n payload: IUserPasswordResetPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/password/update', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/password-reset/password-updated')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport {\n IAuthUserGetters,\n IAuthUserState,\n} from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree &\n IAuthUserGetters = {\n [AUTH_USER_STORE.GETTERS.AUTH_TOKEN]: (state: IAuthUserState) => {\n return state.authToken\n },\n [AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]: (state: IAuthUserState) => {\n return state.authUserProfile\n },\n [AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]: (state: IAuthUserState) => {\n return state.authToken !== null\n },\n [AUTH_USER_STORE.GETTERS.IS_ADMIN]: (state: IAuthUserState) => {\n return state.authUserProfile && state.authUserProfile.admin\n },\n [AUTH_USER_STORE.GETTERS.IS_REGISTRATION_SUCCESS]: (\n state: IAuthUserState\n ) => {\n return state.isRegistrationSuccess\n },\n [AUTH_USER_STORE.GETTERS.IS_SUCCESS]: (state: IAuthUserState) => {\n return state.isSuccess\n },\n [AUTH_USER_STORE.GETTERS.USER_LOADING]: (state: IAuthUserState) => {\n return state.loading\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport {\n IAuthUserState,\n TAuthUserMutations,\n} from '@/store/modules/authUser/types'\nimport { IAuthUserProfile } from '@/types/user'\n\nexport const mutations: MutationTree & TAuthUserMutations = {\n [AUTH_USER_STORE.MUTATIONS.CLEAR_AUTH_USER_TOKEN](state: IAuthUserState) {\n state.authToken = null\n state.authUserProfile = {}\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN](\n state: IAuthUserState,\n authToken: string\n ) {\n state.authToken = authToken\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE](\n state: IAuthUserState,\n authUserProfile: IAuthUserProfile\n ) {\n state.authUserProfile = authUserProfile\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS](\n state: IAuthUserState,\n isRegistrationSuccess: boolean\n ) {\n state.isRegistrationSuccess = isRegistrationSuccess\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS](\n state: IAuthUserState,\n isSuccess: boolean\n ) {\n state.isSuccess = isSuccess\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING](\n state: IAuthUserState,\n loading: boolean\n ) {\n state.loading = loading\n },\n}\n","import { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IAuthUserProfile } from '@/types/user'\n\nexport const authUserState: IAuthUserState = {\n authToken: null,\n authUserProfile: {},\n isSuccess: false,\n isRegistrationSuccess: false,\n loading: false,\n}\n","import { Module } from 'vuex'\n\nimport { actions } from '@/store/modules/authUser/actions'\nimport { getters } from '@/store/modules/authUser/getters'\nimport { mutations } from '@/store/modules/authUser/mutations'\nimport { authUserState } from '@/store/modules/authUser/state'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst authUser: Module = {\n state: authUserState,\n actions,\n getters,\n mutations,\n}\n\nexport default authUser\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\nimport { IOAuth2Actions, IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IOauth2ClientsPayload,\n IOAuth2ClientPayload,\n IOAuth2ClientAuthorizePayload,\n} from '@/types/oauth'\nimport { handleError } from '@/utils'\n\nconst get_client = (\n context: ActionContext,\n url: string\n) => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get(url)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(OAUTH2_STORE.MUTATIONS.SET_CLIENT, res.data.data.client)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree & IOAuth2Actions = {\n [OAUTH2_STORE.ACTIONS.AUTHORIZE_CLIENT](\n context: ActionContext,\n payload: IOAuth2ClientAuthorizePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n const form = new FormData()\n form.set('client_id', payload.client_id)\n form.set('response_type', payload.response_type)\n form.set('scope', payload.scope)\n form.set('confirm', 'true')\n if (payload.state) {\n form.set('state', payload.state)\n }\n if (payload.code_challenge) {\n form.set('code_challenge', payload.code_challenge)\n }\n if (payload.code_challenge_method) {\n form.set('code_challenge_method', payload.code_challenge_method)\n }\n\n authApi\n .post('oauth/authorize', form, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.status == 200 && res.data.redirect_url) {\n window.location.href = res.data.redirect_url\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.CREATE_CLIENT](\n context: ActionContext,\n payload: IOAuth2ClientPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .post('oauth/apps', payload)\n .then((res) => {\n if (res.data.status === 'created') {\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENT,\n res.data.data.client\n )\n router.push(`/profile/apps/${res.data.data.client.id}/created`)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.DELETE_CLIENT](\n context: ActionContext,\n id: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .delete(`oauth/apps/${id}`)\n .then((res) => {\n if (res.status === 204) {\n context\n .dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENTS)\n .then(() => router.push('/profile/apps'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_CLIENT_ID](\n context: ActionContext,\n client_id: string\n ): void {\n get_client(context, `oauth/apps/${client_id}`)\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_ID](\n context: ActionContext,\n id: number\n ): void {\n get_client(context, `oauth/apps/${id}/by_id`)\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENTS](\n context: ActionContext,\n payload: IOauth2ClientsPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('oauth/apps', {\n params: payload,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENTS,\n res.data.data.clients\n )\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENTS_PAGINATION,\n res.data.pagination\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.REVOKE_ALL_TOKENS](\n context: ActionContext,\n id: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, false)\n authApi\n .post(`oauth/apps/${id}/revoke`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, true)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { OAUTH2_STORE } from '@/store/constants'\nimport { IOAuth2Getters, IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree & IOAuth2Getters = {\n [OAUTH2_STORE.GETTERS.CLIENT]: (state: IOAuth2State) => state.client,\n [OAUTH2_STORE.GETTERS.CLIENTS]: (state: IOAuth2State) => state.clients,\n [OAUTH2_STORE.GETTERS.CLIENTS_PAGINATION]: (state: IOAuth2State) =>\n state.pagination,\n [OAUTH2_STORE.GETTERS.REVOCATION_SUCCESSFUL]: (state: IOAuth2State) =>\n state.revocationSuccessful,\n}\n","import { MutationTree } from 'vuex'\n\nimport { OAUTH2_STORE } from '@/store/constants'\nimport { IOAuth2State, TOAuth2Mutations } from '@/store/modules/oauth2/types'\nimport { IPagination } from '@/types/api'\nimport { IOAuth2Client } from '@/types/oauth'\n\nexport const mutations: MutationTree & TOAuth2Mutations = {\n [OAUTH2_STORE.MUTATIONS.SET_CLIENT](\n state: IOAuth2State,\n client: IOAuth2Client\n ) {\n state.client = client\n },\n [OAUTH2_STORE.MUTATIONS.EMPTY_CLIENT](state: IOAuth2State) {\n state.client = {}\n },\n [OAUTH2_STORE.MUTATIONS.SET_CLIENTS](\n state: IOAuth2State,\n clients: IOAuth2Client[]\n ) {\n state.clients = clients\n },\n [OAUTH2_STORE.MUTATIONS.SET_CLIENTS_PAGINATION](\n state: IOAuth2State,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL](\n state: IOAuth2State,\n revocationSuccessful: boolean\n ) {\n state.revocationSuccessful = revocationSuccessful\n },\n}\n","import { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IPagination } from '@/types/api'\nimport { IOAuth2Client } from '@/types/oauth'\n\nexport const oAuth2State: IOAuth2State = {\n client: {},\n clients: [],\n pagination: {},\n revocationSuccessful: false,\n}\n","import { Module } from 'vuex'\n\nimport { actions } from '@/store/modules/oauth2/actions'\nimport { getters } from '@/store/modules/oauth2/getters'\nimport { mutations } from '@/store/modules/oauth2/mutations'\nimport { oAuth2State } from '@/store/modules/oauth2/state'\nimport { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst oauth2: Module = {\n state: oAuth2State,\n actions,\n getters,\n mutations,\n}\n\nexport default oauth2\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport createI18n from '@/i18n'\nimport router from '@/router'\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootActions, IRootState } from '@/store/modules/root/types'\nimport { TAppConfigForm } from '@/types/application'\nimport { handleError } from '@/utils'\n\nconst { locale } = createI18n.global\n\nexport const actions: ActionTree & IRootActions = {\n [ROOT_STORE.ACTIONS.GET_APPLICATION_CONFIG](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING, true)\n authApi\n .get('config')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG,\n res.data.data\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING, false)\n )\n },\n [ROOT_STORE.ACTIONS.GET_APPLICATION_STATS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('stats/all')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_STATS,\n res.data.data\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [ROOT_STORE.ACTIONS.UPDATE_APPLICATION_CONFIG](\n context: ActionContext,\n payload: TAppConfigForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .patch('config', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG,\n res.data.data\n )\n router.push('/admin/application')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE](\n context: ActionContext,\n language: string\n ): void {\n document.querySelector('html')?.setAttribute('lang', language)\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_LANG, language)\n locale.value = language\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootGetters, IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree & IRootGetters = {\n [ROOT_STORE.GETTERS.APP_CONFIG]: (state: IRootState) => {\n return state.application.config\n },\n [ROOT_STORE.GETTERS.APP_LOADING]: (state: IRootState) => {\n return state.appLoading\n },\n [ROOT_STORE.GETTERS.APP_STATS]: (state: IRootState) => {\n return state.application.statistics\n },\n [ROOT_STORE.GETTERS.ERROR_MESSAGES]: (state: IRootState) => {\n return state.errorMessages\n },\n [ROOT_STORE.GETTERS.LANGUAGE]: (state: IRootState) => {\n return state.language\n },\n [ROOT_STORE.GETTERS.LOCALE]: (state: IRootState) => {\n return state.locale\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootState, TRootMutations } from '@/store/modules/root/types'\nimport { TAppConfig, IAppStatistics } from '@/types/application'\nimport { localeFromLanguage } from '@/utils/locales'\n\nexport const mutations: MutationTree & TRootMutations = {\n [ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES](state: IRootState) {\n state.errorMessages = null\n },\n [ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES](\n state: IRootState,\n errorMessages: string\n ) {\n state.errorMessages = errorMessages\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG](\n state: IRootState,\n config: TAppConfig\n ) {\n state.application.config = config\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING](\n state: IRootState,\n loading: boolean\n ) {\n state.appLoading = loading\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_STATS](\n state: IRootState,\n statistics: IAppStatistics\n ) {\n state.application.statistics = statistics\n },\n [ROOT_STORE.MUTATIONS.UPDATE_LANG](state: IRootState, language: string) {\n state.language = language\n state.locale = localeFromLanguage[language]\n },\n}\n","import { enUS } from 'date-fns/locale'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { IApplication } from '@/types/application'\n\nexport const state: IRootState = {\n root: true,\n language: 'en',\n locale: enUS,\n errorMessages: null,\n application: {\n statistics: {\n sports: 0,\n uploads_dir_size: 0,\n users: 0,\n workouts: 0,\n },\n },\n appLoading: false,\n}\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport { AUTH_USER_STORE, ROOT_STORE, SPORTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsActions, ISportsState } from '@/store/modules/sports/types'\nimport { ISportPayload } from '@/types/sports'\nimport { handleError } from '@/utils'\n\nexport const actions: ActionTree & ISportsActions = {\n [SPORTS_STORE.ACTIONS.GET_SPORTS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('sports')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n SPORTS_STORE.MUTATIONS.SET_SPORTS,\n res.data.data.sports\n )\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [SPORTS_STORE.ACTIONS.UPDATE_SPORTS](\n context: ActionContext,\n payload: ISportPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .patch(`sports/${payload.id}`, { is_active: payload.isActive })\n .then((res) => {\n if (res.data.status === 'success') {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { SPORTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsGetters, ISportsState } from '@/store/modules/sports/types'\n\nexport const getters: GetterTree & ISportsGetters = {\n [SPORTS_STORE.GETTERS.SPORTS]: (state: ISportsState) => state.sports,\n}\n","import { MutationTree } from 'vuex'\n\nimport { SPORTS_STORE } from '@/store/constants'\nimport { ISportsState, TSportsMutations } from '@/store/modules/sports/types'\nimport { ISport } from '@/types/sports'\n\nexport const mutations: MutationTree & TSportsMutations = {\n [SPORTS_STORE.MUTATIONS.SET_SPORTS](state: ISportsState, sports: ISport[]) {\n state.sports = sports\n },\n}\n","import { ISportsState } from '@/store/modules/sports/types'\n\nexport const sportsState: ISportsState = {\n sports: [],\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/sports/actions'\nimport { getters } from '@/store/modules/sports/getters'\nimport { mutations } from '@/store/modules/sports/mutations'\nimport { sportsState } from '@/store/modules/sports/state'\nimport { ISportsState } from '@/store/modules/sports/types'\n\nconst sports: Module = {\n state: sportsState,\n actions,\n getters,\n mutations,\n}\n\nexport default sports\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport { STATS_STORE, ROOT_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IStatisticsActions,\n IStatisticsState,\n} from '@/store/modules/statistics/types'\nimport { IUserStatisticsPayload } from '@/types/statistics'\nimport { handleError } from '@/utils'\n\nexport const actions: ActionTree &\n IStatisticsActions = {\n [STATS_STORE.ACTIONS.GET_USER_STATS](\n context: ActionContext,\n payload: IUserStatisticsPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get(`stats/${payload.username}/${payload.filterType}`, {\n params: payload.params,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n STATS_STORE.MUTATIONS.UPDATE_USER_STATS,\n res.data.data.statistics\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { STATS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IStatisticsGetters,\n IStatisticsState,\n} from '@/store/modules/statistics/types'\n\nexport const getters: GetterTree &\n IStatisticsGetters = {\n [STATS_STORE.GETTERS.USER_STATS]: (state: IStatisticsState) => {\n return state.statistics\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { STATS_STORE } from '@/store/constants'\nimport {\n IStatisticsState,\n TStatisticsMutations,\n} from '@/store/modules/statistics/types'\nimport { TStatisticsFromApi } from '@/types/statistics'\n\nexport const mutations: MutationTree & TStatisticsMutations =\n {\n [STATS_STORE.MUTATIONS.UPDATE_USER_STATS](\n state: IStatisticsState,\n statistics: TStatisticsFromApi\n ) {\n state.statistics = statistics\n },\n [STATS_STORE.MUTATIONS.EMPTY_USER_STATS](state: IStatisticsState) {\n state.statistics = {}\n },\n }\n","import { IStatisticsState } from '@/store/modules/statistics/types'\nimport { TStatisticsFromApi } from '@/types/statistics'\n\nexport const statisticsState: IStatisticsState = {\n statistics: {},\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/statistics/actions'\nimport { getters } from '@/store/modules/statistics/getters'\nimport { mutations } from '@/store/modules/statistics/mutations'\nimport { statisticsState } from '@/store/modules/statistics/state'\nimport { IStatisticsState } from '@/store/modules/statistics/types'\n\nconst statistics: Module = {\n state: statisticsState,\n actions,\n getters,\n mutations,\n}\n\nexport default statistics\n","import { GetterTree } from 'vuex'\n\nimport { USERS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { IUsersGetters, IUsersState } from '@/store/modules/users/types'\n\nexport const getters: GetterTree & IUsersGetters = {\n [USERS_STORE.GETTERS.USER]: (state: IUsersState) => {\n return state.user\n },\n [USERS_STORE.GETTERS.USERS]: (state: IUsersState) => {\n return state.users\n },\n [USERS_STORE.GETTERS.USERS_IS_SUCCESS]: (state: IUsersState) => {\n return state.isSuccess\n },\n [USERS_STORE.GETTERS.USERS_LOADING]: (state: IUsersState) => {\n return state.loading\n },\n [USERS_STORE.GETTERS.USERS_PAGINATION]: (state: IUsersState) => {\n return state.pagination\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { USERS_STORE } from '@/store/constants'\nimport { IUsersState, TUsersMutations } from '@/store/modules/users/types'\nimport { IPagination } from '@/types/api'\nimport { IUserProfile } from '@/types/user'\n\nexport const mutations: MutationTree & TUsersMutations = {\n [USERS_STORE.MUTATIONS.UPDATE_USER](state: IUsersState, user: IUserProfile) {\n state.user = user\n },\n [USERS_STORE.MUTATIONS.UPDATE_USER_IN_USERS](\n state: IUsersState,\n updatedUser: IUserProfile\n ) {\n state.users = state.users.map((user) => {\n if (user.username === updatedUser.username) {\n return updatedUser\n }\n return user\n })\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS](\n state: IUsersState,\n users: IUserProfile[]\n ) {\n state.users = users\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING](\n state: IUsersState,\n loading: boolean\n ) {\n state.loading = loading\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION](\n state: IUsersState,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS](\n state: IUsersState,\n isSuccess: boolean\n ) {\n state.isSuccess = isSuccess\n },\n}\n","import { IUsersState } from '@/store/modules/users/types'\nimport { IPagination } from '@/types/api'\nimport { IUserProfile } from '@/types/user'\n\nexport const usersState: IUsersState = {\n user: {},\n users: [],\n loading: false,\n isSuccess: false,\n pagination: {},\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/users/actions'\nimport { getters } from '@/store/modules/users/getters'\nimport { mutations } from '@/store/modules/users/mutations'\nimport { usersState } from '@/store/modules/users/state'\nimport { IUsersState } from '@/store/modules/users/types'\n\nconst users: Module = {\n state: usersState,\n actions,\n getters,\n mutations,\n}\n\nexport default users\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { ROOT_STORE, AUTH_USER_STORE, WORKOUTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { WorkoutsMutations } from '@/store/modules/workouts/enums'\nimport {\n IWorkoutsActions,\n IWorkoutsState,\n} from '@/store/modules/workouts/types'\nimport {\n IWorkout,\n IWorkoutForm,\n IWorkoutPayload,\n TWorkoutsPayload,\n} from '@/types/workouts'\nimport { handleError } from '@/utils'\n\nconst getWorkouts = (\n context: ActionContext,\n payload: TWorkoutsPayload,\n target: WorkoutsMutations\n): void => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('workouts', {\n params: payload,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(WORKOUTS_STORE.MUTATIONS[target], res.data.data.workouts)\n if (target === WorkoutsMutations['SET_USER_WORKOUTS']) {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUTS_PAGINATION,\n res.data.pagination\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree &\n IWorkoutsActions = {\n [WORKOUTS_STORE.ACTIONS.GET_CALENDAR_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_CALENDAR_WORKOUTS)\n getWorkouts(context, payload, WorkoutsMutations['SET_CALENDAR_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_USER_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['SET_USER_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_TIMELINE_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['SET_TIMELINE_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_MORE_TIMELINE_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['ADD_TIMELINE_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n const segmentUrl = payload.segmentId ? `/segment/${payload.segmentId}` : ''\n authApi\n .get(`workouts/${payload.workoutId}`)\n .then((res) => {\n const workout: IWorkout = res.data.data.workouts[0]\n if (res.data.status === 'success') {\n if (\n payload.segmentId &&\n (workout.segments.length === 0 ||\n !workout.segments[+payload.segmentId - 1])\n ) {\n throw new Error('WORKOUT_NOT_FOUND')\n }\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT,\n res.data.data.workouts[0]\n )\n if (res.data.data.workouts[0].with_gpx) {\n authApi\n .get(`workouts/${payload.workoutId}/chart_data${segmentUrl}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_CHART_DATA,\n res.data.data.chart_data\n )\n }\n })\n authApi\n .get(`workouts/${payload.workoutId}/gpx${segmentUrl}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_GPX,\n res.data.data.gpx\n )\n }\n })\n }\n } else {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n handleError(context, null)\n }\n })\n .catch((error) => {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.DELETE_WORKOUT](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .delete(`workouts/${payload.workoutId}`)\n .then(() => {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n router.push('/')\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.EDIT_WORKOUT](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .patch(`workouts/${payload.workoutId}`, payload.data)\n .then(() => {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n context\n .dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, {\n workoutId: payload.workoutId,\n })\n .then(() => {\n router.push({\n name: 'Workout',\n params: { workoutId: payload.workoutId },\n })\n })\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.ADD_WORKOUT](\n context: ActionContext,\n payload: IWorkoutForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n if (!payload.file) {\n throw new Error('No file part')\n }\n const form = new FormData()\n form.append('file', payload.file)\n form.append(\n 'data',\n `{\"sport_id\": ${payload.sport_id}, \"notes\": \"${payload.notes}\"}`\n )\n authApi\n .post('workouts', form, {\n headers: {\n 'content-type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.data.status === 'created') {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n const workout: IWorkout = res.data.data.workouts[0]\n router.push(\n res.data.data.workouts.length === 1\n ? `/workouts/${workout.id}`\n : '/'\n )\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX](\n context: ActionContext,\n payload: IWorkoutForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .post('workouts/no_gpx', payload)\n .then((res) => {\n if (res.data.status === 'created') {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n const workout: IWorkout = res.data.data.workouts[0]\n router.push(`/workouts/${workout.id}`)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { WORKOUTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IWorkoutsGetters,\n IWorkoutsState,\n} from '@/store/modules/workouts/types'\n\nexport const getters: GetterTree &\n IWorkoutsGetters = {\n [WORKOUTS_STORE.GETTERS.CALENDAR_WORKOUTS]: (state: IWorkoutsState) => {\n return state.calendar_workouts\n },\n [WORKOUTS_STORE.GETTERS.TIMELINE_WORKOUTS]: (state: IWorkoutsState) => {\n return state.timeline_workouts\n },\n [WORKOUTS_STORE.GETTERS.USER_WORKOUTS]: (state: IWorkoutsState) => {\n return state.user_workouts\n },\n [WORKOUTS_STORE.GETTERS.WORKOUT_DATA]: (state: IWorkoutsState) => {\n return state.workoutData\n },\n [WORKOUTS_STORE.GETTERS.WORKOUTS_PAGINATION]: (state: IWorkoutsState) => {\n return state.pagination\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { WORKOUTS_STORE } from '@/store/constants'\nimport {\n IWorkoutsState,\n TWorkoutsMutations,\n} from '@/store/modules/workouts/types'\nimport { IPagination } from '@/types/api'\nimport { IWorkout, IWorkoutApiChartData } from '@/types/workouts'\n\nexport const mutations: MutationTree & TWorkoutsMutations = {\n [WORKOUTS_STORE.MUTATIONS.ADD_TIMELINE_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.timeline_workouts = state.timeline_workouts.concat(workouts)\n },\n [WORKOUTS_STORE.MUTATIONS.SET_CALENDAR_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.calendar_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_TIMELINE_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.timeline_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_USER_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.user_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUTS_PAGINATION](\n state: IWorkoutsState,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT](\n state: IWorkoutsState,\n workout: IWorkout\n ) {\n state.workoutData.workout = workout\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_CHART_DATA](\n state: IWorkoutsState,\n chartData: IWorkoutApiChartData[]\n ) {\n state.workoutData.chartData = chartData\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_GPX](\n state: IWorkoutsState,\n gpx: string\n ) {\n state.workoutData.gpx = gpx\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING](\n state: IWorkoutsState,\n loading: boolean\n ) {\n state.workoutData.loading = loading\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_CALENDAR_WORKOUTS](state: IWorkoutsState) {\n state.calendar_workouts = []\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUTS](state: IWorkoutsState) {\n state.calendar_workouts = []\n state.user_workouts = []\n state.timeline_workouts = []\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT](state: IWorkoutsState) {\n state.workoutData = {\n gpx: '',\n loading: false,\n workout: {},\n chartData: [],\n }\n },\n}\n","import { IWorkoutsState } from '@/store/modules/workouts/types'\nimport { IPagination } from '@/types/api'\nimport { IWorkout } from '@/types/workouts'\n\nexport const workoutsState: IWorkoutsState = {\n calendar_workouts: [],\n timeline_workouts: [],\n pagination: {},\n user_workouts: [],\n workoutData: {\n gpx: '',\n loading: false,\n workout: {},\n chartData: [],\n },\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/workouts/actions'\nimport { getters } from '@/store/modules/workouts/getters'\nimport { mutations } from '@/store/modules/workouts/mutations'\nimport { workoutsState } from '@/store/modules/workouts/state'\nimport { IWorkoutsState } from '@/store/modules/workouts/types'\n\nconst workouts: Module = {\n state: workoutsState,\n actions,\n getters,\n mutations,\n}\n\nexport default workouts\n","import { Module, ModuleTree } from 'vuex'\n\nimport authUserModule from '@/store/modules/authUser'\nimport oAuthModule from '@/store/modules/oauth2'\nimport { actions } from '@/store/modules/root/actions'\nimport { getters } from '@/store/modules/root/getters'\nimport { mutations } from '@/store/modules/root/mutations'\nimport { state } from '@/store/modules/root/state'\nimport { IRootState } from '@/store/modules/root/types'\nimport sportsModule from '@/store/modules/sports'\nimport statsModule from '@/store/modules/statistics'\nimport usersModule from '@/store/modules/users'\nimport workoutsModule from '@/store/modules/workouts'\n\nconst modules: ModuleTree = {\n authUserModule,\n oAuthModule,\n sportsModule,\n statsModule,\n usersModule,\n workoutsModule,\n}\n\nconst root: Module = {\n state,\n actions,\n getters,\n mutations,\n modules,\n}\n\nexport default root\n","import { createStore } from 'vuex'\n\nimport root from '@/store/modules/root'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst store = createStore(root)\n\nexport default store\n","export enum WorkoutsActions {\n ADD_WORKOUT = 'ADD_WORKOUT',\n ADD_WORKOUT_WITHOUT_GPX = 'ADD_WORKOUT_WITHOUT_GPX',\n DELETE_WORKOUT = 'DELETE_WORKOUT',\n EDIT_WORKOUT = 'EDIT_WORKOUT',\n GET_CALENDAR_WORKOUTS = 'GET_CALENDAR_WORKOUTS',\n GET_USER_WORKOUTS = 'GET_USER_WORKOUTS',\n GET_TIMELINE_WORKOUTS = 'GET_TIMELINE_WORKOUTS',\n GET_MORE_TIMELINE_WORKOUTS = 'GET_MORE_TIMELINE_WORKOUTS',\n GET_WORKOUT_DATA = 'GET_WORKOUT_DATA',\n}\n\nexport enum WorkoutsGetters {\n CALENDAR_WORKOUTS = 'CALENDAR_WORKOUTS',\n TIMELINE_WORKOUTS = 'TIMELINE_WORKOUTS',\n USER_WORKOUTS = 'USER_WORKOUTS',\n WORKOUT_DATA = 'WORKOUT_DATA',\n WORKOUTS_PAGINATION = 'WORKOUTS_PAGINATION',\n}\n\nexport enum WorkoutsMutations {\n ADD_TIMELINE_WORKOUTS = 'ADD_TIMELINE_WORKOUTS',\n EMPTY_WORKOUTS = 'EMPTY_WORKOUTS',\n EMPTY_CALENDAR_WORKOUTS = 'EMPTY_CALENDAR_WORKOUTS',\n EMPTY_WORKOUT = 'EMPTY_WORKOUT',\n SET_CALENDAR_WORKOUTS = 'SET_CALENDAR_WORKOUTS',\n SET_TIMELINE_WORKOUTS = 'SET_TIMELINE_WORKOUTS',\n SET_USER_WORKOUTS = 'SET_USER_WORKOUTS',\n SET_WORKOUT = 'SET_WORKOUT',\n SET_WORKOUT_GPX = 'SET_WORKOUT_GPX',\n SET_WORKOUT_CHART_DATA = 'SET_WORKOUT_CHART_DATA',\n SET_WORKOUT_LOADING = 'SET_WORKOUT_LOADING',\n SET_WORKOUTS_PAGINATION = 'SET_WORKOUTS_PAGINATION',\n}\n","import { useStore as VuexStore } from 'vuex'\n\nimport { Store } from '@/store/types'\n\nexport function useStore(): Store {\n return VuexStore() as Store\n}\n","import { LocationQuery } from 'vue-router'\n\nimport { IQueryOptions, TPaginationPayload } from '@/types/api'\n\nexport const sortList: string[] = ['asc', 'desc']\nexport const defaultPage = 1\nexport const defaultPerPage = 10\n\nexport const getNumberQueryValue = (\n queryValue: string | (string | null)[] | null,\n defaultValue: number\n): number => {\n return queryValue && typeof queryValue === 'string' && +queryValue > 0\n ? +queryValue\n : defaultValue\n}\n\nexport const getStringQueryValue = (\n queryValue: string | (string | null)[] | null,\n availableValues: string[],\n defaultValue: string\n): string => {\n return queryValue &&\n typeof queryValue === 'string' &&\n availableValues.includes(queryValue)\n ? queryValue\n : defaultValue\n}\n\nexport const getQuery = (\n locationQuery: LocationQuery,\n orderByList: string[],\n defaultOrderBy: string,\n options?: IQueryOptions\n): TPaginationPayload => {\n const queryOptions = options || {}\n const defaultSort = queryOptions.defaultSort || 'asc'\n const query = {}\n\n query.page = getNumberQueryValue(locationQuery.page, defaultPage)\n query.per_page = getNumberQueryValue(locationQuery.per_page, defaultPerPage)\n query.order = getStringQueryValue(locationQuery.order, sortList, defaultSort)\n query.order_by = getStringQueryValue(\n locationQuery.order_by,\n orderByList,\n defaultOrderBy\n )\n if (typeof locationQuery.q === 'string') {\n query.q = locationQuery.q\n } else {\n delete query.q\n }\n\n return query\n}\n\nexport const workoutsPayloadKeys = [\n 'from',\n 'to',\n 'ave_speed_from',\n 'ave_speed_to',\n 'max_speed_from',\n 'max_speed_to',\n 'distance_from',\n 'distance_to',\n 'duration_from',\n 'duration_to',\n 'sport_id',\n]\n\nconst getRange = (stop: number, start = 1): number[] => {\n return Array.from({ length: stop - start + 1 }, (_, i) => start + i)\n}\n\nexport const rangePagination = (\n pages: number,\n currentPage: number\n): (string | number)[] => {\n if (pages < 0) {\n return []\n }\n\n if (pages < 9) {\n return getRange(pages)\n }\n\n let pagination: (string | number)[] = [1, 2]\n if (currentPage < 4) {\n pagination = pagination.concat([3, 4, 5])\n } else if (currentPage < 6) {\n pagination = pagination.concat(getRange(currentPage + 2, 3))\n } else {\n pagination = pagination.concat(['...'])\n if (currentPage < pages - 2) {\n pagination = pagination.concat(getRange(currentPage + 2, currentPage - 2))\n }\n }\n if (currentPage + 2 <= pages - 2) {\n pagination = pagination.concat(['...'])\n pagination = pagination.concat(getRange(pages, pages - 1))\n } else {\n if (\n pagination[pagination.length - 1] !== '...' &&\n pagination[pagination.length - 1] >= pages - 2 &&\n pagination[pagination.length - 1] < pages\n ) {\n pagination = pagination.concat(\n getRange(pages, +pagination[pagination.length - 1] + 1)\n )\n } else {\n pagination = pagination.concat(\n getRange(\n pages,\n currentPage < pages - 3 ? currentPage + 3 : currentPage - 5\n )\n )\n }\n }\n\n return pagination\n}\n","import {\n addDays,\n addMonths,\n addYears,\n endOfMonth,\n endOfWeek,\n format,\n startOfMonth,\n startOfWeek,\n startOfYear,\n} from 'date-fns'\nimport { utcToZonedTime } from 'date-fns-tz'\n\nimport createI18n from '@/i18n'\nimport { localeFromLanguage } from '@/utils/locales'\n\nconst { locale } = createI18n.global\n\nexport const getStartDate = (\n duration: string,\n day: Date,\n weekStartingMonday: boolean\n): Date => {\n switch (duration) {\n case 'week':\n return startOfWeek(day, { weekStartsOn: weekStartingMonday ? 1 : 0 })\n case 'year':\n return startOfYear(day)\n case 'month':\n return startOfMonth(day)\n default:\n throw new Error(\n `Invalid duration, expected: \"week\", \"month\", \"year\", got: \"${duration}\"`\n )\n }\n}\n\nexport const incrementDate = (duration: string, day: Date): Date => {\n switch (duration) {\n case 'week':\n return addDays(day, 7)\n case 'year':\n return addYears(day, 1)\n case 'month':\n return addMonths(day, 1)\n default:\n throw new Error(\n `Invalid duration, expected: \"week\", \"month\", \"year\", got: \"${duration}\"`\n )\n }\n}\n\nexport const getDateWithTZ = (dateInUTC: string, tz: string): Date => {\n return utcToZonedTime(new Date(dateInUTC), tz)\n}\n\nexport const getCalendarStartAndEnd = (\n date: Date,\n weekStartingMonday: boolean\n): Record => {\n const monthStart = startOfMonth(date)\n const monthEnd = endOfMonth(date)\n const weekStartsOn = weekStartingMonday ? 1 : 0\n return {\n start: startOfWeek(monthStart, { weekStartsOn }),\n end: endOfWeek(monthEnd, { weekStartsOn }),\n }\n}\n\nexport const formatWorkoutDate = (\n dateTime: Date,\n dateFormat: string | null = null,\n timeFormat: string | null = null\n): Record => {\n if (!dateFormat) {\n dateFormat = 'yyyy/MM/dd'\n }\n dateFormat = getDateFormat(dateFormat, locale.value)\n if (!timeFormat) {\n timeFormat = 'HH:mm'\n }\n return {\n workout_date: format(dateTime, dateFormat, {\n locale: localeFromLanguage[locale.value],\n }),\n workout_time: format(dateTime, timeFormat),\n }\n}\n\nconst availableDateFormats = [\n 'MM/dd/yyyy',\n 'dd/MM/yyyy',\n 'yyyy-MM-dd',\n 'date_string',\n]\nconst dateStringFormats: Record = {\n de: 'do MMM yyyy',\n en: 'MMM. do, yyyy',\n fr: 'd MMM yyyy',\n // nb: 'do MMM yyyy',\n}\n\nexport const getDateFormat = (dateFormat: string, language: string): string => {\n return dateFormat === 'date_string' ? dateStringFormats[language] : dateFormat\n}\n\nexport const formatDate = (\n dateString: string,\n timezone: string,\n dateFormat: string,\n withTime = true,\n language: string | null = null\n): string => {\n if (!language) {\n language = locale.value\n }\n return format(\n getDateWithTZ(dateString, timezone),\n `${getDateFormat(dateFormat, language)}${withTime ? ' HH:mm' : ''}`,\n { locale: localeFromLanguage[language] }\n )\n}\n\nexport const availableDateFormatOptions = (\n inputDate: string,\n timezone: string,\n language: string | null = null\n) => {\n const l: string = language ? language : locale.value\n const options: Record[] = []\n availableDateFormats.map((df) => {\n const dateFormat = getDateFormat(df, l)\n options.push({\n label: `${dateFormat} - ${formatDate(\n inputDate,\n timezone,\n dateFormat,\n false,\n l\n )}`,\n value: df,\n })\n })\n return options\n}\n","const suffixes = ['bytes', 'KB', 'MB', 'GB', 'TB']\n\nexport const getReadableFileSize = (\n fileSize: number,\n asText = true\n): string | Record => {\n const i = Math.floor(Math.log(fileSize) / Math.log(1024))\n if (!fileSize) {\n return asText ? '0 bytes' : { size: '0', suffix: 'bytes' }\n }\n const size = (fileSize / Math.pow(1024, i)).toFixed(1)\n const suffix = suffixes[i]\n return asText ? `${size}${suffix}` : { size, suffix }\n}\n\nexport const getFileSizeInMB = (fileSize: number): number => {\n const value = fileSize / 1048576\n return (!fileSize && 0) || +value.toFixed(2)\n}\n","import { AxiosError } from 'axios'\nimport { ActionContext } from 'vuex'\n\nimport { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsState } from '@/store/modules/sports/types'\nimport { IStatisticsState } from '@/store/modules/statistics/types'\nimport { IUsersState } from '@/store/modules/users/types'\nimport { IWorkoutsState } from '@/store/modules/workouts/types'\n\nexport const getApiUrl = (): string => {\n return process.env.NODE_ENV === 'production'\n ? '/api/'\n : `${process.env.VUE_APP_API_URL}/api/`\n}\n\nexport const handleError = (\n context:\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext,\n error: AxiosError | null,\n msg = 'UNKNOWN'\n): void => {\n // if request is cancelled, no error to display\n if (error && error.message === 'canceled') {\n return\n }\n\n // if stored token is blacklisted, disconnect user\n if (\n error?.response?.status === 401 &&\n error.response.data.error === 'invalid_token'\n ) {\n localStorage.removeItem('authToken')\n context.dispatch(AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER)\n return\n }\n\n const errorMessages = !error\n ? msg\n : error.response\n ? error.response.status === 413\n ? 'file size is greater than the allowed size'\n : error.response.data.message\n ? error.response.data.message\n : msg\n : error.message\n ? error.message\n : msg\n context.commit(\n ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES,\n errorMessages.includes('\\n')\n ? errorMessages\n .split('\\n')\n .filter((m: string) => m !== '')\n .map((m: string) => `api.ERROR.${m}`)\n : `api.ERROR.${errorMessages}`\n )\n}\n","/* eslint-disable import/no-duplicates */\nimport { Locale } from 'date-fns'\nimport { de, enUS, fr } from 'date-fns/locale'\n\nimport createI18n from '@/i18n'\n\nexport const localeFromLanguage: Record = {\n de: de,\n en: enUS,\n fr: fr,\n // nb: nb, // disabled for now\n}\n\nexport const languageLabels: Record = {\n de: 'Deutsch',\n en: 'English',\n fr: 'Français',\n // nb: 'Norsk bokmål', // disabled for now\n}\n\nconst { availableLocales } = createI18n.global\nexport const availableLanguages = availableLocales.map((l) => {\n return { label: languageLabels[l], value: l }\n})\n","import { ISport, ITranslatedSport, TActiveStatus } from '@/types/sports'\nimport { IWorkout } from '@/types/workouts'\n\nexport const sportColors: Record = {\n 'Cycling (Sport)': '#4c9792',\n 'Cycling (Transport)': '#88af98',\n 'Cycling (Virtual)': '#64a360',\n Hiking: '#bb757c',\n 'Mountain Biking': '#d4b371',\n 'Mountain Biking (Electric)': '#fc9d6f',\n Rowing: '#fcce72',\n Running: '#835b83',\n 'Skiing (Alpine)': '#67a4bd',\n 'Skiing (Cross Country)': '#9498d0',\n Snowshoes: '#5780a8',\n Trail: '#09a98a',\n Walking: '#838383',\n}\n\nexport const sportIdColors = (sports: ISport[]): Record => {\n const colors: Record = {}\n sports.map(\n (sport) =>\n (colors[sport.id] = sport.color ? sport.color : sportColors[sport.label])\n )\n return colors\n}\n\nconst sortSports = (a: ITranslatedSport, b: ITranslatedSport): number => {\n const sportATranslatedLabel = a.translatedLabel.toLowerCase()\n const sportBTranslatedLabel = b.translatedLabel.toLowerCase()\n return sportATranslatedLabel > sportBTranslatedLabel\n ? 1\n : sportATranslatedLabel < sportBTranslatedLabel\n ? -1\n : 0\n}\n\nexport const translateSports = (\n sports: ISport[],\n t: CallableFunction,\n activeStatus: TActiveStatus = 'all',\n sportsToInclude: number[] = []\n): ITranslatedSport[] =>\n sports\n .filter((sport) =>\n activeStatus === 'all'\n ? true\n : sportsToInclude.includes(sport.id) || sport[activeStatus]\n )\n .map((sport) => ({\n ...sport,\n translatedLabel: t(`sports.${sport.label}.LABEL`),\n }))\n .sort(sortSports)\n\nexport const getSportLabel = (workout: IWorkout, sports: ISport[]): string => {\n return sports\n .filter((sport) => sport.id === workout.sport_id)\n .map((sport) => sport.label)[0]\n}\n\nexport const getSportColor = (\n workout: IWorkout,\n sports: ISport[]\n): string | null => {\n return sports\n .filter((sport) => sport.id === workout.sport_id)\n .map((sport) => sport.color)[0]\n}\n","import {\n addMonths,\n addWeeks,\n addYears,\n endOfMonth,\n endOfWeek,\n endOfYear,\n format,\n startOfMonth,\n startOfWeek,\n startOfYear,\n subMonths,\n subWeeks,\n subYears,\n} from 'date-fns'\n\nimport createI18n from '@/i18n'\nimport { IChartDataset } from '@/types/chart'\nimport { ISport } from '@/types/sports'\nimport {\n IStatisticsChartData,\n IStatisticsDateParams,\n TStatisticsDatasetKeys,\n TStatisticsDatasets,\n TStatisticsFromApi,\n} from '@/types/statistics'\nimport { incrementDate, getStartDate, getDateFormat } from '@/utils/dates'\nimport { localeFromLanguage } from '@/utils/locales'\nimport { sportColors } from '@/utils/sports'\nimport { convertStatsDistance } from '@/utils/units'\n\nconst { locale } = createI18n.global\n\nconst dateFormats: Record> = {\n week: {\n api: 'yyyy-MM-dd',\n chart: 'MM/dd/yyyy',\n },\n month: {\n api: 'yyyy-MM',\n chart: 'MM/yyyy',\n },\n year: {\n api: 'yyyy',\n chart: 'yyyy',\n },\n}\n\nexport const datasetKeys: TStatisticsDatasetKeys[] = [\n 'average_speed',\n 'nb_workouts',\n 'total_duration',\n 'total_distance',\n 'total_ascent',\n 'total_descent',\n]\n\nexport const getDateKeys = (\n params: IStatisticsDateParams,\n weekStartingMonday: boolean\n): Date[] => {\n const days = []\n for (\n let day = getStartDate(params.duration, params.start, weekStartingMonday);\n day <= params.end;\n day = incrementDate(params.duration, day)\n ) {\n days.push(day)\n }\n return days\n}\n\nconst getStatisticsChartDataset = (\n sportLabel: string,\n color: string,\n isLineChart = false\n): IChartDataset => {\n const dataset: IChartDataset = {\n label: sportLabel,\n backgroundColor: [color],\n data: [],\n }\n if (isLineChart) {\n dataset.type = 'line'\n dataset.borderColor = [color]\n dataset.spanGaps = true\n }\n return dataset\n}\n\nexport const getDatasets = (displayedSports: ISport[]): TStatisticsDatasets => {\n const datasets: TStatisticsDatasets = {\n average_speed: [],\n nb_workouts: [],\n total_distance: [],\n total_duration: [],\n total_ascent: [],\n total_descent: [],\n }\n displayedSports.map((sport) => {\n const color = sport.color ? sport.color : sportColors[sport.label]\n datasets.average_speed.push(\n getStatisticsChartDataset(sport.label, color, true)\n )\n datasets.nb_workouts.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_distance.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_duration.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_ascent.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_descent.push(getStatisticsChartDataset(sport.label, color))\n })\n return datasets\n}\n\nexport const convertStatsValue = (\n datasetKey: TStatisticsDatasetKeys,\n value: number,\n useImperialUnits: boolean\n): number => {\n switch (datasetKey) {\n case 'average_speed':\n case 'total_distance':\n case 'total_ascent':\n case 'total_descent':\n return convertStatsDistance(\n ['average_speed', 'total_distance'].includes(datasetKey) ? 'km' : 'm',\n value,\n useImperialUnits\n )\n default:\n case 'nb_workouts':\n case 'total_duration':\n return value\n }\n}\n\nexport const formatStats = (\n params: IStatisticsDateParams,\n weekStartingMonday: boolean,\n sports: ISport[],\n displayedSportsId: number[],\n apiStats: TStatisticsFromApi,\n useImperialUnits: boolean,\n userDateFormat: string\n): IStatisticsChartData => {\n const dayKeys = getDateKeys(params, weekStartingMonday)\n const dateFormat = dateFormats[params.duration]\n const displayedSports = sports.filter((sport) =>\n displayedSportsId.includes(sport.id)\n )\n const labels: string[] = []\n const datasets = getDatasets(displayedSports)\n const sportsId: Record = {}\n displayedSports.map(\n (displayedSport) => (sportsId[displayedSport.label] = displayedSport.id)\n )\n\n dayKeys.map((key) => {\n const date: string = format(key, dateFormat.api)\n const label: string = format(\n key,\n params.duration === 'week'\n ? getDateFormat(userDateFormat, locale.value)\n : dateFormat.chart,\n { locale: localeFromLanguage[locale.value] }\n )\n labels.push(label)\n datasetKeys.map((datasetKey) => {\n datasets[datasetKey].map((dataset) => {\n dataset.data.push(\n date in apiStats && sportsId[dataset.label] in apiStats[date]\n ? convertStatsValue(\n datasetKey,\n apiStats[date][sportsId[dataset.label]][datasetKey],\n useImperialUnits\n )\n : datasetKey === 'average_speed'\n ? null\n : 0\n )\n })\n })\n })\n return {\n labels,\n datasets,\n }\n}\n\nexport const getStatsDateParams = (\n date: Date,\n timeFrame: string,\n weekStartingMonday: boolean\n): IStatisticsDateParams => {\n const weekStartsOn = weekStartingMonday ? 1 : 0\n const start =\n timeFrame === 'year'\n ? startOfYear(subYears(date, 9))\n : timeFrame === 'week'\n ? startOfWeek(subMonths(date, 2), { weekStartsOn })\n : startOfMonth(subMonths(date, 11)) // month\n const end =\n timeFrame === 'year'\n ? endOfYear(date)\n : timeFrame === 'week'\n ? endOfWeek(date, { weekStartsOn })\n : endOfMonth(date) // month\n return {\n duration: timeFrame,\n end,\n start,\n }\n}\n\nexport const updateChartParams = (\n chartParams: IStatisticsDateParams,\n backward: boolean,\n weekStartingMonday: boolean\n): IStatisticsDateParams => {\n const { duration, start, end } = chartParams\n const weekStartsOn = weekStartingMonday ? 1 : 0\n return {\n duration,\n end:\n duration === 'year'\n ? endOfYear(backward ? subYears(end, 1) : addYears(end, 1))\n : duration === 'week'\n ? endOfWeek(backward ? subWeeks(end, 1) : addWeeks(end, 1), {\n weekStartsOn,\n })\n : endOfMonth(backward ? subMonths(end, 1) : addMonths(end, 1)),\n start:\n duration === 'year'\n ? startOfYear(backward ? subYears(start, 1) : addYears(start, 1))\n : duration === 'week'\n ? startOfWeek(backward ? subWeeks(start, 1) : addWeeks(start, 1), {\n weekStartsOn,\n })\n : startOfMonth(backward ? subMonths(start, 1) : addMonths(start, 1)),\n }\n}\n","import { IUnit, TFactor, TUnit } from '@/types/units'\n\nexport const units: Record = {\n ft: {\n unit: 'ft',\n system: 'imperial',\n multiplier: 1,\n defaultTarget: 'm',\n },\n mi: {\n unit: 'mi',\n system: 'imperial',\n multiplier: 5280,\n defaultTarget: 'km',\n },\n m: {\n unit: 'm',\n system: 'metric',\n multiplier: 1,\n defaultTarget: 'ft',\n },\n km: {\n unit: 'm',\n system: 'metric',\n multiplier: 1000,\n defaultTarget: 'mi',\n },\n}\n\nconst factors: TFactor = {\n metric: {\n imperial: 3.280839895,\n metric: 1,\n },\n imperial: {\n metric: 1 / 3.280839895,\n imperial: 1,\n },\n}\n\nexport const convertDistance = (\n distance: number,\n from: TUnit,\n to: TUnit,\n digits: number | null = 3\n): number => {\n const unitFrom = units[from]\n const unitTo = units[to]\n const convertedDistance =\n (distance * unitFrom.multiplier * factors[unitFrom.system][unitTo.system]) /\n unitTo.multiplier\n if (digits !== null) {\n return parseFloat(convertedDistance.toFixed(digits))\n }\n return convertedDistance\n}\n\nexport const convertStatsDistance = (\n unitFrom: TUnit,\n value: number,\n useImperialUnits: boolean\n): number => {\n const unitTo = useImperialUnits ? units[unitFrom].defaultTarget : unitFrom\n return useImperialUnits ? convertDistance(value, unitFrom, unitTo, 2) : value\n}\n","import {\n IWorkout,\n IWorkoutApiChartData,\n IWorkoutChartData,\n TCoordinates,\n TWorkoutDatasets,\n} from '@/types/workouts'\nimport { convertStatsDistance } from '@/utils/units'\n\nexport const getDatasets = (\n chartData: IWorkoutApiChartData[],\n t: CallableFunction,\n useImperialUnits: boolean\n): IWorkoutChartData => {\n const datasets: TWorkoutDatasets = {\n speed: {\n label: t('workouts.SPEED'),\n backgroundColor: ['#FFFFFF'],\n borderColor: ['#8884d8'],\n borderWidth: 2,\n data: [],\n yAxisID: 'ySpeed',\n },\n elevation: {\n label: t('workouts.ELEVATION'),\n backgroundColor: ['#e5e5e5'],\n borderColor: ['#cccccc'],\n borderWidth: 1,\n fill: true,\n data: [],\n yAxisID: 'yElevation',\n },\n }\n const distance_labels: unknown[] = []\n const duration_labels: unknown[] = []\n const coordinates: TCoordinates[] = []\n\n chartData.map((data) => {\n distance_labels.push(data.distance)\n duration_labels.push(data.duration)\n datasets.speed.data.push(\n convertStatsDistance('km', data.speed, useImperialUnits)\n )\n datasets.elevation.data.push(\n convertStatsDistance('m', data.elevation, useImperialUnits)\n )\n coordinates.push({ latitude: data.latitude, longitude: data.longitude })\n })\n\n return { distance_labels, duration_labels, datasets, coordinates }\n}\n\nexport const getDonutDatasets = (\n workouts: IWorkout[]\n): Record> => {\n const total = workouts.length\n if (total === 0) {\n return {}\n }\n\n const datasets: Record> = {}\n workouts.map((workout) => {\n if (!datasets[workout.sport_id]) {\n datasets[workout.sport_id] = {\n count: 0,\n percentage: 0,\n }\n }\n datasets[workout.sport_id].count += 1\n datasets[workout.sport_id].percentage =\n datasets[workout.sport_id].count / total\n })\n\n return datasets\n}\n\nexport const defaultOrder = {\n order: 'desc',\n order_by: 'workout_date',\n}\n","\n\n\n","import { render } from \"./Card.vue?vue&type=template&id=ad374c24\"\nconst script = {}\n\nimport \"./Card.vue?vue&type=style&index=0&id=ad374c24&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-72463173\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"table-selects\" }\nconst _hoisted_2 = [\"value\"]\nconst _hoisted_3 = [\"value\"]\nconst _hoisted_4 = [\"value\"]\nconst _hoisted_5 = [\"value\"]\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = [\"value\"]\n\nimport { toRefs } from 'vue'\n\n import { TPaginationPayload } from '@/types/api'\n\n interface Props {\n order_by: string[]\n query: TPaginationPayload\n sort: string[]\n message: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'FilterSelects',\n props: {\n order_by: null,\n query: null,\n sort: null,\n message: null\n },\n emits: ['updateSelect'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n order_by: string[]\n query: TPaginationPayload\n sort: string[]\n message: string\n }\n\n \n\n \n\n const { order_by, query, sort, message } = toRefs(props)\n const perPage = [10, 25, 50, 100]\n\n function onSelectUpdate(event: Event & { target: HTMLInputElement }) {\n emit('updateSelect', event.target.id, event.target.value)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.ORDER_BY.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"order_by\",\n id: \"order_by\",\n value: _unref(query).order_by,\n onChange: onSelectUpdate\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(order_by), (order) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: order,\n key: order\n }, _toDisplayString(_ctx.$t(`${_unref(message)}.${order.toUpperCase()}`)), 9, _hoisted_3))\n }), 128))\n ], 40, _hoisted_2)\n ]),\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.ORDER.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"order\",\n id: \"order\",\n value: _unref(query).order,\n onChange: onSelectUpdate\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(sort), (order) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: order,\n key: order\n }, _toDisplayString(_ctx.$t(`common.SELECTS.ORDER.${order.toUpperCase()}`)), 9, _hoisted_5))\n }), 128))\n ], 40, _hoisted_4)\n ]),\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.PER_PAGE.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"per_page\",\n id: \"per_page\",\n value: _unref(query).per_page,\n onChange: onSelectUpdate\n }, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(perPage, (nb) => {\n return _createElementVNode(\"option\", {\n value: nb,\n key: nb\n }, _toDisplayString(nb), 9, _hoisted_7)\n }), 64))\n ], 40, _hoisted_6)\n ])\n ]))\n}\n}\n\n})","import script from \"./FilterSelects.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./FilterSelects.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./FilterSelects.vue?vue&type=style&index=0&id=72463173&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-72463173\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./ErrorImg.vue?vue&type=template&id=e620aed4\"\nimport script from \"./ErrorImg.vue?vue&type=script&lang=js\"\nexport * from \"./ErrorImg.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-b60bfa80\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"error\" }\nconst _hoisted_2 = { class: \"error-content\" }\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n title: string\n message: string\n buttonText: string\n path?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Error',\n props: {\n title: null,\n message: null,\n buttonText: null,\n path: { default: '/' }\n },\n setup(__props: any) {\n\nconst props = __props as { title: string, message: string, buttonText: string, path: string }\n\n \n const { buttonText, title, message, path } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"h1\", null, _toDisplayString(_unref(title)), 1),\n _createElementVNode(\"p\", null, _toDisplayString(_unref(message)), 1),\n (_unref(buttonText))\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push(_unref(path)))),\n class: \"upper\"\n }, _toDisplayString(_unref(buttonText)), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./Error.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Error.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Error.vue?vue&type=style&index=0&id=b60bfa80&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b60bfa80\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nimport { Ref, onMounted, ref, toRefs, withDefaults, onUnmounted } from 'vue'\n\n import Error from '@/components/Common/Error.vue'\n interface Props {\n target?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'NotFound',\n props: {\n target: { default: 'PAGE' }\n },\n setup(__props: any) {\n\nconst props = __props as { target: string }\n\n \n const { target } = toRefs(props)\n const timer = ref()\n const errorDisplayed: Ref = ref(false)\n\n onMounted(() => displayError())\n\n function displayError() {\n timer.value = setTimeout(() => {\n errorDisplayed.value = true\n }, 500)\n }\n\n onUnmounted(() => {\n if (timer.value) {\n clearTimeout(timer.value)\n }\n })\n\nreturn (_ctx: any,_cache: any) => {\n return (errorDisplayed.value)\n ? (_openBlock(), _createBlock(Error, {\n key: 0,\n title: \"404\",\n message: _ctx.$t(`error.NOT_FOUND.${_unref(target)}`),\n \"button-text\": _ctx.$t('common.HOME')\n }, null, 8, [\"message\", \"button-text\"]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./NotFound.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NotFound.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderSlot as _renderSlot, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3a9a4a65\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n class: \"pagination-center\",\n \"aria-label\": \"navigation\"\n}\nconst _hoisted_2 = { class: \"pagination\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { toRefs } from 'vue'\n\n import { IPagination, TPaginationPayload } from '@/types/api'\n import { IOauth2ClientsPayload } from '@/types/oauth'\n import { TWorkoutsPayload } from '@/types/workouts'\n import { rangePagination } from '@/utils/api'\n\n interface Props {\n pagination: IPagination\n path: string\n query: TWorkoutsPayload | TPaginationPayload | IOauth2ClientsPayload\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Pagination',\n props: {\n pagination: null,\n path: null,\n query: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n pagination: IPagination\n path: string\n query: TWorkoutsPayload | TPaginationPayload | IOauth2ClientsPayload\n }\n\n \n\n const { pagination, path, query } = toRefs(props)\n\n function getQuery(\n page: number,\n cursor?: number\n ): TPaginationPayload | IOauth2ClientsPayload {\n const newQuery = Object.assign({}, query.value)\n newQuery.page = cursor ? page + cursor : page\n return newQuery\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"nav\", _hoisted_1, [\n _createElementVNode(\"ul\", _hoisted_2, [\n _createElementVNode(\"li\", {\n class: _normalizeClass([\"page-prev\", { disabled: !_unref(pagination).has_prev }])\n }, [\n _createVNode(_component_router_link, {\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(_unref(pagination).page, -1) },\n disabled: !_unref(pagination).has_prev\n }, {\n default: _withCtx(({ navigate }) => [\n _renderSlot(_ctx.$slots, \"default\", {\n onClick: ($event: any) => (_unref(pagination).has_next ? navigate : null)\n }, () => [\n _createTextVNode(_toDisplayString(_ctx.$t('api.PAGINATION.PREVIOUS')) + \" \", 1),\n _hoisted_3\n ])\n ]),\n _: 3\n }, 8, [\"to\", \"disabled\"])\n ], 2),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(rangePagination)(_unref(pagination).pages, _unref(pagination).page), (page) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: page,\n class: _normalizeClass([\"page\", { active: page === _unref(pagination).page }])\n }, [\n (page === '...')\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, \" ... \"))\n : (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(+page) }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(page), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]))\n ], 2))\n }), 128)),\n _createElementVNode(\"li\", {\n class: _normalizeClass([\"page-next\", { disabled: !_unref(pagination).has_next }])\n }, [\n _createVNode(_component_router_link, {\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(_unref(pagination).page, 1) },\n disabled: !_unref(pagination).has_next\n }, {\n default: _withCtx(({ navigate }) => [\n _renderSlot(_ctx.$slots, \"default\", {\n onClick: ($event: any) => (_unref(pagination).has_next ? navigate : null)\n }, () => [\n _createTextVNode(_toDisplayString(_ctx.$t('api.PAGINATION.NEXT')) + \" \", 1),\n _hoisted_5\n ])\n ]),\n _: 3\n }, 8, [\"to\", \"disabled\"])\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./Pagination.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Pagination.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Pagination.vue?vue&type=style&index=0&id=3a9a4a65&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3a9a4a65\"]])\n\nexport default __exports__","import { zxcvbnOptions } from '@zxcvbn-ts/core'\n\nexport const setZxcvbnOptions = async (language: string) => {\n const zxcvbnCommonPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-common'\n )\n const zxcvbnEnPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-en'\n )\n const zxcvbnFrPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-fr'\n )\n const zxcvbnDePackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-de'\n )\n const zxcvbnLangPackages: Record = {\n de: zxcvbnDePackage,\n en: zxcvbnEnPackage,\n fr: zxcvbnFrPackage,\n // no package available for norwegian bokmal, fallback on english\n nb: zxcvbnEnPackage,\n }\n const zxcvbnPackage = zxcvbnLangPackages[language]\n const options = {\n graphs: zxcvbnCommonPackage.default.adjacencyGraphs,\n dictionary: {\n ...zxcvbnCommonPackage.default.dictionary,\n ...zxcvbnPackage.default.dictionary,\n },\n }\n zxcvbnOptions.setOptions(options)\n}\n\nexport const getPasswordStrength = (strength: number): string => {\n switch (strength) {\n case 2:\n return 'AVERAGE'\n case 3:\n return 'GOOD'\n case 4:\n return 'STRONG'\n default:\n return 'WEAK'\n }\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74e71df5\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"password-strength\" }\nconst _hoisted_2 = [\"value\"]\nconst _hoisted_3 = {\n key: 0,\n class: \"password-strength-details\"\n}\nconst _hoisted_4 = { class: \"password-strength-value\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"info-box\"\n}\nconst _hoisted_6 = { class: \"password-feedback\" }\n\nimport { zxcvbn } from '@zxcvbn-ts/core'\n import {\n ComputedRef,\n Ref,\n computed,\n ref,\n onBeforeMount,\n toRefs,\n watch,\n } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { useStore } from '@/use/useStore'\n import { getPasswordStrength, setZxcvbnOptions } from '@/utils/password'\n\n interface Props {\n password: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordStength',\n props: {\n password: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n password: string\n }\n\n \n const { password } = toRefs(props)\n\n const store = useStore()\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const passwordScore: Ref = ref(0)\n const passwordStrength: Ref = ref('')\n const passwordSuggestions: Ref = ref([])\n const backgroundSize = ref('0% 100%')\n\n onBeforeMount(async () => await setZxcvbnOptions(language.value))\n\n function calculatePasswordStrength(password: string) {\n const zxcvbnResult = zxcvbn(password)\n passwordScore.value = zxcvbnResult.score\n passwordStrength.value = getPasswordStrength(passwordScore.value)\n passwordSuggestions.value = zxcvbnResult.feedback.suggestions\n backgroundSize.value = (passwordScore.value * 100) / 4 + '% 100%'\n }\n\n watch(\n () => language.value,\n async (newLanguageValue) => {\n await setZxcvbnOptions(newLanguageValue)\n }\n )\n watch(\n () => password.value,\n async (newPassword) => {\n if (isSuccess.value) {\n passwordStrength.value = ''\n } else {\n calculatePasswordStrength(newPassword)\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"input\", {\n class: _normalizeClass([\"password-slider\", `strength-${passwordScore.value}`]),\n style: _normalizeStyle({ backgroundSize: backgroundSize.value }),\n type: \"range\",\n value: passwordScore.value,\n min: \"0\",\n max: \"4\",\n step: \"1\"\n }, null, 14, _hoisted_2),\n (passwordStrength.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('user.PASSWORD_STRENGTH.LABEL')) + \": \" + _toDisplayString(_ctx.$t(`user.PASSWORD_STRENGTH.${passwordStrength.value}`)), 1),\n (passwordSuggestions.value.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"ul\", _hoisted_6, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(passwordSuggestions.value, (suggestion) => {\n return (_openBlock(), _createElementBlock(\"li\", { key: suggestion }, _toDisplayString(_ctx.$t(`user.PASSWORD_STRENGTH.SUGGESTIONS.${suggestion}`)), 1))\n }), 128))\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./PasswordStength.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordStength.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordStength.vue?vue&type=style&index=0&id=74e71df5&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74e71df5\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, vModelDynamic as _vModelDynamic, createElementVNode as _createElementVNode, withDirectives as _withDirectives, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5a126514\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"password-input\" }\nconst _hoisted_2 = [\"id\", \"disabled\", \"placeholder\", \"required\", \"type\"]\nconst _hoisted_3 = {\n key: 0,\n class: \"form-info\"\n}\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { Ref, ref, toRefs, watch, withDefaults } from 'vue'\n\n import PasswordStrength from '@/components/Common/PasswordStength.vue'\n\n interface Props {\n checkStrength?: boolean\n disabled?: boolean\n id?: string\n password?: string\n placeholder?: string\n required?: boolean\n }\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordInput',\n props: {\n checkStrength: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n id: { default: 'password' },\n password: { default: '' },\n placeholder: null,\n required: { type: Boolean, default: false }\n },\n emits: ['updatePassword', 'passwordError'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { checkStrength: boolean, disabled: boolean, id: string, password: string, placeholder?: string, required: boolean }\n\n \n const { checkStrength, disabled, id, password, placeholder, required } =\n toRefs(props)\n\n const showPassword: Ref = ref(false)\n const passwordValue: Ref = ref('')\n\n \n\n function togglePassword() {\n showPassword.value = !showPassword.value\n }\n function updatePassword(event: Event & { target: HTMLInputElement }) {\n emit('updatePassword', event.target.value)\n }\n function invalidPassword() {\n emit('passwordError')\n }\n\n watch(\n () => password.value,\n (newPassword) => {\n if (newPassword === '') {\n passwordValue.value = ''\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _withDirectives(_createElementVNode(\"input\", {\n id: _unref(id),\n disabled: _unref(disabled),\n placeholder: _unref(placeholder),\n required: _unref(required),\n type: showPassword.value ? 'text' : 'password',\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((passwordValue).value = $event)),\n minlength: \"8\",\n onInput: updatePassword,\n onInvalid: invalidPassword\n }, null, 40, _hoisted_2), [\n [_vModelDynamic, passwordValue.value]\n ]),\n _createElementVNode(\"div\", {\n class: \"show-password\",\n onClick: togglePassword\n }, [\n _createTextVNode(_toDisplayString(_ctx.$t(`user.${showPassword.value ? 'HIDE' : 'SHOW'}_PASSWORD`)) + \" \", 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa\", `fa-eye${showPassword.value ? '-slash' : ''}`]),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n (_unref(checkStrength))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _hoisted_4,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.PASSWORD_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(checkStrength))\n ? (_openBlock(), _createBlock(PasswordStrength, {\n key: 1,\n password: passwordValue.value\n }, null, 8, [\"password\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./PasswordInput.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordInput.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordInput.vue?vue&type=style&index=0&id=5a126514&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5a126514\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"map-attribution\" }, [\n /*#__PURE__*/_createElementVNode(\"span\", { class: \"map-attribution-text\" }, \"©\"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n class: \"map-attribution-text\",\n href: \"https://www.openstreetmap.org/copyright\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \" OpenStreetMap \")\n], -1)\n\nimport { toRefs, withDefaults } from 'vue'\n\n import { IWorkout } from '@/types/workouts'\n import { getApiUrl } from '@/utils'\n\n interface Props {\n workout: IWorkout\n displayHover?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StaticMap',\n props: {\n workout: null,\n displayHover: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { workout: IWorkout, displayHover: boolean }\n\n \n const { displayHover } = toRefs(props)\n const imageUrl = `${getApiUrl()}workouts/map/${props.workout.map}`\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"static-map\", { 'display-hover': _unref(displayHover) }])\n }, [\n (_unref(displayHover))\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: imageUrl,\n alt: \"\"\n }))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"bg-map-image\",\n style: _normalizeStyle({\n backgroundImage: `url(${imageUrl})`,\n })\n }, null, 4)),\n _hoisted_1\n ], 2))\n}\n}\n\n})","import script from \"./StaticMap.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StaticMap.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StaticMap.vue?vue&type=style&index=0&id=6b7e4baf&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-d5e9b348\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"start-chart\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { key: 1 }\nconst _hoisted_4 = { class: \"chart-radio\" }\nconst _hoisted_5 = [\"checked\"]\nconst _hoisted_6 = [\"checked\"]\nconst _hoisted_7 = [\"checked\"]\nconst _hoisted_8 = { key: 0 }\nconst _hoisted_9 = [\"checked\"]\nconst _hoisted_10 = { key: 1 }\nconst _hoisted_11 = [\"checked\"]\nconst _hoisted_12 = { key: 2 }\nconst _hoisted_13 = [\"checked\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Chart = _resolveComponent(\"Chart\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.hideChartIfNoData && _ctx.emptyStats)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('workouts.NO_WORKOUTS')), 1))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_distance\",\n checked: _ctx.displayedData === 'total_distance',\n onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_5),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_duration\",\n checked: _ctx.displayedData === 'total_duration',\n onClick: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_6),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DURATION')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"nb_workouts\",\n checked: _ctx.displayedData === 'nb_workouts',\n onClick: _cache[2] || (_cache[2] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_7),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.WORKOUT', 2)), 1)\n ]),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_8, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"average_speed\",\n checked: _ctx.displayedData === 'average_speed',\n onClick: _cache[3] || (_cache[3] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_9),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.AVERAGE_SPEED')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_10, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_ascent\",\n checked: _ctx.displayedData === 'total_ascent',\n onClick: _cache[4] || (_cache[4] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_11),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.ASCENT')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_12, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_descent\",\n checked: _ctx.displayedData === 'total_descent',\n onClick: _cache[5] || (_cache[5] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_13),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DESCENT')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n (_ctx.labels.length > 0)\n ? (_openBlock(), _createBlock(_component_Chart, {\n key: 0,\n datasets: _ctx.datasets,\n labels: _ctx.labels,\n displayedData: _ctx.displayedData,\n displayedSportIds: _ctx.displayedSportIds,\n fullStats: _ctx.fullStats,\n useImperialUnits: _ctx.user.imperial_units\n }, null, 8, [\"datasets\", \"labels\", \"displayedData\", \"displayedSportIds\", \"fullStats\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n}","import { resolveComponent as _resolveComponent, mergeProps as _mergeProps, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"chart\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BarChart = _resolveComponent(\"BarChart\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_BarChart, _mergeProps(_ctx.barChartProps, { class: \"bar-chart\" }), null, 16)\n ]))\n}","export const formatDuration = (\n totalSeconds: number,\n formatWithUnits = false\n): string => {\n let days = '0'\n if (formatWithUnits) {\n days = String(Math.floor(totalSeconds / 86400))\n totalSeconds %= 86400\n }\n const hours = String(Math.floor(totalSeconds / 3600)).padStart(2, '0')\n totalSeconds %= 3600\n const minutes = String(Math.floor(totalSeconds / 60)).padStart(2, '0')\n const seconds = String(totalSeconds % 60).padStart(2, '0')\n if (formatWithUnits) {\n return `${days === '0' ? '' : `${days}d `}${\n hours === '00' ? '' : `${hours}h `\n }${minutes}m ${seconds}s`\n }\n return `${hours === '00' ? '' : `${hours}:`}${minutes}:${seconds}`\n}\n","import { TStatisticsDatasetKeys } from '@/types/statistics'\nimport { formatDuration } from '@/utils/duration'\nimport { units } from '@/utils/units'\n\nexport const formatTooltipValue = (\n displayedData: TStatisticsDatasetKeys,\n value: number,\n useImperialUnits: boolean,\n formatWithUnits = true,\n unitFrom = 'km'\n): string => {\n const unitTo = useImperialUnits ? units[unitFrom].defaultTarget : unitFrom\n switch (displayedData) {\n case 'average_speed':\n return `${value.toFixed(2)} ${unitTo}/h`\n case 'total_duration':\n return formatDuration(value, formatWithUnits)\n case 'total_distance':\n case 'total_ascent':\n case 'total_descent':\n return `${value.toFixed(2)} ${unitTo}`\n default:\n return value.toString()\n }\n}\n","\n import { ChartData, ChartOptions, LayoutItem } from 'chart.js'\n import { ComputedRef, PropType, computed, defineComponent } from 'vue'\n import { BarChart, useBarChart } from 'vue-chart-3'\n import { useI18n } from 'vue-i18n'\n\n import { IChartDataset } from '@/types/chart'\n import { TStatisticsDatasetKeys } from '@/types/statistics'\n import { formatTooltipValue } from '@/utils/tooltip'\n\n export default defineComponent({\n name: 'Chart',\n components: {\n BarChart,\n },\n props: {\n datasets: {\n type: Object as PropType,\n required: true,\n },\n labels: {\n type: Object as PropType,\n required: true,\n },\n displayedData: {\n type: String as PropType,\n required: true,\n },\n displayedSportIds: {\n type: Array as PropType,\n required: true,\n },\n fullStats: {\n type: Boolean,\n required: true,\n },\n useImperialUnits: {\n type: Boolean,\n required: true,\n },\n },\n setup(props) {\n const { t } = useI18n()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function getNumber(value: any): number {\n return isNaN(value) ? 0 : +value\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function getSum(total: any, value: any): number {\n return getNumber(total) + getNumber(value)\n }\n function getUnit(displayedData: string) {\n return ['total_ascent', 'total_descent'].includes(displayedData)\n ? 'm'\n : 'km'\n }\n const chartData: ComputedRef> = computed(() => ({\n labels: props.labels,\n // workaround to avoid dataset modification\n datasets: JSON.parse(JSON.stringify(props.datasets)),\n }))\n const options = computed>(() => ({\n responsive: true,\n maintainAspectRatio: true,\n animation: false,\n layout: {\n padding: {\n top: props.fullStats ? 40 : 22,\n },\n },\n scales: {\n x: {\n stacked: true,\n grid: {\n drawOnChartArea: false,\n },\n },\n y: {\n stacked: props.displayedData !== 'average_speed',\n grid: {\n drawOnChartArea: false,\n },\n ticks: {\n maxTicksLimit: 6,\n callback: function (value) {\n return formatTooltipValue(\n props.displayedData,\n +value,\n props.useImperialUnits,\n false,\n getUnit(props.displayedData)\n )\n },\n },\n afterFit: function (scale: LayoutItem) {\n scale.width = props.fullStats ? 90 : 60\n },\n },\n },\n plugins: {\n datalabels: {\n anchor: 'end',\n align: 'end',\n color: function (context) {\n return props.displayedData === 'average_speed' &&\n context.dataset.backgroundColor\n ? // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n context.dataset.backgroundColor[0]\n : '#666666'\n },\n rotation: function (context) {\n return props.fullStats && context.chart.chartArea.width < 580\n ? 310\n : 0\n },\n display: function (context) {\n return props.fullStats && context.chart.chartArea.width < 300\n ? false\n : props.displayedData === 'average_speed'\n ? props.displayedSportIds.length == 1\n ? 'auto'\n : false\n : true\n },\n formatter: function (value, context) {\n if (props.displayedData === 'average_speed') {\n return formatTooltipValue(\n props.displayedData,\n value,\n props.useImperialUnits,\n false\n )\n } else {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const total: number = context.chart.data.datasets\n .map((d) => d.data[context.dataIndex])\n .reduce((total, value) => getSum(total, value), 0)\n return context.datasetIndex ===\n props.displayedSportIds.length - 1 && total > 0\n ? formatTooltipValue(\n props.displayedData,\n total,\n props.useImperialUnits,\n false,\n getUnit(props.displayedData)\n )\n : null\n }\n },\n },\n legend: {\n display: false,\n },\n tooltip: {\n interaction: {\n intersect: true,\n mode: 'index',\n position:\n props.displayedData === 'average_speed' ? 'nearest' : 'average',\n },\n filter: function (tooltipItem) {\n return tooltipItem.formattedValue !== '0'\n },\n callbacks: {\n label: function (context) {\n let label = t(`sports.${context.dataset.label}.LABEL`) || ''\n if (label) {\n label += ': '\n }\n if (context.parsed.y !== null) {\n label += formatTooltipValue(\n props.displayedData,\n context.parsed.y,\n props.useImperialUnits,\n true,\n getUnit(props.displayedData)\n )\n }\n return label\n },\n footer: function (tooltipItems) {\n if (props.displayedData === 'average_speed') {\n return ''\n }\n let sum = 0\n tooltipItems.map((tooltipItem) => {\n sum += tooltipItem.parsed.y\n })\n return (\n `${t('common.TOTAL')}: ` +\n formatTooltipValue(\n props.displayedData,\n sum,\n props.useImperialUnits,\n true,\n getUnit(props.displayedData)\n )\n )\n },\n },\n },\n },\n }))\n const { barChartProps } = useBarChart({\n chartData,\n options,\n })\n return { barChartProps }\n },\n })\n","import { render } from \"./Chart.vue?vue&type=template&id=6c8b76cd&ts=true\"\nimport script from \"./Chart.vue?vue&type=script&lang=ts\"\nexport * from \"./Chart.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n import { format } from 'date-fns'\n import {\n ComputedRef,\n PropType,\n Ref,\n computed,\n defineComponent,\n ref,\n watch,\n onBeforeMount,\n } from 'vue'\n\n import Chart from '@/components/Common/StatsChart/Chart.vue'\n import { STATS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import {\n IStatisticsChartData,\n TStatisticsDatasetKeys,\n IStatisticsDateParams,\n TStatisticsFromApi,\n IStatisticsParams,\n } from '@/types/statistics'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatStats } from '@/utils/statistics'\n\n export default defineComponent({\n name: 'UserMonthStats',\n components: {\n Chart,\n },\n props: {\n sports: {\n type: Object as PropType,\n required: true,\n },\n user: {\n type: Object as PropType,\n required: true,\n },\n chartParams: {\n type: Object as PropType,\n required: true,\n },\n displayedSportIds: {\n type: Array as PropType,\n default: () => [],\n },\n fullStats: {\n type: Boolean,\n default: false,\n },\n hideChartIfNoData: {\n type: Boolean,\n default: false,\n },\n },\n setup(props) {\n const store = useStore()\n\n const displayedData: Ref = ref('total_distance')\n const statistics: ComputedRef = computed(\n () => store.getters[STATS_STORE.GETTERS.USER_STATS]\n )\n const formattedStats: ComputedRef = computed(() =>\n formatStats(\n props.chartParams,\n props.user.weekm,\n props.sports,\n props.displayedSportIds,\n statistics.value,\n props.user.imperial_units,\n props.user.date_format\n )\n )\n\n onBeforeMount(() =>\n getStatistics(getApiParams(props.chartParams, props.user))\n )\n\n function getStatistics(apiParams: IStatisticsParams) {\n store.dispatch(STATS_STORE.ACTIONS.GET_USER_STATS, {\n username: props.user.username,\n filterType: 'by_time',\n params: apiParams,\n })\n }\n function updateDisplayData(\n event: Event & {\n target: HTMLInputElement & { name: TStatisticsDatasetKeys }\n }\n ) {\n displayedData.value = event.target.name\n }\n function getApiParams(\n chartParams: IStatisticsDateParams,\n user: IAuthUserProfile\n ): IStatisticsParams {\n return {\n from: format(chartParams.start, 'yyyy-MM-dd'),\n to: format(chartParams.end, 'yyyy-MM-dd'),\n time:\n chartParams.duration === 'week'\n ? `week${user.weekm ? 'm' : ''}`\n : chartParams.duration,\n }\n }\n\n watch(\n () => props.chartParams,\n async (newParams) => {\n getStatistics(getApiParams(newParams, props.user))\n }\n )\n\n return {\n datasets: computed(\n () => formattedStats.value.datasets[displayedData.value]\n ),\n labels: computed(() => formattedStats.value.labels),\n emptyStats: computed(() => Object.keys(statistics.value).length === 0),\n displayedData,\n updateDisplayData,\n }\n },\n })\n","import { render } from \"./index.vue?vue&type=template&id=d5e9b348&scoped=true&ts=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=d5e9b348&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-d5e9b348\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-20291951\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"box user-header\" }\nconst _hoisted_2 = { class: \"user-details\" }\nconst _hoisted_3 = { class: \"user-name\" }\nconst _hoisted_4 = { class: \"user-stats\" }\nconst _hoisted_5 = { class: \"user-stat\" }\nconst _hoisted_6 = { class: \"stat-number\" }\nconst _hoisted_7 = { class: \"stat-label\" }\nconst _hoisted_8 = { class: \"user-stat\" }\nconst _hoisted_9 = { class: \"stat-label\" }\nconst _hoisted_10 = { class: \"user-stat hide-small\" }\nconst _hoisted_11 = { class: \"stat-number\" }\nconst _hoisted_12 = { class: \"stat-label\" }\n\nimport { computed, ComputedRef, toRefs } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE } from '@/store/constants'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserHeader',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const { user } = toRefs(props)\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_unref(user).username), 1),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"span\", _hoisted_6, _toDisplayString(_unref(user).nb_workouts), 1),\n _createElementVNode(\"span\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.WORKOUT', _unref(user).nb_workouts)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createVNode(_component_Distance, {\n distance: _unref(user).total_distance,\n unitFrom: \"km\",\n digits: 0,\n displayUnit: false,\n useImperialUnits: _unref(authUser).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_unref(authUser).imperial_units ? 'miles' : 'km'), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_unref(user).nb_sports), 1),\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('workouts.SPORT', _unref(user).nb_sports)), 1)\n ])\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./UserHeader.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserHeader.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserHeader.vue?vue&type=style&index=0&id=20291951&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-20291951\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-217519af\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"user-infos\",\n class: \"description-list\"\n}\nconst _hoisted_2 = {\n key: 1,\n class: \"info-box success-message\"\n}\nconst _hoisted_3 = {\n key: 4,\n class: \"email-form form-box\"\n}\nconst _hoisted_4 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_5 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_6 = { class: \"form-buttons\" }\nconst _hoisted_7 = {\n class: \"confirm\",\n type: \"submit\"\n}\nconst _hoisted_8 = [\"onClick\"]\nconst _hoisted_9 = { key: 5 }\nconst _hoisted_10 = { class: \"user-bio\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"profile-buttons\"\n}\nconst _hoisted_12 = [\"onClick\"]\nconst _hoisted_13 = {\n key: 1,\n class: \"profile-buttons\"\n}\n\nimport { format } from 'date-fns'\n import {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n withDefaults,\n watch,\n onUnmounted,\n } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate, getDateFormat } from '@/utils/dates'\n import { localeFromLanguage } from '@/utils/locales'\n\n interface Props {\n user: IUserProfile\n fromAdmin?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserInfos',\n props: {\n user: null,\n fromAdmin: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { user: IUserProfile, fromAdmin: boolean }\n\n \n\n const store = useStore()\n\n const { user, fromAdmin } = toRefs(props)\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const registrationDate = computed(() =>\n props.user.created_at\n ? formatDate(\n props.user.created_at,\n authUser.value.timezone,\n authUser.value.date_format\n )\n : ''\n )\n const birthDate = computed(() =>\n props.user.birth_date\n ? format(\n new Date(props.user.birth_date),\n `${getDateFormat(authUser.value.date_format, language.value)}`,\n { locale: localeFromLanguage[language.value] }\n )\n : ''\n )\n const isSuccess = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS_IS_SUCCESS]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const displayModal: Ref = ref('')\n const formErrors = ref(false)\n const displayUserEmailForm: Ref = ref(false)\n const newUserEmail: Ref = ref('')\n const currentAction: Ref = ref('')\n\n function updateDisplayModal(value: string) {\n displayModal.value = value\n if (value !== '') {\n store.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n }\n }\n function deleteUserAccount(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.DELETE_USER_ACCOUNT, { username })\n }\n function resetUserPassword(username: string) {\n currentAction.value = 'password-reset'\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n resetPassword: true,\n })\n }\n function confirmUserAccount(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n activate: true,\n })\n }\n function displayEmailForm() {\n resetErrorsAndSuccess()\n newUserEmail.value = user.value.email_to_confirm\n ? user.value.email_to_confirm\n : ''\n displayUserEmailForm.value = true\n currentAction.value = 'email-update'\n }\n function hideEmailForm() {\n newUserEmail.value = ''\n displayUserEmailForm.value = false\n }\n function updateUserEmail(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n new_email: newUserEmail.value,\n })\n }\n function resetErrorsAndSuccess() {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n currentAction.value = ''\n }\n\n onUnmounted(() => resetErrorsAndSuccess())\n\n watch(\n () => isSuccess.value,\n (newIsSuccess) => {\n if (newIsSuccess) {\n updateDisplayModal('')\n hideEmailForm()\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_AlertMessage = _resolveComponent(\"AlertMessage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: \n displayModal.value === 'delete'\n ? 'admin.CONFIRM_USER_ACCOUNT_DELETION'\n : 'admin.CONFIRM_USER_PASSWORD_RESET'\n ,\n strongMessage: _unref(user).username,\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (\n displayModal.value === 'delete'\n ? deleteUserAccount(_unref(user).username)\n : resetUserPassword(_unref(user).username)\n )),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal('')))\n }, null, 8, [\"title\", \"message\", \"strongMessage\"]))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\n `admin.${\n currentAction.value === 'password-reset'\n ? 'PASSWORD_RESET'\n : 'USER_EMAIL_UPDATE'\n }_SUCCESSFUL`\n )), 1))\n : _createCommentVNode(\"\", true),\n (!_unref(user).is_active)\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 2,\n message: \"user.THIS_USER_ACCOUNT_IS_INACTIVE\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 3,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (displayUserEmailForm.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (updateUserEmail(_unref(user).username)), [\"prevent\"]))\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.CURRENT_EMAIL')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"email\",\n type: \"email\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_unref(user).email) = $event)),\n disabled: \"\"\n }, null, 512), [\n [_vModelText, _unref(user).email]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_5, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.NEW_EMAIL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"new-email\",\n type: \"email\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((newUserEmail).value = $event))\n }, null, 512), [\n [_vModelText, newUserEmail.value]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"button\", _hoisted_7, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(hideEmailForm, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_8)\n ])\n ], 34)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(registrationDate)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).first_name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LAST_NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).last_name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.BIRTH_DATE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(birthDate)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LOCATION')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).location), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.BIO')) + \":\", 1),\n _createElementVNode(\"dd\", _hoisted_10, _toDisplayString(_unref(user).bio), 1)\n ]),\n (_unref(fromAdmin))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n (_unref(authUser).username !== _unref(user).username)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"danger\",\n onClick: _cache[5] || (_cache[5] = _withModifiers(($event: any) => (updateDisplayModal('delete')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.DELETE_USER')), 1))\n : _createCommentVNode(\"\", true),\n (!_unref(user).is_active)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 1,\n onClick: _cache[6] || (_cache[6] = _withModifiers(($event: any) => (confirmUserAccount(_unref(user).username)), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.ACTIVATE_USER_ACCOUNT')), 1))\n : _createCommentVNode(\"\", true),\n (_unref(authUser).username !== _unref(user).username)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 2,\n onClick: _withModifiers(displayEmailForm, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('admin.UPDATE_USER_EMAIL')), 9, _hoisted_12))\n : _createCommentVNode(\"\", true),\n (\n _unref(authUser).username !== _unref(user).username &&\n _unref(appConfig).is_email_sending_enabled\n )\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 3,\n onClick: _cache[7] || (_cache[7] = _withModifiers(($event: any) => (updateDisplayModal('reset')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.RESET_USER_PASSWORD')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.$router.go(-1)))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createElementVNode(\"button\", {\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.$router.push('/profile/edit')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]))\n ]))\n}\n}\n\n})","import script from \"./UserInfos.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserInfos.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserInfos.vue?vue&type=style&index=0&id=217519af&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-217519af\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, withDirectives as _withDirectives, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-b3c885de\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-form\" }\nconst _hoisted_2 = {\n key: 2,\n class: \"info-box success-message\"\n}\nconst _hoisted_3 = { class: \"form-items\" }\nconst _hoisted_4 = [\"disabled\", \"placeholder\"]\nconst _hoisted_5 = {\n key: 1,\n class: \"form-info\"\n}\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = [\"disabled\", \"placeholder\"]\nconst _hoisted_8 = {\n key: 3,\n class: \"form-info\"\n}\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = { key: 3 }\nconst _hoisted_12 = { key: 0 }\nconst _hoisted_13 = { key: 4 }\nconst _hoisted_14 = { class: \"account\" }\nconst _hoisted_15 = { key: 5 }\n\nimport {\n ComputedRef,\n computed,\n onUnmounted,\n reactive,\n ref,\n toRefs,\n watch,\n withDefaults,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import PasswordInput from '@/components/Common/PasswordInput.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { ILoginRegisterFormData } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n action: string\n token?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAuthForm',\n props: {\n action: null,\n token: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { action: string, token: string }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { action } = toRefs(props)\n const formData: ILoginRegisterFormData = reactive({\n username: '',\n email: '',\n password: '',\n })\n const buttonText: ComputedRef = computed(() =>\n getButtonText(props.action)\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const isRegistrationSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_REGISTRATION_SUCCESS]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const registration_disabled: ComputedRef = computed(\n () =>\n props.action === 'register' && !appConfig.value.is_registration_enabled\n )\n const sendingEmailDisabled: ComputedRef = computed(\n () =>\n ['reset-request', 'account-confirmation-resend'].includes(props.action) &&\n !appConfig.value.is_email_sending_enabled\n )\n const formErrors = ref(false)\n\n function getButtonText(action: string): string {\n switch (action) {\n case 'reset-request':\n case 'reset':\n return 'buttons.SUBMIT'\n default:\n return `buttons.${props.action.toUpperCase()}`\n }\n }\n function invalidateForm() {\n formErrors.value = true\n }\n function updatePassword(password: string) {\n formData.password = password\n }\n function onSubmit(actionType: string) {\n switch (actionType) {\n case 'reset':\n if (!props.token) {\n return store.commit(\n ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES,\n 'user.INVALID_TOKEN'\n )\n }\n return store.dispatch(AUTH_USER_STORE.ACTIONS.RESET_USER_PASSWORD, {\n password: formData.password,\n token: props.token,\n })\n case 'reset-request':\n return store.dispatch(\n AUTH_USER_STORE.ACTIONS.SEND_PASSWORD_RESET_REQUEST,\n {\n email: formData.email,\n }\n )\n case 'account-confirmation-resend':\n return store.dispatch(\n AUTH_USER_STORE.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL,\n {\n email: formData.email,\n }\n )\n default:\n formData['language'] = language.value\n store.dispatch(AUTH_USER_STORE.ACTIONS.LOGIN_OR_REGISTER, {\n actionType,\n formData,\n redirectUrl: route.query.from,\n })\n }\n }\n function resetFormData() {\n formData.username = ''\n formData.email = ''\n formData.password = ''\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\n watch(\n () => route.path,\n async () => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n store.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n false\n )\n formErrors.value = false\n resetFormData()\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_AlertMessage = _resolveComponent(\"AlertMessage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n id: \"user-auth-form\",\n class: _normalizeClass(`${\n ['reset', 'reset-request'].includes(_unref(action)) ? _unref(action) : 'user-form'\n }`)\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"form-box\", {\n disabled: _unref(registration_disabled),\n }])\n }, [\n (_unref(registration_disabled))\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 0,\n message: \"user.REGISTER_DISABLED\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(sendingEmailDisabled))\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 1,\n message: \"admin.EMAIL_SENDING_DISABLED\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess) || _unref(isRegistrationSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\n `user.PROFILE.SUCCESSFUL_${\n _unref(isRegistrationSuccess)\n ? `REGISTRATION${\n _unref(appConfig).is_email_sending_enabled ? '_WITH_EMAIL' : ''\n }`\n : 'UPDATE'\n }`\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (onSubmit(_unref(action))), [\"prevent\"]))\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(action) === 'register')\n ? _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n id: \"username\",\n disabled: _unref(registration_disabled),\n required: \"\",\n pattern: \"[a-zA-Z0-9_]+\",\n minlength: \"3\",\n maxlength: \"30\",\n onInvalid: invalidateForm,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((formData.username) = $event)),\n placeholder: _ctx.$t('user.USERNAME')\n }, null, 40, _hoisted_4)), [\n [_vModelText, formData.username]\n ])\n : _createCommentVNode(\"\", true),\n (_unref(action) === 'register')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _hoisted_6,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.USERNAME_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(action) !== 'reset')\n ? _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 2,\n id: \"email\",\n disabled: _unref(registration_disabled) || _unref(sendingEmailDisabled),\n required: \"\",\n onInvalid: invalidateForm,\n type: \"email\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((formData.email) = $event)),\n placeholder: _ctx.$t('user.EMAIL')\n }, null, 40, _hoisted_7)), [\n [_vModelText, formData.email]\n ])\n : _createCommentVNode(\"\", true),\n (\n [\n 'reset-request',\n 'register',\n 'account-confirmation-resend',\n ].includes(_unref(action))\n )\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _hoisted_9,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.EMAIL_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (\n !['account-confirmation-resend', 'reset-request'].includes(\n _unref(action)\n )\n )\n ? (_openBlock(), _createBlock(PasswordInput, {\n key: 4,\n disabled: _unref(registration_disabled),\n required: true,\n placeholder: \n _unref(action) === 'reset'\n ? _ctx.$t('user.ENTER_PASSWORD')\n : _ctx.$t('user.PASSWORD')\n ,\n password: formData.password,\n checkStrength: ['reset', 'register'].includes(_unref(action)),\n onUpdatePassword: updatePassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"placeholder\", \"password\", \"checkStrength\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"button\", {\n type: \"submit\",\n disabled: _unref(registration_disabled) || _unref(sendingEmailDisabled)\n }, _toDisplayString(_ctx.$t(_unref(buttonText))), 9, _hoisted_10)\n ], 34),\n (_unref(action) === 'login')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/register\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.REGISTER')), 1)\n ]),\n _: 1\n }),\n (_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_12, \"-\"))\n : _createCommentVNode(\"\", true),\n (_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n class: \"links\",\n to: \"/password-reset/request\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PASSWORD_FORGOTTEN')), 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(action) === 'register')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('user.ALREADY_HAVE_ACCOUNT')), 1),\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/login\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.LOGIN')), 1)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (\n ['login', 'register'].includes(_unref(action)) &&\n _unref(appConfig).is_email_sending_enabled\n )\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/account-confirmation/resend\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.ACCOUNT_CONFIRMATION_NOT_RECEIVED')), 1)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 6,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ])\n ], 2))\n}\n}\n\n})","import script from \"./UserAuthForm.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAuthForm.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAuthForm.vue?vue&type=style&index=0&id=b3c885de&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b3c885de\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"user-picture\" }\nconst _hoisted_2 = [\"alt\", \"src\"]\nconst _hoisted_3 = {\n key: 1,\n class: \"no-picture\"\n}\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-user-circle-o\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_5 = [\n _hoisted_4\n]\n\nimport { computed } from 'vue'\n\n import { IUserProfile } from '@/types/user'\n import { getApiUrl } from '@/utils'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPicture',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const authUserPictureUrl = computed(() =>\n props.user.picture\n ? `${getApiUrl()}users/${props.user.username}/picture?${Date.now()}`\n : ''\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(authUserPictureUrl) !== '')\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n class: \"profile-user-img\",\n alt: _ctx.$t('user.USER_PICTURE'),\n src: _unref(authUserPictureUrl)\n }, null, 8, _hoisted_2))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _hoisted_5))\n ]))\n}\n}\n\n})","import script from \"./UserPicture.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPicture.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPicture.vue?vue&type=style&index=0&id=26bea286&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","\n\n\n","import { render } from \"./NoWorkouts.vue?vue&type=template&id=4b4d15fb&scoped=true\"\nconst script = {}\n\nimport \"./NoWorkouts.vue?vue&type=style&index=0&id=4b4d15fb&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4b4d15fb\"]])\n\nexport default __exports__","var map = {\n\t\"./de/de.ts\": 9923,\n\t\"./en/en.ts\": 8757,\n\t\"./fr/fr.ts\": 6625,\n\t\"./nb/nb.ts\": 8891\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 4612;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + ({\"24\":\"reset\",\"193\":\"statistics\",\"328\":\"admin\",\"401\":\"workouts\",\"845\":\"profile\",\"881\":\"password\"}[chunkId] || chunkId) + \".\" + {\"24\":\"3194c9f0\",\"93\":\"02cf293c\",\"193\":\"04a17f2e\",\"243\":\"e551248f\",\"328\":\"9bc68088\",\"401\":\"a514f12a\",\"431\":\"e5102e07\",\"633\":\"81a8ddc8\",\"845\":\"430ae7df\",\"858\":\"3f2a93f2\",\"881\":\"43430dfc\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/css/\" + {\"24\":\"reset\",\"193\":\"statistics\",\"328\":\"admin\",\"401\":\"workouts\",\"845\":\"profile\"}[chunkId] + \".\" + {\"24\":\"e2527ec6\",\"193\":\"40e24e75\",\"328\":\"73df498d\",\"401\":\"41709693\",\"845\":\"203e78e2\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"fittrackee_client:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"24\":1,\"193\":1,\"328\":1,\"401\":1,\"845\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkfittrackee_client\"] = self[\"webpackChunkfittrackee_client\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(4970); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["authApi","axios","baseURL","getApiUrl","interceptors","request","use","config","controller","AbortController","signal","requestKey","removeRequestIfPending","pendingRequests","authToken","store","AUTH_USER_STORE","auth","headers","Authorization","error","Promise","reject","response","message","Map","generateRequestKey","method","url","params","data","JSON","stringify","join","has","get","abort","delete","disabledLanguages","loadLocaleMessages","locales","require","messages","keys","forEach","key","matched","match","length","includes","locale","default","createI18n","legacy","fallbackLocale","globalInjection","ctx","normalize","_normalize","interpolate","_interpolate","list","_list","plural","_plural","about","AboutTranslations","admin","AdministrationTranslations","api","ApiTranslations","buttons","ButtonsTranslations","common","CommonTranslations","dashboard","DashboardTranslations","ErrorTranslations","oauth2","OAuth2Translations","sports","SportsTranslations","statistics","StatisticsTranslations","user","UserTranslations","workouts","WorkoutsTranslations","register","ready","console","log","registered","cached","updatefound","updated","offline","_withScopeId","n","_pushScopeId","_popScopeId","_hoisted_1","id","_hoisted_2","class","_hoisted_3","_hoisted_4","_createElementVNode","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","href","target","rel","_defineComponent","__name","props","version","adminContact","setup","__props","toRefs","_ctx","_cache","_component_router_link","_resolveComponent","_openBlock","_createElementBlock","_createTextVNode","_toDisplayString","_unref","_createVNode","to","_withCtx","$t","_","_createCommentVNode","__exports__","emits","emit","useStore","authUser","computed","getters","isAuthenticated","language","ROOT_STORE","isMenuOpen","ref","openMenu","value","closeMenu","updateLanguage","option","dispatch","toString","logout","_component_Dropdown","onClick","$event","$router","push","_normalizeClass","capitalize","_createBlock","UserPicture","username","availableLanguages","options","selected","onSelected","ErrorImg","innerHTML","appConfig","appLoading","hideScrollBar","displayScrollButton","updateHideScrollBar","isScrolledToBottom","element","getBoundingClientRect","top","window","innerHeight","bottom","scroll","onscroll","document","querySelector","scrollToTop","scrollTo","behavior","setTimeout","initLanguage","navigatorLanguage","navigator","split","localeFromLanguage","e","onBeforeMount","onMounted","_component_Loader","_component_router_view","_Fragment","NavBar","onMenuInteraction","NoConfig","Footer","admin_contact","name","charLimit","disabled","type","Boolean","input","text","updateText","event","watch","_withDirectives","maxLenght","onInput","_vModelText","distance","unitFrom","useImperialUnits","digits","displayUnit","speed","strong","unitTo","units","defaultTarget","convertedDistance","convertDistance","parseFloat","toFixed","route","useRoute","isOpen","dropdownOptions","map","toggleDropdown","updateSelected","path","_renderSlot","$slots","_renderList","index","label","Array","isArray","subMessage","xmlns","x","y","viewBox","style","d","render","cx","cy","r","sportLabel","color","title","sportColors","inject","_normalizeStyle","fill","CyclingSport","CyclingTransport","CyclingVirtual","Hiking","MountainBiking","MountainBikingElectric","Rowing","Running","SkiingAlpine","SkiingCrossCountry","Snowshoes","Trail","Walking","script","strongMessage","errorMessages","onUnmounted","commit","_component_i18n_t","_component_ErrorMessage","_component_Card","content","keypath","customComponents","AlertMessage","Card","CustomTextArea","Distance","Dropdown","ErrorMessage","Loader","Modal","SportImage","clickOutsideDirective","mounted","binding","clickOutsideEvent","contains","body","addEventListener","unmounted","removeEventListener","undefined","Chart","BarElement","LineElement","PointElement","Legend","Title","Tooltip","Filler","BarController","CategoryScale","LineController","LinearScale","ChartDataLabels","app","createApp","App","provide","i18n","router","VueFullscreen","directive","component","mount","for","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","edition","useRouter","appData","reactive","max_users","max_single_file_size","max_zip_file_size","gpx_limit_import","updateForm","Object","getFileSizeInMB","onCancel","onSubmit","formData","assign","_withModifiers","min","step","icon","appStatistics","uploadDirSize","getReadableFileSize","uploads_dir_size","StatCard","users","size","suffix","AppStatsCards","is_registration_enabled","is_email_sending_enabled","t","useI18n","translatedSports","translateSports","SPORTS_STORE","updateSportStatus","isActive","_component_SportImage","sport","translatedLabel","is_active","danger","has_workouts","query","q","searchUsers","resetFilter","onKeyup","_withKeys","placeholder","trim","orderByList","defaultOrderBy","getQuery","USERS_STORE","pagination","loadUsers","queryParams","reloadUsers","updateUser","queryParam","queryValue","page","newQuery","UsersNameFilter","onFilterOnUsername","FilterSelects","sort","sortList","order_by","onUpdateSelect","email","formatDate","created_at","timezone","date_format","nb_workouts","Pagination","tabs","selectedTab","getPath","tab","toLocaleLowerCase","checked","UserHeader","UserProfileTabs","appLanguage","userLanguage","languageLabels","fistDayOfWeek","weekm","display_ascent","getDateFormat","imperial_units","loading","userForm","password","new_password","isSuccess","emailUpdate","formErrors","displayModal","invalidateForm","updateUserForm","updatePassword","updateNewPassword","updateProfile","payload","updateDisplayModal","deleteAccount","async","isSuccessValue","_component_Modal","onConfirmAction","onCancelAction","errors","required","onInvalid","PasswordInput","onUpdatePassword","onPasswordError","checkStrength","first_name","last_name","birth_date","location","bio","registrationDate","format","Date","updateBio","_component_CustomTextArea","onUpdateValue","fileSizeLimit","pictureFile","deleteUserPicture","updatePictureFile","files","updateUserPicture","picture","accept","timeZones","tzList","focusItemIndex","matchTimezone","toLowerCase","onMouseOver","onUpdateTimezone","onEnter","preventDefault","firstElementChild","openDropdown","onKeydown","ref_key","filter","tz","focus","onMouseover","autofocus","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","weekStart","imperialUnits","ascentData","dateFormatOptions","availableDateFormatOptions","toUTCString","updateTZ","updateAscentDisplay","updateImperialUnit","updateWeekM","lang","_vModelSelect","TimezoneDropdown","dateFormat","start","unit","status","oauth2_scopes","admin_oauth2_scopes","appForm","client_name","client_uri","client_description","redirect_uri","scopes","filtered_scopes","getScopes","redirect_uris","scope","OAUTH2_STORE","updateDescription","updateScopes","indexOf","splice","admin_scopes","description","onChange","client","loadApp","client_id","authorizeApp","response_type","state","code_challenge","code_challenge_method","afterCreation","revocationSuccessful","messageToDisplay","idCopied","secretCopied","clipboardSupport","loadClient","updateMessageToDisplay","forDelete","confirmAction","clientId","copyIdToClipboard","clipboard","writeText","copySecretToClipboard","client_secret","newValue","issued_at","website","clients","getClientsQuery","clientsQuery","getNumberQueryValue","defaultPage","loadClients","isEdition","defaultColor","sports_list","sportPayload","sport_id","stopped_speed_threshold","updateSportInEdition","is_active_for_user","resetSportPayload","isSportInEdition","sportId","updateColor","updateThreshold","updateIsActive","updateSport","resetSport","newIsLoading","src","alt","BikePic","About","workout","_component_Distance","workoutId","workout_date","formatDistance","addSuffix","with_gpx","StaticMap","moving","min_alt","max_alt","ascent","descent","per_page","initWorkoutsCount","loadWorkouts","WORKOUTS_STORE","moreWorkoutsExist","previous_workout","defaultOrder","loadMoreWorkouts","WorkoutCard","s","NoWorkouts","displayHARecord","sportColor","records","record","record_type","height","width","colors","datasets","angleOffset","radius","circumference","Math","PI","calculateStrokeDashOffset","percentage","returnCircleTransformValue","rotation","entries","stroke","transform","isHidden","togglePane","stopPropagation","_directive_click_outside","_resolveDirective","DonutChart","CalendarWorkout","getSportLabel","getSportColor","chartDatasets","getDonutDatasets","sportIdColors","displayedWorkoutCount","slice","CalendarWorkoutsChart","currentDay","endDate","startDate","weekStartingMonday","rows","getDays","day","days","i","addDays","isWeekEnd","filterWorkouts","isSameDay","getDateWithTZ","reverse","row","isSameMonth","today","isToday","CalendarWorkouts","localeOptions","calendarDates","getCalendarStartAndEnd","calendarWorkouts","getCalendarWorkouts","apiParams","from","end","displayNextMonth","addMonths","displayPreviousMonth","subMonths","CalendarHeader","onDisplayNextMonth","onDisplayPreviousMonth","CalendarDays","CalendarCells","date","chartParams","duration","startOfMonth","endOfMonth","selectedSportIds","StatChart","formatRecord","distanceUnitFrom","distanceUnitTo","ascentUnitFrom","ascentUnitTo","Error","workout_id","sortRecords","a","b","recordALabel","recordBLabel","getRecordsBySports","reduce","sportList","find","sportTranslatedLabel","getTranslatedRecords","translatedRecords","recordsBySport","RecordsCard","userTotalDuration","total_duration","totalDuration","get_duration","totalDistance","total_distance","totalAscent","total_ascent","nb_sports","isSelected","updateDisplayColumn","UserStatsCards","UserMonthStats","UserRecords","UserCalendar","Timeline","NotFound","action","LoginOrRegisterForm","getTabFromPath","regex","tag","replace","toUpperCase","routes","Dashboard","LoginOrRegister","children","Profile","UserInfos","UserPreferences","UserSportPreferences","UserApps","UserAppsList","UserApp","AddUserApp","AuthorizeUserApp","ProfileEdition","UserInfosEdition","UserAccountEdition","UserPictureEdition","UserPreferencesEdition","displaySegment","AdminMenu","AdminApplication","AdminSports","fromAdmin","AdminUsers","AboutView","NotFoundView","createRouter","history","createWebHistory","process","pathsWithoutAuthentication","pathsWithoutChecks","beforeEach","next","then","fullPath","catch","AuthUserActions","AuthUserGetters","AuthUserMutations","OAuth2Actions","OAuth2Getters","OAuth2Mutations","RootActions","RootGetters","RootMutations","SportsActions","SportsGetters","SportsMutation","StatisticsActions","StatisticsGetters","StatisticsMutations","UsersActions","UsersGetters","UsersMutations","ACTIONS","GETTERS","MUTATIONS","STATS_STORE","WorkoutsActions","WorkoutsGetters","WorkoutsMutations","deleteUserAccount","context","res","handleError","actions","finally","resetPassword","reset_password","activate","new_email","removeAuthUserData","localStorage","removeItem","token","auth_token","setItem","refreshUser","actionType","redirectUrl","form","FormData","append","authUserProfile","isRegistrationSuccess","mutations","authUserState","get_client","set","redirect_url","oAuth2State","setAttribute","application","root","enUS","sportsState","filterType","statisticsState","updatedUser","usersState","getWorkouts","segmentUrl","segmentId","segments","chart_data","gpx","file","notes","calendar_workouts","timeline_workouts","user_workouts","workoutData","concat","chartData","workoutsState","modules","authUserModule","oAuthModule","sportsModule","statsModule","usersModule","workoutsModule","createStore","VuexStore","defaultPerPage","defaultValue","getStringQueryValue","availableValues","locationQuery","queryOptions","defaultSort","order","workoutsPayloadKeys","getRange","stop","rangePagination","pages","currentPage","getStartDate","startOfWeek","weekStartsOn","startOfYear","incrementDate","addYears","dateInUTC","utcToZonedTime","monthStart","monthEnd","endOfWeek","formatWorkoutDate","dateTime","timeFormat","workout_time","availableDateFormats","dateStringFormats","de","en","fr","dateString","withTime","inputDate","l","df","suffixes","fileSize","asText","floor","pow","msg","m","availableLocales","sortSports","sportATranslatedLabel","sportBTranslatedLabel","activeStatus","sportsToInclude","dateFormats","week","chart","month","year","datasetKeys","getDateKeys","getStatisticsChartDataset","isLineChart","dataset","backgroundColor","borderColor","spanGaps","getDatasets","displayedSports","average_speed","total_descent","convertStatsValue","datasetKey","convertStatsDistance","formatStats","displayedSportsId","apiStats","userDateFormat","dayKeys","labels","sportsId","displayedSport","getStatsDateParams","timeFrame","subYears","endOfYear","updateChartParams","backward","subWeeks","addWeeks","ft","system","multiplier","mi","km","factors","metric","imperial","borderWidth","yAxisID","elevation","distance_labels","duration_labels","coordinates","latitude","longitude","total","count","perPage","onSelectUpdate","nb","buttonText","timer","errorDisplayed","displayError","clearTimeout","cursor","has_prev","navigate","has_next","active","setZxcvbnOptions","zxcvbnCommonPackage","zxcvbnEnPackage","zxcvbnFrPackage","zxcvbnDePackage","zxcvbnLangPackages","zxcvbnPackage","graphs","adjacencyGraphs","dictionary","zxcvbnOptions","getPasswordStrength","strength","passwordScore","passwordStrength","passwordSuggestions","backgroundSize","calculatePasswordStrength","zxcvbnResult","zxcvbn","score","feedback","suggestions","newLanguageValue","newPassword","max","suggestion","showPassword","passwordValue","togglePassword","invalidPassword","minlength","_vModelDynamic","PasswordStrength","displayHover","imageUrl","backgroundImage","$props","$setup","$data","$options","_component_Chart","hideChartIfNoData","emptyStats","displayedData","args","updateDisplayData","fullStats","displayedSportIds","_component_BarChart","_mergeProps","barChartProps","formatDuration","totalSeconds","formatWithUnits","String","hours","padStart","minutes","seconds","formatTooltipValue","defineComponent","components","BarChart","getNumber","isNaN","getSum","getUnit","parse","responsive","maintainAspectRatio","animation","layout","padding","scales","stacked","grid","drawOnChartArea","ticks","maxTicksLimit","callback","afterFit","scale","plugins","datalabels","anchor","align","chartArea","display","formatter","dataIndex","datasetIndex","legend","tooltip","interaction","intersect","mode","position","tooltipItem","formattedValue","callbacks","parsed","footer","tooltipItems","sum","useBarChart","formattedStats","getStatistics","getApiParams","time","newParams","birthDate","displayUserEmailForm","newUserEmail","currentAction","resetUserPassword","confirmUserAccount","displayEmailForm","resetErrorsAndSuccess","email_to_confirm","hideEmailForm","updateUserEmail","newIsSuccess","_component_AlertMessage","go","getButtonText","registration_disabled","sendingEmailDisabled","resetFormData","pattern","maxlength","authUserPictureUrl","now","webpackContext","req","webpackContextResolve","__webpack_require__","o","code","resolve","module","exports","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","call","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","getter","__esModule","leafPrototypes","getProto","getPrototypeOf","obj","__proto__","this","ns","create","def","current","getOwnPropertyNames","definition","defineProperty","enumerable","f","chunkId","all","promises","u","miniCssF","g","globalThis","Function","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","done","needAttach","scripts","getElementsByTagName","getAttribute","createElement","charset","timeout","nc","onScriptComplete","prev","onerror","onload","doneFns","parentNode","removeChild","bind","head","appendChild","Symbol","toStringTag","p","createStylesheet","fullhref","linkTag","onLinkComplete","errorType","realHref","err","findStylesheet","existingLinkTags","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","promise","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/fittrackee/dist/static/js/app.f7049224.js b/fittrackee/dist/static/js/app.f7049224.js deleted file mode 100644 index d4c9e64b..00000000 --- a/fittrackee/dist/static/js/app.f7049224.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(){var e={5167:function(e,t,n){"use strict";var r=n(9669),a=n.n(r),o=n(8566),s=n(2894),i=n(5801),l=n(2024);const c=a().create({baseURL:(0,l.k)()});c.interceptors.request.use((e=>{const t=new AbortController;e.signal=t.signal;const n=(0,o.a)(e);o.j.set(n,t);const r=s.Z.getters[i.YN.GETTERS.AUTH_TOKEN];if(r){const t=`Bearer ${r}`;e.headers&&e.headers.Authorization!==t&&(e.headers.Authorization=`Bearer ${r}`)}return e}),(e=>Promise.reject(e))),c.interceptors.response.use((e=>((0,o.a)(e.config),e)),(e=>("canceled"!==e.message&&(0,o.a)(e.response.config),Promise.reject(e)))),t["Z"]=c},8566:function(e,t,n){"use strict";n.d(t,{a:function(){return o},j:function(){return r}});const r=new Map,a=e=>{const{method:t,url:n,params:r={},data:a={}}=e;return[t,n,JSON.stringify(r),JSON.stringify(a)].join("")},o=e=>{const t=a(e);if(r.has(t)){const e=r.get(t)||{};e?.abort(),r.delete(t)}return t}},2540:function(e,t,n){"use strict";var r=n(9150);const a=["nb"];function o(){const e=n(4612),t={};return e.keys().forEach((n=>{const r=n.match(/([A-Za-z0-9-_]+)\./i);if(r&&r.length>1&&!a.includes(r[1])){const a=r[1];t[a]=e(n).default}})),t}t["Z"]=(0,r.o)({legacy:!1,locale:"en",fallbackLocale:"en",globalInjection:!0,messages:o()})},9923:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Kontaktiere den Administrator"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee ist ein selbst-gehosteter Outdoor-Aktivitäts-Tracker."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["unter ",n(r(0))," Lizenz "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Quellkode"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Aktion"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Aktiviere Konto"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Aktiv"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Hinzufügen/Entfernen von Administratorrechten, Lösche Nutzerkonto."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Anwendung"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Kontakt-E-Mail des Administrators"])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Max. Anzahl aktiver Nutzer"])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["Wenn 0, gibt es keine Registrierungslimitierung.."])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Max. Dateianzahl im zip Archiv"])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["keine Kontakt-E-Mail"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. Größe der hochgeladenen Dateien (in Mb)"])},TITLE:e=>{const{normalize:t}=e;return t(["Anwendungskonfiguration"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. Größe des zip Archives (in Mb)"])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Zurück zu Admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Möchtest du wirklich das ",n(r(0))," Konto löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Möchtest du wirklich das ",n(r(0))," Passwort zurücksetzen?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Aktuelle E-Mail"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Lösche Nutzer"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["E-Mail-Versand ist deaktiviert."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Aktivieren/Deaktivieren von Sportarten."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["Neue E-Mail"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Das wasswort wurde zurückgesetzt."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Registrierung ist derzeit deaktiviert."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Registrierung ist derzeit aktiviert."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Aktiv"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["Trainings existieren"])},IMAGE:e=>{const{normalize:t}=e;return t(["Bild"])},LABEL:e=>{const{normalize:t}=e;return t(["Titel"])}},TITLE:e=>{const{normalize:t}=e;return t(["Sportarten Administration"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Aktualisiere Anwemdungskonfiguration (maximale Anzahl an registrierten Nutzern, maximale Dateigröße)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Aktualisiere E-Mail"])},USER:e=>{const{normalize:t}=e;return t(["Nutzer"])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Die E-Mail Adresse wurde aktualisiert."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Administratorrechte hinzufügen"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Administratorrechte entfernen"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["Adminstatus"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["Registrierungsdatum"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["Accountstatus"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nutzername"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["Trainingsanzahl"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["E-Mail: Eine gültige E-Mail muss angegeben werden."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Fehler bei der GPX-Verarbeitung."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Fehler beim Einlesen der GPX-Datei"])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Fehler beim Abrufen der Konfiguration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Fehler beim Aktualisieren der Konfiguration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Fehler. Die Registrierung ist deaktiviert."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["Dateierweiterung ist nicht erlaubt."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["Die Datei ist größer als erlaubt."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Ungültige Anmeldedaten."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Die bereitgestellten Daten sind ungültig."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte erneut anmelden."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte erneut anmelden."])},"Network Error":e=>{const{normalize:t}=e;return t(["Netzwerkfehler."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["Die neue E-Mail muss sich von der aktuellen E-Mail unterscheiden"])},"no file part":e=>{const{normalize:t}=e;return t(["Keine Datei angegeben."])},"no selected file":e=>{const{normalize:t}=e;return t(["Keine Datei ausgewählt."])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Passwort: Passwort und Passwortbestätigung stimmen nicht überein."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Gebe ein gültiges Authentifizierungstoken an."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Es tut mir leid, der Benutzername ist schon vergeben."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Sportart existiert nicht."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Die Signatur ist abgelaufen. Bitte melde dich erneut an."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Registrierung erfolgreich."])},"user does not exist":e=>{const{normalize:t}=e;return t(["Der Nutzer existiert nicht."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["Um den Administrator zu kontaktieren, muss eine gültige E-Mail-Adresse angegeben werden"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["Du kannst Dein Konto nicht löschen, da kein anderer Nutzer hat Administratorrechte besitzt."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["Du hast keine Berechtigung."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["Vorhergehende"])},NEXT:e=>{const{normalize:t}=e;return t(["Nächste"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Bestätigungs-E-Mail erneut senden"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Autorisieren"])},BACK:e=>{const{normalize:t}=e;return t(["Zurück"])},CANCEL:e=>{const{normalize:t}=e;return t(["Abbrechen"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Filter löschen"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Mein Konto löschen"])},DISABLE:e=>{const{normalize:t}=e;return t(["Deaktivieren"])},EDIT:e=>{const{normalize:t}=e;return t(["Bearbeiten"])},ENABLE:e=>{const{normalize:t}=e;return t(["Aktivieren"])},FILTER:e=>{const{normalize:t}=e;return t(["Filter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Anmelden"])},NO:e=>{const{normalize:t}=e;return t(["Nein"])},REGISTER:e=>{const{normalize:t}=e;return t(["Registrieren"])},RESET:e=>{const{normalize:t}=e;return t(["Zurücksetzen"])},SUBMIT:e=>{const{normalize:t}=e;return t(["Speichern"])},YES:e=>{const{normalize:t}=e;return t(["Ja"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["Über"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bestätigung"])},CONTACT:e=>{const{normalize:t}=e;return t(["Kontakt"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["Tag"]),t(["Tage"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Angezeigt"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["Dokumentation (en)"])},HERE:e=>{const{normalize:t}=e;return t(["hier"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Versteckt"])},HOME:e=>{const{normalize:t}=e;return t(["Startseite"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["sortiert nach"])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["sortieren"])},ASC:e=>{const{normalize:t}=e;return t(["aufsteigend"])},DESC:e=>{const{normalize:t}=e;return t(["absteigend"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["pro Seite"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Insgesamt"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Dashboard"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["Dieser Monat"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["Bei der Anwendung scheinen einige Probleme aufgetreten zu sein.
Bitte versuche es später noch einmal oder kontaktiere den Administrator."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Seite nicht gefunden"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Training nicht gefunden"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Etwas lief schief"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Eine neue OAuth2-Anwendung hinzufügen"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["ID"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Geheimnis"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Anwendungsbeschreibung"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Erstellt am"])},NAME:e=>{const{normalize:t}=e;return t(["Anwendungsname"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["Weiterleitungs-URL"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Geltungsbereich"])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf auth-Endpunkte"])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf auth-Endpunkte"])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf users-Endpunkte"])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf users-Endpunkte"])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf workouts-Endpunkte"])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf workouts-Endpunkte"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf die Anwendungskonfiguration"])}},URL:e=>{const{normalize:t}=e;return t(["Anwendungs-URL"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Anwendung erfolgreich erstellt. Stelle sicher, dass du das Geheimnis kopierst, du kannst es nicht erneut anzeigen."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist sicher, dass du diese App löschen willst?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Die Anwendung ",n(r(0))," fragt an:"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["OAuth2-Anwendungen"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t([n(r(0))," den Zugriff auf deinen Account erlauben?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["in Zwischenablage kopieren"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Anwendung löschen"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Anwendung hinzufügen"])},NO_APP:e=>{const{normalize:t}=e;return t(["Anwendung wurde nicht gefunden!"])},NO_APPS:e=>{const{normalize:t}=e;return t(["keine Anwendungen"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["keine Beschreibung"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Alle Tokens zurückrufen"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist du sicher, dass du alle Tokens zurückrufen möchtest?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["Alle vorhandenen und vergebenen Tokens wurde zurückgerufen."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Pendeln)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Virtuell)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Wandern"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["Mountainbiken"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["Mountainbiken (elektrisch)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Rudern"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Laufen"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Skifahren (Alpin)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Skifahren (Langlauf)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Schneeschuhe"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Gehen"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistik"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["Woche"])},month:e=>{const{normalize:t}=e;return t(["Monat"])},year:e=>{const{normalize:t}=e;return t(["Jahr"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Hast du keine Anweisungen erhalten?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Prüfe deine E-Mail. Eine neue Bestätigungs-E-Mail wurde an die angegebene Adresse geschickt."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Hast du bereits ein Konto?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Möchtest du dein Konto wirklich löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Aktuelles Passwort"])},EMAIL:e=>{const{normalize:t}=e;return t(["E-Mail"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Gebe eine gültige E-Mail-Adresse an."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Gebe ein Passwort ein"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Nach Benutzernamen filtern"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort verbergen"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte fordere ein neues Passworts an."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Sprache"])},LOG_IN:e=>{const{normalize:t}=e;return t(["Anmelden"])},LOGIN:e=>{const{normalize:t}=e;return t(["Anmeldung"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Abmelden"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["Neues Passwort"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["Keine Nutzer gefunden."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["Mindestens 8 Zeichen sind erforderlich."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Passwort vergessen?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Prüfe Deine E-Mail. Wenn Deine Adresse in der Datenbank enthalten ist, wirst du eine E-Mail mit einem Link erhalten um Dein Passwort zurückzusetzen."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["schwach"])},AVERAGE:e=>{const{normalize:t}=e;return t(["mittel"])},GOOD:e=>{const{normalize:t}=e;return t(["gut"])},STRONG:e=>{const{normalize:t}=e;return t(["start"])},LABEL:e=>{const{normalize:t}=e;return t(["Passwortstärke"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Vermeide vorhersehbare Buchstabenersetzungen wie ","@"," für a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Vermeide umgekehrte Schreibweisen gebräuchlicher Wörter."])},allUppercase:e=>{const{normalize:t}=e;return t(["Schreibe einige, aber nicht alle Buchstaben groß."])},capitalization:e=>{const{normalize:t}=e;return t(["Schreibe mehr als nur den ersten Buchstaben groß."])},dates:e=>{const{normalize:t}=e;return t(["Vermeide Daten und Jahreszahlen, die mit Dir in Verbindung gebracht werden."])},recentYears:e=>{const{normalize:t}=e;return t(["Vermeide Angabe von letzten Jahreszahlen."])},associatedYears:e=>{const{normalize:t}=e;return t(["Vermeide Jahreszahlen, die mit Dir in Verbindung gebracht werden."])},sequences:e=>{const{normalize:t}=e;return t(["Vermeide gebräuchliche Zeichenfolgen."])},repeated:e=>{const{normalize:t}=e;return t(["Vermeide wiederholungen von Wörtern und Zeichen."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Verwende längere Tastaturmuster und ändere mehrmals die Schreibrichtung."])},anotherWord:e=>{const{normalize:t}=e;return t(["Füge weitere weniger gebräuchliche Wörter hinzu."])},useWords:e=>{const{normalize:t}=e;return t(["Verwenden Sie mehrere Wörter, aber vermeide gebräuchliche Ausdrücke."])},noNeed:e=>{const{normalize:t}=e;return t(["Du kannst sichere Passwörter erstellen, ohne Symbole, Zahlen oder Großbuchstaben zu verwenden."])},pwned:e=>{const{normalize:t}=e;return t(["Wenn Sie dieses Passwort auch anderweitig verwenden, sollten Sie es ändern."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Dein Passwort wurde aktualisiert. Klicke ",n(r(0))," um dich anzumelden."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Kontoausgabe"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Anstiegs-bezogene Daten (Aufnahmen, gesamt)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Zurück zum Profil"])},BIO:e=>{const{normalize:t}=e;return t(["Biographie"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Geburtsdatum"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Datumsanzeigeformat"])},EDIT:e=>{const{normalize:t}=e;return t(["Profil bearbeiten"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen ändern"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen für Sportarten ändern"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Bitte ",n(r(0))," um Deine E-Mail Adresse nochmals zu ändern oder kontaktiere den Administrator"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["Vorname"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["Erster Tag der Woche"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Sprache"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Nachname"])},LOCATION:e=>{const{normalize:t}=e;return t(["Ort"])},MONDAY:e=>{const{normalize:t}=e;return t(["Montag"])},PICTURE:e=>{const{normalize:t}=e;return t(["Bild"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Bildausgabe"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Bild aktualisieren"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Bild entfernen"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Einstellungsausgabe"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Profil-Ausgabe"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Regirierungsdatum"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Sportarten-Einstellungsausgabe"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Sontag"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["Konto"])},APPS:e=>{const{normalize:t}=e;return t(["Anwendungen"])},PICTURE:e=>{const{normalize:t}=e;return t(["Bild"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen"])},PROFILE:e=>{const{normalize:t}=e;return t(["Profil"])},SPORTS:e=>{const{normalize:t}=e;return t(["Sportarten"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["Aktion"])},COLOR:e=>{const{normalize:t}=e;return t(["Farbe"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["vom Admin deaktiviert"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["aktiv"])},LABEL:e=>{const{normalize:t}=e;return t(["Titel"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["Geschwindigkeitsschwellenwert für Stopp"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich aktualisiert. Bitte prüfe Deine E-Mail um die neue E-Mail Adresse zu bestätigen."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich erstellt."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["Ein Aktivierungslink für Dein Konto wurde an die angegebene E-Mail Adresse geschickt."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich aktualisiert."])},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Einheiten für die Distanz"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Imperiales System (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Metrisches System (m, km)"])}},TIMEZONE:e=>{const{normalize:t}=e;return t(["Zeitzone"])}},REGISTER:e=>{const{normalize:t}=e;return t(["Registrieren"])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["E-Mail zur Kontobestätigung erneut senden"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Entschuldigung, die Registrierung ist deaktiviert."])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort anzeigen"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["Dieser Account ist inaktiv."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["Benutzerbild"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nutzername"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(["3 bis 30 Zeichen sind erforderlich, nur alphanumerische Zeichen und der Unterstrich _ sind erlaubt."])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Training hinzufügen"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["Analyse"])},ASCENT:e=>{const{normalize:t}=e;return t(["Aufstieg"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["Durchschn. Geschwindigkeit"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["Durchschnittsgeschwindigkeit"])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["zurück zum Training"])},DATE:e=>{const{normalize:t}=e;return t(["Datum"])},DESCENT:e=>{const{normalize:t}=e;return t(["Abstieg"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["zeige Filter"])},DISTANCE:e=>{const{normalize:t}=e;return t(["Entfernung"])},DURATION:e=>{const{normalize:t}=e;return t(["Dauer"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Training bearbeiten"])},ELEVATION:e=>{const{normalize:t}=e;return t(["Höhe"])},END:e=>{const{normalize:t}=e;return t(["Ende"])},FROM:e=>{const{normalize:t}=e;return t(["Von"])},GPX_FILE:e=>{const{normalize:t}=e;return t([".gpx Datei"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["verberge Filter"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Letzte Trainings"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Lade mehr Trainings"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["maximale Höhe"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["Maximale Dateianzahl"])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["Maximalgröße"])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["Max. Geschwindigkeit"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["minimale Höhe"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Nächstes Segment"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Nächstes Training"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["Daten aus gpx, ohne Bereinigung"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["Keine Datei angegeben"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["enthält keinen Ordner"])},NO_MAP:e=>{const{normalize:t}=e;return t(["Keine Karte"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Kein nächstes Segment"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Kein nächstes Training"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["Keine Anmerkungen"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Kein vorheriges Segment"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Kein vorheriges Training"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["Keine Aufzeichnungen."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["Keine Trainings."])},NOTES:e=>{const{normalize:t}=e;return t(["Anmerkungen"])},PAUSES:e=>{const{normalize:t}=e;return t(["Pausen"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Vorheriges Segment"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Vorheriges Training"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["Aufzeichnung"]),t(["Aufzeichnungen"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Durchschn. Geschwindigkeit"])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Weiteste Entfernung"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Höchster Anstieg"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Längste Dauer"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Max. Geschwindigkeit"])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["verbleibende Zeichen"])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["Segment"]),t(["Segmente"])])},SPEED:e=>{const{normalize:t}=e;return t(["Geschwindigkeit"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["Sportart"]),t(["Sportarten"])])},START:e=>{const{normalize:t}=e;return t(["Start"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Start und Ziel"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["Höhenachse bei Null starten"])},TITLE:e=>{const{normalize:t}=e;return t(["Titel"])},TO:e=>{const{normalize:t}=e;return t(["bis"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["Gesamtdauer"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Füge erstes Training hinzu!"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["Luftfeuchtigkeit"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["Temperatur"])},WIND:e=>{const{normalize:t}=e;return t(["Wind"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNO"])},NE:e=>{const{normalize:t}=e;return t(["NO"])},ENE:e=>{const{normalize:t}=e;return t(["ONO"])},E:e=>{const{normalize:t}=e;return t(["O"])},ESE:e=>{const{normalize:t}=e;return t(["OSO"])},SE:e=>{const{normalize:t}=e;return t(["SO"])},SSE:e=>{const{normalize:t}=e;return t(["SSO"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSW"])},SW:e=>{const{normalize:t}=e;return t(["SW"])},WSW:e=>{const{normalize:t}=e;return t(["WSW"])},W:e=>{const{normalize:t}=e;return t(["W"])},WNW:e=>{const{normalize:t}=e;return t(["WNW"])},NW:e=>{const{normalize:t}=e;return t(["NW"])},NNW:e=>{const{normalize:t}=e;return t(["NNW"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["klarer Tag"])},"clear-night":e=>{const{normalize:t}=e;return t(["klare Nacht"])},cloudy:e=>{const{normalize:t}=e;return t(["wolkig"])},fog:e=>{const{normalize:t}=e;return t(["Nebel"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["teilweise bewölkter Tag"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["teilweise bewölkte Nacht"])},rain:e=>{const{normalize:t}=e;return t(["Regen"])},sleet:e=>{const{normalize:t}=e;return t(["Schneeregen"])},snow:e=>{const{normalize:t}=e;return t(["Schnee"])},wind:e=>{const{normalize:t}=e;return t(["Wind"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["mit .gpx Datei"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["ohne .gpx Datei"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["Training"]),t(["Trainings"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["Trainingsdatum"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist du sicher, dass du dieses Training löschen möchtest?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t([".zip Datei"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["oder .zip Datei mit .gpx Dateien"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},8757:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Contact the administrator"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee is a self-hosted outdoor activity tracker."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["under ",n(r(0))," license "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Source code"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Action"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Activate account"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Active"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Add/remove admin rights, delete user account."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Application"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Administrator email for contact"])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Max. number of active users"])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["If 0, no limitation on registration."])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Max. files of zip archive"])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["no contact email"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. size of uploaded files (in Mb)"])},TITLE:e=>{const{normalize:t}=e;return t(["Application configuration"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. size of zip archive (in Mb)"])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Back to admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Are you sure you want to delete ",n(r(0))," account? All data will be deleted, this cannot be undone."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Are you sure you want to reset ",n(r(0))," password?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Current email"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Delete user"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["Email sending is disabled."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Enable/disable sports."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["New email"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["The password has been reset."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Registration is currently disabled."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Registration is currently enabled."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Reset password"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Active"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["workouts exist"])},IMAGE:e=>{const{normalize:t}=e;return t(["Image"])},LABEL:e=>{const{normalize:t}=e;return t(["Label"])}},TITLE:e=>{const{normalize:t}=e;return t(["Sports administration"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Update application configuration (maximum number of registered users, maximum files size)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Update email"])},USER:e=>{const{normalize:t,plural:n}=e;return n([t(["user"]),t(["users"])])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["The email address has been updated."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Add admin rights"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Remove admin rights"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["admin status"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["registration date"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["account status"])},USERNAME:e=>{const{normalize:t}=e;return t(["username"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["workout count"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Error. Please try again or contact the administrator."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["Email: valid email must be provided."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Error during gpx processing."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Error during gpx file parsing."])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Error on getting configuration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Error when updating configuration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Error, please try again or contact the administrator."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Error, registration is disabled."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["File extension not allowed."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["File size is greater than the allowed size."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Invalid credentials."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Provided data are invalid."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Invalid token, please log in again."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Invalid token, please log in again."])},"Network Error":e=>{const{normalize:t}=e;return t(["Network Error."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["The new email must be different than curent email"])},"no file part":e=>{const{normalize:t}=e;return t(["No file provided."])},"no selected file":e=>{const{normalize:t}=e;return t(["No selected file."])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Password: password and password confirmation don't match."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Provide a valid auth token."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Sorry, that username is already taken."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Sport does not exist."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Signature expired. Please log in again."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Successfully registered."])},"user does not exist":e=>{const{normalize:t}=e;return t(["User does not exist."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["A valid email must be provided for administrator contact"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["You can not delete your account, no other user has admin rights."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["You do not have permissions."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["previous"])},NEXT:e=>{const{normalize:t}=e;return t(["next"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Resend confirmation email"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Authorize"])},BACK:e=>{const{normalize:t}=e;return t(["Back"])},CANCEL:e=>{const{normalize:t}=e;return t(["Cancel"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Clear filters"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Delete my account"])},DISABLE:e=>{const{normalize:t}=e;return t(["Disable"])},EDIT:e=>{const{normalize:t}=e;return t(["Edit"])},ENABLE:e=>{const{normalize:t}=e;return t(["Enable"])},FILTER:e=>{const{normalize:t}=e;return t(["Filter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Log in"])},NO:e=>{const{normalize:t}=e;return t(["No"])},REGISTER:e=>{const{normalize:t}=e;return t(["Register"])},RESET:e=>{const{normalize:t}=e;return t(["Reset"])},SUBMIT:e=>{const{normalize:t}=e;return t(["Submit"])},YES:e=>{const{normalize:t}=e;return t(["Yes"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["about"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Confirmation"])},CONTACT:e=>{const{normalize:t}=e;return t(["contact"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["day"]),t(["days"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Displayed"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["documentation"])},HERE:e=>{const{normalize:t}=e;return t(["here"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Hidden"])},HOME:e=>{const{normalize:t}=e;return t(["Home"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["order by"])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["sort"])},ASC:e=>{const{normalize:t}=e;return t(["ascending"])},DESC:e=>{const{normalize:t}=e;return t(["descending"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["par page"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Total"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Dashboard"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["This month"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Error. Please try again or contact the administrator."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["The application seems to have encountered some issues.
Please try again later or contact the administrator."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Page not found"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Workout not found"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Something went wrong"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Add a new OAuth2 application"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["Id"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Secret"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Application description"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Issue at"])},NAME:e=>{const{normalize:t}=e;return t(["Application name"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["Redirect URL"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Scope"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to application configuration."])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to auth endpoints."])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to auth endpoints."])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to users endpoints."])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to users endpoints."])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to workouts endpoints."])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to workouts endpoints."])}},URL:e=>{const{normalize:t}=e;return t(["Application URL"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Application created successfully. Make sure to copy the secret now, it won't show up again."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete this app?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["The application ",n(r(0))," is requesting:"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["OAuth2 applications"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Authorize ",n(r(0))," to use your account?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["copy to the clipboard"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Delete application"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Add an application"])},NO_APP:e=>{const{normalize:t}=e;return t(["Application not found!"])},NO_APPS:e=>{const{normalize:t}=e;return t(["no applications"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["no description"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Revoke all tokens"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to revoke all tokens?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["All existing associated tokens have been revoked."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Transport)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Virtual)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Hiking"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["Mountain Biking"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["Mountain Biking (Electric)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Rowing"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Running"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Skiing (Alpine)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Skiing (Cross Country)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Snowshoes"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Walking"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistics"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["week"])},month:e=>{const{normalize:t}=e;return t(["month"])},year:e=>{const{normalize:t}=e;return t(["year"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Didn't received instructions?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Check your email. A new confirmation email has been sent to the address provided."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Already have an account?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete your account? All data will be deleted, this cannot be undone"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Current password"])},EMAIL:e=>{const{normalize:t}=e;return t(["Email"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Enter a valid email address."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Enter a password"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Filter on username"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["hide password"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Invalid token, please request a new password reset."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Language"])},LOG_IN:e=>{const{normalize:t}=e;return t(["log in"])},LOGIN:e=>{const{normalize:t}=e;return t(["Login"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Logout"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["New password"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["No users found."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Password"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["At least 8 characters required."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Forgot password?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Password reset"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Check your email. If your address is in our database, you'll received an email with a link to reset your password."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["weak"])},AVERAGE:e=>{const{normalize:t}=e;return t(["average"])},GOOD:e=>{const{normalize:t}=e;return t(["good"])},STRONG:e=>{const{normalize:t}=e;return t(["strong"])},LABEL:e=>{const{normalize:t}=e;return t(["password strength"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Avoid predictable letter substitutions like ","@"," for a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Avoid reversed spellings of common words."])},allUppercase:e=>{const{normalize:t}=e;return t(["Capitalize some, but not all letters."])},capitalization:e=>{const{normalize:t}=e;return t(["Capitalize more than the first letter."])},dates:e=>{const{normalize:t}=e;return t(["Avoid dates and years that are associated with you."])},recentYears:e=>{const{normalize:t}=e;return t(["Avoid recent years."])},associatedYears:e=>{const{normalize:t}=e;return t(["Avoid years that are associated with you."])},sequences:e=>{const{normalize:t}=e;return t(["Avoid common character sequences."])},repeated:e=>{const{normalize:t}=e;return t(["Avoid repeated words and characters."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Use longer keyboard patterns and change typing direction multiple times."])},anotherWord:e=>{const{normalize:t}=e;return t(["Add more words that are less common."])},useWords:e=>{const{normalize:t}=e;return t(["Use multiple words, but avoid common phrases."])},noNeed:e=>{const{normalize:t}=e;return t(["You can create strong passwords without using symbols, numbers, or uppercase letters."])},pwned:e=>{const{normalize:t}=e;return t(["If you use this password elsewhere, you should change it."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Your password have been updated. Click ",n(r(0))," to log in."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Account edition"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Ascent-related data (records, total)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Back to profile"])},BIO:e=>{const{normalize:t}=e;return t(["Bio"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Birth date"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Date display format"])},EDIT:e=>{const{normalize:t}=e;return t(["Edit profile"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Edit preferences"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Edit sports preferences"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Please ",n(r(0))," to change your email address again or contact the administrator"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["First name"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["First day of week"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Language"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Last name"])},LOCATION:e=>{const{normalize:t}=e;return t(["Location"])},MONDAY:e=>{const{normalize:t}=e;return t(["Monday"])},PICTURE:e=>{const{normalize:t}=e;return t(["Picture"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Picture edition"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Update picture"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Remove picture"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Preferences edition"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Profile edition"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Registration date"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Sports preferences edition"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Sunday"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["account"])},APPS:e=>{const{normalize:t}=e;return t(["apps"])},PICTURE:e=>{const{normalize:t}=e;return t(["picture"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["preferences"])},PROFILE:e=>{const{normalize:t}=e;return t(["profile"])},SPORTS:e=>{const{normalize:t}=e;return t(["sports"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["action"])},COLOR:e=>{const{normalize:t}=e;return t(["color"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["disabled by admin"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["active"])},LABEL:e=>{const{normalize:t}=e;return t(["label"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["stopped speed threshold"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Your account has been updated successfully. Please check your email to confirm your new email address."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Your account has been created successfully."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["A link to activate your account has been emailed to the address provided."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Your account has been updated successfully."])},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Units for distance"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Imperial system (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Metric system (m, km)"])}},TIMEZONE:e=>{const{normalize:t}=e;return t(["Timezone"])}},REGISTER:e=>{const{normalize:t}=e;return t(["Register"])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Resend account confirmation email"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Sorry, registration is disabled."])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Reset your password"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["show password"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["This user account is inactive."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["user picture"])},USERNAME:e=>{const{normalize:t}=e;return t(["Username"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(['3 to 30 characters required, only alphanumeric characters and the underscore character "_" allowed.'])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Add a workout"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["analysis"])},ASCENT:e=>{const{normalize:t}=e;return t(["ascent"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["ave. speed"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["average speed"])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["back to workout"])},DATE:e=>{const{normalize:t}=e;return t(["date"])},DESCENT:e=>{const{normalize:t}=e;return t(["descent"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["display filters"])},DISTANCE:e=>{const{normalize:t}=e;return t(["distance"])},DURATION:e=>{const{normalize:t}=e;return t(["duration"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Edit the workout"])},ELEVATION:e=>{const{normalize:t}=e;return t(["elevation"])},END:e=>{const{normalize:t}=e;return t(["end"])},FROM:e=>{const{normalize:t}=e;return t(["from"])},GPX_FILE:e=>{const{normalize:t}=e;return t([".gpx file"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["hide filters"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Latest workouts"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Load more workouts"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["max. altitude"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["max files"])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["max size"])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["max. speed"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["min. altitude"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["No next segment"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Next workout"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["data from gpx, without any cleaning"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["No file provided"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["no folder inside"])},NO_MAP:e=>{const{normalize:t}=e;return t(["No map"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["No next segment"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["No next workout"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["No notes"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["No previous segment"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["No previous workout"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["No records."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["No workouts."])},NOTES:e=>{const{normalize:t}=e;return t(["notes"])},PAUSES:e=>{const{normalize:t}=e;return t(["pauses"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Previous segment"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Previous workout"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["record"]),t(["records"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Ave. speed"])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Farthest distance"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Highest ascent"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Longest duration"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Max. speed"])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["remaining characters"])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["segment"]),t(["segments"])])},SPEED:e=>{const{normalize:t}=e;return t(["speed"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["sport"]),t(["sports"])])},START:e=>{const{normalize:t}=e;return t(["start"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Start and finish"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["start elevation axis at zero"])},TITLE:e=>{const{normalize:t}=e;return t(["title"])},TO:e=>{const{normalize:t}=e;return t(["to"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["total duration"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Upload one!"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["humidity"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["temperature"])},WIND:e=>{const{normalize:t}=e;return t(["wind"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNE"])},NE:e=>{const{normalize:t}=e;return t(["NE"])},ENE:e=>{const{normalize:t}=e;return t(["ENE"])},E:e=>{const{normalize:t}=e;return t(["E"])},ESE:e=>{const{normalize:t}=e;return t(["ESE"])},SE:e=>{const{normalize:t}=e;return t(["SE"])},SSE:e=>{const{normalize:t}=e;return t(["SSE"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSW"])},SW:e=>{const{normalize:t}=e;return t(["SW"])},WSW:e=>{const{normalize:t}=e;return t(["WSW"])},W:e=>{const{normalize:t}=e;return t(["W"])},WNW:e=>{const{normalize:t}=e;return t(["WNW"])},NW:e=>{const{normalize:t}=e;return t(["NW"])},NNW:e=>{const{normalize:t}=e;return t(["NNW"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["clear day"])},"clear-night":e=>{const{normalize:t}=e;return t(["clear night"])},cloudy:e=>{const{normalize:t}=e;return t(["cloudy"])},fog:e=>{const{normalize:t}=e;return t(["fog"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["partly cloudy day"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["partly cloudy night"])},rain:e=>{const{normalize:t}=e;return t(["rain"])},sleet:e=>{const{normalize:t}=e;return t(["sleet"])},snow:e=>{const{normalize:t}=e;return t(["snow"])},wind:e=>{const{normalize:t}=e;return t(["wind"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["with .gpx file"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["without .gpx file"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["workout"]),t(["workouts"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["workout date"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete this workout?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t([".zip file"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["or .zip file containing .gpx files"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},6625:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Contacter l'administrateur"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee est un tracker d'activités sportives (en extérieur)."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["sous licence ",n(r(0))," (en) "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Code source (en)"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Action"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Activer le compte"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Actif"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Ajouter/retirer des droits d'administration, supprimer des comptes utilisateurs."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Application"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Email de l'administrateur pour contact "])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Nombre maximum d'utilisateurs actifs "])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["Si égal à 0, pas limite d'inscription"])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Taille max. des archives zip (en Mo) "])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["non renseigné"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Taille max. des fichiers (en Mo) "])},TITLE:e=>{const{normalize:t}=e;return t(["Configuration de l'application"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Nombre max. de fichiers dans une archive zip "])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Revenir à l'admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Êtes-vous sûr de vouloir supprimer le compte de l'utilisateur ",n(r(0))," ? Toutes les données seront définitivement."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Êtes-vous sûr de vouloir réinitialiser le mot de passe de l'utilisateur ",n(r(0))," ?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Adresse email actuelle"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Supprimer l'utilisateur"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["L'envoi d'emails est désactivé."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Activer/désactiver des sports."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["Nouvelle adresse email"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Le mot de passe a été réinitialisé."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Les inscriptions sont actuellement désactivées."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Les inscriptions sont actuellement activées."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Réinit. le mot de passe"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Actif"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["des séances existent"])},IMAGE:e=>{const{normalize:t}=e;return t(["Image"])},LABEL:e=>{const{normalize:t}=e;return t(["Label"])}},TITLE:e=>{const{normalize:t}=e;return t(["Administration - Sports"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Configurer l'application (nombre maximum d'utilisateurs inscrits, taille maximale des fichers)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Changer l'email"])},USER:e=>{const{normalize:t,plural:n}=e;return n([t(["utilisateur"]),t(["utilisateurs"])])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["L'adresse email a été mise à jour."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Ajouter les droits d'admin"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Retirer les droits d'admin"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["status administrateur"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["date d'inscription"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["statut du compte"])},USERNAME:e=>{const{normalize:t}=e;return t(["nom d'utilisateur"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["nombre de séances"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Erreur. Veuillez réessayer ou contacter l'administrateur."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["Courriel : une adresse électronique valide doit être fournie."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Erreur lors du traitement du fichier gpx."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Erreur lors de l'analyse du fichier."])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Erreur lors de la récupération de la configuration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Erreur lors de la mise à jour de la configuration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Erreur, veuillez réessayer ou contacter l'administrateur."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Erreur, les inscriptions sont désactivées."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["Extension de fichier non autorisée."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["La taille du fichier est supérieure à la limite autorisée."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Identifiants invalides."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Données fournies incorrectes."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Jeton de connexion invalide, merci de vous reconnecter."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Jeton de connexion, merci de vous reconnecter."])},"no file part":e=>{const{normalize:t}=e;return t(["Pas de fichier fourni."])},"no selected file":e=>{const{normalize:t}=e;return t(["Pas de fichier sélectionné."])},"Network Error":e=>{const{normalize:t}=e;return t(["Erreur réseau."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["La nouvelle addresse électronique doit être differente de l'adresse actuelle"])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Mot de passe : les mots de passe saisis sont différents."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Merci de fournir un jeton de connexion valide."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Ce sport n'existe pas."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Signature expirée. Merci de vous reconnecter."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Désolé, ce nom d'utilisateur est déjà utilisé."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Inscription validée."])},"user does not exist":e=>{const{normalize:t}=e;return t(["L'utilisateur n'existe pas."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["Une adresse électronique doit être fournie pour le contact de l'administrateur"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["Vous ne pouvez pas supprimer votre compte, aucun autre utilisateur n'a des droits d'administration."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["Vous n'avez pas les permissions nécessaires."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["précédent"])},NEXT:e=>{const{normalize:t}=e;return t(["suivant"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Renvoyer le message de confirmation"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Autoriser"])},BACK:e=>{const{normalize:t}=e;return t(["Retour"])},CANCEL:e=>{const{normalize:t}=e;return t(["Annuler"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Réinitialiser"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Supprimer mon compte"])},DISABLE:e=>{const{normalize:t}=e;return t(["Désactiver"])},EDIT:e=>{const{normalize:t}=e;return t(["Modifier"])},ENABLE:e=>{const{normalize:t}=e;return t(["Activer"])},FILTER:e=>{const{normalize:t}=e;return t(["Filtrer"])},LOGIN:e=>{const{normalize:t}=e;return t(["Se connecter"])},NO:e=>{const{normalize:t}=e;return t(["Non"])},REGISTER:e=>{const{normalize:t}=e;return t(["S'inscrire"])},RESET:e=>{const{normalize:t}=e;return t(["Réinit."])},SUBMIT:e=>{const{normalize:t}=e;return t(["Valider"])},YES:e=>{const{normalize:t}=e;return t(["Oui"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["à propos"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Confirmation"])},CONTACT:e=>{const{normalize:t}=e;return t(["contact"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["jour"]),t(["jours"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Affiché"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["documentation (en)"])},HERE:e=>{const{normalize:t}=e;return t(["ici"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Masqué"])},HOME:e=>{const{normalize:t}=e;return t(["Accueil"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["trier par "])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["tri"])},ASC:e=>{const{normalize:t}=e;return t(["ascendant"])},DESC:e=>{const{normalize:t}=e;return t(["descendant"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["par page"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Total"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Tableau de bord"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["Ce mois-ci"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Erreur. Veuillez réessayer ou contacter l'administrateur."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["L'application semble rencontrer quelques problèmes.
Veuillez réessayer plus tard ou contacter l'administrateur."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Page introuvable"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Séance introuvable"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Une erreur s'est produite"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Ajouter une nouvelle application OAuth2"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["Identifiant"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Secret"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Description de l'application"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Créée le"])},NAME:e=>{const{normalize:t}=e;return t(["Nom de l'application"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["URL de redirection"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Scope"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture à la configuration de l'application."])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes auth."])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes auth."])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes users."])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes users."])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes workouts."])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes workouts."])}},URL:e=>{const{normalize:t}=e;return t(["URL de l'application"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Application créée avec succès. Assurez-vous de copier le secret maintenant, il ne s'affichera plus."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr de vouloir supprimer cette application ?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["L'application ",n(r(0))," demande les accès suivants :"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["Applications OAuth2"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Autoriser ",n(r(0))," à utiliser votre compte ?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["copier dans le presse papier"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Supprimer l'application"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Ajouter une application"])},NO_APP:e=>{const{normalize:t}=e;return t(["Application introuvable !"])},NO_APPS:e=>{const{normalize:t}=e;return t(["pas de applications"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["pas de description"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Révoquer tous les jetons"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr de vouloir révoquer tous les jetons ?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["Tous les jetons associés existants ont été révoqués."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Transport)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Virtuel)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Randonnée"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["VTT"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["VTT (Électrique)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Aviron"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Course"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Ski (Alpin)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Ski (Randonnée)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Raquettes"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Marche"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistiques"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["semaine"])},month:e=>{const{normalize:t}=e;return t(["mois"])},year:e=>{const{normalize:t}=e;return t(["année"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Vous n'avez pas reçu les instructions ?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Vérifiez vos courriels. Un nouveau courriel de confirmation a été envoyé à l'adresse électronique fournie."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Vous avez déjà un compte ?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr·e de vouloir supprimer votre compte ? Toutes les données seront définitivement effacés"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Mot de passe actuel"])},EMAIL:e=>{const{normalize:t}=e;return t(["Courriel"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Saisissez une adresse électronique valide."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Saisissez un mot de passe"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Filtrer sur le nom d'utilisateur"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["masquer le mot de passe"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Jeton invalide, veuillez demander une nouvelle réinitialisation de mot de passe."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Langue"])},LOG_IN:e=>{const{normalize:t}=e;return t(["connecter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Se connecter"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Se déconnecter"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["Nouveau mot de passe"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["Aucun utilisateur trouvé."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Mot de passe"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["8 caractères minimum."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Mot de passe oublié ?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Réinitialisation du mot de passe"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Vérifiez vos courriels. Si vote adresse est dans notre base de données, vous recevrez un courriel avec un lien pour réinitialiser votre mot de passe."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["faible"])},AVERAGE:e=>{const{normalize:t}=e;return t(["moyenne"])},GOOD:e=>{const{normalize:t}=e;return t(["bonne"])},STRONG:e=>{const{normalize:t}=e;return t(["forte"])},LABEL:e=>{const{normalize:t}=e;return t(["robustesse du mot de passe"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Évitez les substitutions de lettres prévisibles comme ","@"," pour a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Évitez les orthographes inversées des mots courants."])},allUppercase:e=>{const{normalize:t}=e;return t(["Mettez quelques lettres en majuscules, mais pas toutes."])},capitalization:e=>{const{normalize:t}=e;return t(["Capitalisez mais pas seulement la première lettre."])},dates:e=>{const{normalize:t}=e;return t(["Évitez les dates et les années qui vous sont associées. (ex : date ou année de naissance)."])},recentYears:e=>{const{normalize:t}=e;return t(["Évitez les dernières années."])},associatedYears:e=>{const{normalize:t}=e;return t(["Évitez les années qui vous sont associées. (ex : date de naissance)."])},sequences:e=>{const{normalize:t}=e;return t(["Évitez les séquences de caractères courantes."])},repeated:e=>{const{normalize:t}=e;return t(["Évitez les mots et les caractères répétés."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Utilisez des motifs de clavier plus longs et changez de sens de frappe plusieurs fois."])},anotherWord:e=>{const{normalize:t}=e;return t(["Ajoutez des mots moins courants."])},useWords:e=>{const{normalize:t}=e;return t(["Utilisez plusieurs mots, mais évitez les phrases courantes."])},noNeed:e=>{const{normalize:t}=e;return t(["Vous pouvez créer des mots de passe forts sans utiliser de symboles, de chiffres ou de lettres majuscules."])},pwned:e=>{const{normalize:t}=e;return t(["Si vous utilisez ce mot de passe ailleurs, vous devriez le modifier."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Votre mot de passe a été mis à jour. Cliquez ",n(r(0))," pour vous connecter."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour du compte"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Données relatives au dénivelé positif (records, total)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Revenir au profil"])},BIO:e=>{const{normalize:t}=e;return t(["Bio"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Date de naissance"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Format d'affichage de la date"])},EDIT:e=>{const{normalize:t}=e;return t(["Modifier le profil"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Modifier les préférences"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Modifier les préférences des sports"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Veuillez vous ",n(r(0))," pour changer de nouveau votre adresse électronique ou contacter l'administrateur"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["Premier jour de la semaine"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["Prénom"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Langue"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Nom"])},LOCATION:e=>{const{normalize:t}=e;return t(["Lieu"])},MONDAY:e=>{const{normalize:t}=e;return t(["Lundi"])},PICTURE:e=>{const{normalize:t}=e;return t(["Image de profil"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour de l'image de profil"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Mettre à jour l'image"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Supprimer"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour des préférences"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour du profil"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Date d'inscription"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour des préférences des sports"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Dimanche"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["compte"])},APPS:e=>{const{normalize:t}=e;return t(["apps"])},PICTURE:e=>{const{normalize:t}=e;return t(["image"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["préférences"])},PROFILE:e=>{const{normalize:t}=e;return t(["profil"])},SPORTS:e=>{const{normalize:t}=e;return t(["sports"])}},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Unités pour les distances"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Système impérial (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Système métrique (m, km)"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["action"])},COLOR:e=>{const{normalize:t}=e;return t(["couleur"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["désactivé par l'administrateur"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["actif"])},LABEL:e=>{const{normalize:t}=e;return t(["label"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["seuil de vitesse arrêtée"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Votre compte a été modifié avec succès. Veuillez vérifier votre boîte de réception pour valider votre nouvelle adresse électronique."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Votre compte a été créé avec succès."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["Un lien pour activer votre compte a été envoyé à l'adresse électronique fournie."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Votre compte a été modifié avec succès."])},TIMEZONE:e=>{const{normalize:t}=e;return t(["Fuseau horaire"])}},REGISTER:e=>{const{normalize:t}=e;return t(["S'inscrire"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Désolé, les inscriptions sont désactivées."])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Envoyer à nouveau le courriel de confirmation de compte"])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Réinitialiser votre mot de passe"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["afficher le mot de passe"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["Le compte de cet utilisateur est inactif."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["photo de l'utilisateur"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nom d'utilisateur"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(["3 à 30 caractères requis, seuls les caractères alphanumériques et le caractère _ sont autorisés."])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Ajouter une séance"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["analyse"])},ASCENT:e=>{const{normalize:t}=e;return t(["dénivelé positif"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["vitesse moyenne"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["vitesse moy."])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["revenir à la séance"])},DATE:e=>{const{normalize:t}=e;return t(["date"])},DESCENT:e=>{const{normalize:t}=e;return t(["dénivelé négatif"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["afficher les filtres"])},DISTANCE:e=>{const{normalize:t}=e;return t(["distance"])},DURATION:e=>{const{normalize:t}=e;return t(["durée"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Modifier la séance"])},ELEVATION:e=>{const{normalize:t}=e;return t(["altitude"])},END:e=>{const{normalize:t}=e;return t(["fin"])},FROM:e=>{const{normalize:t}=e;return t(["à partir de"])},GPX_FILE:e=>{const{normalize:t}=e;return t(["fichier .gpx"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["masquer les filtres"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Séances récentes"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Charger les séances suivantes"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["altitude max"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["fichiers max. "])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["taille max. "])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["vitesse max"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["altitude min"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Segment suivant"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Séance suivante"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["données issues du fichier gpx, sans correction"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["Pas de fichier fourni"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["pas de répertoire"])},NO_MAP:e=>{const{normalize:t}=e;return t(["Pas de carte"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Pas de segment suivant"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Pas de séance suivante"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["Pas de notes"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Pas de segment précédent"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Pas de séance précédente"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["Pas de records."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["Pas de séances."])},NOTES:e=>{const{normalize:t}=e;return t(["notes"])},PAUSES:e=>{const{normalize:t}=e;return t(["pauses"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Segment précédent"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Séance précédente"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["record"]),t(["records"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Vitesse moy."])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Distance la + longue"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Dénivelé positif le + élevé"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Durée la + longue"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Vitesse max."])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["nombre de caractères restants "])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["segment"]),t(["segments"])])},SPEED:e=>{const{normalize:t}=e;return t(["vitesse"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["sport"]),t(["sports"])])},START:e=>{const{normalize:t}=e;return t(["début"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Départ et arrivée"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["démarrer l'axe de l'altitude à 0"])},TITLE:e=>{const{normalize:t}=e;return t(["titre"])},TO:e=>{const{normalize:t}=e;return t(["jusqu'au"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["durée totale"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Ajoutez votre première séance !"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["humidité"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["température"])},WIND:e=>{const{normalize:t}=e;return t(["vent"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNE"])},NE:e=>{const{normalize:t}=e;return t(["NE"])},ENE:e=>{const{normalize:t}=e;return t(["ENE"])},E:e=>{const{normalize:t}=e;return t(["E"])},ESE:e=>{const{normalize:t}=e;return t(["ESE"])},SE:e=>{const{normalize:t}=e;return t(["SE"])},SSE:e=>{const{normalize:t}=e;return t(["SSE"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSO"])},SW:e=>{const{normalize:t}=e;return t(["SO"])},WSW:e=>{const{normalize:t}=e;return t(["OSO"])},W:e=>{const{normalize:t}=e;return t(["O"])},WNW:e=>{const{normalize:t}=e;return t(["ONO"])},NW:e=>{const{normalize:t}=e;return t(["NO"])},NNW:e=>{const{normalize:t}=e;return t(["NNO"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["ensoleillé"])},"clear-night":e=>{const{normalize:t}=e;return t(["nuit claire"])},cloudy:e=>{const{normalize:t}=e;return t(["nuageux"])},fog:e=>{const{normalize:t}=e;return t(["brouillard"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["partiellement nuageux"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["nuit partiellement nuageuse"])},rain:e=>{const{normalize:t}=e;return t(["pluie"])},sleet:e=>{const{normalize:t}=e;return t(["neige fondue"])},snow:e=>{const{normalize:t}=e;return t(["neige"])},wind:e=>{const{normalize:t}=e;return t(["venteux"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["avec un fichier .gpx"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["sans fichier .gpx"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["séance"]),t(["séances"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["date de la séance"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Etes-vous sûr de vouloir supprimer cette séance ?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t(["archive .zip"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["ou une archive .zip contenant des fichiers .gpx"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},8891:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={},a={},o={},s={},i={},l={},c={},u={},d={},m={},_={},E={},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},4970:function(e,t,n){"use strict";var r=n(6775),a=n(6429),o=n(9963),s=n(2343),i=n(5205);(0,i.z)("/service-worker.js",{ready(){console.log("App is being served from cache by a service worker.\nFor more details, visit https://goo.gl/AFskqB")},registered(){console.log("Service worker has been registered.")},cached(){console.log("Content has been cached for offline use.")},updatefound(){console.log("New content is downloading.")},updated(){console.log("New content is available; please refresh.")},offline(){console.log("No internet connection found. App is running in offline mode.")},error(e){console.error("Error during service worker registration:",e)}});var l=n(6252),c=n(2262),u=n(3577);const d=e=>((0,l.dD)("data-v-2c73279e"),e=e(),(0,l.Cn)(),e),m={id:"footer"},_={class:"footer-items"},E={class:"footer-item"},S=d((()=>(0,l._)("strong",null,"FitTrackee",-1))),T=d((()=>(0,l._)("div",{class:"footer-item bullet"},"•",-1))),p={class:"footer-item"},A={key:0,class:"footer-item bullet"},O={key:1,class:"footer-item"},R=["href"],I=d((()=>(0,l._)("div",{class:"footer-item bullet"},"•",-1))),U={class:"footer-item"},g={href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer"};var N=(0,l.aZ)({__name:"Footer",props:{version:null,adminContact:null},setup(e){const t=e,{adminContact:n,version:r}=(0,c.BK)(t);return(e,t)=>{const a=(0,l.up)("router-link");return(0,l.wg)(),(0,l.iD)("div",m,[(0,l._)("div",_,[(0,l._)("div",E,[S,(0,l.Uk)(" v"+(0,u.zw)((0,c.SU)(r)),1)]),T,(0,l._)("div",p,[(0,l.Wm)(a,{to:"/about"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("common.ABOUT")),1)])),_:1})]),(0,c.SU)(n)?((0,l.wg)(),(0,l.iD)("div",A,"•")):(0,l.kq)("",!0),(0,c.SU)(n)?((0,l.wg)(),(0,l.iD)("div",O,[(0,l._)("a",{href:`mailto:${(0,c.SU)(n)}`},(0,u.zw)(e.$t("common.CONTACT")),9,R)])):(0,l.kq)("",!0),I,(0,l._)("div",U,[(0,l._)("a",g,(0,u.zw)(e.$t("common.DOCUMENTATION")),1)])])])}}}),z=n(3744);const h=(0,z.Z)(N,[["__scopeId","data-v-2c73279e"]]);var w=h,f=(n(7658),n(6595)),v=n(5801),C=n(9917),D=n(6287);const k=e=>((0,l.dD)("data-v-95c1cc02"),e=e(),(0,l.Cn)(),e),P={id:"nav"},L={class:"nav-container"},M={class:"nav-app-name"},b={class:"nav-items-close"},y=k((()=>(0,l._)("div",{class:"app-name"},"FitTrackee",-1))),G={key:0,class:"nav-items-group"},F=k((()=>(0,l._)("div",{class:"nav-item nav-separator"},null,-1))),W={class:"nav-items-user-menu"},K={key:0,class:"nav-items-group"},Y={class:"nav-item nav-profile-img"},x={key:1,class:"nav-items-group"},$=k((()=>(0,l._)("i",{class:"fa fa-language"},null,-1)));var B=(0,l.aZ)({__name:"NavBar",emits:["menuInteraction"],setup(e,{emit:t}){const n=(0,C.o)(),r=(0,l.Fl)((()=>n.getters[v.YN.GETTERS.AUTH_USER_PROFILE])),a=(0,l.Fl)((()=>n.getters[v.YN.GETTERS.IS_AUTHENTICATED])),o=(0,l.Fl)((()=>n.getters[v.SY.GETTERS.LANGUAGE])),s=(0,c.iH)(!1);function i(){s.value=!0,t("menuInteraction",!0)}function d(){s.value=!1,t("menuInteraction",!1)}function m(e){n.dispatch(v.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,e.value.toString())}function _(){n.dispatch(v.YN.ACTIONS.LOGOUT)}return(e,t)=>{const n=(0,l.up)("router-link"),E=(0,l.up)("Dropdown");return(0,l.wg)(),(0,l.iD)("div",P,[(0,l._)("div",L,[(0,l._)("div",M,[(0,l._)("div",{class:"nav-item app-name",onClick:t[0]||(t[0]=t=>e.$router.push("/"))}," FitTrackee ")]),(0,l._)("div",{class:(0,u.C_)(["nav-icon-open",{"menu-open":s.value}])},[(0,l._)("i",{class:"fa fa-bars hamburger-icon",onClick:t[1]||(t[1]=e=>i())})],2),(0,l._)("div",{class:(0,u.C_)(["nav-items",{"menu-open":s.value}])},[(0,l._)("div",b,[y,(0,l._)("i",{class:(0,u.C_)(["fa fa-close close-icon nav-item",{"menu-closed":!s.value}]),onClick:t[2]||(t[2]=e=>d())},null,2)]),(0,l._)("div",{class:"nav-items-app-menu",onClick:t[3]||(t[3]=e=>d())},[(0,c.SU)(a)?((0,l.wg)(),(0,l.iD)("div",G,[(0,l.Wm)(n,{class:"nav-item",to:"/"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("dashboard.DASHBOARD")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/workouts"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,u.kC)(e.$t("workouts.WORKOUT",2))),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/statistics"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("statistics.STATISTICS")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/workouts/add"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("workouts.ADD_WORKOUT")),1)])),_:1}),(0,c.SU)(a)&&(0,c.SU)(r).admin?((0,l.wg)(),(0,l.j4)(n,{key:0,class:"nav-item",to:"/admin"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("admin.ADMIN")),1)])),_:1})):(0,l.kq)("",!0),F])):(0,l.kq)("",!0)]),(0,l._)("div",W,[(0,c.SU)(a)?((0,l.wg)(),(0,l.iD)("div",K,[(0,l._)("div",Y,[(0,l.Wm)(f.Z,{user:(0,c.SU)(r)},null,8,["user"])]),(0,l.Wm)(n,{class:"nav-item",to:"/profile",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,c.SU)(r).username),1)])),_:1}),(0,l._)("div",{class:"nav-item nav-link",onClick:_},(0,u.zw)(e.$t("user.LOGOUT")),1)])):((0,l.wg)(),(0,l.iD)("div",x,[(0,l.Wm)(n,{class:"nav-item",to:"/login",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("user.LOGIN")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/register",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("user.REGISTER")),1)])),_:1})])),(0,c.SU)(D.mT)&&(0,c.SU)(o)?((0,l.wg)(),(0,l.j4)(E,{key:2,class:"nav-item",options:(0,c.SU)(D.mT),selected:(0,c.SU)(o),onSelected:m},{default:(0,l.w5)((()=>[$])),_:1},8,["options","selected"])):(0,l.kq)("",!0)])],2)])])}}});const Z=(0,z.Z)(B,[["__scopeId","data-v-95c1cc02"]]);var H=Z,q=n(7167);const V={id:"no-config"},j={class:"error-page"},X={class:"error-img"},J=["innerHTML"];var Q=(0,l.aZ)({__name:"NoConfig",setup(e){return(e,t)=>((0,l.wg)(),(0,l.iD)("div",V,[(0,l._)("div",j,[(0,l._)("div",X,[(0,l.Wm)(q.Z)]),(0,l._)("p",{class:"error-message",innerHTML:e.$t("error.APP_ERROR")},null,8,J)])]))}});const ee=(0,z.Z)(Q,[["__scopeId","data-v-47759238"]]);var te=ee;const ne=(0,l._)("div",{id:"top"},null,-1),re={key:0,class:"app-container"},ae={class:"app-loading"},oe={class:"container scroll"},se=(0,l._)("i",{class:"fa fa-chevron-up","aria-hidden":"true"},null,-1),ie=[se];var le=(0,l.aZ)({__name:"App",setup(e){const t=(0,C.o)(),n=(0,l.Fl)((()=>t.getters[v.SY.GETTERS.APP_CONFIG])),r=(0,l.Fl)((()=>t.getters[v.SY.GETTERS.APP_LOADING])),a=(0,c.iH)(!1),o=(0,c.iH)(!1);function s(e){a.value=e}function i(e){return e.getBoundingClientRect().top=0}function d(){window.onscroll=()=>{const e=document.querySelector("#bottom");o.value=null!==e&&i(e)}}function m(){window.scrollTo({top:0,behavior:"smooth"}),setTimeout((()=>{o.value=!1}),300)}function _(){let e="en";try{const t=navigator.language.split("-")[0];t in D.v1&&(e=t)}catch(n){e="en"}t.dispatch(v.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,e)}return(0,l.wF)((()=>{_(),t.dispatch(v.SY.ACTIONS.GET_APPLICATION_CONFIG)})),(0,l.bv)((()=>d())),(e,t)=>{const i=(0,l.up)("Loader"),d=(0,l.up)("router-view");return(0,l.wg)(),(0,l.iD)(l.HY,null,[ne,(0,l.Wm)(H,{onMenuInteraction:s}),(0,c.SU)(r)?((0,l.wg)(),(0,l.iD)("div",re,[(0,l._)("div",ae,[(0,l.Wm)(i)])])):((0,l.wg)(),(0,l.iD)("div",{key:1,class:(0,u.C_)(["app-container",{"hide-scroll":a.value}])},[(0,c.SU)(n)?((0,l.wg)(),(0,l.j4)(d,{key:0})):((0,l.wg)(),(0,l.j4)(te,{key:1}))],2)),(0,l._)("div",oe,[(0,l._)("div",{class:(0,u.C_)(["scroll-button",{"display-button":o.value}]),onClick:m},ie,2)]),(0,c.SU)(n)?((0,l.wg)(),(0,l.j4)(w,{key:2,version:(0,c.SU)(n)?(0,c.SU)(n).version:"",adminContact:(0,c.SU)(n).admin_contact},null,8,["version","adminContact"])):(0,l.kq)("",!0)],64)}}});const ce=le;var ue=ce,de=n(2540),me=n(5073),_e=n(2894);const Ee={class:"alert-message"},Se=["innerHTML"];var Te=(0,l.aZ)({__name:"AlertMessage",props:{message:null},setup(e){const t=e,{message:n}=(0,c.BK)(t);return(e,t)=>((0,l.wg)(),(0,l.iD)("div",Ee,[(0,l._)("div",{innerHTML:e.$t((0,c.SU)(n))},null,8,Se)]))}});const pe=(0,z.Z)(Te,[["__scopeId","data-v-69d7e4ff"]]);var Ae=pe,Oe=n(2531);const Re={class:"custom-textarea"},Ie=["id","name","maxLenght","disabled"],Ue={class:"remaining-chars"};var ge=(0,l.aZ)({__name:"CustomTextArea",props:{name:null,charLimit:{default:500},disabled:{type:Boolean,default:!1},input:{default:""}},emits:["updateValue"],setup(e,{emit:t}){const n=e,r=(0,c.iH)("");function a(e){t("updateValue",e.target.value)}return(0,l.YP)((()=>n.input),(e=>{r.value=null===e?"":e})),(t,n)=>((0,l.wg)(),(0,l.iD)("div",Re,[(0,l.wy)((0,l._)("textarea",{id:e.name,name:e.name,maxLenght:e.charLimit,disabled:e.disabled,"onUpdate:modelValue":n[0]||(n[0]=e=>r.value=e),onInput:a},null,40,Ie),[[o.nr,r.value]]),(0,l._)("div",Ue,(0,u.zw)(t.$t("workouts.REMAINING_CHARS"))+": "+(0,u.zw)(r.value.length)+"/"+(0,u.zw)(e.charLimit),1)]))}});const Ne=(0,z.Z)(ge,[["__scopeId","data-v-8cf5cc64"]]);var ze=Ne,he=n(3649),we=(0,l.aZ)({__name:"Distance",props:{distance:null,unitFrom:null,useImperialUnits:{type:Boolean},digits:{default:2},displayUnit:{type:Boolean,default:!0},speed:{type:Boolean,default:!1},strong:{type:Boolean,default:!1}},setup(e){const t=e,{digits:n,displayUnit:r,distance:a,speed:o,strong:s,unitFrom:i,useImperialUnits:d}=(0,c.BK)(t),m=(0,l.Fl)((()=>d.value?he.Dl[i.value].defaultTarget:i.value)),_=(0,l.Fl)((()=>d.value?(0,he.sC)(a.value,i.value,m.value,n.value):parseFloat(a.value.toFixed(n.value))));return(e,t)=>((0,l.wg)(),(0,l.iD)(l.HY,null,[(0,l._)("span",{class:(0,u.C_)(["distance",{strong:(0,c.SU)(s)}])},(0,u.zw)((0,c.SU)(_)),3),(0,l.Uk)(" "+(0,u.zw)(" ")+" "),(0,c.SU)(r)?((0,l.wg)(),(0,l.iD)("span",{key:0,class:(0,u.C_)(["unit",{strong:(0,c.SU)(s)}])},(0,u.zw)((0,c.SU)(m))+(0,u.zw)((0,c.SU)(o)?"/h":""),3)):(0,l.kq)("",!0)],64))}});const fe=(0,z.Z)(we,[["__scopeId","data-v-f46ff1d6"]]);var ve=fe,Ce=n(2201);const De={class:"dropdown-wrapper"},ke={key:0,class:"dropdown-list"},Pe=["onClick"];var Le=(0,l.aZ)({__name:"Dropdown",props:{options:null,selected:null},emits:{selected:e=>e},setup(e,{emit:t}){const n=e,r=(0,Ce.yj)(),a=(0,c.iH)(!1),o=n.options.map((e=>e));function s(){a.value=!a.value}function i(e){t("selected",e),a.value=!1}return(0,l.YP)((()=>r.path),(()=>a.value=!1)),(t,n)=>((0,l.wg)(),(0,l.iD)("div",De,[(0,l._)("div",{class:"dropdown-selected",onClick:s},[(0,l.WI)(t.$slots,"default")]),a.value?((0,l.wg)(),(0,l.iD)("ul",ke,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)((0,c.SU)(o),((t,n)=>((0,l.wg)(),(0,l.iD)("li",{class:(0,u.C_)(["dropdown-item",{selected:t.value===e.selected}]),key:n,onClick:e=>i(t)},(0,u.zw)(t.label),11,Pe)))),128))])):(0,l.kq)("",!0)]))}});const Me=(0,z.Z)(Le,[["__scopeId","data-v-2d3b4eac"]]);var be=Me;const ye={class:"error-message"},Ge={key:0},Fe={key:1};var We=(0,l.aZ)({__name:"ErrorMessage",props:{message:null},setup(e){const t=e,{message:n}=(0,c.BK)(t);return(e,t)=>((0,l.wg)(),(0,l.iD)("div",ye,[Array.isArray((0,c.SU)(n))?((0,l.wg)(),(0,l.iD)("ul",Ge,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)((0,c.SU)(n),((t,n)=>((0,l.wg)(),(0,l.iD)("li",{key:n},(0,u.zw)(e.$t(t)),1)))),128))])):((0,l.wg)(),(0,l.iD)("div",Fe,(0,u.zw)(e.$t((0,c.SU)(n))),1))]))}});const Ke=(0,z.Z)(We,[["__scopeId","data-v-2659a79a"]]);var Ye=Ke;const xe={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve"},$e=(0,l._)("desc",{id:"cyclingSportDescription"}," silhouette of a person riding a bicycle ",-1),Be=(0,l._)("g",null,[(0,l._)("path",{d:"M321.097,112.359c20.973,12.338,47.985,5.315,60.293-15.652c12.34-20.973,5.35-47.974-15.623-60.304\n\t\tc-21.009-12.332-47.99-5.317-60.314,15.65C293.129,73.036,300.103,100.027,321.097,112.359z"}),(0,l._)("path",{d:"M393.081,264.102c-2.414,0-4.8,0.194-7.169,0.362l-14.431-71.605l4.702-1.757c10.666-3.987,16.093-15.868,12.098-26.54\n\t\tc-3.994-10.681-15.946-16.084-26.531-12.09l-51.823,19.38l-2.321-18.864c6.3-13.193,5.541-29.78-4.767-41.482\n\t\tc-21.224-24.092-47.12-12.508-55.191-5.976l-106.884,86.555l0.016,0.024c-3.319,2.893-6.089,6.485-7.86,10.842\n\t\tc-2.191,5.396-2.596,11.067-1.564,16.384c-8.503,0.669-15.255,7.571-15.255,16.246c0,9.085,7.346,16.44,16.432,16.48l-6.797,15.906\n\t\tc-8.62-2.465-17.674-3.866-27.066-3.866C44.27,264.102,0,308.354,0,362.754c0,54.403,44.27,98.663,98.668,98.663\n\t\tc54.403,0,98.652-44.26,98.652-98.663c0-36.228-19.683-67.867-48.858-85.024l10.957-25.652h17.767l60.281,24.462l-32.201,52.773\n\t\tc-8.297,13.612-3.994,31.382,9.615,39.685c4.691,2.86,9.878,4.229,15,4.229c9.729,0,19.234-4.929,24.677-13.838l29.339-48.095\n\t\tl19.072,11.511c-5.447,12.227-8.54,25.726-8.54,39.95c0,54.403,44.254,98.663,98.652,98.663c54.402,0,98.656-44.26,98.656-98.663\n\t\tC491.737,308.354,447.483,264.102,393.081,264.102z M98.668,436.671c-40.756,0-73.923-33.161-73.923-73.917\n\t\tc0-40.756,33.167-73.909,73.923-73.909c5.944,0,11.649,0.896,17.188,2.224l-20.476,47.893\n\t\tc-11.758,1.619-20.843,11.598-20.843,23.792c0,13.323,10.808,24.132,24.13,24.132c8.767,0,16.367-4.745,20.589-11.76h52.065\n\t\tC165.395,409.988,135.188,436.671,98.668,436.671z M171.322,350.383h-52.065c-0.355-0.588-0.708-1.176-1.112-1.732l20.476-47.901\n\t\tC155.679,311.776,167.793,329.595,171.322,350.383z M296.781,290.175l7.666-12.564c4.416-7.233,5.431-16.038,2.774-24.084\n\t\tc-2.661-8.046-8.718-14.515-16.562-17.704l-52.725-21.395l32.443-26.281l1.804,14.691c0.756,6.267,4.366,11.841,9.761,15.12\n\t\tc3.271,1.981,6.979,2.988,10.698,2.988c2.435,0,4.88-0.435,7.218-1.306l48.15-18.001l13.627,67.691\n\t\tc-18.268,6.162-34.117,17.51-45.848,32.314L296.781,290.175z M375.396,337.633l-38.003-22.94\n\t\tc7.877-9.118,17.787-16.319,29.205-20.734L375.396,337.633z M393.081,436.671c-40.757,0-73.907-33.161-73.907-73.917\n\t\tc0-9.544,1.965-18.597,5.268-26.983l44.541,26.888c0,0.032-0.016,0.064-0.016,0.095c0,13.323,10.808,24.132,24.114,24.132\n\t\tc13.322,0,24.118-10.81,24.118-24.132c0-10.478-6.721-19.307-16.06-22.64l-10.277-51.043c0.756-0.024,1.463-0.226,2.22-0.226\n\t\tc40.757,0,73.911,33.153,73.911,73.909C466.992,403.51,433.838,436.671,393.081,436.671z"})],-1),Ze=[$e,Be];function He(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",xe,Ze)}var qe={name:"CyclingSport"};const Ve=(0,z.Z)(qe,[["render",He]]);var je=Ve;const Xe={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Je=(0,l._)("desc",{id:"cyclingTransportDescription"}," silhouette of a person riding a bicycle (for transportation) ",-1),Qe=(0,l._)("g",{id:"g147"},[(0,l._)("path",{d:"m 189.097,82.359 c 20.97701,12.331184 47.97442,5.308784 60.293,-15.652 12.32942,-20.979222 5.35418,-47.981117 -15.623,-60.304 -21.00482,-12.3391184 -47.99,-5.317 -60.314,15.65 -12.324,20.983 -5.34599,47.967183 15.644,60.306 z",id:"path143"}),(0,l._)("path",{d:"m 393.081,264.102 c -2.414,0 -4.8,0.194 -7.169,0.362 l -14.431,-71.605 4.702,-1.757 c 10.666,-3.987 16.093,-15.868 12.098,-26.54 -3.994,-10.681 -15.946,-16.084 -26.531,-12.09 l -63.05508,-1.53717 C 284.04753,137.09803 248.90259,106.55858 243.33317,101.62481 217.77732,75.090916 186.1698,85.012419 178.0988,91.544419 L 140.764,192.085 l 0.016,0.024 c -3.319,2.893 -6.089,6.485 -7.86,10.842 -2.191,5.396 -2.596,11.067 -1.564,16.384 -8.503,0.669 -15.255,7.571 -15.255,16.246 0,9.085 7.346,16.44 16.432,16.48 l -6.797,15.906 c -8.62,-2.465 -17.674,-3.866 -27.066,-3.866 C 44.27,264.102 0,308.354 0,362.754 c 0,54.403 44.27,98.663 98.668,98.663 54.403,0 98.652,-44.26 98.652,-98.663 0,-36.228 -19.683,-67.867 -48.858,-85.024 l 10.957,-25.652 h 17.767 l 60.281,24.462 -32.201,52.773 c -8.297,13.612 -3.994,31.382 9.615,39.685 4.691,2.86 9.878,4.229 15,4.229 9.729,0 19.234,-4.929 24.677,-13.838 l 29.339,-48.095 19.072,11.511 c -5.447,12.227 -8.54,25.726 -8.54,39.95 0,54.403 44.254,98.663 98.652,98.663 54.402,0 98.656,-44.26 98.656,-98.663 0,-54.401 -44.254,-98.653 -98.656,-98.653 z M 98.668,436.671 c -40.756,0 -73.923,-33.161 -73.923,-73.917 0,-40.756 33.167,-73.909 73.923,-73.909 5.944,0 11.649,0.896 17.188,2.224 L 95.38,338.962 c -11.758,1.619 -20.843,11.598 -20.843,23.792 0,13.323 10.808,24.132 24.13,24.132 8.767,0 16.367,-4.745 20.589,-11.76 h 52.065 c -5.926,34.862 -36.133,61.545 -72.653,61.545 z m 72.654,-86.288 h -52.065 c -0.355,-0.588 -0.708,-1.176 -1.112,-1.732 l 20.476,-47.901 c 17.058,11.026 29.172,28.845 32.701,49.633 z m 125.459,-60.208 7.666,-12.564 c 4.416,-7.233 5.431,-16.038 2.774,-24.084 -2.661,-8.046 -8.718,-14.515 -16.562,-17.704 l -73.83357,-31.7176 16.7558,-45.21274 c 10.36934,4.13303 41.82171,27.90767 45.77423,28.08592 3.271,1.981 8.57725,1.46711 12.29625,1.46711 2.435,0 18.50584,0.70472 20.84384,-0.16628 L 343.32113,188.03378 361.635,269.33 c -18.268,6.162 -34.117,17.51 -45.848,32.314 z m 78.615,47.458 -38.003,-22.94 c 7.877,-9.118 17.787,-16.319 29.205,-20.734 z m 17.685,99.038 c -40.757,0 -73.907,-33.161 -73.907,-73.917 0,-9.544 1.965,-18.597 5.268,-26.983 l 44.541,26.888 c 0,0.032 -0.016,0.064 -0.016,0.095 0,13.323 10.808,24.132 24.114,24.132 13.322,0 24.118,-10.81 24.118,-24.132 0,-10.478 -6.721,-19.307 -16.06,-22.64 l -10.277,-51.043 c 0.756,-0.024 1.463,-0.226 2.22,-0.226 40.757,0 73.911,33.153 73.911,73.909 -10e-4,40.756 -33.155,73.917 -73.912,73.917 z",id:"path145"})],-1),et=[Je,Qe];function tt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Xe,et)}var nt={name:"CyclingTransport"};const rt=(0,z.Z)(nt,[["render",tt]]);var at=rt;const ot={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},st=(0,l.uE)(' silhouette of a person riding a bicycle with virtual indicator ',4),it=[st];function lt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",ot,it)}var ct={name:"CyclingVirtual"};const ut=(0,z.Z)(ct,[["render",lt]]);var dt=ut;const mt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 463.507 463.507",style:{"enable-background":"new 0 0 463.507 463.507"},"xml:space":"preserve"},_t=(0,l._)("desc",{id:"hikingDescription"},"silhouette of a person hiking",-1),Et=(0,l._)("g",null,[(0,l._)("path",{d:"M246.413,78.492c21.688,0,39.255-17.573,39.255-39.251c0-21.67-17.567-39.24-39.255-39.24\n\t\tc-21.652,0-39.242,17.57-39.242,39.24C207.171,60.919,224.761,78.492,246.413,78.492z"}),(0,l._)("path",{d:"M386.604,202.858c0-11.185-9.066-20.251-20.253-20.251h-68.479l-38.62-54.832l0.127-0.933\n\t\tc1.378-10.474-1.474-21.067-7.911-29.444c-6.441-8.378-15.932-13.852-26.408-15.23c-11.596-1.511-22.592,2.224-30.852,9.225V45.779\n\t\tc0-7.847-6.362-14.217-14.225-14.217H140.59c-7.867,0-14.225,6.37-14.225,14.217v168.953c0,20.68,15.821,37.476,35.979,39.446\n\t\tl-3.043,7.073l-23.859,90.136l-53.73,72.188c-8.006,10.768-5.794,25.987,4.984,34.001c4.348,3.245,9.443,4.811,14.491,4.811\n\t\tc7.422,0,14.729-3.385,19.511-9.795l56.529-75.945c1.851-2.484,3.213-5.299,4.003-8.289l16.266-61.414l44.521,40.877l-6.076,88.603\n\t\tc-0.917,13.393,9.177,24.99,22.58,25.908c0.552,0.04,1.124,0.056,1.691,0.056c12.66,0,23.339-9.819,24.208-22.642l6.882-100.264\n\t\tc0.508-7.364-2.371-14.572-7.815-19.564l-45.994-42.219l13.992-90.613l19.331,27.435c3.801,5.387,9.972,8.592,16.552,8.592h70.882\n\t\tl1.339,232.294c0,4.478,3.626,8.101,8.101,8.101c4.479,0,8.101-3.624,8.101-8.101l-1.339-234.036\n\t\tC381.588,218.245,386.604,211.15,386.604,202.858z"})],-1),St=[_t,Et];function Tt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",mt,St)}var pt={name:"Hiking"};const At=(0,z.Z)(pt,[["render",Tt]]);var Ot=At;const Rt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 503.162 503.162",style:{"enable-background":"new 0 0 503.162 503.162"},"xml:space":"preserve"},It=(0,l._)("desc",{id:"mountainBikingDescription"}," silhouette of a person riding a mountain bike ",-1),Ut=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M149.951,67.997c15.711-7.143,22.739-25.675,15.596-41.416c-7.124-15.701-25.723-22.682-41.453-15.539\n\t\t\tc-15.721,7.134-22.702,25.752-15.578,41.444C115.679,68.216,134.23,75.14,149.951,67.997z"}),(0,l._)("path",{d:"M87.517,89.072l-32.828,87.755c-1.979,5.967-1.683,12.594,1.1,18.733c4.055,8.922,12.604,14.525,21.755,15.271\n\t\t\tl76.873,6.244l29.137,64.184c4.122,9.046,14.832,13.148,23.906,9.017c9.075-4.131,13.072-14.859,8.951-23.944l-36.424-80.201\n\t\t\tc0,0-3.605-13.76-21.343-14.133l-43.873-2.572l21.009-55.166l31.671,20.588c5.584,3.663,10.997,3.682,15.1,1.722l55.051-24.997\n\t\t\tc17.069-7.755,6.952-30.036-10.108-22.29l-47.506,21.707l-53.55-34.846c0,0-11.638-8.013-24.241-2.285\n\t\t\tC102.205,73.858,91.112,77.243,87.517,89.072z"}),(0,l._)("path",{d:"M423.687,182.488l-2.61,15.042c-2.123,12.154-13.35,25.092-25.092,28.888l-3.711,1.195\n\t\t\tc3.041-16.543,1.282-34.148-6.215-50.633c-19.498-42.974-70.094-61.87-112.943-42.419\n\t\t\tc-42.878,19.479-61.936,70.017-42.438,112.981c17.069,37.562,57.881,56.744,96.534,47.966l-0.784,1.415\n\t\t\tc-5.968,10.796-20.817,19.221-33.144,18.8l-17.892-0.622c-12.336-0.411-30.514,5.002-40.603,12.116l-22.376,15.759\n\t\t\tc-10.107,7.104-28.276,12.632-40.612,12.354l-12.001-0.277c12.718-22.845,14.889-51.159,3.242-76.806\n\t\t\tc-19.517-42.955-70.074-61.879-113.019-42.381c-42.792,19.44-61.87,70.007-42.372,112.933\n\t\t\tc16.667,36.711,56.084,55.788,93.914,48.444l-1.32,2.056c-6.675,10.385-22.08,18.398-34.406,17.92l-32.79-1.291\n\t\t\tc-12.326-0.497-24.021,8.97-26.096,21.143l-2.62,15.339c-0.564,3.271-0.354,6.11,0.401,8.501c-0.43,1.778-0.736,3.548-0.736,5.326\n\t\t\tv9.562c0,10.557,8.568,19.125,19.125,19.125h460.932c10.557,0,19.115-8.568,19.106-19.125l-0.125-167.507\n\t\t\tc0-2.782-0.593-5.221-1.616-7.286c1.396-3.806,2.057-7.841,1.598-11.839l-4.677-40.497c-1.415-12.249-9.763-29.146-18.637-37.724\n\t\t\tl-36.127-34.951C434.712,167.418,425.79,170.325,423.687,182.488z"})])],-1),gt=[It,Ut];function Nt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Rt,gt)}var zt={name:"MountainBiking"};const ht=(0,z.Z)(zt,[["render",Nt]]);var wt=ht;const ft={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 503.162 503.162",style:{"enable-background":"new 0 0 503.162 503.162"},"xml:space":"preserve"},vt=(0,l.uE)(' silhouette of a person riding an electric mountain bike ',18),Ct=[vt];function Dt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",ft,Ct)}var kt={name:"MountainBikingElectric"};const Pt=(0,z.Z)(kt,[["render",Dt]]);var Lt=Pt;const Mt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 534.51 534.51",style:{"enable-background":"new 0 0 534.51 534.51"},"xml:space":"preserve"},bt=(0,l._)("desc",{id:"rowingDescription"},"silhouette of a person rowing",-1),yt=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M70.517,393.857h132.622l-67.205,68.631c-3.28,3.385-3.204,8.797,0.172,12.076c1.597,1.568,3.72,2.43,5.958,2.43\n\t\t\tc2.305,0,4.533-0.947,6.12-2.572l78.881-80.555h221.315c12.45,0,30.676-6.006,40.296-13.914\n\t\t\tc8.788-7.229,19.049-16.217,26.345-24.299c10.375-9.811,22.214-23.639-4.255-22.834c-6.98,0.248-206.789,0.02-223.926,0\n\t\t\tl47.144-48.139l22.176-22.032l28.209,9.17c10.414,3.385,22.472-0.803,26.919-9.362c4.446-8.558,0.268-18.407-9.343-21.993\n\t\t\tl-17.404-6.512l54.698-54.774c12.507,6.617,28.362,4.867,38.899-5.671l46.541-46.607c13.11-13.015,13.11-33.957,0-46.923\n\t\t\tc-12.909-13.034-34.042-13.034-46.942,0l-46.512,46.598c-10.892,10.815-12.508,27.139-5.26,39.742l-57.853,59.077L253.744,183.09\n\t\t\tc-1.482-0.851-14.153-5.786-26.833-10.643c-14.898-5.719-30.371,0.583-34.53,13.971l-7.525,24.241l-35.324,118.451\n\t\t\tc-0.468,1.34-0.603,2.562-0.746,3.711H14.136c-12.45,0-17.662,8.836-11.618,19.727l23.237,21.592\n\t\t\tC39.123,385.068,58.066,393.857,70.517,393.857z M272.63,248.727c1.797-5.967,8.099-9.39,14.075-7.64l51.37,14.975l-33.038,33.737\n\t\t\tl-43.453,43.012h-14.2L272.63,248.727z"}),(0,l._)("circle",{cx:"248.953",cy:"109.842",r:"52.326"})])],-1),Gt=[bt,yt];function Ft(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Mt,Gt)}var Wt={name:"Rowing"};const Kt=(0,z.Z)(Wt,[["render",Ft]]);var Yt=Kt;const xt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve"},$t=(0,l._)("desc",{id:"runningDescription"},"silhouette of a running person",-1),Bt=(0,l._)("g",null,[(0,l._)("path",{d:"M282.74,80.771c22.318,0,40.401-18.08,40.401-40.389C323.141,18.084,305.058,0,282.74,0\n\t\tc-22.281,0-40.378,18.084-40.378,40.383C242.362,62.691,260.458,80.771,282.74,80.771z"}),(0,l._)("path",{d:"M400.207,188.547H331.47l-38.766-55.03l0.123-0.944c1.384-10.514-1.475-21.146-7.94-29.556\n\t\tc-6.461-8.409-16.007-13.903-26.52-15.287c-10.926-1.429-22.619,3.12-31.206,8.646c-1.441,0.928-84.97,54.921-84.97,54.921\n\t\tc-5.175,3.358-8.542,8.877-9.165,15.016c-0.634,6.13,1.574,12.222,5.976,16.541l58.982,58l-6.417,48.954l-18.707,65.584l-67.8-19.4\n\t\tc-12.911-3.676-26.44,3.796-30.159,16.747c-3.699,12.951,3.799,26.459,16.758,30.168l91.271,26.109\n\t\tc2.192,0.627,4.444,0.936,6.7,0.936c4.113,0,8.195-1.04,11.848-3.073c5.655-3.146,9.833-8.409,11.611-14.635l21.963-77.057\n\t\tl26.365,36.639l6.684,119.628c0.73,12.991,11.501,23.036,24.349,23.036c0.441,0,0.92-0.016,1.379-0.039\n\t\tc13.453-0.748,23.745-12.262,23-25.713l-7.083-126.736c-0.271-4.643-1.846-9.116-4.56-12.887l-32.24-44.811l11.959-91.279\n\t\tl19.409,27.555c3.794,5.407,10.005,8.624,16.613,8.624h79.28c11.226,0,20.326-9.101,20.326-20.329\n\t\tC420.533,197.647,411.432,188.547,400.207,188.547z M204.606,190.357l-19.026-18.717l23.476-15.206L204.606,190.357z"})],-1),Zt=[$t,Bt];function Ht(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",xt,Zt)}var qt={name:"Running"};const Vt=(0,z.Z)(qt,[["render",Ht]]);var jt=Vt;const Xt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 522.362 522.362",style:{"enable-background":"new 0 0 522.362 522.362"},"xml:space":"preserve"},Jt=(0,l._)("desc",{id:"alpineSkiingDescription"},"silhouette of a person skiing",-1),Qt=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M14.314,351.859L408.088,461.78c4.484,1.311,9.104,1.97,13.731,1.97l0,0c17.471,0,33.746-9.429,42.467-24.604\n\t\t\tc2.716-4.724,3.137-10.27,1.157-15.214c-1.912-4.762-5.767-8.31-10.576-9.744c-7.373-2.237-15.481,1.109-22.146,9.229\n\t\t\tc-3.548,4.303-9.496,6.244-15.07,4.714l-136.467-38.078c1.396-0.555,2.812-1.195,4.236-2.065l103.266-63.15\n\t\t\tc15.443-9.362,18.493-33.957,7.812-43.883l-64.758-60.233l39.972-21.688l69.682,9.744c5.23,0.736,9.744-2.037,10.079-6.187\n\t\t\tc0.344-4.141-3.624-8.1-8.855-8.826l-48.605-6.828l22.472-12.192c39.895-23.275,5.823-85.192-35.334-63.112l-87.554,61.19\n\t\t\tl-117.503-16.515l2.543-12.087c0.545-2.582-1.109-5.116-3.691-5.661c-2.572-0.593-5.116,1.1-5.661,3.701l-2.678,12.709\n\t\t\tl-18.331-2.582c-5.231-0.727-9.467,2.123-9.467,6.369s4.236,8.281,9.467,9.017l15.176,2.123l-2.544,12.087\n\t\t\tc-0.545,2.582,1.109,5.125,3.691,5.671c0.334,0.076,0.66,0.105,0.994,0.105c2.209,0,4.198-1.54,4.676-3.787l2.678-12.737\n\t\t\tl102.414,14.315l-5.308,3.72c-4.332,3.022-10.155,9.151-11.723,14.201c-3.844,12.45-1.473,26.717,10.452,37.705l68.802,62.175\n\t\t\tc0,0-50.978,31.776-74.998,46.397c-14.219,8.606-13.674,23.858-6.129,33.393L23.705,318.199\n\t\t\tc-10.012-2.792-20.569,2.554-23.113,11.695C-2,339.169,4.159,349.029,14.314,351.859z"}),(0,l._)("path",{d:"M450.842,72.003c-15.291,16.715-14.201,42.667,2.639,58.121c16.706,15.31,42.716,14.086,58.073-2.668\n\t\t\tc15.386-16.677,14.172-42.734-2.544-58.016C492.305,54.064,466.17,55.192,450.842,72.003z"})])],-1),en=[Jt,Qt];function tn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Xt,en)}var nn={name:"SkiingAlpine"};const rn=(0,z.Z)(nn,[["render",tn]]);var an=rn;const on={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 296 296",style:{"enable-background":"new 0 0 296 296"},"xml:space":"preserve"},sn=(0,l._)("desc",{id:"crossCountrySkiingDescription"}," silhouette of a person skiing (cross country) ",-1),ln=(0,l._)("g",null,[(0,l._)("path",{d:"M241.313,246.906h-39.564l0.456-1.273c5.62-18.374,3.479-37.58-6.027-54.278c-5.653-9.929-13.443-18.018-22.745-23.959\n\t\tl12.886-51.126c3.035-12.05-4.272-24.266-16.322-27.301c-2.634-0.664-5.278-0.826-7.833-0.559\n\t\tc-0.151-0.011-0.299-0.032-0.452-0.038c-26.03-1.077-51.443,8.485-70.33,25.993L41.586,82.855\n\t\tc-4.332-2.741-10.065-1.451-12.806,2.881s-1.451,10.065,2.88,12.806l47.625,30.136c-2.557,6.013-0.962,13.224,4.375,17.531\n\t\tc2.774,2.24,6.104,3.33,9.413,3.33c4.377-0.001,8.717-1.907,11.68-5.579l0.478-0.591c8.686-10.766,20.465-18.479,33.484-22.317\n\t\tl-11.095,44.046c-1.061,4.214-0.854,8.448,0.374,12.305c-12.908,17.917-28.398,33.68-46.198,46.979l-14.649,10.727\n\t\tc-3.938,2.943-6.001,7.798-6.005,11.798H8.25c-4.556,0-8.083,4.131-8.083,8.688v2.063c0,4.556,3.527,8.25,8.083,8.25h55.188\n\t\th161.375H280c9.113,0,16.167-7.387,16.167-16.5v-2.5H241.313z M153.974,192.398c0.741-0.153,1.471-0.231,2.188-0.457\n\t\tc5.742,3.406,10.53,8.313,13.945,14.311c5.378,9.447,6.59,20.402,3.41,30.797l-1.799,5.674c-0.447,1.461-0.656,3.184-0.657,4.184\n\t\th-69.909C121.581,231.906,139.297,213.274,153.974,192.398z M167,57.938c0-15.378,12.466-27.844,27.844-27.844\n\t\ts27.844,12.466,27.844,27.844s-12.466,27.844-27.844,27.844S167,73.315,167,57.938z"})],-1),cn=[sn,ln];function un(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",on,cn)}var dn={name:"SkiingCrossCountry"};const mn=(0,z.Z)(dn,[["render",un]]);var _n=mn;const En={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Sn=(0,l.uE)('silhouette of a person with snowshoes',6),Tn=[Sn];function pn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",En,Tn)}var An={name:"Snowshoes"};const On=(0,z.Z)(An,[["render",pn]]);var Rn=On;const In={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 535.876 535.876",style:{"enable-background":"new 0 0 535.876 535.876"},"xml:space":"preserve"},Un=(0,l._)("desc",{id:"trailDescription"},"silhouette of a person running (trail)",-1),gn=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M505.204,326.949c-5.805-10.892-15.176-10.862-20.923,0.067l-7.114,13.512c-5.757,10.92-20.416,19.775-32.752,19.775\n\t\t\th-16.753c-12.346,0-29.645,6.847-38.643,15.29l-32.35,30.342l-1.233-105.388c0.822-18.446-10.596-24.634-10.596-24.634\n\t\t\tl-56.543-25.972l33.67-67.645l38.527,22.912c0,0,15.472,9.715,26.727-9.324l37.026-63.093c1.625-3.519,2.094-7.564,1.052-11.609\n\t\t\tc-2.381-9.256-11.81-14.86-21.095-12.479c-4.083,1.042-7.459,3.49-9.754,6.713l-30.772,51.962l-62.777-37.102\n\t\t\tc-4.733-2.716-10.519-3.691-16.257-2.209l-78.345,20.12c-5.03,1.291-8.96,4.762-11.017,9.142l-38.097,76.165\n\t\t\tc-2.591,3.854-3.624,8.73-2.371,13.607c2.285,8.941,11.456,14.363,20.435,12.059c5.04-1.291,8.951-4.743,10.997-9.161\n\t\t\tl35.314-70.858l28.936-7.296l-76.203,149.921l-65.981,16.734c-1.759,0.393-3.48,1.023-5.163,1.836\n\t\t\tc-10.596,5.412-14.679,18.179-9.267,28.803c4.733,9.266,15.252,13.636,24.901,10.978l78.067-20.187\n\t\t\tc18.6-4.093,23.313-14.449,23.313-14.449l30.581-58.79l62.28,35.678l0.593,86.216c0.01,1.08,0.259,2.161,0.421,3.241l-11.6-4.188\n\t\t\tc-11.608-4.188-30.57-4.608-42.361-0.956l-26.135,8.128c-11.79,3.663-30.791,3.338-42.447-0.717l-19.221-6.694\n\t\t\tc-11.657-4.054-28.831-0.984-38.374,6.838L109.9,433.954c-9.544,7.822-26.67,10.72-38.25,6.483L40.84,429.135\n\t\t\tc-11.58-4.256-25.608,1.157-31.336,12.097l-7.21,13.789c-5.728,10.93-0.354,19.794,11.982,19.794H500.27\n\t\t\tc12.336,0,24.309-9.802,26.728-21.907l8.004-39.981c2.409-12.097-0.325-30.733-6.14-41.616L505.204,326.949z"}),(0,l._)("path",{d:"M326.395,126.625c17.806-4.562,28.563-22.721,23.983-40.526c-4.581-17.844-22.74-28.554-40.555-23.983\n\t\t\tc-17.796,4.581-28.535,22.711-23.964,40.535C290.439,120.476,308.599,131.205,326.395,126.625z"})])],-1),Nn=[Un,gn];function zn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",In,Nn)}var hn={name:"Trail"};const wn=(0,z.Z)(hn,[["render",zn]]);var fn=wn;const vn={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Cn=(0,l.uE)('silhouette of a walking person',3),Dn=[Cn];function kn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",vn,Dn)}var Pn={name:"Walking"};const Ln=(0,z.Z)(Pn,[["render",kn]]);var Mn=Ln;const bn=["title"];var yn=(0,l.aZ)({__name:"index",props:{sportLabel:null,color:null,title:{default:""}},setup(e){const t=e,{color:n,sportLabel:r,title:a}=(0,c.BK)(t),o=(0,l.f3)("sportColors");return(e,t)=>((0,l.wg)(),(0,l.iD)("div",{class:"sport-img",style:(0,u.j5)({fill:(0,c.SU)(n)?(0,c.SU)(n):(0,c.SU)(o)[(0,c.SU)(r)]}),title:(0,c.SU)(a)?(0,c.SU)(a):e.$t(`sports.${(0,c.SU)(r)}.LABEL`)},["Cycling (Sport)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(je,{key:0})):(0,l.kq)("",!0),"Cycling (Transport)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(at,{key:1})):(0,l.kq)("",!0),"Cycling (Virtual)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(dt,{key:2})):(0,l.kq)("",!0),"Hiking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Ot,{key:3})):(0,l.kq)("",!0),"Mountain Biking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(wt,{key:4})):(0,l.kq)("",!0),"Mountain Biking (Electric)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Lt,{key:5})):(0,l.kq)("",!0),"Rowing"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Yt,{key:6})):(0,l.kq)("",!0),"Running"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(jt,{key:7})):(0,l.kq)("",!0),"Skiing (Alpine)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(an,{key:8})):(0,l.kq)("",!0),"Skiing (Cross Country)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(_n,{key:9})):(0,l.kq)("",!0),"Snowshoes"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Rn,{key:10})):(0,l.kq)("",!0),"Trail"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(fn,{key:11})):(0,l.kq)("",!0),"Walking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Mn,{key:12})):(0,l.kq)("",!0)],12,bn))}});const Gn=yn;var Fn=Gn;const Wn={class:"loader"};function Kn(e,t){return(0,l.wg)(),(0,l.iD)("div",Wn)}const Yn={},xn=(0,z.Z)(Yn,[["render",Kn],["__scopeId","data-v-4c9921ee"]]);var $n=xn;const Bn={id:"modal"},Zn={class:"custom-modal"},Hn={key:0,class:"modal-message"},qn={key:1,class:"modal-message"},Vn={class:"modal-buttons"};var jn=(0,l.aZ)({__name:"Modal",props:{title:null,message:null,strongMessage:{default:()=>null}},emits:["cancelAction","confirmAction"],setup(e,{emit:t}){const n=e,r=(0,C.o)(),{title:a,message:o,strongMessage:s}=(0,c.BK)(n),i=(0,l.Fl)((()=>r.getters[v.SY.GETTERS.ERROR_MESSAGES]));return(0,l.Ah)((()=>r.commit(v.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(e,n)=>{const r=(0,l.up)("i18n-t"),d=(0,l.up)("ErrorMessage"),m=(0,l.up)("Card");return(0,l.wg)(),(0,l.iD)("div",Bn,[(0,l._)("div",Zn,[(0,l.Wm)(m,null,{title:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,c.SU)(a)),1)])),content:(0,l.w5)((()=>[(0,c.SU)(s)?((0,l.wg)(),(0,l.iD)("div",Hn,[(0,l.Wm)(r,{keypath:(0,c.SU)(o)},{default:(0,l.w5)((()=>[(0,l._)("span",null,(0,u.zw)((0,c.SU)(s)),1)])),_:1},8,["keypath"])])):((0,l.wg)(),(0,l.iD)("div",qn,(0,u.zw)((0,c.SU)(o)),1)),(0,c.SU)(i)?((0,l.wg)(),(0,l.j4)(d,{key:2,message:(0,c.SU)(i)},null,8,["message"])):(0,l.kq)("",!0),(0,l._)("div",Vn,[(0,c.SU)(i)?(0,l.kq)("",!0):((0,l.wg)(),(0,l.iD)("button",{key:0,class:"confirm",onClick:n[0]||(n[0]=e=>t("confirmAction"))},(0,u.zw)(e.$t("buttons.YES")),1)),(0,l._)("button",{class:"cancel",onClick:n[1]||(n[1]=e=>t("cancelAction"))},(0,u.zw)(e.$t("buttons."+((0,c.SU)(i)?"CANCEL":"NO"))),1)])])),_:1})])])}}});const Xn=(0,z.Z)(jn,[["__scopeId","data-v-e8fcfaba"]]);var Jn=Xn;const Qn=[{target:Ae,name:"AlertMessage"},{target:Oe.Z,name:"Card"},{target:ze,name:"CustomTextArea"},{target:ve,name:"Distance"},{target:be,name:"Dropdown"},{target:Ye,name:"ErrorMessage"},{target:$n,name:"Loader"},{target:Jn,name:"Modal"},{target:Fn,name:"SportImage"}],er={mounted:(e,t)=>{e.clickOutsideEvent=function(n){e===n.target||e.contains(n.target)||t.value(n)},document.body.addEventListener("click",e.clickOutsideEvent),document.body.addEventListener("touchstart",e.clickOutsideEvent)},unmounted:function(e){e.clickOutsideEvent&&(document.body.removeEventListener("click",e.clickOutsideEvent),document.body.removeEventListener("touchstart",e.clickOutsideEvent),e.clickOutsideEvent=void 0)}};var tr=n(631);r.kL.register(r.ZL,r.jn,r.od,r.De,r.Dx,r.u,r.Gu,r.vn,r.uw,r.ST,r.f$,a.Z);const nr=(0,o.ri)(ue).provide("sportColors",tr.Zo).use(de.Z).use(_e.Z).use(me.Z).use(s.ZP,{name:"VFullscreen"}).directive("click-outside",er);Qn.forEach((e=>{nr.component(e.name,e.target)})),nr.mount("#app")},5073:function(e,t,n){"use strict";n.d(t,{Z:function(){return wl}});var r=n(2201),a=(n(7658),n(6252)),o=n(3577),s=n(9963),i=n(2262),l=n(5801),c=n(9917),u=n(8966);const d=e=>((0,a.dD)("data-v-24ec93e2"),e=e(),(0,a.Cn)(),e),m={id:"admin-app",class:"admin-card"},_=["onSubmit"],E={for:"admin_contact"},S=["value"],T=["disabled"],p={for:"max_users"},A=["disabled"],O={class:"user-limit-help"},R={class:"info-box"},I=d((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),U={for:"max_single_file_size"},g=["disabled"],N={for:"max_zip_file_size"},z=["disabled"],h={for:"gpx_limit_import"},w=["disabled"],f={key:1,class:"form-buttons"},v={class:"confirm",type:"submit"},C=["onClick"],D={key:2,class:"form-buttons"};var k=(0,a.aZ)({__name:"AdminApplication",props:{appConfig:null,edition:{type:Boolean,default:!1}},setup(e){const t=e,{edition:n}=(0,i.BK)(t),d=(0,c.o)(),k=(0,r.tv)(),P=(0,i.qj)({admin_contact:"",max_users:0,max_single_file_size:0,max_zip_file_size:0,gpx_limit_import:0}),L=(0,a.Fl)((()=>d.getters[l.SY.GETTERS.ERROR_MESSAGES]));function M(e){Object.keys(P).map((t=>{["max_single_file_size","max_zip_file_size"].includes(t)?P[t]=(0,u.j)(e[t]):P[t]=e[t]}))}function b(){M(t.appConfig),d.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),k.push("/admin/application")}function y(){const e=Object.assign({},P);e.max_single_file_size*=1048576,e.max_zip_file_size*=1048576,d.dispatch(l.SY.ACTIONS.UPDATE_APPLICATION_CONFIG,e)}return(0,a.wF)((()=>{t.appConfig&&M(t.appConfig)})),(e,t)=>{const r=(0,a.up)("ErrorMessage"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",m,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.TITLE")),1)])),content:(0,a.w5)((()=>[(0,a._)("form",{class:"admin-form",onSubmit:(0,s.iM)(y,["prevent"])},[(0,a._)("label",E,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.ADMIN_CONTACT"))+": ",1),(0,i.SU)(n)||P.admin_contact?(0,a.wy)(((0,a.wg)(),(0,a.iD)("input",{key:1,id:"admin_contact",name:"admin_contact",type:"email","onUpdate:modelValue":t[0]||(t[0]=e=>P.admin_contact=e),disabled:!(0,i.SU)(n)},null,8,T)),[[s.nr,P.admin_contact]]):((0,a.wg)(),(0,a.iD)("input",{key:0,class:"no-contact",value:e.$t("admin.APP_CONFIG.NO_CONTACT_EMAIL"),disabled:""},null,8,S))]),(0,a._)("label",p,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.MAX_USERS_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_users",name:"max_users",type:"number",min:"0","onUpdate:modelValue":t[1]||(t[1]=e=>P.max_users=e),disabled:!(0,i.SU)(n)},null,8,A),[[s.nr,P.max_users]])]),(0,a._)("div",O,[(0,a._)("span",R,[I,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.APP_CONFIG.MAX_USERS_HELP")),1)])]),(0,a._)("label",U,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.SINGLE_UPLOAD_MAX_SIZE_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_single_file_size",name:"max_single_file_size",type:"number",step:"0.1",min:"0","onUpdate:modelValue":t[2]||(t[2]=e=>P.max_single_file_size=e),disabled:!(0,i.SU)(n)},null,8,g),[[s.nr,P.max_single_file_size]])]),(0,a._)("label",N,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.ZIP_UPLOAD_MAX_SIZE_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_zip_file_size",name:"max_zip_file_size",type:"number",step:"0.1",min:"0","onUpdate:modelValue":t[3]||(t[3]=e=>P.max_zip_file_size=e),disabled:!(0,i.SU)(n)},null,8,z),[[s.nr,P.max_zip_file_size]])]),(0,a._)("label",h,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.MAX_FILES_IN_ZIP_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"gpx_limit_import",name:"gpx_limit_import",type:"number",min:"0","onUpdate:modelValue":t[4]||(t[4]=e=>P.gpx_limit_import=e),disabled:!(0,i.SU)(n)},null,8,w),[[s.nr,P.gpx_limit_import]])]),(0,i.SU)(L)?((0,a.wg)(),(0,a.j4)(r,{key:0,message:(0,i.SU)(L)},null,8,["message"])):(0,a.kq)("",!0),(0,i.SU)(n)?((0,a.wg)(),(0,a.iD)("div",f,[(0,a._)("button",v,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:(0,s.iM)(b,["prevent"])},(0,o.zw)(e.$t("buttons.CANCEL")),9,C)])):((0,a.wg)(),(0,a.iD)("div",D,[(0,a._)("button",{class:"confirm",onClick:t[5]||(t[5]=(0,s.iM)((t=>e.$router.push("/admin/application/edit")),["prevent"]))},(0,o.zw)(e.$t("buttons.EDIT")),1),(0,a._)("button",{class:"cancel",onClick:t[6]||(t[6]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)]))],40,_)])),_:1})])}}}),P=n(3744);const L=(0,P.Z)(k,[["__scopeId","data-v-24ec93e2"]]);var M=L;const b={class:"stat-card"},y={class:"stat-content box"},G={class:"stat-icon"},F={class:"stat-details"},W={class:"stat-huge"},K={class:"stat"};var Y=(0,a.aZ)({__name:"StatCard",props:{icon:null,text:null,value:null},setup(e){const t=e,{icon:n,text:r,value:s}=(0,i.BK)(t);return(e,t)=>((0,a.wg)(),(0,a.iD)("div",b,[(0,a._)("div",y,[(0,a._)("div",G,[(0,a._)("i",{class:(0,o.C_)(["fa",`fa-${(0,i.SU)(n)}`])},null,2)]),(0,a._)("div",F,[(0,a._)("div",W,(0,o.zw)((0,i.SU)(s)),1),(0,a._)("div",K,(0,o.zw)((0,i.SU)(r)),1)])])]))}});const x=Y;var $=x;const B={id:"user-stats"};var Z=(0,a.aZ)({__name:"AppStatsCards",props:{appStatistics:null},setup(e){const t=e,{appStatistics:n}=(0,i.BK)(t),r=(0,a.Fl)((()=>(0,u.Z)(n.value.uploads_dir_size,!1)));return(e,t)=>((0,a.wg)(),(0,a.iD)("div",B,[(0,a.Wm)($,{icon:"users",value:(0,i.SU)(n).users,text:e.$t("admin.USER",(0,i.SU)(n).users)},null,8,["value","text"]),(0,a.Wm)($,{icon:"tags",value:(0,i.SU)(n).sports,text:e.$t("workouts.SPORT",(0,i.SU)(n).sports)},null,8,["value","text"]),(0,a.Wm)($,{icon:"calendar",value:(0,i.SU)(n).workouts,text:e.$t("workouts.WORKOUT",(0,i.SU)(n).workouts)},null,8,["value","text"]),(0,a.Wm)($,{icon:"folder-open",value:(0,i.SU)(r).size,text:(0,i.SU)(r).suffix},null,8,["value","text"])]))}});const H=Z;var q=H,V=n(2531);const j=e=>((0,a.dD)("data-v-0dd66f89"),e=e(),(0,a.Cn)(),e),X={id:"admin-menu",class:"center-card"},J={class:"admin-menu description-list"},Q={class:"application-config-details"},ee=j((()=>(0,a._)("br",null,null,-1))),te={class:"registration-status"},ne={key:0,class:"email-sending-status"},re=j((()=>(0,a._)("i",{class:"fa fa-exclamation-triangle","aria-hidden":"true"},null,-1)));var ae=(0,a.aZ)({__name:"AdminMenu",props:{appConfig:null,appStatistics:{default:()=>({})}},setup(e){const t=e,{appConfig:n,appStatistics:r}=(0,i.BK)(t);return(e,t)=>{const s=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("div",X,[(0,a.Wm)(V.Z,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.ADMINISTRATION")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(q,{appStatistics:(0,i.SU)(r)},null,8,["appStatistics"]),(0,a._)("div",J,[(0,a._)("dl",null,[(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/application"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.APPLICATION")),1)])),_:1})]),(0,a._)("dd",Q,[(0,a.Uk)((0,o.zw)(e.$t("admin.UPDATE_APPLICATION_DESCRIPTION")),1),ee,(0,a._)("span",te,(0,o.zw)(e.$t("admin.REGISTRATION_"+((0,i.SU)(n).is_registration_enabled?"ENABLED":"DISABLED"))),1),(0,i.SU)(n).is_email_sending_enabled?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("span",ne,[re,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.EMAIL_SENDING_DISABLED")),1)]))]),(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/sports"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("workouts.SPORT",0))),1)])),_:1})]),(0,a._)("dd",null,(0,o.zw)(e.$t("admin.ENABLE_DISABLE_SPORTS")),1),(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/users"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("admin.USER",0))),1)])),_:1})]),(0,a._)("dd",null,(0,o.zw)(e.$t("admin.ADMIN_RIGHTS_DELETE_USER_ACCOUNT")),1)])])])),_:1})])}}});const oe=(0,P.Z)(ae,[["__scopeId","data-v-0dd66f89"]]);var se=oe,ie=n(9150),le=n(631);const ce=e=>((0,a.dD)("data-v-6d62af67"),e=e(),(0,a.Cn)(),e),ue={id:"admin-sports",class:"admin-card"},de={class:"responsive-table"},me=ce((()=>(0,a._)("th",null,"#",-1))),_e={class:"text-left"},Ee={class:"text-left sport-action"},Se=ce((()=>(0,a._)("th",null,null,-1))),Te={class:"text-center"},pe=ce((()=>(0,a._)("span",{class:"cell-heading"},"id",-1))),Ae={class:"cell-heading"},Oe={class:"sport-label"},Re={class:"cell-heading"},Ie={class:"text-center"},Ue={class:"cell-heading"},ge={class:"sport-action"},Ne={class:"cell-heading"},ze={class:"action-button"},he=["onClick"],we={key:0,class:"has-workouts"},fe=ce((()=>(0,a._)("i",{class:"fa fa-warning","aria-hidden":"true"},null,-1)));var ve=(0,a.aZ)({__name:"AdminSports",setup(e){const{t:t}=(0,ie.QT)(),n=(0,c.o)(),r=(0,a.Fl)((()=>(0,le.xH)(n.getters[l.O8.GETTERS.SPORTS],t))),u=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function d(e,t){n.dispatch(l.O8.ACTIONS.UPDATE_SPORTS,{id:e,isActive:t})}return(e,t)=>{const n=(0,a.up)("SportImage"),l=(0,a.up)("ErrorMessage"),c=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",ue,[(0,a.Wm)(c,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.SPORTS.TITLE")),1)])),content:(0,a.w5)((()=>[(0,a._)("button",{class:"top-button",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1),(0,a._)("div",de,[(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[me,(0,a._)("th",null,(0,o.zw)(e.$t("admin.SPORTS.TABLE.IMAGE")),1),(0,a._)("th",_e,(0,o.zw)(e.$t("admin.SPORTS.TABLE.LABEL")),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.SPORTS.TABLE.ACTIVE")),1),(0,a._)("th",Ee,(0,o.zw)(e.$t("admin.ACTION")),1),Se])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(r),(t=>((0,a.wg)(),(0,a.iD)("tr",{key:t.id},[(0,a._)("td",Te,[pe,(0,a.Uk)(" "+(0,o.zw)(t.id),1)]),(0,a._)("td",null,[(0,a._)("span",Ae,(0,o.zw)(e.$t("admin.SPORTS.TABLE.IMAGE")),1),(0,a.Wm)(n,{title:t.translatedLabel,"sport-label":t.label,color:t.color},null,8,["title","sport-label","color"])]),(0,a._)("td",Oe,[(0,a._)("span",Re,(0,o.zw)(e.$t("admin.SPORTS.TABLE.LABEL")),1),(0,a.Uk)(" "+(0,o.zw)(t.translatedLabel),1)]),(0,a._)("td",Ie,[(0,a._)("span",Ue,(0,o.zw)(e.$t("admin.SPORTS.TABLE.ACTIVE")),1),(0,a._)("i",{class:(0,o.C_)("fa fa"+(t.is_active?"-check":"")),"aria-hidden":"true"},null,2)]),(0,a._)("td",ge,[(0,a._)("span",Ne,(0,o.zw)(e.$t("admin.ACTION")),1),(0,a._)("div",ze,[(0,a._)("button",{class:(0,o.C_)({danger:t.is_active}),onClick:e=>d(t.id,!t.is_active)},(0,o.zw)(e.$t(`buttons.${t.is_active?"DIS":"EN"}ABLE`)),11,he),t.has_workouts?((0,a.wg)(),(0,a.iD)("span",we,[fe,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.SPORTS.TABLE.HAS_WORKOUTS")),1)])):(0,a.kq)("",!0)])])])))),128))])]),(0,i.SU)(u)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(u)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("button",{onClick:t[1]||(t[1]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)])])),_:1})])}}});const Ce=(0,P.Z)(ve,[["__scopeId","data-v-6d62af67"]]);var De=Ce,ke=n(8626),Pe=n(5020),Le=n(6595);const Me={class:"users-filters"},be={class:"search-username"},ye=["onKeyup","placeholder"];var Ge=(0,a.aZ)({__name:"UsersNameFilter",emits:["filterOnUsername"],setup(e,{emit:t}){const n=(0,r.yj)(),l=(0,i.iH)(n.query.q?n.query.q:"");function c(){""!==l.value&&t("filterOnUsername",l)}function u(){l.value="",t("filterOnUsername",l.value)}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Me,[(0,a._)("div",be,[(0,a.wy)((0,a._)("input",{id:"username",name:"username","onUpdate:modelValue":t[0]||(t[0]=e=>l.value=e),onKeyup:(0,s.D2)(c,["enter"]),placeholder:e.$t("user.FILTER_ON_USERNAME")},null,40,ye),[[s.nr,l.value,void 0,{trim:!0}]]),""!==l.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-times","aria-hidden":"true",onClick:u})):(0,a.kq)("",!0)]),(0,a._)("i",{class:(0,o.C_)(["fa fa-search",{"fa-disabled":""===l.value}]),"aria-hidden":"true",onClick:c},null,2)]))}});const Fe=(0,P.Z)(Ge,[["__scopeId","data-v-627a8e91"]]);var We=Fe,Ke=n(2766),Ye=n(6558);const xe=e=>((0,a.dD)("data-v-dc12ff78"),e=e(),(0,a.Cn)(),e),$e={id:"admin-users",class:"admin-card"},Be={key:0,class:"no-users"},Ze={key:1,class:"responsive-table"},He=xe((()=>(0,a._)("th",null,"#",-1))),qe={class:"left-text"},Ve={class:"left-text"},je={class:"left-text"},Xe={class:"cell-heading"},Je={class:"cell-heading"},Qe={class:"cell-heading"},et={class:"cell-heading"},tt={class:"text-center"},nt={class:"cell-heading"},rt={class:"text-center"},at={class:"cell-heading"},ot={class:"text-center"},st={class:"cell-heading"},it={class:"text-center"},lt={class:"cell-heading"},ct=["disabled","onClick"];var ut=(0,a.aZ)({__name:"AdminUsers",setup(e){const t=(0,c.o)(),n=(0,r.yj)(),u=(0,r.tv)(),d=["is_active","admin","created_at","username","workouts_count"],m="created_at";let _=(0,i.qj)((0,Ke.pm)(n.query,d,m));const E=(0,a.Fl)((()=>t.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),S=(0,a.Fl)((()=>t.getters[l.RT.GETTERS.USERS])),T=(0,a.Fl)((()=>t.getters[l.RT.GETTERS.USERS_PAGINATION])),p=(0,a.Fl)((()=>t.getters[l.SY.GETTERS.ERROR_MESSAGES]));function A(e){t.dispatch(l.RT.ACTIONS.GET_USERS,e)}function O(e){I("q",e.value)}function R(e,n){t.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,admin:n})}function I(e,t){_[e]=t,"per_page"===e&&(_.page=1),u.push({path:"/admin/users",query:_})}return(0,a.wF)((()=>A(_))),(0,a.Ah)((()=>{t.dispatch(l.RT.ACTIONS.EMPTY_USERS)})),(0,a.YP)((()=>n.query),(e=>{_=(0,Ke.pm)(e,d,m,{query:_}),A(_)})),(e,t)=>{const n=(0,a.up)("router-link"),r=(0,a.up)("ErrorMessage"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",$e,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("admin.USER",0))),1)])),content:(0,a.w5)((()=>[(0,a._)("button",{class:"top-button",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1),(0,a.Wm)(We,{onFilterOnUsername:O}),(0,a.Wm)(ke.Z,{sort:(0,i.SU)(Ke.fS),order_by:d,query:(0,i.SU)(_),message:"admin.USERS.SELECTS.ORDER_BY",onUpdateSelect:I},null,8,["sort","query"]),0===(0,i.SU)(S).length?((0,a.wg)(),(0,a.iD)("div",Be,(0,o.zw)(e.$t("user.NO_USERS_FOUND")),1)):((0,a.wg)(),(0,a.iD)("div",Ze,[(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[He,(0,a._)("th",qe,(0,o.zw)(e.$t("user.USERNAME")),1),(0,a._)("th",Ve,(0,o.zw)(e.$t("user.EMAIL")),1),(0,a._)("th",je,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE")),1),(0,a._)("th",null,(0,o.zw)((0,o.kC)(e.$t("workouts.WORKOUT",0))),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.ACTIVE")),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.ADMIN")),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.ACTION")),1)])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(t=>((0,a.wg)(),(0,a.iD)("tr",{key:t.username},[(0,a._)("td",null,[(0,a._)("span",Xe,(0,o.zw)(e.$t("user.PROFILE.PICTURE")),1),(0,a.Wm)(Le.Z,{user:t},null,8,["user"])]),(0,a._)("td",null,[(0,a._)("span",Je,(0,o.zw)(e.$t("user.USERNAME")),1),(0,a.Wm)(n,{to:`/admin/users/${t.username}`},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.username),1)])),_:2},1032,["to"])]),(0,a._)("td",null,[(0,a._)("span",Qe,(0,o.zw)(e.$t("user.EMAIL")),1),(0,a.Uk)(" "+(0,o.zw)(t.email),1)]),(0,a._)("td",null,[(0,a._)("span",et,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE")),1),(0,a.Uk)(" "+(0,o.zw)((0,i.SU)(Ye.p6)(t.created_at,(0,i.SU)(E).timezone,(0,i.SU)(E).date_format)),1)]),(0,a._)("td",tt,[(0,a._)("span",nt,(0,o.zw)((0,o.kC)(e.$t("workouts.WORKOUT",0))),1),(0,a.Uk)(" "+(0,o.zw)(t.nb_workouts),1)]),(0,a._)("td",rt,[(0,a._)("span",at,(0,o.zw)(e.$t("admin.ACTIVE")),1),(0,a._)("i",{class:(0,o.C_)(`fa fa${t.is_active?"-check":""}-square-o`),"aria-hidden":"true"},null,2)]),(0,a._)("td",ot,[(0,a._)("span",st,(0,o.zw)(e.$t("user.ADMIN")),1),(0,a._)("i",{class:(0,o.C_)(`fa fa${t.admin?"-check":""}-square-o`),"aria-hidden":"true"},null,2)]),(0,a._)("td",it,[(0,a._)("span",lt,(0,o.zw)(e.$t("admin.ACTION")),1),(0,a._)("button",{class:(0,o.C_)({danger:t.admin}),disabled:t.username===(0,i.SU)(E).username,onClick:e=>R(t.username,!t.admin)},(0,o.zw)(e.$t(`admin.USERS.TABLE.${t.admin?"REMOVE":"ADD"}_ADMIN_RIGHTS`)),11,ct)])])))),128))])]),(0,i.SU)(T).page?((0,a.wg)(),(0,a.j4)(Pe.Z,{key:0,path:"/admin/users",pagination:(0,i.SU)(T),query:(0,i.SU)(_)},null,8,["pagination","query"])):(0,a.kq)("",!0),(0,i.SU)(p)?((0,a.wg)(),(0,a.j4)(r,{key:1,message:(0,i.SU)(p)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("button",{onClick:t[1]||(t[1]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)]))])),_:1})])}}});const dt=(0,P.Z)(ut,[["__scopeId","data-v-dc12ff78"]]);var mt=dt,_t=n(2179);const Et={class:"profile-tabs custom-checkboxes-group"},St={class:"profile-tabs-checkboxes custom-checkboxes"},Tt=["id","name","checked","disabled","onInput"];var pt=(0,a.aZ)({__name:"UserProfileTabs",props:{tabs:null,selectedTab:null,edition:{type:Boolean},disabled:{type:Boolean,default:!1}},setup(e){const t=e,{tabs:n,selectedTab:r,disabled:s}=(0,i.BK)(t);function l(e){switch(e){case"ACCOUNT":case"PICTURE":return`/profile/edit/${e.toLocaleLowerCase()}`;case"APPS":case"PREFERENCES":case"SPORTS":return`/profile${t.edition?"/edit":""}/${e.toLocaleLowerCase()}`;default:case"PROFILE":return"/profile"+(t.edition?"/edit":"")}}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Et,[(0,a._)("div",St,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(n),(t=>((0,a.wg)(),(0,a.iD)("div",{class:"profile-tab custom-checkbox",key:t},[(0,a._)("label",null,[(0,a._)("input",{type:"radio",id:t,name:t,checked:(0,i.SU)(r).split("/")[0]===t,disabled:(0,i.SU)(s),onInput:n=>e.$router.push(l(t))},null,40,Tt),(0,a._)("span",null,(0,o.zw)(e.$t(`user.PROFILE.TABS.${t}`)),1)])])))),128))])]))}});const At=pt;var Ot=At;const Rt={id:"user-profile"},It={class:"box"};var Ut=(0,a.aZ)({__name:"index",props:{user:null,tab:null},setup(e){const t=e,{user:n,tab:r}=(0,i.BK)(t),o=["PROFILE","PREFERENCES","SPORTS","APPS"];return(e,t)=>{const s=(0,a.up)("router-view");return(0,a.wg)(),(0,a.iD)("div",Rt,[(0,a.Wm)(_t.Z,{user:(0,i.SU)(n)},null,8,["user"]),(0,a._)("div",It,[(0,a.Wm)(Ot,{tabs:o,selectedTab:(0,i.SU)(r),edition:!1},null,8,["selectedTab"]),(0,a.Wm)(s,{user:(0,i.SU)(n)},null,8,["user"])])])}}});const gt=(0,P.Z)(Ut,[["__scopeId","data-v-9729cba4"]]);var Nt=gt,zt=n(1585),ht=n(6287);const wt={id:"user-preferences",class:"description-list"},ft={class:"profile-buttons"};var vt=(0,a.aZ)({__name:"UserPreferences",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LANGUAGE])),s=(0,a.Fl)((()=>t.user.language?ht.zK[t.user.language]:ht.zK.en)),u=(0,a.Fl)((()=>t.user.weekm?"MONDAY":"SUNDAY")),d=(0,a.Fl)((()=>t.user.timezone?t.user.timezone:"Europe/Paris")),m=(0,a.Fl)((()=>t.user.date_format?t.user.date_format:"MM/dd/yyyy")),_=(0,a.Fl)((()=>t.user.display_ascent?"DISPLAYED":"HIDDEN"));return(t,n)=>((0,a.wg)(),(0,a.iD)("div",wt,[(0,a._)("dl",null,[(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.LANGUAGE"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(s)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.TIMEZONE"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(d)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.DATE_FORMAT"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(Ye.mh)((0,i.SU)(m),(0,i.SU)(r))),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.FIRST_DAY_OF_WEEK"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t(`user.PROFILE.${(0,i.SU)(u)}`)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.UNITS.LABEL"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t("user.PROFILE.UNITS."+(e.user.imperial_units?"IMPERIAL":"METRIC"))),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.ASCENT_DATA"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t(`common.${(0,i.SU)(_)}`)),1)]),(0,a._)("div",ft,[(0,a._)("button",{onClick:n[0]||(n[0]=e=>t.$router.push("/profile/edit/preferences"))},(0,o.zw)(t.$t("user.PROFILE.EDIT_PREFERENCES")),1),(0,a._)("button",{onClick:n[1]||(n[1]=e=>t.$router.push("/"))},(0,o.zw)(t.$t("common.HOME")),1)])]))}});const Ct=vt;var Dt=Ct;const kt={id:"user-profile-edition",class:"center-card"};var Pt=(0,a.aZ)({__name:"index",props:{user:null,tab:null},setup(e){const t=e,n=(0,c.o)(),{user:r,tab:s}=(0,i.BK)(t),u=["PROFILE","ACCOUNT","PICTURE","PREFERENCES","SPORTS"],d=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING]));return(e,t)=>{const n=(0,a.up)("router-view"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",kt,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t(`user.PROFILE.${(0,i.SU)(s)}_EDITION`)),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(Ot,{tabs:u,selectedTab:(0,i.SU)(s),edition:!0,disabled:(0,i.SU)(d)},null,8,["selectedTab","disabled"]),(0,a.Wm)(n,{user:(0,i.SU)(r)},null,8,["user"])])),_:1})])}}});const Lt=Pt;var Mt=Lt,bt=n(8403);const yt={id:"user-infos-edition"},Gt={class:"profile-form form-box"},Ft={key:1,class:"info-box success-message"},Wt=["onSubmit"],Kt={class:"form-items",for:"email"},Yt=["disabled"],xt={class:"form-items",for:"password-field"},$t={class:"form-items",for:"new-password-field"},Bt={class:"form-buttons"},Zt={class:"confirm",type:"submit"};var Ht=(0,a.aZ)({__name:"UserAccountEdition",props:{user:null},setup(e){const t=e,{user:n}=(0,i.BK)(t),r=(0,c.o)(),u=(0,i.qj)({email:"",password:"",new_password:""}),d=(0,a.Fl)((()=>r.getters[l.YN.GETTERS.USER_LOADING])),m=(0,a.Fl)((()=>r.getters[l.SY.GETTERS.APP_CONFIG])),_=(0,a.Fl)((()=>r.getters[l.YN.GETTERS.IS_SUCCESS])),E=(0,i.iH)(!1),S=(0,a.Fl)((()=>r.getters[l.SY.GETTERS.ERROR_MESSAGES])),T=(0,i.iH)(!1),p=(0,i.iH)(!1);function A(){T.value=!0}function O(e){u.email=e.email}function R(e){u.password=e}function I(e){u.new_password=e}function U(){const e={email:u.email,password:u.password};u.new_password&&(e.new_password=u.new_password),E.value=u.email!==n.value.email,r.dispatch(l.YN.ACTIONS.UPDATE_USER_ACCOUNT,e)}function g(e){p.value=e}function N(e){r.dispatch(l.YN.ACTIONS.DELETE_ACCOUNT,{username:e})}return(0,a.bv)((()=>{t.user&&O(t.user)})),(0,a.Ah)((()=>{r.commit(l.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),r.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(0,a.YP)((()=>_.value),(async e=>{e&&(R(""),I(""),O(n.value),T.value=!1)})),(0,a.YP)((()=>n.value.email),(async()=>{O(n.value)})),(e,t)=>{const r=(0,a.up)("Modal"),l=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",yt,[p.value?((0,a.wg)(),(0,a.j4)(r,{key:0,title:e.$t("common.CONFIRMATION"),message:e.$t("user.CONFIRM_ACCOUNT_DELETION"),onConfirmAction:t[0]||(t[0]=e=>N((0,i.SU)(n).username)),onCancelAction:t[1]||(t[1]=e=>g(!1))},null,8,["title","message"])):(0,a.kq)("",!0),(0,a._)("div",Gt,[(0,i.SU)(S)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(S)},null,8,["message"])):(0,a.kq)("",!0),(0,i.SU)(_)?((0,a.wg)(),(0,a.iD)("div",Ft,(0,o.zw)(e.$t(`user.PROFILE.SUCCESSFUL_${E.value&&(0,i.SU)(m).is_email_sending_enabled?"EMAIL_":""}UPDATE`)),1)):(0,a.kq)("",!0),(0,a._)("form",{class:(0,o.C_)({errors:T.value}),onSubmit:(0,s.iM)(U,["prevent"])},[(0,a._)("label",Kt,[(0,a.Uk)((0,o.zw)(e.$t("user.EMAIL"))+"* ",1),(0,a.wy)((0,a._)("input",{id:"email","onUpdate:modelValue":t[2]||(t[2]=e=>u.email=e),disabled:(0,i.SU)(d),required:!0,onInvalid:A},null,40,Yt),[[s.nr,u.email]])]),(0,a._)("label",xt,[(0,a.Uk)((0,o.zw)(e.$t("user.CURRENT_PASSWORD"))+"* ",1),(0,a.Wm)(bt.Z,{id:"password-field",disabled:(0,i.SU)(d),password:u.password,required:!0,onUpdatePassword:R,onPasswordError:A},null,8,["disabled","password"])]),(0,a._)("label",$t,[(0,a.Uk)((0,o.zw)(e.$t("user.NEW_PASSWORD"))+" ",1),(0,a.Wm)(bt.Z,{id:"new-password-field",disabled:(0,i.SU)(d),checkStrength:!0,password:u.new_password,isSuccess:!1,onUpdatePassword:I,onPasswordError:A},null,8,["disabled","password"])]),(0,a._)("div",Bt,[(0,a._)("button",Zt,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[3]||(t[3]=(0,s.iM)((t=>e.$router.push("/profile")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1),(0,a._)("button",{class:"danger",onClick:t[4]||(t[4]=(0,s.iM)((e=>g(!0)),["prevent"]))},(0,o.zw)(e.$t("buttons.DELETE_MY_ACCOUNT")),1)])],42,Wt)])])}}});const qt=(0,P.Z)(Ht,[["__scopeId","data-v-37b8c4c8"]]);var Vt=qt,jt=n(4850);const Xt={id:"user-infos-edition"},Jt={class:"profile-form form-box"},Qt=["onSubmit"],en={class:"form-items",for:"registrationDate"},tn=["value"],nn={class:"form-items",for:"first_name"},rn=["disabled"],an={class:"form-items",for:"last_name"},on={class:"form-items",for:"birth_date"},sn=["disabled"],ln={class:"form-items",for:"location"},cn=["disabled"],un={class:"form-items"},dn={class:"form-buttons"},mn={class:"confirm",type:"submit"};var _n=(0,a.aZ)({__name:"UserInfosEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({first_name:"",last_name:"",birth_date:"",location:"",bio:""}),u=(0,a.Fl)((()=>t.user.created_at?(0,Ye.p6)(t.user.created_at,t.user.timezone,t.user.date_format):"")),d=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function _(e){r.first_name=e.first_name?e.first_name:"",r.last_name=e.last_name?e.last_name:"",r.birth_date=e.birth_date?(0,jt.Z)(new Date(e.birth_date),"yyyy-MM-dd"):"",r.location=e.location?e.location:"",r.bio=e.bio?e.bio:""}function E(e){r.bio=e}function S(){n.dispatch(l.YN.ACTIONS.UPDATE_USER_PROFILE,r)}return(0,a.bv)((()=>{t.user&&_(t.user)})),(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage"),l=(0,a.up)("CustomTextArea");return(0,a.wg)(),(0,a.iD)("div",Xt,[(0,a._)("div",Jt,[(0,i.SU)(m)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(m)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("form",{onSubmit:(0,s.iM)(S,["prevent"])},[(0,a._)("label",en,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE"))+" ",1),(0,a._)("input",{id:"registrationDate",value:(0,i.SU)(u),disabled:""},null,8,tn)]),(0,a._)("label",nn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.FIRST_NAME"))+" ",1),(0,a.wy)((0,a._)("input",{id:"first_name","onUpdate:modelValue":t[0]||(t[0]=e=>r.first_name=e),disabled:(0,i.SU)(d)},null,8,rn),[[s.nr,r.first_name]])]),(0,a._)("label",an,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LAST_NAME"))+" ",1),(0,a.wy)((0,a._)("input",{id:"last_name","onUpdate:modelValue":t[1]||(t[1]=e=>r.last_name=e)},null,512),[[s.nr,r.last_name]])]),(0,a._)("label",on,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.BIRTH_DATE"))+" ",1),(0,a.wy)((0,a._)("input",{id:"birth_date",type:"date",class:"birth-date","onUpdate:modelValue":t[2]||(t[2]=e=>r.birth_date=e),disabled:(0,i.SU)(d)},null,8,sn),[[s.nr,r.birth_date]])]),(0,a._)("label",ln,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LOCATION"))+" ",1),(0,a.wy)((0,a._)("input",{id:"location","onUpdate:modelValue":t[3]||(t[3]=e=>r.location=e),disabled:(0,i.SU)(d)},null,8,cn),[[s.nr,r.location]])]),(0,a._)("label",un,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.BIO"))+" ",1),(0,a.Wm)(l,{name:"bio",charLimit:200,input:r.bio,disabled:(0,i.SU)(d),onUpdateValue:E},null,8,["input","disabled"])]),(0,a._)("div",dn,[(0,a._)("button",mn,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[4]||(t[4]=(0,s.iM)((t=>e.$router.push("/profile")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,Qt)])])}}});const En=(0,P.Z)(_n,[["__scopeId","data-v-5e5a4552"]]);var Sn=En;const Tn=e=>((0,a.dD)("data-v-687e9604"),e=e(),(0,a.Cn)(),e),pn={id:"user-picture-edition"},An={class:"user-picture-form"},On=["onSubmit"],Rn={class:"picture-help"},In={class:"info-box"},Un=Tn((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),gn={class:"picture-buttons"},Nn=["disabled"];var zn=(0,a.aZ)({__name:"UserPictureEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),{user:r}=(0,i.BK)(t),d=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.APP_CONFIG])),_=m.value.max_single_file_size?(0,u.Z)(m.value.max_single_file_size):"",E=(0,i.iH)(null);function S(){n.dispatch(l.YN.ACTIONS.DELETE_PICTURE)}function T(e){e.target.files&&(E.value=e.target.files[0])}function p(){E.value&&n.dispatch(l.YN.ACTIONS.UPDATE_USER_PICTURE,{picture:E.value})}return(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",pn,[(0,a._)("div",An,[(0,i.SU)(d)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(d)},null,8,["message"])):(0,a.kq)("",!0),(0,a.Wm)(Le.Z,{user:(0,i.SU)(r)},null,8,["user"]),(0,a._)("form",{onSubmit:(0,s.iM)(p,["prevent"])},[(0,a._)("input",{type:"file",name:"picture",accept:".png,.jpg,.gif",onInput:T},null,32),(0,a._)("div",Rn,[(0,a._)("span",In,[Un,(0,a.Uk)(" "+(0,o.zw)(e.$t("workouts.MAX_SIZE"))+": "+(0,o.zw)((0,i.SU)(_)),1)])]),(0,a._)("div",gn,[(0,a._)("button",{type:"submit",disabled:!E.value},(0,o.zw)(e.$t("user.PROFILE.PICTURE_UPDATE")),9,Nn),(0,i.SU)(r).picture?((0,a.wg)(),(0,a.iD)("button",{key:0,class:"danger",onClick:S},(0,o.zw)(e.$t("user.PROFILE.PICTURE_REMOVE")),1)):(0,a.kq)("",!0),(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=t=>e.$router.push("/profile"))},(0,o.zw)(e.$t("user.PROFILE.BACK_TO_PROFILE")),1)])],40,On)])])}}});const hn=(0,P.Z)(zn,[["__scopeId","data-v-687e9604"]]);var wn=hn;const fn=["Africa/Abidjan","Africa/Accra","Africa/Algiers","Africa/Bissau","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/El_Aaiun","Africa/Johannesburg","Africa/Juba","Africa/Khartoum","Africa/Lagos","Africa/Maputo","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Sao_Tome","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Araguaina","America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Asuncion","America/Atikokan","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Cayenne","America/Chicago","America/Chihuahua","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Fortaleza","America/Fort_Nelson","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Inuvik","America/Iqaluit","America/Jamaica","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/La_Paz","America/Lima","America/Los_Angeles","America/Maceio","America/Managua","America/Manaus","America/Martinique","America/Matamoros","America/Mazatlan","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Sitka","America/St_Johns","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Atyrau","Asia/Baghdad","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Chita","Asia/Choibalsan","Asia/Colombo","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Kathmandu","Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Riyadh","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ulaanbaatar","Asia/Urumqi","Asia/Ust-Nera","Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faroe","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/Stanley","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/Perth","Australia/Sydney","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belgrade","Europe/Berlin","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Helsinki","Europe/Istanbul","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Oslo","Europe/Paris","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/Saratov","Europe/Simferopol","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zaporozhye","Europe/Zurich","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Reunion","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Chuuk","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Pohnpei","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Wake","Pacific/Wallis"],vn={id:"tz-dropdown"},Cn=["value","disabled","onKeydown"],Dn=["onClick","onMouseover","autofocus"];var kn=(0,a.aZ)({__name:"TimezoneDropdown",props:{input:null,disabled:{type:Boolean,default:!1}},emits:["updateTimezone"],setup(e,{emit:t}){const n=e,{input:r,disabled:l}=(0,i.BK)(n),c=(0,i.iH)(n.input),u=(0,i.iH)(!1),d=(0,i.iH)(null),m=(0,i.iH)(0);function _(e){return e.toLowerCase().match(c.value.toLowerCase())}function E(e){m.value=e}function S(e){c.value=e,u.value=!1,t("updateTimezone",e)}function T(e){e.preventDefault(),d.value?.firstElementChild?.innerHTML&&S(d.value?.firstElementChild?.innerHTML)}function p(e){e.preventDefault(),u.value=!0,c.value=e.target.value.trim()}return(0,a.YP)((()=>n.input),(e=>{c.value=e})),(e,t)=>((0,a.wg)(),(0,a.iD)("div",vn,[(0,a._)("input",{class:"tz-dropdown-input",id:"timezone",name:"timezone",value:c.value,disabled:(0,i.SU)(l),required:"",onKeydown:[t[0]||(t[0]=(0,s.D2)((e=>S((0,i.SU)(r))),["esc"])),(0,s.D2)(T,["enter"])],onInput:p},null,40,Cn),u.value?((0,a.wg)(),(0,a.iD)("ul",{key:0,class:"tz-dropdown-list",ref_key:"tzList",ref:d},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(fn).filter((e=>_(e))),((e,t)=>((0,a.wg)(),(0,a.iD)("li",{key:e,class:(0,o.C_)(["tz-dropdown-item",{focus:t===m.value}]),onClick:t=>S(e),onMouseover:e=>E(t),autofocus:t===m.value},(0,o.zw)(e),43,Dn)))),128))],512)):(0,a.kq)("",!0)]))}});const Pn=(0,P.Z)(kn,[["__scopeId","data-v-47ea2903"]]);var Ln=Pn;const Mn={id:"user-preferences-edition"},bn={class:"profile-form form-box"},yn=["onSubmit"],Gn={class:"form-items"},Fn=["disabled"],Wn=["value"],Kn={class:"form-items"},Yn={class:"form-items"},xn=["disabled"],$n=["value"],Bn={class:"form-items form-checkboxes"},Zn={class:"checkboxes-label"},Hn={class:"checkboxes"},qn=["id","name","checked","disabled","onInput"],Vn={class:"checkbox-label"},jn={class:"form-items form-checkboxes"},Xn={class:"checkboxes-label"},Jn={class:"checkboxes"},Qn=["id","name","checked","disabled","onInput"],er={class:"checkbox-label"},tr={class:"form-items form-checkboxes"},nr={class:"checkboxes-label"},rr={class:"checkboxes"},ar=["id","name","checked","disabled","onInput"],or={class:"checkbox-label"},sr={class:"form-buttons"},ir={class:"confirm",type:"submit"};var lr=(0,a.aZ)({__name:"UserPreferencesEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({display_ascent:!0,imperial_units:!1,language:"",timezone:"Europe/Paris",date_format:"dd/MM/yyyy",weekm:!1}),u=[{label:"SUNDAY",value:!1},{label:"MONDAY",value:!0}],d=[{label:"METRIC",value:!1},{label:"IMPERIAL",value:!0}],m=[{label:"DISPLAYED",value:!0},{label:"HIDDEN",value:!1}],_=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),E=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),S=(0,a.Fl)((()=>(0,Ye.d2)((new Date).toUTCString(),t.user.timezone,r.language)));function T(e){r.display_ascent=e.display_ascent,r.imperial_units=!!e.imperial_units&&e.imperial_units,r.language=e.language?e.language:"en",r.timezone=e.timezone?e.timezone:"Europe/Paris",r.date_format=e.date_format?e.date_format:"dd/MM/yyyy",r.weekm=!!e.weekm&&e.weekm}function p(){n.dispatch(l.YN.ACTIONS.UPDATE_USER_PREFERENCES,r)}function A(e){r.timezone=e}function O(e){r.display_ascent=e}function R(e){r.imperial_units=e}function I(e){r.weekm=e}return(0,a.bv)((()=>{t.user&&T(t.user)})),(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",Mn,[(0,a._)("div",bn,[(0,i.SU)(E)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(E)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("form",{onSubmit:(0,s.iM)(p,["prevent"])},[(0,a._)("label",Gn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LANGUAGE"))+" ",1),(0,a.wy)((0,a._)("select",{id:"language","onUpdate:modelValue":t[0]||(t[0]=e=>r.language=e),disabled:(0,i.SU)(_)},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(ht.mT),(e=>((0,a.wg)(),(0,a.iD)("option",{value:e.value,key:e.value},(0,o.zw)(e.label),9,Wn)))),128))],8,Fn),[[s.bM,r.language]])]),(0,a._)("label",Kn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.TIMEZONE"))+" ",1),(0,a.Wm)(Ln,{input:r.timezone,disabled:(0,i.SU)(_),onUpdateTimezone:A},null,8,["input","disabled"])]),(0,a._)("label",Yn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.DATE_FORMAT"))+" ",1),(0,a.wy)((0,a._)("select",{id:"date_format","onUpdate:modelValue":t[1]||(t[1]=e=>r.date_format=e),disabled:(0,i.SU)(_)},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(e=>((0,a.wg)(),(0,a.iD)("option",{value:e.value,key:e.value},(0,o.zw)(e.label),9,$n)))),128))],8,xn),[[s.bM,r.date_format]])]),(0,a._)("div",Bn,[(0,a._)("span",Zn,(0,o.zw)(e.$t("user.PROFILE.FIRST_DAY_OF_WEEK")),1),(0,a._)("div",Hn,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(u,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.weekm,disabled:(0,i.SU)(_),onInput:e=>I(t.value)},null,40,qn),(0,a._)("span",Vn,(0,o.zw)(e.$t(`user.PROFILE.${t.label}`)),1)]))),64))])]),(0,a._)("div",jn,[(0,a._)("span",Xn,(0,o.zw)(e.$t("user.PROFILE.UNITS.LABEL")),1),(0,a._)("div",Jn,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(d,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.imperial_units,disabled:(0,i.SU)(_),onInput:e=>R(t.value)},null,40,Qn),(0,a._)("span",er,(0,o.zw)(e.$t(`user.PROFILE.UNITS.${t.label}`)),1)]))),64))])]),(0,a._)("div",tr,[(0,a._)("span",nr,(0,o.zw)(e.$t("user.PROFILE.ASCENT_DATA")),1),(0,a._)("div",rr,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(m,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.display_ascent,disabled:(0,i.SU)(_),onInput:e=>O(t.value)},null,40,ar),(0,a._)("span",or,(0,o.zw)(e.$t(`common.${t.label}`)),1)]))),64))])]),(0,a._)("div",sr,[(0,a._)("button",ir,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[2]||(t[2]=(0,s.iM)((t=>e.$router.push("/profile/preferences")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,yn)])])}}});const cr=(0,P.Z)(lr,[["__scopeId","data-v-065d5e6c"]]);var ur=cr;const dr=["profile:read","profile:write","users:read","users:write","workouts:read","workouts:write"],mr=["application:write"],_r={id:"new-oauth2-app"},Er={id:"new-oauth2-title"},Sr={id:"apps-form"},Tr=["onSubmit"],pr={class:"form-items"},Ar={class:"form-item"},Or={for:"app-name"},Rr={class:"form-item"},Ir={for:"app-description"},Ur={class:"form-item"},gr={for:"app-url"},Nr={class:"form-item"},zr={for:"app-redirect-uri"},hr={class:"form-item-scope"},wr={class:"form-item-scope-label"},fr={class:"scope-label"},vr=["name","checked","onChange"],Cr=["innerHTML"],Dr={class:"form-buttons"},kr=["disabled"];var Pr=(0,a.aZ)({__name:"AddUserApp",props:{authUser:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({client_name:"",client_uri:"",client_description:"",redirect_uri:""}),u=(0,i.qj)([]),d=(0,a.Fl)((()=>S(t.authUser,mr,dr)));function m(){const e={client_name:r.client_name,client_description:r.client_description,client_uri:r.client_uri,redirect_uris:[r.redirect_uri],scope:u.sort().join(" ")};n.dispatch(l.Km.ACTIONS.CREATE_CLIENT,e)}function _(e){r.client_description=e}function E(e){const t=u.indexOf(e);t>-1?u.splice(t,1):u.push(e)}function S(e,t,n){const r=[...n];return e.admin&&r.push(...t),r.sort()}return(e,t)=>{const n=(0,a.up)("CustomTextArea");return(0,a.wg)(),(0,a.iD)("div",_r,[(0,a._)("h1",Er,(0,o.zw)(e.$t("oauth2.ADD_A_NEW_APP")),1),(0,a._)("div",Sr,[(0,a._)("form",{onSubmit:(0,s.iM)(m,["prevent"])},[(0,a._)("div",pr,[(0,a._)("div",Ar,[(0,a._)("label",Or,(0,o.zw)(e.$t("oauth2.APP.NAME"))+"*",1),(0,a.wy)((0,a._)("input",{id:"app-name",type:"text",required:"","onUpdate:modelValue":t[0]||(t[0]=e=>r.client_name=e)},null,512),[[s.nr,r.client_name]])]),(0,a._)("div",Rr,[(0,a._)("label",Ir,(0,o.zw)(e.$t("oauth2.APP.DESCRIPTION")),1),(0,a.Wm)(n,{name:"app-description",charLimit:200,input:r.description,onUpdateValue:_},null,8,["input"])]),(0,a._)("div",Ur,[(0,a._)("label",gr,(0,o.zw)(e.$t("oauth2.APP.URL"))+"*",1),(0,a.wy)((0,a._)("input",{id:"app-url",type:"text",required:"","onUpdate:modelValue":t[1]||(t[1]=e=>r.client_uri=e)},null,512),[[s.nr,r.client_uri]])]),(0,a._)("div",Nr,[(0,a._)("label",zr,(0,o.zw)(e.$t("oauth2.APP.REDIRECT_URL"))+"* ",1),(0,a.wy)((0,a._)("input",{id:"app-redirect-uri",type:"text",required:"","onUpdate:modelValue":t[2]||(t[2]=e=>r.redirect_uri=e)},null,512),[[s.nr,r.redirect_uri]])]),(0,a._)("div",hr,[(0,a._)("div",wr,(0,o.zw)(e.$t("oauth2.APP.SCOPE.LABEL"))+"* ",1),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(d),(t=>((0,a.wg)(),(0,a.iD)("div",{class:"form-item-scope-checkboxes",key:t},[(0,a._)("label",fr,[(0,a._)("input",{type:"checkbox",name:t,checked:u.includes(t),onChange:e=>E(t)},null,40,vr),(0,a._)("code",null,(0,o.zw)(t),1)]),(0,a._)("p",{class:"scope-description",innerHTML:e.$t(`oauth2.APP.SCOPE.${t}_DESCRIPTION`)},null,8,Cr)])))),128))])]),(0,a._)("div",Dr,[(0,a._)("button",{class:"confirm",type:"submit",disabled:0===u.length},(0,o.zw)(e.$t("buttons.SUBMIT")),9,kr),(0,a._)("button",{class:"cancel",onClick:t[3]||(t[3]=(0,s.iM)((()=>e.$router.push("/profile/apps")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,Tr)])])}}});const Lr=(0,P.Z)(Pr,[["__scopeId","data-v-0657ee77"]]);var Mr=Lr;const br={id:"authorize-oauth2-app"},yr={key:0},Gr={id:"authorize-oauth2-title"},Fr={class:"oauth2-access description-list"},Wr={class:"client-scope"},Kr=["innerHTML"],Yr={class:"authorize-oauth2-buttons"},xr={key:1},$r={class:"no-app"};var Br=(0,a.aZ)({__name:"AuthorizeUserApp",setup(e){const t=(0,r.yj)(),n=(0,c.o)(),s=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENT])),u=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function d(){t.query.client_id&&"string"===typeof t.query.client_id&&n.dispatch(l.Km.ACTIONS.GET_CLIENT_BY_CLIENT_ID,t.query.client_id)}function m(){n.dispatch(l.Km.ACTIONS.AUTHORIZE_CLIENT,{client_id:`${t.query.client_id}`,redirect_uri:`${t.query.redirect_uri}`,response_type:`${t.query.response_type}`,scope:`${t.query.scope}`,state:`${t.query.state?t.query.state:""}`,code_challenge:`${t.query.code_challenge?t.query.code_challenge:""}`,code_challenge_method:`${t.query.code_challenge_method?t.query.code_challenge_method:""}`})}return(0,a.wF)((()=>d())),(e,t)=>{const n=(0,a.up)("router-link"),r=(0,a.up)("i18n-t"),l=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",br,[(0,i.SU)(s).client_id?((0,a.wg)(),(0,a.iD)("div",yr,[(0,a._)("h1",Gr,[(0,a.Wm)(r,{keypath:"oauth2.AUTHORIZE_APP"},{default:(0,a.w5)((()=>[(0,a.Wm)(n,{to:{name:"UserApp",params:{id:(0,i.SU)(s).id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(s).name),1)])),_:1},8,["to"])])),_:1})]),(0,i.SU)(u)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(u)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("div",Fr,[(0,a._)("p",null,(0,o.zw)(e.$t("oauth2.APP_REQUESTING_ACCESS")),1),(0,a._)("dl",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(s).scope.split(" "),(t=>((0,a.wg)(),(0,a.iD)(a.HY,{key:t},[(0,a._)("dt",Wr,[(0,a._)("code",null,(0,o.zw)(t),1)]),(0,a._)("dd",{innerHTML:e.$t(`oauth2.APP.SCOPE.${t}_DESCRIPTION`)},null,8,Kr)],64)))),128))]),(0,a._)("div",Yr,[(0,a._)("button",{class:"danger",onClick:m},(0,o.zw)(e.$t("buttons.AUTHORIZE")),1),(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])])])):((0,a.wg)(),(0,a.iD)("div",xr,[(0,a._)("p",$r,(0,o.zw)(e.$t("oauth2.NO_APP")),1),(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)]))])}}});const Zr=(0,P.Z)(Br,[["__scopeId","data-v-3b2fe9ed"]]);var Hr=Zr;const qr={id:"oauth2-apps"};var Vr=(0,a.aZ)({__name:"index",props:{user:null},setup(e){const t=e,n=(0,c.o)(),{user:r}=(0,i.BK)(t);return(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),n.commit(l.Km.MUTATIONS.SET_CLIENTS,[])})),(e,t)=>{const n=(0,a.up)("router-view");return(0,a.wg)(),(0,a.iD)("div",qr,[(0,a.Wm)(n,{authUser:(0,i.SU)(r)},null,8,["authUser"])])}}});const jr=Vr;var Xr=jr;const Jr={id:"oauth2-app",class:"description-list"},Qr={key:1},ea={key:0,class:"info-box success-message"},ta=["title"],na={key:0},ra={key:1,class:"app-secret"},aa=["title"],oa={class:"client-scopes"},sa={class:"app-buttons"},ia={key:2},la={class:"no-app"};var ca=(0,a.aZ)({__name:"UserApp",props:{authUser:null,afterCreation:{type:Boolean,default:!1}},setup(e){const t=e,n=(0,r.yj)(),s=(0,c.o)(),{afterCreation:u,authUser:d}=(0,i.BK)(t),m=(0,a.Fl)((()=>s.getters[l.Km.GETTERS.CLIENT])),_=(0,a.Fl)((()=>s.getters[l.Km.GETTERS.REVOCATION_SUCCESSFUL])),E=(0,i.iH)(!1),S=(0,i.iH)(null),T=(0,i.iH)(!1),p=(0,i.iH)(!1),A=(0,i.iH)(!1);function O(){!u.value&&n.params.id&&"string"===typeof n.params.id&&s.dispatch(l.Km.ACTIONS.GET_CLIENT_BY_ID,+n.params.id)}function R(e){S.value=e?"oauth2.APP_DELETION_CONFIRMATION":"oauth2.TOKENS_REVOCATION_CONFIRMATION",I(!0)}function I(e){E.value=e,e||(S.value=null)}function U(e){"oauth2.APP_DELETION_CONFIRMATION"===S.value?s.dispatch(l.Km.ACTIONS.DELETE_CLIENT,e):s.dispatch(l.Km.ACTIONS.REVOKE_ALL_TOKENS,e)}function g(){navigator.clipboard.writeText(m.value.client_id),T.value=!0,p.value=!1,setTimeout((()=>{T.value=!1}),3e3)}function N(){m.value.client_secret&&(navigator.clipboard.writeText(m.value.client_secret),p.value=!0,T.value=!1,setTimeout((()=>{p.value=!1}),3e3))}return(0,a.wF)((()=>{O(),navigator.clipboard&&(A.value=!0)})),(0,a.Ah)((()=>{s.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),s.commit(l.Km.MUTATIONS.EMPTY_CLIENT),s.commit(l.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!1)})),(0,a.YP)((()=>_.value),(e=>{e&&I(!1)})),(e,t)=>{const n=(0,a.up)("Modal");return(0,a.wg)(),(0,a.iD)("div",Jr,[E.value?((0,a.wg)(),(0,a.j4)(n,{key:0,title:e.$t("common.CONFIRMATION"),message:e.$t(S.value),onConfirmAction:t[0]||(t[0]=e=>U((0,i.SU)(m).id)),onCancelAction:t[1]||(t[1]=e=>I(!1))},null,8,["title","message"])):(0,a.kq)("",!0),(0,i.SU)(m)&&(0,i.SU)(m).client_id?((0,a.wg)(),(0,a.iD)("div",Qr,[(0,i.SU)(u)||(0,i.SU)(_)?((0,a.wg)(),(0,a.iD)("div",ea,(0,o.zw)(e.$t((0,i.SU)(u)?"oauth2.APP_CREATED_SUCCESSFULLY":"oauth2.TOKENS_REVOKED")),1)):(0,a.kq)("",!0),(0,a._)("dl",null,[(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.CLIENT_ID"))+":",1),(0,a._)("dd",null,[(0,a.Uk)((0,o.zw)((0,i.SU)(m).client_id)+" ",1),(0,i.SU)(u)&&A.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:(0,o.C_)("fa fa-"+(T.value?"check":"copy")),"aria-hidden":"true",title:e.$t("oauth2.COPY_TO_CLIPBOARD"),onClick:g},null,10,ta)):(0,a.kq)("",!0)]),(0,i.SU)(u)&&(0,i.SU)(m).client_secret?((0,a.wg)(),(0,a.iD)("dt",na,(0,o.zw)(e.$t("oauth2.APP.CLIENT_SECRET"))+": ",1)):(0,a.kq)("",!0),(0,i.SU)(u)&&(0,i.SU)(m).client_secret?((0,a.wg)(),(0,a.iD)("dd",ra,[(0,a.Uk)((0,o.zw)((0,i.SU)(m).client_secret)+" ",1),A.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:(0,o.C_)("fa fa-"+(p.value?"check":"copy")),"aria-hidden":"true",title:e.$t("oauth2.COPY_TO_CLIPBOARD"),onClick:N},null,10,aa)):(0,a.kq)("",!0)])):(0,a.kq)("",!0),(0,a._)("dt",null,(0,o.zw)((0,o.kC)(e.$t("oauth2.APP.ISSUE_AT")))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(Ye.p6)((0,i.SU)(m).issued_at,(0,i.SU)(d).timezone,(0,i.SU)(d).date_format)),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.NAME"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).name),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.DESCRIPTION"))+":",1),(0,a._)("dd",{class:(0,o.C_)({"no-description":!(0,i.SU)(m).client_description})},(0,o.zw)((0,i.SU)(m).client_description?(0,i.SU)(m).client_description:e.$t("oauth2.NO_DESCRIPTION")),3),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.URL"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).website),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.REDIRECT_URL"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).redirect_uris.length>0?(0,i.SU)(m).redirect_uris[0]:""),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.SCOPE.LABEL"))+":",1),(0,a._)("dd",oa,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(m).scope.split(" "),(e=>((0,a.wg)(),(0,a.iD)("span",{class:"client-scope",key:e},[(0,a._)("code",null,(0,o.zw)(e),1)])))),128))])]),(0,a._)("div",sa,[(0,a._)("button",{class:"danger",onClick:t[2]||(t[2]=e=>R(!1))},(0,o.zw)(e.$t("oauth2.REVOKE_ALL_TOKENS")),1),(0,a._)("button",{class:"danger",onClick:t[3]||(t[3]=e=>R(!0))},(0,o.zw)(e.$t("oauth2.DELETE_APP")),1),(0,a._)("button",{onClick:t[4]||(t[4]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)])])):((0,a.wg)(),(0,a.iD)("div",ia,[(0,a._)("p",la,(0,o.zw)(e.$t("oauth2.NO_APP")),1),(0,a._)("button",{onClick:t[5]||(t[5]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)]))])}}});const ua=(0,P.Z)(ca,[["__scopeId","data-v-3a844fa2"]]);var da=ua;const ma={id:"oauth2-apps-list"},_a={class:"apps-list"},Ea={key:0},Sa={class:"app-issued-at"},Ta={key:1,class:"no-apps"},pa={class:"app-list-buttons"};var Aa=(0,a.aZ)({__name:"UserAppsList",props:{authUser:null},setup(e){const t=e,n=(0,c.o)(),s=(0,r.yj)(),{authUser:u}=(0,i.BK)(t),d=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENTS])),m=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENTS_PAGINATION]));let _=E(s.query);function E(e){const t={};return e.page&&(t.page=(0,Ke.z_)(e.page,Ke.Hf)),t}function S(e){n.dispatch(l.Km.ACTIONS.GET_CLIENTS,e)}return(0,a.wF)((()=>{S(_)})),(0,a.YP)((()=>s.query),(async e=>{_=E(e),S(_)})),(e,t)=>{const n=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("div",ma,[(0,a._)("p",_a,(0,o.zw)(e.$t("oauth2.APPS_LIST")),1),(0,i.SU)(d).length>0?((0,a.wg)(),(0,a.iD)("ul",Ea,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(d),(t=>((0,a.wg)(),(0,a.iD)("li",{key:t.client_id},[(0,a.Wm)(n,{to:{name:"UserApp",params:{id:t.id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.name),1)])),_:2},1032,["to"]),(0,a._)("span",Sa,(0,o.zw)(e.$t("oauth2.APP.ISSUE_AT"))+" "+(0,o.zw)((0,i.SU)(Ye.p6)(t.issued_at,(0,i.SU)(u).timezone,(0,i.SU)(u).date_format)),1)])))),128))])):((0,a.wg)(),(0,a.iD)("div",Ta,(0,o.zw)(e.$t("oauth2.NO_APPS")),1)),(0,i.SU)(d).length>0?((0,a.wg)(),(0,a.j4)(Pe.Z,{key:2,pagination:(0,i.SU)(m),path:"/profile/apps",query:(0,i.SU)(_)},null,8,["pagination","query"])):(0,a.kq)("",!0),(0,a._)("div",pa,[(0,a._)("button",{onClick:t[0]||(t[0]=t=>e.$router.push("/profile/apps/new"))},(0,o.zw)(e.$t("oauth2.NEW_APP")),1),(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)])])}}});const Oa=(0,P.Z)(Aa,[["__scopeId","data-v-efa45ea0"]]);var Ra=Oa;const Ia={id:"user-sport-preferences"},Ua={key:0,class:"responsive-table"},ga={class:"mobile-display"},Na={key:0,class:"profile-buttons mobile-display"},za={key:1,class:"profile-buttons"},ha={class:"text-left"},wa={key:0},fa={class:"cell-heading"},va=["value"],Ca={class:"cell-heading"},Da={key:0,class:"disabled-message"},ka={key:1,class:"fa fa-refresh fa-spin fa-fw"},Pa={class:"cell-heading"},La={class:"cell-heading"},Ma=["checked"],ba={class:"cell-heading"},ya=["value"],Ga={key:1},Fa={key:0,class:"action-buttons"},Wa={class:"cell-heading"},Ka=["onClick"],Ya={key:1,class:"edition-buttons"},xa=["disabled"],$a=["disabled","onClick"],Ba=["disabled"],Za={key:0,class:"profile-buttons"},Ha={key:1,class:"profile-buttons"};var qa=(0,a.aZ)({__name:"UserSportPreferences",props:{user:null,isEdition:{type:Boolean}},setup(e){const t=e,n=(0,c.o)(),{t:r}=(0,ie.QT)(),{isEdition:u,user:d}=(0,i.BK)(t),m="#838383",_=(0,a.f3)("sportColors"),E=(0,a.Fl)((()=>n.getters[l.O8.GETTERS.SPORTS])),S=(0,a.Fl)((()=>(0,le.xH)(E.value,r,"is_active",d.value.sports_list))),T=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),p=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),A=(0,i.qj)({sport_id:0,color:null,is_active:!0,stopped_speed_threshold:1});function O(e){null!==e?(A.sport_id=e.id,A.color=e.color?e.color:_?_[e.label]:m,A.is_active=e.is_active_for_user,A.stopped_speed_threshold=e.stopped_speed_threshold):N()}function R(e){return A.sport_id===e}function I(e){A.color=e.target.value}function U(e){A.stopped_speed_threshold=parseFloat(e.target.value)}function g(e){A.is_active=e.target.checked}function N(){A.sport_id=0,A.color=null,A.is_active=!0,A.stopped_speed_threshold=1,n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)}function z(e){e.preventDefault(),n.dispatch(l.YN.ACTIONS.UPDATE_USER_SPORT_PREFERENCES,A)}function h(e,t){e.preventDefault(),n.dispatch(l.YN.ACTIONS.RESET_USER_SPORT_PREFERENCES,t)}return(0,a.YP)((()=>T.value),(e=>{e||p.value||N()})),(e,t)=>{const n=(0,a.up)("SportImage"),r=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",Ia,[(0,i.SU)(E).length>0?((0,a.wg)(),(0,a.iD)("div",Ua,[(0,a._)("div",ga,[(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("div",Na,[(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/profile/sports")),["prevent"]))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,a.wg)(),(0,a.iD)("div",za,[(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/profile/edit/sports"))},(0,o.zw)(e.$t("user.PROFILE.EDIT_SPORTS_PREFERENCES")),1),(0,a._)("button",{onClick:t[2]||(t[2]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))]),(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.COLOR")),1),(0,a._)("th",ha,(0,o.zw)(e.$t("workouts.SPORT",0)),1),(0,a._)("th",null,(0,o.zw)(e.$t("workouts.WORKOUT",0)),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.IS_ACTIVE")),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD")),1),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("th",wa,(0,o.zw)(e.$t("user.PROFILE.SPORT.ACTION")),1)):(0,a.kq)("",!0)])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(s=>((0,a.wg)(),(0,a.iD)("tr",{key:s.id},[(0,a._)("td",null,[(0,a._)("span",fa,(0,o.zw)(e.$t("user.PROFILE.SPORT.COLOR")),1),R(s.id)?((0,a.wg)(),(0,a.iD)("input",{key:0,class:"sport-color",type:"color",value:A.color,onInput:I},null,40,va)):((0,a.wg)(),(0,a.j4)(n,{key:1,title:s.translatedLabel,"sport-label":s.label,color:s.color?s.color:(0,i.SU)(_)[s.label]},null,8,["title","sport-label","color"]))]),(0,a._)("td",{class:(0,o.C_)(["sport-label",{"disabled-sport":!s.is_active}])},[(0,a._)("span",Ca,(0,o.zw)(e.$t("user.PROFILE.SPORT.LABEL")),1),(0,a.Uk)(" "+(0,o.zw)(s.translatedLabel)+" ",1),s.is_active?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("span",Da," ("+(0,o.zw)(e.$t("user.PROFILE.SPORT.DISABLED_BY_ADMIN"))+") ",1)),(0,i.SU)(T)&&R(s.id)?((0,a.wg)(),(0,a.iD)("i",ka)):(0,a.kq)("",!0),(0,i.SU)(p)&&A.sport_id===s.id?((0,a.wg)(),(0,a.j4)(r,{key:2,message:(0,i.SU)(p)},null,8,["message"])):(0,a.kq)("",!0)],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",Pa,(0,o.zw)(e.$t("workouts.WORKOUT",0)),1),(0,a._)("i",{class:(0,o.C_)("fa fa"+((0,i.SU)(d).sports_list.includes(s.id)?"-check":"")),"aria-hidden":"true"},null,2)],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",La,(0,o.zw)(e.$t("user.PROFILE.SPORT.IS_ACTIVE")),1),R(s.id)&&s.is_active?((0,a.wg)(),(0,a.iD)("input",{key:0,type:"checkbox",checked:s.is_active_for_user,onChange:g},null,40,Ma)):((0,a.wg)(),(0,a.iD)("i",{key:1,class:(0,o.C_)("fa fa"+(s.is_active_for_user?"-check":"")),"aria-hidden":"true"},null,2))],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",ba,(0,o.zw)(e.$t("user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD")),1),R(s.id)&&s.is_active?((0,a.wg)(),(0,a.iD)("input",{key:0,class:"threshold-input",type:"number",min:"0",step:"0.1",value:A.stopped_speed_threshold,onInput:U},null,40,ya)):((0,a.wg)(),(0,a.iD)("span",Ga,(0,o.zw)(s.stopped_speed_threshold),1))],2),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("td",Fa,[(0,a._)("span",Wa,(0,o.zw)(e.$t("user.PROFILE.SPORT.ACTION")),1),0===A.sport_id?((0,a.wg)(),(0,a.iD)("button",{key:0,onClick:e=>O(s)},(0,o.zw)(e.$t("buttons.EDIT")),9,Ka)):(0,a.kq)("",!0),R(s.id)?((0,a.wg)(),(0,a.iD)("div",Ya,[(0,a._)("button",{disabled:(0,i.SU)(T),onClick:z},(0,o.zw)(e.$t("buttons.SUBMIT")),9,xa),(0,a._)("button",{disabled:(0,i.SU)(T),onClick:e=>h(e,s.id)},(0,o.zw)(e.$t("buttons.RESET")),9,$a),(0,a._)("button",{disabled:(0,i.SU)(T),onClick:t[3]||(t[3]=e=>O(null))},(0,o.zw)(e.$t("buttons.CANCEL")),9,Ba)])):(0,a.kq)("",!0)])):(0,a.kq)("",!0)])))),128))])]),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("div",Za,[(0,a._)("button",{class:"cancel",onClick:t[4]||(t[4]=(0,s.iM)((t=>e.$router.push("/profile/sports")),["prevent"]))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,a.wg)(),(0,a.iD)("div",Ha,[(0,a._)("button",{onClick:t[5]||(t[5]=t=>e.$router.push("/profile/edit/sports"))},(0,o.zw)(e.$t("user.PROFILE.EDIT_SPORTS_PREFERENCES")),1),(0,a._)("button",{onClick:t[6]||(t[6]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))])):(0,a.kq)("",!0)])}}});const Va=(0,P.Z)(qa,[["__scopeId","data-v-74e52489"]]);var ja=Va,Xa=n(2894);const Ja=e=>((0,a.dD)("data-v-74257266"),e=e(),(0,a.Cn)(),e),Qa={class:"about-text"},eo=["innerHTML"],to=Ja((()=>(0,a._)("i",{class:"fa fa-book fa-padding","aria-hidden":"true"},null,-1))),no={href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer"},ro=Ja((()=>(0,a._)("i",{class:"fa fa-github fa-padding","aria-hidden":"true"},null,-1))),ao={href:"https://github.com/SamR1/FitTrackee",target:"_blank",rel:"noopener noreferrer"},oo=Ja((()=>(0,a._)("i",{class:"fa fa-balance-scale fa-padding","aria-hidden":"true"},null,-1))),so=Ja((()=>(0,a._)("a",{href:"https://choosealicense.com/licenses/agpl-3.0/",target:"_blank",rel:"noopener noreferrer"}," AGPLv3 ",-1))),io={key:0},lo=Ja((()=>(0,a._)("i",{class:"fa fa-envelope-o fa-padding","aria-hidden":"true"},null,-1))),co=["href"];var uo=(0,a.aZ)({__name:"About",setup(e){const t=(0,c.o)(),n=(0,a.Fl)((()=>t.getters[l.SY.GETTERS.APP_CONFIG]));return(e,t)=>{const r=(0,a.up)("i18n-t");return(0,a.wg)(),(0,a.iD)("div",Qa,[(0,a._)("div",null,[(0,a._)("p",{class:"error-message",innerHTML:e.$t("about.FITTRACKEE_DESCRIPTION")},null,8,eo),(0,a._)("p",null,[to,(0,a._)("a",no,(0,o.zw)((0,o.kC)(e.$t("common.DOCUMENTATION"))),1)]),(0,a._)("p",null,[ro,(0,a._)("a",ao,(0,o.zw)(e.$t("about.SOURCE_CODE")),1)]),(0,a._)("p",null,[oo,(0,a.Wm)(r,{keypath:"about.FITTRACKEE_LICENSE"},{default:(0,a.w5)((()=>[so])),_:1})]),(0,i.SU)(n).admin_contact?((0,a.wg)(),(0,a.iD)("div",io,[lo,(0,a._)("a",{href:`mailto:${(0,i.SU)(n).admin_contact}`},(0,o.zw)(e.$t("about.CONTACT_ADMIN")),9,co)])):(0,a.kq)("",!0)])])}}});const mo=(0,P.Z)(uo,[["__scopeId","data-v-74257266"]]);var _o=mo;const Eo={id:"bike"},So=["src"];function To(e,t){return(0,a.wg)(),(0,a.iD)("div",Eo,[(0,a._)("img",{class:"bike-img",src:"/img/bike.svg",alt:"mountain bike"},null,8,So)])}const po={},Ao=(0,P.Z)(po,[["render",To],["__scopeId","data-v-795f7f5f"]]);var Oo=Ao;const Ro={id:"about",class:"view"},Io={class:"container"},Uo={class:"container-sub"},go={class:"container-sub about-details"};var No=(0,a.aZ)({__name:"AboutView",setup(e){return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ro,[(0,a._)("div",Io,[(0,a._)("div",Uo,[(0,a.Wm)(Oo)]),(0,a._)("div",go,[(0,a.Wm)(_o)])])]))}});const zo=(0,P.Z)(No,[["__scopeId","data-v-bffb50d0"]]);var ho=zo,wo=n(1818),fo=n(2056);const vo=e=>((0,a.dD)("data-v-96abcc38"),e=e(),(0,a.Cn)(),e),Co={class:"timeline-workout"},Do={class:"box"},ko={class:"workout-user-date"},Po={class:"workout-user"},Lo=["title"],Mo={key:0},bo={key:1,class:"no-map"},yo={class:"img"},Go={class:"data"},Fo=vo((()=>(0,a._)("i",{class:"fa fa-clock-o","aria-hidden":"true"},null,-1))),Wo={key:0},Ko={class:"data"},Yo=vo((()=>(0,a._)("i",{class:"fa fa-road","aria-hidden":"true"},null,-1))),xo={key:0,class:"data elevation"},$o=["alt"],Bo={class:"data-values"},Zo={key:1,class:"data altitude"},Ho=vo((()=>(0,a._)("i",{class:"fa fa-location-arrow","aria-hidden":"true"},null,-1))),qo={class:"data-values"};var Vo=(0,a.aZ)({__name:"WorkoutCard",props:{user:null,useImperialUnits:{type:Boolean},workout:{default:()=>({})},sport:{default:()=>({})}},setup(e){const t=e,n=(0,c.o)(),{user:r,workout:s,sport:u,useImperialUnits:d}=(0,i.BK)(t),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LOCALE]));return(e,t)=>{const n=(0,a.up)("router-link"),l=(0,a.up)("SportImage"),c=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",Co,[(0,a._)("div",Do,[(0,a._)("div",ko,[(0,a._)("div",Po,[(0,a.Wm)(Le.Z,{user:(0,i.SU)(r)},null,8,["user"]),(0,i.SU)(r).username?((0,a.wg)(),(0,a.j4)(n,{key:0,class:"workout-user-name",to:{name:"User",params:{username:(0,i.SU)(r).username}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(r).username),1)])),_:1},8,["to"])):(0,a.kq)("",!0)]),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(n,{key:0,class:"workout-title",to:{name:"Workout",params:{workoutId:(0,i.SU)(s).id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(s).title),1)])),_:1},8,["to"])):(0,a.kq)("",!0),(0,i.SU)(s).workout_date&&(0,i.SU)(r)?((0,a.wg)(),(0,a.iD)("div",{key:1,class:"workout-date",title:(0,i.SU)(Ye.p6)((0,i.SU)(s).workout_date,(0,i.SU)(r).timezone,(0,i.SU)(r).date_format)},(0,o.zw)((0,i.SU)(wo.Z)(new Date((0,i.SU)(s).workout_date),new Date,{addSuffix:!0,locale:(0,i.SU)(m)})),9,Lo)):(0,a.kq)("",!0)]),(0,a._)("div",{class:(0,o.C_)(["workout-map",{"no-cursor":!(0,i.SU)(s)}]),onClick:t[0]||(t[0]=t=>(0,i.SU)(s).id?e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(s).id}}):null)},[(0,i.SU)(s)?((0,a.wg)(),(0,a.iD)("div",Mo,[(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.j4)(fo.Z,{key:0,workout:(0,i.SU)(s)},null,8,["workout"])):((0,a.wg)(),(0,a.iD)("div",bo,(0,o.zw)(e.$t("workouts.NO_MAP")),1))])):(0,a.kq)("",!0)],2),(0,a._)("div",{class:(0,o.C_)(["workout-data",{"without-gpx":(0,i.SU)(s)&&!(0,i.SU)(s).with_gpx}]),onClick:t[1]||(t[1]=t=>(0,i.SU)(s).id?e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(s).id}}):null)},[(0,a._)("div",yo,[(0,i.SU)(u).label?((0,a.wg)(),(0,a.j4)(l,{key:0,"sport-label":(0,i.SU)(u).label,color:(0,i.SU)(u).color},null,8,["sport-label","color"])):(0,a.kq)("",!0)]),(0,a._)("div",Go,[Fo,(0,i.SU)(s)?((0,a.wg)(),(0,a.iD)("span",Wo,(0,o.zw)((0,i.SU)(s).moving),1)):(0,a.kq)("",!0)]),(0,a._)("div",Ko,[Yo,(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).distance,digits:3,unitFrom:"km",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)]),(0,i.SU)(s)&&(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.iD)("div",xo,[(0,a._)("img",{class:"mountains",src:"/img/workouts/mountains.svg",alt:e.$t("workouts.ELEVATION")},null,8,$o),(0,a._)("div",Bo,[(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).min_alt,unitFrom:"m",displayUnit:!1,useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0),(0,a.Uk)("/ "),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:1,distance:(0,i.SU)(s).max_alt,unitFrom:"m",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)])])):(0,a.kq)("",!0),(0,i.SU)(s)&&(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.iD)("div",Zo,[Ho,(0,a._)("div",qo,[(0,a.Uk)(" +"),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).ascent,unitFrom:"m",displayUnit:!1,useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0),(0,a.Uk)("/- "),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:1,distance:(0,i.SU)(s).descent,unitFrom:"m",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)])])):(0,a.kq)("",!0)],2)])])}}});const jo=(0,P.Z)(Vo,[["__scopeId","data-v-96abcc38"]]);var Xo=jo,Jo=n(5630),Qo=n(3768);const es={id:"timeline"},ts={class:"section-title"},ns={key:0},rs={key:1},as={key:1,class:"more-workouts"};var os=(0,a.aZ)({__name:"Timeline",props:{sports:null,user:null},setup(e){const t=e,n=(0,c.o)(),{sports:r,user:s}=(0,i.BK)(t),u=(0,i.iH)(1),d=5,m=t.user.nb_workouts>=d?d:t.user.nb_workouts;(0,a.wF)((()=>S()));const _=(0,a.Fl)((()=>n.getters[l.aX.GETTERS.TIMELINE_WORKOUTS])),E=(0,a.Fl)((()=>_.value.length>0&&null!==_.value[_.value.length-1].previous_workout));function S(){n.dispatch(l.aX.ACTIONS.GET_TIMELINE_WORKOUTS,{page:u.value,per_page:d,...Qo.eR})}function T(){u.value+=1,n.dispatch(l.aX.ACTIONS.GET_MORE_TIMELINE_WORKOUTS,{page:u.value,per_page:d,...Qo.eR})}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",es,[(0,a._)("div",ts,(0,o.zw)(e.$t("workouts.LATEST_WORKOUTS")),1),(0,i.SU)(s).nb_workouts>0&&0===(0,i.SU)(_).length?((0,a.wg)(),(0,a.iD)("div",ns,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)([...Array((0,i.SU)(m)).keys()],(e=>((0,a.wg)(),(0,a.j4)(Xo,{user:(0,i.SU)(s),useImperialUnits:(0,i.SU)(s).imperial_units,key:e},null,8,["user","useImperialUnits"])))),128))])):((0,a.wg)(),(0,a.iD)("div",rs,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(_),(e=>((0,a.wg)(),(0,a.j4)(Xo,{workout:e,sport:(0,i.SU)(_).length>0?(0,i.SU)(r).filter((t=>t.id===e.sport_id))[0]:null,user:(0,i.SU)(s),useImperialUnits:(0,i.SU)(s).imperial_units,key:e.id},null,8,["workout","sport","user","useImperialUnits"])))),128)),0===(0,i.SU)(_).length?((0,a.wg)(),(0,a.j4)(Jo.Z,{key:0})):(0,a.kq)("",!0),(0,i.SU)(E)?((0,a.wg)(),(0,a.iD)("div",as,[(0,a._)("button",{onClick:T},(0,o.zw)(e.$t("workouts.LOAD_MORE_WORKOUT")),1)])):(0,a.kq)("",!0)]))]))}});const ss=(0,P.Z)(os,[["__scopeId","data-v-35567bf2"]]);var is=ss,ls=n(1640),cs=n(4559),us=n(7349),ds=n(1743),ms=n(9160),_s=n(1085);const Es=["title"];var Ss=(0,a.aZ)({__name:"CalendarWorkout",props:{displayHARecord:{type:Boolean},workout:null,sportLabel:null,sportColor:null},setup(e){const t=e,{displayHARecord:n,workout:r,sportLabel:o,sportColor:s}=(0,i.BK)(t);return(e,t)=>{const l=(0,a.up)("SportImage");return(0,a.wg)(),(0,a.iD)("div",{class:"calendar-workout",onClick:t[0]||(t[0]=t=>e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(r).id}}))},[(0,a.Wm)(l,{"sport-label":(0,i.SU)(o),title:(0,i.SU)(r).title,color:(0,i.SU)(s)},null,8,["sport-label","title","color"]),(0,a._)("sup",null,[(0,i.SU)(r).records.length>0?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-trophy custom-fa-small","aria-hidden":"true",title:(0,i.SU)(r).records.filter((e=>!!(0,i.SU)(n)||"HA"!==e.record_type)).map((t=>` ${e.$t(`workouts.RECORD_${t.record_type}`)}`))},null,8,Es)):(0,a.kq)("",!0)])])}}});const Ts=Ss;var ps=Ts;const As={class:"donut-chart"},Os={height:"34",width:"34",viewBox:"0 0 34 34"},Rs=["stroke","stroke-dashoffset","transform"];var Is=(0,a.aZ)({__name:"DonutChart",props:{colors:null,datasets:null},setup(e){const t=e,{colors:n,datasets:r}=(0,i.BK)(t);let o=-90;const s=16,l=16,c=14,u=2*Math.PI*c;function d(e,t){return t-e*t}function m(e,t){const n=`rotate(${o}, ${s}, ${l})`;return o=360*t+o,n}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",As,[((0,a.wg)(),(0,a.iD)("svg",Os,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(Object.entries((0,i.SU)(r)),((e,t)=>((0,a.wg)(),(0,a.iD)("g",{key:t},[(0,a._)("circle",{cx:s,cy:l,r:c,fill:"transparent",stroke:(0,i.SU)(n)[+e[0]],"stroke-dashoffset":d(e[1].percentage,u),"stroke-dasharray":u,"stroke-width":"3","stroke-opacity":"0.8",transform:m(t,e[1].percentage)},null,8,Rs)])))),128))]))]))}});const Us=Is;var gs=Us;const Ns={class:"calendar-workouts-chart"},zs={class:"workouts-count"},hs={key:0,class:"workouts-pane"},ws={class:"more-workouts"};var fs=(0,a.aZ)({__name:"CalendarWorkoutsChart",props:{colors:null,datasets:null,sports:null,workouts:null},setup(e){const t=e,{colors:n,datasets:r,sports:s,workouts:l}=(0,i.BK)(t),c=(0,i.iH)(!0);function u(e){e.stopPropagation(),c.value=!c.value}return(e,t)=>{const d=(0,a.Q2)("click-outside");return(0,a.wg)(),(0,a.iD)("div",Ns,[(0,a._)("div",{class:"workouts-chart",onClick:u},[(0,a._)("div",zs,(0,o.zw)((0,i.SU)(l).length),1),(0,a.Wm)(gs,{datasets:(0,i.SU)(r),colors:(0,i.SU)(n)},null,8,["datasets","colors"])]),c.value?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("div",hs,[(0,a.wy)(((0,a.wg)(),(0,a.iD)("div",ws,[(0,a._)("i",{class:"fa fa-times calendar-more","aria-hidden":"true",onClick:u}),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(l),((e,t)=>((0,a.wg)(),(0,a.j4)(ps,{key:t,workout:e,sportLabel:(0,i.SU)(le.PA)(e,(0,i.SU)(s)),sportColor:(0,i.SU)(le.CM)(e,(0,i.SU)(s))},null,8,["workout","sportLabel","sportColor"])))),128))])),[[d,u]])]))])}}});const vs=(0,P.Z)(fs,[["__scopeId","data-v-52d4310a"]]);var Cs=vs;const Ds={class:"calendar-workouts"},ks={class:"desktop-display"},Ps={key:0,class:"workouts-display"},Ls={key:1,class:"donut-display"},Ms={class:"mobile-display"},bs={key:0,class:"donut-display"};var ys=(0,a.aZ)({__name:"CalendarWorkouts",props:{displayHARecord:{type:Boolean},workouts:null,sports:null},setup(e){const t=e,{displayHARecord:n,workouts:r,sports:o}=(0,i.BK)(t),s=(0,a.Fl)((()=>(0,Qo.BN)(t.workouts))),l=(0,a.Fl)((()=>(0,le.Yx)(t.sports))),c=6;return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ds,[(0,a._)("div",ks,[(0,i.SU)(r).length<=c?((0,a.wg)(),(0,a.iD)("div",Ps,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(r).slice(0,c),((e,t)=>((0,a.wg)(),(0,a.j4)(ps,{key:t,displayHARecord:(0,i.SU)(n),workout:e,sportLabel:(0,i.SU)(le.PA)(e,(0,i.SU)(o)),sportColor:(0,i.SU)(le.CM)(e,(0,i.SU)(o))},null,8,["displayHARecord","workout","sportLabel","sportColor"])))),128))])):((0,a.wg)(),(0,a.iD)("div",Ls,[(0,a.Wm)(Cs,{workouts:(0,i.SU)(r),sports:(0,i.SU)(o),datasets:(0,i.SU)(s),colors:(0,i.SU)(l)},null,8,["workouts","sports","datasets","colors"])]))]),(0,a._)("div",Ms,[(0,i.SU)(r).length>0?((0,a.wg)(),(0,a.iD)("div",bs,[(0,a.Wm)(Cs,{workouts:(0,i.SU)(r),sports:(0,i.SU)(o),datasets:(0,i.SU)(s),colors:(0,i.SU)(l)},null,8,["workouts","sports","datasets","colors"])])):(0,a.kq)("",!0)])]))}});const Gs=ys;var Fs=Gs;const Ws={class:"calendar-cells"},Ks={class:"calendar-cell-day"};var Ys=(0,a.aZ)({__name:"CalendarCells",props:{currentDay:null,displayHARecord:{type:Boolean},endDate:null,sports:null,startDate:null,timezone:null,weekStartingMonday:{type:Boolean},workouts:null},setup(e){const t=e,{currentDay:n,displayHARecord:r,endDate:s,sports:l,startDate:c,timezone:u,weekStartingMonday:d,workouts:m}=(0,i.BK)(t),_=(0,i.iH)([]);function E(){_.value=[];let e=c.value;while(e<=s.value){const t=[];for(let n=0;n<7;n++)t.push(e),e=(0,us.Z)(e,1);_.value.push(t)}}function S(e){return d.value?[5,6].includes(e):[0,6].includes(e)}function T(e,t){return t?t.filter((t=>(0,ds.Z)((0,Ye.eB)(t.workout_date,u.value),e))).reverse():[]}return(0,a.bv)((()=>E())),(0,a.YP)((()=>t.currentDay),(()=>E())),(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ws,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(_.value,((e,t)=>((0,a.wg)(),(0,a.iD)("div",{class:"calendar-row",key:t},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(e,((e,t)=>((0,a.wg)(),(0,a.iD)("div",{class:(0,o.C_)(["calendar-cell",{"disabled-cell":!(0,i.SU)(ms.Z)(e,(0,i.SU)(n)),"week-end":S(t),today:(0,i.SU)(_s.Z)(e)}]),key:t},[(0,a.Wm)(Fs,{workouts:T(e,(0,i.SU)(m)),sports:(0,i.SU)(l),displayHARecord:(0,i.SU)(r)},null,8,["workouts","sports","displayHARecord"]),(0,a._)("div",Ks,(0,o.zw)((0,i.SU)(jt.Z)(e,"d")),1)],2)))),128))])))),128))]))}});const xs=Ys;var $s=xs;const Bs={class:"calendar-days"};var Zs=(0,a.aZ)({__name:"CalendarDays",props:{startDate:null,localeOptions:null},setup(e){const t=e,n=[];for(let r=0;r<7;r++)n.push((0,us.Z)(t.startDate,r));return(t,r)=>((0,a.wg)(),(0,a.iD)("div",Bs,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(n,((t,n)=>(0,a._)("div",{class:"calendar-day",key:n},(0,o.zw)((0,i.SU)(jt.Z)(t,"EEE",{locale:e.localeOptions})),1))),64))]))}});const Hs=Zs;var qs=Hs;const Vs={class:"calendar-header"},js=(0,a._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1),Xs=[js],Js={class:"calendar-month"},Qs=(0,a._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1),ei=[Qs];var ti=(0,a.aZ)({__name:"CalendarHeader",props:{day:null,localeOptions:null},emits:["displayNextMonth","displayPreviousMonth"],setup(e,{emit:t}){const n=e,{day:r,localeOptions:s}=(0,i.BK)(n);return(e,n)=>((0,a.wg)(),(0,a.iD)("div",Vs,[(0,a._)("div",{class:"calendar-arrow calendar-arrow-left",onClick:n[0]||(n[0]=e=>t("displayPreviousMonth"))},Xs),(0,a._)("div",Js,[(0,a._)("span",null,(0,o.zw)((0,i.SU)(jt.Z)((0,i.SU)(r),"MMM yyyy",{locale:(0,i.SU)(s)})),1)]),(0,a._)("div",{class:"calendar-arrow calendar-arrow-right",onClick:n[1]||(n[1]=e=>t("displayNextMonth"))},ei)]))}});const ni=ti;var ri=ni;const ai={id:"user-calendar"},oi={class:"calendar-card box"};var si=(0,a.aZ)({__name:"index",props:{sports:null,user:null},setup(e){const t=e,n=(0,c.o)(),{sports:r,user:o}=(0,i.BK)(t),s="yyyy-MM-dd",u=(0,i.iH)(new Date),d=(0,i.iH)((0,Ye.yx)(u.value,t.user.weekm)),m=(0,a.Fl)((()=>n.getters[l.aX.GETTERS.CALENDAR_WORKOUTS])),_=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LOCALE]));function E(){d.value=(0,Ye.yx)(u.value,t.user.weekm);const e={from:(0,jt.Z)(d.value.start,s),to:(0,jt.Z)(d.value.end,s),page:1,per_page:100,...Qo.eR};n.dispatch(l.aX.ACTIONS.GET_CALENDAR_WORKOUTS,e)}function S(){u.value=(0,ls.Z)(u.value,1),E()}function T(){u.value=(0,cs.Z)(u.value,1),E()}return(0,a.wF)((()=>E())),(e,t)=>((0,a.wg)(),(0,a.iD)("div",ai,[(0,a._)("div",oi,[(0,a.Wm)(ri,{day:u.value,"locale-options":(0,i.SU)(_),onDisplayNextMonth:S,onDisplayPreviousMonth:T},null,8,["day","locale-options"]),(0,a.Wm)(qs,{"start-date":d.value.start,"locale-options":(0,i.SU)(_)},null,8,["start-date","locale-options"]),(0,a.Wm)($s,{currentDay:u.value,displayHARecord:(0,i.SU)(o).display_ascent,"end-date":d.value.end,sports:(0,i.SU)(r),"start-date":d.value.start,timezone:(0,i.SU)(o).timezone,workouts:(0,i.SU)(m),weekStartingMonday:(0,i.SU)(o).weekm},null,8,["currentDay","displayHARecord","end-date","sports","start-date","timezone","workouts","weekStartingMonday"])])]))}});const ii=si;var li=ii,ci=n(3703),ui=n(4135),di=n(3170);const mi={class:"user-month-stats"};var _i=(0,a.aZ)({__name:"UserMonthStats",props:{sports:null,user:null},setup(e){const t=e,{sports:n,user:r}=(0,i.BK)(t),s=new Date,l={duration:"week",start:(0,ci.Z)(s),end:(0,ui.Z)(s)},c=t.sports.map((e=>e.id));return(e,t)=>{const s=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",mi,[(0,a.Wm)(s,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("dashboard.THIS_MONTH")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(di.Z,{sports:(0,i.SU)(n),user:(0,i.SU)(r),"chart-params":l,"displayed-sport-ids":(0,i.SU)(c),"hide-chart-if-no-data":!0},null,8,["sports","user","displayed-sport-ids"])])),_:1})])}}});const Ei=(0,P.Z)(_i,[["__scopeId","data-v-1bcddc12"]]);var Si=Ei,Ti=n(2540),pi=n(3649);const{locale:Ai}=Ti.Z.global,Oi=(e,t,n,r)=>{const a="km",o=n?pi.Dl[a].defaultTarget:a,s="m",i=n?pi.Dl[s].defaultTarget:s;let l;switch(e.record_type){case"AS":case"MS":l=`${(0,pi.sC)(+e.value,a,o,2)} ${o}/h`;break;case"FD":l=`${(0,pi.sC)(+e.value,a,o,3)} ${o}`;break;case"HA":l=`${(0,pi.sC)(+e.value,s,i,2)} ${i}`;break;case"LD":l=e.value;break;default:throw new Error(`Invalid record type, expected: "AS", "FD", "HA", "LD", "MD", got: "${e.record_type}"`)}return{workout_date:(0,Ye.p6)(e.workout_date,t,r,!1),workout_id:e.workout_id,id:e.id,record_type:e.record_type,value:l}},Ri=(e,t)=>{const n=e.label.toLowerCase(),r=t.label.toLowerCase();return n>r?1:n(o=(0,Ye.mh)(o,Ai.value),e.filter((e=>!!a||"HA"!==e.record_type)).reduce(((e,a)=>{const s=t.find((e=>e.id===a.sport_id));return s&&s.label&&(void 0===e[s.translatedLabel]&&(e[s.translatedLabel]={label:s.label,color:s.color,records:[]}),e[s.translatedLabel].records.push(Oi(a,n,r,o))),e}),{})),Ui={class:"records-card"},gi={class:"record-type"},Ni={class:"record-value"},zi={class:"record-date"};var hi=(0,a.aZ)({__name:"RecordsCard",props:{records:null,sportTranslatedLabel:null},setup(e){const t=e,{records:n,sportTranslatedLabel:r}=(0,i.BK)(t),{t:s}=(0,ie.QT)();function l(e){const t=[];return e.map((e=>{t.push({...e,label:s(`workouts.RECORD_${e.record_type}`)})})),t.sort(Ri)}return(e,t)=>{const s=(0,a.up)("SportImage"),c=(0,a.up)("router-link"),u=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",Ui,[(0,a.Wm)(u,null,{title:(0,a.w5)((()=>[(0,a.Wm)(s,{"sport-label":(0,i.SU)(n).label,color:(0,i.SU)(n).color},null,8,["sport-label","color"]),(0,a.Uk)(" "+(0,o.zw)((0,i.SU)(r)),1)])),content:(0,a.w5)((()=>[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(l((0,i.SU)(n).records),(e=>((0,a.wg)(),(0,a.iD)("div",{class:"record",key:e.id},[(0,a._)("span",gi,(0,o.zw)(e.label),1),(0,a._)("span",Ni,(0,o.zw)(e.value),1),(0,a._)("span",zi,[(0,a.Wm)(c,{to:{name:"Workout",params:{workoutId:e.workout_id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.workout_date),1)])),_:2},1032,["to"])])])))),128))])),_:1})])}}});const wi=(0,P.Z)(hi,[["__scopeId","data-v-8d17c606"]]);var fi=wi;const vi=e=>((0,a.dD)("data-v-f0c85cb8"),e=e(),(0,a.Cn)(),e),Ci={class:"user-records-section"},Di={class:"section-title"},ki=vi((()=>(0,a._)("i",{class:"fa fa-trophy custom-fa-small","aria-hidden":"true"},null,-1))),Pi={class:"user-records"},Li={key:0,class:"no-records"};var Mi=(0,a.aZ)({__name:"index",props:{sports:null,user:null},setup(e){const t=e,{t:n}=(0,ie.QT)(),r=(0,a.Fl)((()=>Ii(t.user.records,(0,le.xH)(t.sports,n),t.user.timezone,t.user.imperial_units,t.user.display_ascent,t.user.date_format)));return(t,n)=>((0,a.wg)(),(0,a.iD)("div",Ci,[(0,a._)("div",Di,[ki,(0,a.Uk)(" "+(0,o.zw)(t.$t("workouts.RECORD",2)),1)]),(0,a._)("div",Pi,[0===Object.keys((0,i.SU)(r)).length?((0,a.wg)(),(0,a.iD)("div",Li,(0,o.zw)(t.$t("workouts.NO_RECORDS")),1)):(0,a.kq)("",!0),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(Object.keys((0,i.SU)(r)).sort(),(t=>((0,a.wg)(),(0,a.j4)(fi,{sportTranslatedLabel:t,records:(0,i.SU)(r)[t],key:t,useImperialUnits:e.user.imperial_units},null,8,["sportTranslatedLabel","records","useImperialUnits"])))),128))])]))}});const bi=(0,P.Z)(Mi,[["__scopeId","data-v-f0c85cb8"]]);var yi=bi;const Gi={id:"user-stats"};var Fi=(0,a.aZ)({__name:"index",props:{user:null},setup(e){const t=e,{t:n}=(0,ie.QT)(),{user:r}=(0,i.BK)(t),o=(0,a.Fl)((()=>t.user.total_duration)),s=(0,a.Fl)((()=>E(o))),l="km",c=r.value.imperial_units?pi.Dl[l].defaultTarget:l,u=(0,a.Fl)((()=>r.value.imperial_units?(0,pi.sC)(r.value.total_distance,l,c,2):parseFloat(r.value.total_distance.toFixed(2)))),d="m",m=r.value.imperial_units?pi.Dl[d].defaultTarget:d,_=(0,a.Fl)((()=>r.value.imperial_units?(0,pi.sC)(r.value.total_ascent,d,m,2):parseFloat(r.value.total_ascent.toFixed(2))));function E(e){const t=e.value.match(/day/g)?e.value.split(", ")[1]:e.value;return{days:e.value.match(/day/g)?`${e.value.split(" ")[0]} ${e.value.match(/days/g)?n("common.DAY",2):n("common.DAY",1)}`:`0 ${n("common.DAY",2)},`,duration:`${t.split(":")[0]}h ${t.split(":")[1]}min`}}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Gi,[(0,a.Wm)($,{icon:"calendar",value:(0,i.SU)(r).nb_workouts,text:e.$t("workouts.WORKOUT",(0,i.SU)(r).nb_workouts)},null,8,["value","text"]),(0,a.Wm)($,{icon:"road",value:(0,i.SU)(u),text:"mi"===(0,i.SU)(c)?"miles":(0,i.SU)(c)},null,8,["value","text"]),(0,i.SU)(r).display_ascent?((0,a.wg)(),(0,a.j4)($,{key:0,icon:"location-arrow",value:(0,i.SU)(_),text:"ft"===(0,i.SU)(m)?"feet":(0,i.SU)(m)},null,8,["value","text"])):(0,a.kq)("",!0),(0,a.Wm)($,{icon:"clock-o",value:(0,i.SU)(s).days,text:(0,i.SU)(s).duration},null,8,["value","text"]),(0,i.SU)(r).display_ascent?(0,a.kq)("",!0):((0,a.wg)(),(0,a.j4)($,{key:1,icon:"tags",value:(0,i.SU)(r).nb_sports,text:e.$t("workouts.SPORT",(0,i.SU)(r).nb_sports)},null,8,["value","text"]))]))}});const Wi=Fi;var Ki=Wi;const Yi=e=>((0,a.dD)("data-v-4c0893c1"),e=e(),(0,a.Cn)(),e),xi={key:0,id:"dashboard",class:"view"},$i={class:"container mobile-menu"},Bi={class:"box"},Zi=Yi((()=>(0,a._)("i",{class:"fa fa-calendar","aria-hidden":"true"},null,-1))),Hi=[Zi],qi=Yi((()=>(0,a._)("i",{class:"fa fa-bar-chart","aria-hidden":"true"},null,-1))),Vi=[qi],ji=Yi((()=>(0,a._)("i",{class:"fa fa-map-o","aria-hidden":"true"},null,-1))),Xi=[ji],Ji=Yi((()=>(0,a._)("i",{class:"fa fa-trophy","aria-hidden":"true"},null,-1))),Qi=[Ji],el={class:"container"},tl={class:"container dashboard-container"},nl={class:"left-container dashboard-sub-container"},rl={class:"right-container dashboard-sub-container"},al=Yi((()=>(0,a._)("div",{id:"bottom"},null,-1))),ol={key:1,class:"app-loading"};var sl=(0,a.aZ)({__name:"Dashboard",setup(e){const t=(0,c.o)(),n=(0,a.Fl)((()=>t.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),r=(0,a.Fl)((()=>t.getters[l.O8.GETTERS.SPORTS])),s=(0,i.iH)("calendar");function u(e){s.value=e}return(0,a.wF)((()=>t.dispatch(l.YN.ACTIONS.GET_USER_PROFILE))),(e,t)=>{const l=(0,a.up)("Loader");return(0,i.SU)(n).username&&(0,i.SU)(r).length>0?((0,a.wg)(),(0,a.iD)("div",xi,[(0,a._)("div",$i,[(0,a._)("div",Bi,[(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"calendar"===s.value}]),onClick:t[0]||(t[0]=e=>u("calendar"))},Hi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"chart"===s.value}]),onClick:t[1]||(t[1]=e=>u("chart"))},Vi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"timeline"===s.value}]),onClick:t[2]||(t[2]=e=>u("timeline"))},Xi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"records"===s.value}]),onClick:t[3]||(t[3]=e=>u("records"))},Qi,2)])]),(0,a._)("div",el,[(0,a.Wm)(Ki,{user:(0,i.SU)(n)},null,8,["user"])]),(0,a._)("div",tl,[(0,a._)("div",nl,[(0,a.Wm)(Si,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("chart"===s.value)})},null,8,["sports","user","class"]),(0,a.Wm)(yi,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("records"===s.value)})},null,8,["sports","user","class"])]),(0,a._)("div",rl,[(0,a.Wm)(li,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("calendar"===s.value)})},null,8,["sports","user","class"]),(0,a.Wm)(is,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("timeline"===s.value)})},null,8,["sports","user","class"])])]),al])):((0,a.wg)(),(0,a.iD)("div",ol,[(0,a.Wm)(l)]))}}});const il=(0,P.Z)(sl,[["__scopeId","data-v-4c0893c1"]]);var ll=il,cl=n(8273);const ul={class:"not-found view"};var dl=(0,a.aZ)({__name:"NotFoundView",setup(e){return(e,t)=>((0,a.wg)(),(0,a.iD)("div",ul,[(0,a.Wm)(cl.Z)]))}});const ml=dl;var _l=ml,El=n(2411);const Sl={id:"loginOrRegister",class:"view"},Tl={class:"container"},pl={class:"container-sub"},Al={class:"container-sub"};var Ol=(0,a.aZ)({__name:"LoginOrRegister",props:{action:null},setup(e){const t=e,{action:n}=(0,i.BK)(t);return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Sl,[(0,a._)("div",Tl,[(0,a._)("div",pl,[(0,a.Wm)(Oo)]),(0,a._)("div",Al,[(0,a.Wm)(El.Z,{action:(0,i.SU)(n)},null,8,["action"])])])]))}});const Rl=(0,P.Z)(Ol,[["__scopeId","data-v-6a38125b"]]);var Il=Rl;const Ul=e=>{const t=/(\/profile)(\/edit)*(\/*)/,n=e.replace(t,"").toUpperCase();return""===n?"PROFILE":n.toUpperCase()},gl=[{path:"/",name:"Dashboard",component:ll},{path:"/login",name:"Login",component:Il,props:{action:"login"}},{path:"/register",name:"Register",component:Il,props:{action:"register"}},{path:"/account-confirmation",name:"AccountConfirmation",component:()=>n.e(845).then(n.bind(n,4264))},{path:"/account-confirmation/resend",name:"AccountConfirmationResend",component:()=>n.e(24).then(n.bind(n,5639)),props:{action:"account-confirmation-resend"}},{path:"/account-confirmation/email-sent",name:"AccountConfirmationEmailSend",component:()=>n.e(24).then(n.bind(n,5639)),props:{action:"email-sent"}},{path:"/password-reset/sent",name:"PasswordEmailSent",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"request-sent"}},{path:"/password-reset/request",name:"PasswordResetRequest",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"reset-request"}},{path:"/password-reset/password-updated",name:"PasswordUpdated",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"password-updated"}},{path:"/password-reset",name:"PasswordReset",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"reset"}},{path:"/email-update",name:"EmailUpdate",component:()=>n.e(845).then(n.bind(n,8160))},{path:"/profile",name:"Profile",component:()=>n.e(845).then(n.bind(n,6266)),children:[{path:"",name:"UserProfile",component:Nt,props:e=>({tab:Ul(e.path)}),children:[{path:"",name:"UserInfos",component:zt.Z},{path:"preferences",name:"UserPreferences",component:Dt},{path:"sports",name:"UserSportPreferences",component:ja,props:{isEdition:!1}},{path:"apps",name:"UserApps",component:Xr,children:[{path:"",name:"UserAppsList",component:Ra},{path:":id",name:"UserApp",component:da},{path:":id/created",name:"CreatedUserApp",component:da,props:{afterCreation:!0}},{path:"new",name:"AddUserApp",component:Mr},{path:"authorize",name:"AuthorizeUserApp",component:Hr}]}]},{path:"edit",name:"UserProfileEdition",component:Mt,props:e=>({tab:Ul(e.path)}),children:[{path:"",name:"UserInfosEdition",component:Sn},{path:"account",name:"UserAccountEdition",component:Vt},{path:"picture",name:"UserPictureEdition",component:wn},{path:"preferences",name:"UserPreferencesEdition",component:ur},{path:"sports",name:"UserSportPreferencesEdition",component:ja,props:{isEdition:!0}}]}]},{path:"/statistics",name:"Statistics",component:()=>n.e(193).then(n.bind(n,7885))},{path:"/users/:username",name:"User",component:()=>n.e(845).then(n.bind(n,9453))},{path:"/workouts",name:"Workouts",component:()=>n.e(401).then(n.bind(n,5651))},{path:"/workouts/:workoutId",name:"Workout",component:()=>n.e(401).then(n.bind(n,4915)),props:{displaySegment:!1}},{path:"/workouts/:workoutId/edit",name:"EditWorkout",component:()=>n.e(401).then(n.bind(n,8237))},{path:"/workouts/:workoutId/segment/:segmentId",name:"WorkoutSegment",component:()=>n.e(401).then(n.bind(n,4915)),props:{displaySegment:!0}},{path:"/workouts/add",name:"AddWorkout",component:()=>n.e(401).then(n.bind(n,4189))},{path:"/admin",name:"Administration",component:()=>n.e(328).then(n.bind(n,6e3)),children:[{path:"",name:"AdministrationMenu",component:se},{path:"application",name:"ApplicationAdministration",component:M},{path:"application/edit",name:"ApplicationAdministrationEdition",component:M,props:{edition:!0}},{path:"sports",name:"SportsAdministration",component:De},{path:"users/:username",name:"UserFromAdmin",component:()=>n.e(845).then(n.bind(n,9453)),props:{fromAdmin:!0}},{path:"users",name:"UsersAdministration",component:mt}]},{path:"/about",name:"About",component:ho},{path:"/:pathMatch(.*)*",name:"not-found",component:_l}],Nl=(0,r.p7)({history:(0,r.PO)("/"),routes:gl}),zl=["/login","/password-reset","/password-reset/password-updated","/password-reset/request","/password-reset/sent","/register","/account-confirmation","/account-confirmation/resend","/account-confirmation/email-sent"],hl=["/email-update","/about"];Nl.beforeEach(((e,t,n)=>{Xa.Z.dispatch(l.YN.ACTIONS.CHECK_AUTH_USER).then((()=>{if(hl.includes(e.path))return n();if(Xa.Z.getters[l.YN.GETTERS.IS_AUTHENTICATED]&&zl.includes(e.path))return n("/");if(Xa.Z.getters[l.YN.GETTERS.IS_AUTHENTICATED]||zl.includes(e.path))n();else{const t="/"===e.path?{path:"/login"}:{path:"/login",query:{from:e.fullPath}};n(t)}})).catch((e=>{console.error(e),n()}))}));var wl=Nl},5801:function(e,t,n){"use strict";var r,a,o,s,i,l,c,u,d,m,_,E,S,T,p,A,O,R;n.d(t,{YN:function(){return z},Km:function(){return h},SY:function(){return U},O8:function(){return g},gu:function(){return N},RT:function(){return w},aX:function(){return f}}),function(e){e["CHECK_AUTH_USER"]="CHECK_AUTH_USER",e["CONFIRM_ACCOUNT"]="CONFIRM_ACCOUNT",e["CONFIRM_EMAIL"]="CONFIRM_EMAIL",e["DELETE_ACCOUNT"]="DELETE_ACCOUNT",e["DELETE_PICTURE"]="DELETE_PICTURE",e["GET_USER_PROFILE"]="GET_USER_PROFILE",e["LOGIN_OR_REGISTER"]="LOGIN_OR_REGISTER",e["LOGOUT"]="LOGOUT",e["SEND_PASSWORD_RESET_REQUEST"]="SEND_PASSWORD_RESET_REQUEST",e["RESEND_ACCOUNT_CONFIRMATION_EMAIL"]="RESEND_ACCOUNT_CONFIRMATION_EMAIL",e["RESET_USER_PASSWORD"]="RESET_USER_PASSWORD",e["RESET_USER_SPORT_PREFERENCES"]="RESET_USER_SPORT_PREFERENCES",e["UPDATE_USER_ACCOUNT"]="UPDATE_USER_ACCOUNT",e["UPDATE_USER_PICTURE"]="UPDATE_USER_PICTURE",e["UPDATE_USER_PROFILE"]="UPDATE_USER_PROFILE",e["UPDATE_USER_PREFERENCES"]="UPDATE_USER_PREFERENCES",e["UPDATE_USER_SPORT_PREFERENCES"]="UPDATE_USER_SPORT_PREFERENCES"}(r||(r={})),function(e){e["AUTH_TOKEN"]="AUTH_TOKEN",e["AUTH_USER_PROFILE"]="AUTH_USER_PROFILE",e["IS_ADMIN"]="IS_ADMIN",e["IS_AUTHENTICATED"]="IS_AUTHENTICATED",e["IS_SUCCESS"]="IS_SUCCESS",e["IS_REGISTRATION_SUCCESS"]="IS_REGISTRATION_SUCCESS",e["USER_LOADING"]="USER_LOADING"}(a||(a={})),function(e){e["CLEAR_AUTH_USER_TOKEN"]="CLEAR_AUTH_USER_TOKEN",e["UPDATE_AUTH_TOKEN"]="UPDATE_AUTH_TOKEN",e["UPDATE_AUTH_USER_PROFILE"]="UPDATE_AUTH_USER_PROFILE",e["UPDATE_IS_SUCCESS"]="UPDATE_USER_IS_SUCCESS",e["UPDATE_IS_REGISTRATION_SUCCESS"]="UPDATE_IS_REGISTRATION_SUCCESS",e["UPDATE_USER_LOADING"]="UPDATE_USER_LOADING"}(o||(o={})),function(e){e["AUTHORIZE_CLIENT"]="AUTHORIZE_CLIENT",e["CREATE_CLIENT"]="CREATE_CLIENT",e["DELETE_CLIENT"]="DELETE_CLIENT",e["GET_CLIENTS"]="GET_CLIENTS",e["GET_CLIENT_BY_CLIENT_ID"]="GET_CLIENT_BY_CLIENT_ID",e["GET_CLIENT_BY_ID"]="GET_CLIENT_BY_ID",e["REVOKE_ALL_TOKENS"]="REVOKE_ALL_TOKENS"}(s||(s={})),function(e){e["CLIENT"]="CLIENT",e["CLIENTS"]="CLIENTS",e["CLIENTS_PAGINATION"]="CLIENTS_PAGINATION",e["REVOCATION_SUCCESSFUL"]="REVOCATION_SUCCESSFUL"}(i||(i={})),function(e){e["EMPTY_CLIENT"]="EMPTY_CLIENT",e["SET_CLIENT"]="SET_CLIENT",e["SET_CLIENTS"]="SET_CLIENTS",e["SET_CLIENTS_PAGINATION"]="SET_CLIENTS_PAGINATION",e["SET_REVOCATION_SUCCESSFUL"]="SET_REVOCATION_SUCCESSFUL"}(l||(l={})),function(e){e["GET_APPLICATION_CONFIG"]="GET_APPLICATION_CONFIG",e["GET_APPLICATION_STATS"]="GET_APPLICATION_STATS",e["UPDATE_APPLICATION_CONFIG"]="UPDATE_APPLICATION_CONFIG",e["UPDATE_APPLICATION_LANGUAGE"]="UPDATE_APPLICATION_LANGUAGE"}(c||(c={})),function(e){e["APP_CONFIG"]="APP_CONFIG",e["APP_LOADING"]="APP_LOADING",e["APP_STATS"]="APP_STATS",e["ERROR_MESSAGES"]="ERROR_MESSAGES",e["LANGUAGE"]="LANGUAGE",e["LOCALE"]="LOCALE"}(u||(u={})),function(e){e["EMPTY_ERROR_MESSAGES"]="EMPTY_ERROR_MESSAGES",e["SET_ERROR_MESSAGES"]="SET_ERROR_MESSAGES",e["UPDATE_APPLICATION_CONFIG"]="UPDATE_APPLICATION_CONFIG",e["UPDATE_APPLICATION_LOADING"]="UPDATE_APPLICATION_LOADING",e["UPDATE_APPLICATION_STATS"]="UPDATE_APPLICATION_STATS",e["UPDATE_LANG"]="UPDATE_LANG"}(d||(d={})),function(e){e["GET_SPORTS"]="GET_SPORTS",e["UPDATE_SPORTS"]="UPDATE_SPORTS"}(m||(m={})),function(e){e["SPORTS"]="SPORTS"}(_||(_={})),function(e){e["SET_SPORTS"]="SET_SPORTS"}(E||(E={})),function(e){e["GET_USER_STATS"]="GET_USER_STATS"}(S||(S={})),function(e){e["USER_STATS"]="USER_STATS"}(T||(T={})),function(e){e["EMPTY_USER_STATS"]="EMPTY_USER_STATS",e["UPDATE_USER_STATS"]="UPDATE_USER_STATS"}(p||(p={})),function(e){e["EMPTY_USER"]="EMPTY_USER",e["EMPTY_USERS"]="EMPTY_USERS",e["GET_USER"]="GET_USER",e["GET_USERS"]="GET_USERS",e["UPDATE_USER"]="UPDATE_USER",e["DELETE_USER_ACCOUNT"]="DELETE_USER_ACCOUNT"}(A||(A={})),function(e){e["USER"]="USER",e["USERS"]="USERS",e["USERS_IS_SUCCESS"]="USERS_IS_SUCCESS",e["USERS_LOADING"]="USERS_LOADING",e["USERS_PAGINATION"]="USERS_PAGINATION"}(O||(O={})),function(e){e["UPDATE_USER"]="UPDATE_USER",e["UPDATE_USER_IN_USERS"]="UPDATE_USER_IN_USERS",e["UPDATE_USERS"]="UPDATE_USERS",e["UPDATE_USERS_LOADING"]="UPDATE_USERS_LOADING",e["UPDATE_USERS_PAGINATION"]="UPDATE_USERS_PAGINATION",e["UPDATE_IS_SUCCESS"]="UPDATE_IS_SUCCESS"}(R||(R={}));var I=n(52);const U={ACTIONS:c,GETTERS:u,MUTATIONS:d},g={ACTIONS:m,GETTERS:_,MUTATIONS:E},N={ACTIONS:S,GETTERS:T,MUTATIONS:p},z={ACTIONS:r,GETTERS:a,MUTATIONS:o},h={ACTIONS:s,GETTERS:i,MUTATIONS:l},w={ACTIONS:A,GETTERS:O,MUTATIONS:R},f={ACTIONS:I.tW,GETTERS:I.JP,MUTATIONS:I.CW}},2894:function(e,t,n){"use strict";n.d(t,{Z:function(){return me}});var r=n(3907),a=(n(7658),n(5167)),o=n(9669),s=n.n(o),i=n(8566),l=n(2024);const c=s().create({baseURL:(0,l.k)()});c.interceptors.request.use((e=>{const t=new AbortController;e.signal=t.signal;const n=(0,i.a)(e);return i.j.set(n,t),e}),(e=>Promise.reject(e))),c.interceptors.response.use((e=>((0,i.a)(e.config),e)),(e=>("canceled"!==e.message&&(0,i.a)(e.response.config),Promise.reject(e))));var u=c,d=n(5073),m=n(5801);const _=(e,t)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z["delete"](`users/${t.username}`).then((n=>{204===n.status?t.fromAdmin?d.Z.push("/admin/users"):e.dispatch(m.YN.ACTIONS.LOGOUT).then((()=>d.Z.push("/"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},E={[m.RT.ACTIONS.EMPTY_USER](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USER,{})},[m.RT.ACTIONS.EMPTY_USERS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS,[]),e.commit(m.RT.MUTATIONS.UPDATE_USERS_PAGINATION,{})},[m.RT.ACTIONS.GET_USER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!0),a.Z.get(`users/${t}`).then((t=>{"success"===t.data.status?e.commit(m.RT.MUTATIONS.UPDATE_USER,t.data.data.users[0]):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.GET_USERS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!0),a.Z.get("users",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.RT.MUTATIONS.UPDATE_USERS,t.data.data.users),e.commit(m.RT.MUTATIONS.UPDATE_USERS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.UPDATE_USER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1);const n={};void 0!==t.admin&&(n.admin=t.admin),t.resetPassword&&(n.reset_password=t.resetPassword),t.activate&&(n.activate=t.activate),void 0!==t.new_email&&(n.new_email=t.new_email),a.Z.patch(`users/${t.username}`,n).then((n=>{"success"===n.data.status?(e.commit(m.RT.MUTATIONS.UPDATE_USER_IN_USERS,n.data.data.users[0]),(t.resetPassword||t.new_email)&&e.commit(m.RT.MUTATIONS.UPDATE_IS_SUCCESS,!0),(t.activate||t.new_email)&&e.commit(m.RT.MUTATIONS.UPDATE_USER,n.data.data.users[0])):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.DELETE_USER_ACCOUNT](e,t){_(e,{username:t.username,fromAdmin:!0})}},S=e=>{localStorage.removeItem("authToken"),e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.gu.MUTATIONS.EMPTY_USER_STATS),e.commit(m.YN.MUTATIONS.CLEAR_AUTH_USER_TOKEN),e.commit(m.RT.MUTATIONS.UPDATE_USERS,[]),e.commit(m.aX.MUTATIONS.EMPTY_WORKOUTS),e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),d.Z.push("/login")},T={[m.YN.ACTIONS.CHECK_AUTH_USER](e){window.localStorage.authToken&&!e.getters[m.YN.GETTERS.IS_AUTHENTICATED]&&(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,window.localStorage.authToken),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE)),!window.localStorage.authToken&&e.getters[m.YN.GETTERS.IS_AUTHENTICATED]&&S(e)},[m.YN.ACTIONS.CONFIRM_ACCOUNT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/account/confirm",{token:t.token}).then((t=>{if("success"===t.data.status){const n=t.data.auth_token;window.localStorage.setItem("authToken",n),e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,n),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/")))}else(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t)}))},[m.YN.ACTIONS.CONFIRM_EMAIL](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),u.post("/auth/email/update",{token:t.token}).then((n=>{"success"===n.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!0),t.refreshUser&&e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile/edit/account"))),d.Z.push("/profile/edit/account")):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t)}))},[m.YN.ACTIONS.GET_USER_PROFILE](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("auth/profile").then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),t.data.data.language&&e.dispatch(m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,t.data.data.language),e.dispatch(m.O8.ACTIONS.GET_SPORTS)):((0,l.S)(e,null),S(e))})).catch((t=>{"canceled"!==t.message&&((0,l.S)(e,t),S(e))}))},[m.YN.ACTIONS.LOGIN_OR_REGISTER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!1),u.post(`/auth/${t.actionType}`,t.formData).then((n=>{if("success"===n.data.status)if("login"===t.actionType){const r=n.data.auth_token;window.localStorage.setItem("authToken",r),e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,r),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("string"===typeof t.redirectUrl?t.redirectUrl:"/")))}else d.Z.push("/login").then((()=>e.commit(m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!0)));else(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.LOGOUT](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.post("auth/logout").then((t=>{"success"===t.data.status?S(e):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.UPDATE_USER_PROFILE](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),d.Z.push("/profile")):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.UPDATE_USER_ACCOUNT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),a.Z.patch("auth/profile/edit/account",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!0)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.UPDATE_USER_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit/preferences",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),e.dispatch(m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,t.data.data.language).then((()=>d.Z.push("/profile/preferences")))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.RESET_USER_SPORT_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z["delete"](`auth/profile/reset/sports/${t}`).then((t=>{204===t.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)}))},[m.YN.ACTIONS.UPDATE_USER_SPORT_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit/sports",t).then((t=>{"success"===t.data.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)}))},[m.YN.ACTIONS.UPDATE_USER_PICTURE](e,t){if(e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),!t.picture)throw new Error("No file part");const n=new FormData;n.append("file",t.picture),a.Z.post("auth/picture",n,{headers:{"content-type":"multipart/form-data"}}).then((t=>{"success"===t.data.status?e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.DELETE_ACCOUNT](e,t){_(e,t)},[m.YN.ACTIONS.DELETE_PICTURE](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z["delete"]("auth/picture").then((t=>{204===t.status?e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.SEND_PASSWORD_RESET_REQUEST](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/password/reset-request",t).then((t=>{"success"===t.data.status?d.Z.push("/password-reset/sent"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/account/resend-confirmation",t).then((t=>{"success"===t.data.status?d.Z.push("/account-confirmation/email-sent"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.RESET_USER_PASSWORD](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/password/update",t).then((t=>{"success"===t.data.status?d.Z.push("/password-reset/password-updated"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},p={[m.YN.GETTERS.AUTH_TOKEN]:e=>e.authToken,[m.YN.GETTERS.AUTH_USER_PROFILE]:e=>e.authUserProfile,[m.YN.GETTERS.IS_AUTHENTICATED]:e=>null!==e.authToken,[m.YN.GETTERS.IS_ADMIN]:e=>e.authUserProfile&&e.authUserProfile.admin,[m.YN.GETTERS.IS_REGISTRATION_SUCCESS]:e=>e.isRegistrationSuccess,[m.YN.GETTERS.IS_SUCCESS]:e=>e.isSuccess,[m.YN.GETTERS.USER_LOADING]:e=>e.loading},A={[m.YN.MUTATIONS.CLEAR_AUTH_USER_TOKEN](e){e.authToken=null,e.authUserProfile={}},[m.YN.MUTATIONS.UPDATE_AUTH_TOKEN](e,t){e.authToken=t},[m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE](e,t){e.authUserProfile=t},[m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS](e,t){e.isRegistrationSuccess=t},[m.YN.MUTATIONS.UPDATE_IS_SUCCESS](e,t){e.isSuccess=t},[m.YN.MUTATIONS.UPDATE_USER_LOADING](e,t){e.loading=t}},O={authToken:null,authUserProfile:{},isSuccess:!1,isRegistrationSuccess:!1,loading:!1},R={state:O,actions:T,getters:p,mutations:A};var I=R;const U=(e,t)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get(t).then((t=>{"success"===t.data.status?e.commit(m.Km.MUTATIONS.SET_CLIENT,t.data.data.client):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},g={[m.Km.ACTIONS.AUTHORIZE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES);const n=new FormData;n.set("client_id",t.client_id),n.set("response_type",t.response_type),n.set("scope",t.scope),n.set("confirm","true"),t.state&&n.set("state",t.state),t.code_challenge&&n.set("code_challenge",t.code_challenge),t.code_challenge_method&&n.set("code_challenge_method",t.code_challenge_method),a.Z.post("oauth/authorize",n,{headers:{"Content-Type":"multipart/form-data"}}).then((t=>{200==t.status&&t.data.redirect_url?window.location.href=t.data.redirect_url:(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.CREATE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.post("oauth/apps",t).then((t=>{"created"===t.data.status?(e.commit(m.Km.MUTATIONS.SET_CLIENT,t.data.data.client),d.Z.push(`/profile/apps/${t.data.data.client.id}/created`)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.DELETE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z["delete"](`oauth/apps/${t}`).then((t=>{204===t.status?e.dispatch(m.Km.ACTIONS.GET_CLIENTS).then((()=>d.Z.push("/profile/apps"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.GET_CLIENT_BY_CLIENT_ID](e,t){U(e,`oauth/apps/${t}`)},[m.Km.ACTIONS.GET_CLIENT_BY_ID](e,t){U(e,`oauth/apps/${t}/by_id`)},[m.Km.ACTIONS.GET_CLIENTS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("oauth/apps",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.Km.MUTATIONS.SET_CLIENTS,t.data.data.clients),e.commit(m.Km.MUTATIONS.SET_CLIENTS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.REVOKE_ALL_TOKENS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!1),a.Z.post(`oauth/apps/${t}/revoke`).then((t=>{"success"===t.data.status?e.commit(m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!0):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},N={[m.Km.GETTERS.CLIENT]:e=>e.client,[m.Km.GETTERS.CLIENTS]:e=>e.clients,[m.Km.GETTERS.CLIENTS_PAGINATION]:e=>e.pagination,[m.Km.GETTERS.REVOCATION_SUCCESSFUL]:e=>e.revocationSuccessful},z={[m.Km.MUTATIONS.SET_CLIENT](e,t){e.client=t},[m.Km.MUTATIONS.EMPTY_CLIENT](e){e.client={}},[m.Km.MUTATIONS.SET_CLIENTS](e,t){e.clients=t},[m.Km.MUTATIONS.SET_CLIENTS_PAGINATION](e,t){e.pagination=t},[m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL](e,t){e.revocationSuccessful=t}},h={client:{},clients:[],pagination:{},revocationSuccessful:!1},w={state:h,actions:g,getters:N,mutations:z};var f=w,v=n(2540);const{locale:C}=v.Z.global,D={[m.SY.ACTIONS.GET_APPLICATION_CONFIG](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING,!0),a.Z.get("config").then((t=>{"success"===t.data.status?e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG,t.data.data):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING,!1)))},[m.SY.ACTIONS.GET_APPLICATION_STATS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("stats/all").then((t=>{"success"===t.data.status?e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_STATS,t.data.data):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.SY.ACTIONS.UPDATE_APPLICATION_CONFIG](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.patch("config",t).then((t=>{"success"===t.data.status?(e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG,t.data.data),d.Z.push("/admin/application")):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE](e,t){document.querySelector("html")?.setAttribute("lang",t),e.commit(m.SY.MUTATIONS.UPDATE_LANG,t),C.value=t}},k={[m.SY.GETTERS.APP_CONFIG]:e=>e.application.config,[m.SY.GETTERS.APP_LOADING]:e=>e.appLoading,[m.SY.GETTERS.APP_STATS]:e=>e.application.statistics,[m.SY.GETTERS.ERROR_MESSAGES]:e=>e.errorMessages,[m.SY.GETTERS.LANGUAGE]:e=>e.language,[m.SY.GETTERS.LOCALE]:e=>e.locale};var P=n(6287);const L={[m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES](e){e.errorMessages=null},[m.SY.MUTATIONS.SET_ERROR_MESSAGES](e,t){e.errorMessages=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG](e,t){e.application.config=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING](e,t){e.appLoading=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_STATS](e,t){e.application.statistics=t},[m.SY.MUTATIONS.UPDATE_LANG](e,t){e.language=t,e.locale=P.v1[t]}};var M=n(5826);const b={root:!0,language:"en",locale:M.Z,errorMessages:null,application:{statistics:{sports:0,uploads_dir_size:0,users:0,workouts:0}},appLoading:!1},y={[m.O8.ACTIONS.GET_SPORTS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("sports").then((t=>{"success"===t.data.status?(e.commit(m.O8.MUTATIONS.SET_SPORTS,t.data.data.sports),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.O8.ACTIONS.UPDATE_SPORTS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.patch(`sports/${t.id}`,{is_active:t.isActive}).then((t=>{"success"===t.data.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},G={[m.O8.GETTERS.SPORTS]:e=>e.sports},F={[m.O8.MUTATIONS.SET_SPORTS](e,t){e.sports=t}},W={sports:[]},K={state:W,actions:y,getters:G,mutations:F};var Y=K;const x={[m.gu.ACTIONS.GET_USER_STATS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get(`stats/${t.username}/${t.filterType}`,{params:t.params}).then((t=>{"success"===t.data.status?e.commit(m.gu.MUTATIONS.UPDATE_USER_STATS,t.data.data.statistics):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},$={[m.gu.GETTERS.USER_STATS]:e=>e.statistics},B={[m.gu.MUTATIONS.UPDATE_USER_STATS](e,t){e.statistics=t},[m.gu.MUTATIONS.EMPTY_USER_STATS](e){e.statistics={}}},Z={statistics:{}},H={state:Z,actions:x,getters:$,mutations:B};var q=H;const V={[m.RT.GETTERS.USER]:e=>e.user,[m.RT.GETTERS.USERS]:e=>e.users,[m.RT.GETTERS.USERS_IS_SUCCESS]:e=>e.isSuccess,[m.RT.GETTERS.USERS_LOADING]:e=>e.loading,[m.RT.GETTERS.USERS_PAGINATION]:e=>e.pagination},j={[m.RT.MUTATIONS.UPDATE_USER](e,t){e.user=t},[m.RT.MUTATIONS.UPDATE_USER_IN_USERS](e,t){e.users=e.users.map((e=>e.username===t.username?t:e))},[m.RT.MUTATIONS.UPDATE_USERS](e,t){e.users=t},[m.RT.MUTATIONS.UPDATE_USERS_LOADING](e,t){e.loading=t},[m.RT.MUTATIONS.UPDATE_USERS_PAGINATION](e,t){e.pagination=t},[m.RT.MUTATIONS.UPDATE_IS_SUCCESS](e,t){e.isSuccess=t}},X={user:{},users:[],loading:!1,isSuccess:!1,pagination:{}},J={state:X,actions:E,getters:V,mutations:j};var Q=J,ee=n(52);const te=(e,t,n)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("workouts",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.aX.MUTATIONS[n],t.data.data.workouts),n===ee.CW.SET_USER_WORKOUTS&&e.commit(m.aX.MUTATIONS.SET_WORKOUTS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},ne={[m.aX.ACTIONS.GET_CALENDAR_WORKOUTS](e,t){e.commit(m.aX.MUTATIONS.EMPTY_CALENDAR_WORKOUTS),te(e,t,ee.CW.SET_CALENDAR_WORKOUTS)},[m.aX.ACTIONS.GET_USER_WORKOUTS](e,t){te(e,t,ee.CW.SET_USER_WORKOUTS)},[m.aX.ACTIONS.GET_TIMELINE_WORKOUTS](e,t){te(e,t,ee.CW.SET_TIMELINE_WORKOUTS)},[m.aX.ACTIONS.GET_MORE_TIMELINE_WORKOUTS](e,t){te(e,t,ee.CW.ADD_TIMELINE_WORKOUTS)},[m.aX.ACTIONS.GET_WORKOUT_DATA](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0);const n=t.segmentId?`/segment/${t.segmentId}`:"";a.Z.get(`workouts/${t.workoutId}`).then((r=>{const o=r.data.data.workouts[0];if("success"===r.data.status){if(t.segmentId&&(0===o.segments.length||!o.segments[+t.segmentId-1]))throw new Error("WORKOUT_NOT_FOUND");e.commit(m.aX.MUTATIONS.SET_WORKOUT,r.data.data.workouts[0]),r.data.data.workouts[0].with_gpx&&(a.Z.get(`workouts/${t.workoutId}/chart_data${n}`).then((t=>{"success"===t.data.status&&e.commit(m.aX.MUTATIONS.SET_WORKOUT_CHART_DATA,t.data.data.chart_data)})),a.Z.get(`workouts/${t.workoutId}/gpx${n}`).then((t=>{"success"===t.data.status&&e.commit(m.aX.MUTATIONS.SET_WORKOUT_GPX,t.data.data.gpx)})))}else e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),(0,l.S)(e,null)})).catch((t=>{e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.DELETE_WORKOUT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z["delete"](`workouts/${t.workoutId}`).then((()=>{e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE),d.Z.push("/")})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.EDIT_WORKOUT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z.patch(`workouts/${t.workoutId}`,t.data).then((()=>{e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE),e.dispatch(m.aX.ACTIONS.GET_WORKOUT_DATA,{workoutId:t.workoutId}).then((()=>{d.Z.push({name:"Workout",params:{workoutId:t.workoutId}})}))})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.ADD_WORKOUT](e,t){if(e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),!t.file)throw new Error("No file part");const n=new FormData;n.append("file",t.file),n.append("data",`{"sport_id": ${t.sport_id}, "notes": "${t.notes}"}`),a.Z.post("workouts",n,{headers:{"content-type":"multipart/form-data"}}).then((t=>{if("created"===t.data.status){e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE);const n=t.data.data.workouts[0];d.Z.push(1===t.data.data.workouts.length?`/workouts/${n.id}`:"/")}})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.ADD_WORKOUT_WITHOUT_GPX](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z.post("workouts/no_gpx",t).then((t=>{if("created"===t.data.status){e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE);const n=t.data.data.workouts[0];d.Z.push(`/workouts/${n.id}`)}})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))}},re={[m.aX.GETTERS.CALENDAR_WORKOUTS]:e=>e.calendar_workouts,[m.aX.GETTERS.TIMELINE_WORKOUTS]:e=>e.timeline_workouts,[m.aX.GETTERS.USER_WORKOUTS]:e=>e.user_workouts,[m.aX.GETTERS.WORKOUT_DATA]:e=>e.workoutData,[m.aX.GETTERS.WORKOUTS_PAGINATION]:e=>e.pagination},ae={[m.aX.MUTATIONS.ADD_TIMELINE_WORKOUTS](e,t){e.timeline_workouts=e.timeline_workouts.concat(t)},[m.aX.MUTATIONS.SET_CALENDAR_WORKOUTS](e,t){e.calendar_workouts=t},[m.aX.MUTATIONS.SET_TIMELINE_WORKOUTS](e,t){e.timeline_workouts=t},[m.aX.MUTATIONS.SET_USER_WORKOUTS](e,t){e.user_workouts=t},[m.aX.MUTATIONS.SET_WORKOUTS_PAGINATION](e,t){e.pagination=t},[m.aX.MUTATIONS.SET_WORKOUT](e,t){e.workoutData.workout=t},[m.aX.MUTATIONS.SET_WORKOUT_CHART_DATA](e,t){e.workoutData.chartData=t},[m.aX.MUTATIONS.SET_WORKOUT_GPX](e,t){e.workoutData.gpx=t},[m.aX.MUTATIONS.SET_WORKOUT_LOADING](e,t){e.workoutData.loading=t},[m.aX.MUTATIONS.EMPTY_CALENDAR_WORKOUTS](e){e.calendar_workouts=[]},[m.aX.MUTATIONS.EMPTY_WORKOUTS](e){e.calendar_workouts=[],e.user_workouts=[],e.timeline_workouts=[]},[m.aX.MUTATIONS.EMPTY_WORKOUT](e){e.workoutData={gpx:"",loading:!1,workout:{},chartData:[]}}},oe={calendar_workouts:[],timeline_workouts:[],pagination:{},user_workouts:[],workoutData:{gpx:"",loading:!1,workout:{},chartData:[]}},se={state:oe,actions:ne,getters:re,mutations:ae};var ie=se;const le={authUserModule:I,oAuthModule:f,sportsModule:Y,statsModule:q,usersModule:Q,workoutsModule:ie},ce={state:b,actions:D,getters:k,mutations:L,modules:le};var ue=ce;const de=(0,r.MT)(ue);var me=de},52:function(e,t,n){"use strict";var r,a,o;n.d(t,{CW:function(){return o},JP:function(){return a},tW:function(){return r}}),function(e){e["ADD_WORKOUT"]="ADD_WORKOUT",e["ADD_WORKOUT_WITHOUT_GPX"]="ADD_WORKOUT_WITHOUT_GPX",e["DELETE_WORKOUT"]="DELETE_WORKOUT",e["EDIT_WORKOUT"]="EDIT_WORKOUT",e["GET_CALENDAR_WORKOUTS"]="GET_CALENDAR_WORKOUTS",e["GET_USER_WORKOUTS"]="GET_USER_WORKOUTS",e["GET_TIMELINE_WORKOUTS"]="GET_TIMELINE_WORKOUTS",e["GET_MORE_TIMELINE_WORKOUTS"]="GET_MORE_TIMELINE_WORKOUTS",e["GET_WORKOUT_DATA"]="GET_WORKOUT_DATA"}(r||(r={})),function(e){e["CALENDAR_WORKOUTS"]="CALENDAR_WORKOUTS",e["TIMELINE_WORKOUTS"]="TIMELINE_WORKOUTS",e["USER_WORKOUTS"]="USER_WORKOUTS",e["WORKOUT_DATA"]="WORKOUT_DATA",e["WORKOUTS_PAGINATION"]="WORKOUTS_PAGINATION"}(a||(a={})),function(e){e["ADD_TIMELINE_WORKOUTS"]="ADD_TIMELINE_WORKOUTS",e["EMPTY_WORKOUTS"]="EMPTY_WORKOUTS",e["EMPTY_CALENDAR_WORKOUTS"]="EMPTY_CALENDAR_WORKOUTS",e["EMPTY_WORKOUT"]="EMPTY_WORKOUT",e["SET_CALENDAR_WORKOUTS"]="SET_CALENDAR_WORKOUTS",e["SET_TIMELINE_WORKOUTS"]="SET_TIMELINE_WORKOUTS",e["SET_USER_WORKOUTS"]="SET_USER_WORKOUTS",e["SET_WORKOUT"]="SET_WORKOUT",e["SET_WORKOUT_GPX"]="SET_WORKOUT_GPX",e["SET_WORKOUT_CHART_DATA"]="SET_WORKOUT_CHART_DATA",e["SET_WORKOUT_LOADING"]="SET_WORKOUT_LOADING",e["SET_WORKOUTS_PAGINATION"]="SET_WORKOUTS_PAGINATION"}(o||(o={}))},9917:function(e,t,n){"use strict";n.d(t,{o:function(){return a}});var r=n(3907);function a(){return(0,r.oR)()}},2766:function(e,t,n){"use strict";n.d(t,{Hf:function(){return a},Ne:function(){return c},fS:function(){return r},lM:function(){return d},pm:function(){return l},z_:function(){return s}});const r=["asc","desc"],a=1,o=10,s=(e,t)=>e&&"string"===typeof e&&+e>0?+e:t,i=(e,t,n)=>e&&"string"===typeof e&&t.includes(e)?e:n,l=(e,t,n,l)=>{const c=l||{},u=c.defaultSort||"asc",d={};return d.page=s(e.page,a),d.per_page=s(e.per_page,o),d.order=i(e.order,r,u),d.order_by=i(e.order_by,t,n),"string"===typeof e.q?d.q=e.q:delete d.q,d},c=["from","to","ave_speed_from","ave_speed_to","max_speed_from","max_speed_to","distance_from","distance_to","duration_from","duration_to","sport_id"],u=(e,t=1)=>Array.from({length:e-t+1},((e,n)=>t+n)),d=(e,t)=>{if(e<0)return[];if(e<9)return u(e);let n=[1,2];return t<4?n=n.concat([3,4,5]):t<6?n=n.concat(u(t+2,3)):(n=n.concat(["..."]),t=e-2&&n[n.length-1]{switch(e){case"week":return(0,r.Z)(t,{weekStartsOn:n?1:0});case"year":return(0,a.Z)(t);case"month":return(0,o.Z)(t);default:throw new Error(`Invalid duration, expected: "week", "month", "year", got: "${e}"`)}},p=(e,t)=>{switch(e){case"week":return(0,s.Z)(t,7);case"year":return(0,i.Z)(t,1);case"month":return(0,l.Z)(t,1);default:throw new Error(`Invalid duration, expected: "week", "month", "year", got: "${e}"`)}},A=(e,t)=>(0,m.utcToZonedTime)(new Date(e),t),O=(e,t)=>{const n=(0,o.Z)(e),a=(0,c.Z)(e),s=t?1:0;return{start:(0,r.Z)(n,{weekStartsOn:s}),end:(0,u.Z)(a,{weekStartsOn:s})}},R=(e,t=null,n=null)=>(t||(t="yyyy/MM/dd"),t=g(t,S.value),n||(n="HH:mm"),{workout_date:(0,d.Z)(e,t,{locale:E.v1[S.value]}),workout_time:(0,d.Z)(e,n)}),I=["MM/dd/yyyy","dd/MM/yyyy","yyyy-MM-dd","date_string"],U={de:"do MMM yyyy",en:"MMM. do, yyyy",fr:"d MMM yyyy"},g=(e,t)=>"date_string"===e?U[t]:e,N=(e,t,n,r=!0,a=null)=>(a||(a=S.value),(0,d.Z)(A(e,t),`${g(n,a)}${r?" HH:mm":""}`,{locale:E.v1[a]})),z=(e,t,n=null)=>{const r=n||S.value,a=[];return I.map((n=>{const o=g(n,r);a.push({label:`${o} - ${N(e,t,o,!1,r)}`,value:n})})),a}},8966:function(e,t,n){"use strict";n.d(t,{Z:function(){return a},j:function(){return o}});const r=["bytes","KB","MB","GB","TB"],a=(e,t=!0)=>{const n=Math.floor(Math.log(e)/Math.log(1024));if(!e)return t?"0 bytes":{size:"0",suffix:"bytes"};const a=(e/Math.pow(1024,n)).toFixed(1),o=r[n];return t?`${a}${o}`:{size:a,suffix:o}},o=e=>{const t=e/1048576;return+t.toFixed(2)}},2024:function(e,t,n){"use strict";n.d(t,{S:function(){return o},k:function(){return a}});var r=n(5801);const a=()=>"/api/",o=(e,t,n="UNKNOWN")=>{if(t&&"canceled"===t.message)return;if(401===t?.response?.status&&"invalid_token"===t.response.data.error)return localStorage.removeItem("authToken"),void e.dispatch(r.YN.ACTIONS.CHECK_AUTH_USER);const a=t?t.response?413===t.response.status?"file size is greater than the allowed size":t.response.data.message?t.response.data.message:n:t.message?t.message:n:n;e.commit(r.SY.MUTATIONS.SET_ERROR_MESSAGES,a.includes("\n")?a.split("\n").filter((e=>""!==e)).map((e=>`api.ERROR.${e}`)):`api.ERROR.${a}`)}},6287:function(e,t,n){"use strict";n.d(t,{mT:function(){return u},v1:function(){return i},zK:function(){return l}});var r=n(879),a=n(5826),o=n(5830),s=n(2540);const i={de:r.Z,en:a.Z,fr:o.Z},l={de:"Deutsch",en:"English",fr:"Français"},{availableLocales:c}=s.Z.global,u=c.map((e=>({label:l[e],value:e})))},631:function(e,t,n){"use strict";n.d(t,{CM:function(){return l},PA:function(){return i},Yx:function(){return a},Zo:function(){return r},xH:function(){return s}});const r={"Cycling (Sport)":"#4c9792","Cycling (Transport)":"#88af98","Cycling (Virtual)":"#64a360",Hiking:"#bb757c","Mountain Biking":"#d4b371","Mountain Biking (Electric)":"#fc9d6f",Rowing:"#fcce72",Running:"#835b83","Skiing (Alpine)":"#67a4bd","Skiing (Cross Country)":"#9498d0",Snowshoes:"#5780a8",Trail:"#09a98a",Walking:"#838383"},a=e=>{const t={};return e.map((e=>t[e.id]=e.color?e.color:r[e.label])),t},o=(e,t)=>{const n=e.translatedLabel.toLowerCase(),r=t.translatedLabel.toLowerCase();return n>r?1:ne.filter((e=>"all"===n||(r.includes(e.id)||e[n]))).map((e=>({...e,translatedLabel:t(`sports.${e.label}.LABEL`)}))).sort(o),i=(e,t)=>t.filter((t=>t.id===e.sport_id)).map((e=>e.label))[0],l=(e,t)=>t.filter((t=>t.id===e.sport_id)).map((e=>e.color))[0]},9318:function(e,t,n){"use strict";n.d(t,{FN:function(){return C},aZ:function(){return v},v1:function(){return f}});n(7658);var r=n(4850),a=n(8148),o=n(9319),s=n(584),i=n(4559),l=n(3703),c=n(876),u=n(7090),d=n(4135),m=n(1593),_=n(7982),E=n(3500),S=n(1640),T=n(2540),p=n(6558),A=n(6287),O=n(631),R=n(3649);const{locale:I}=T.Z.global,U={week:{api:"yyyy-MM-dd",chart:"MM/dd/yyyy"},month:{api:"yyyy-MM",chart:"MM/yyyy"},year:{api:"yyyy",chart:"yyyy"}},g=["average_speed","nb_workouts","total_duration","total_distance","total_ascent","total_descent"],N=(e,t)=>{const n=[];for(let r=(0,p.Nh)(e.duration,e.start,t);r<=e.end;r=(0,p.xA)(e.duration,r))n.push(r);return n},z=(e,t,n=!1)=>{const r={label:e,backgroundColor:[t],data:[]};return n&&(r.type="line",r.borderColor=[t],r.spanGaps=!0),r},h=e=>{const t={average_speed:[],nb_workouts:[],total_distance:[],total_duration:[],total_ascent:[],total_descent:[]};return e.map((e=>{const n=e.color?e.color:O.Zo[e.label];t.average_speed.push(z(e.label,n,!0)),t.nb_workouts.push(z(e.label,n)),t.total_distance.push(z(e.label,n)),t.total_duration.push(z(e.label,n)),t.total_ascent.push(z(e.label,n)),t.total_descent.push(z(e.label,n))})),t},w=(e,t,n)=>{switch(e){case"average_speed":case"total_distance":case"total_ascent":case"total_descent":return(0,R.f3)(["average_speed","total_distance"].includes(e)?"km":"m",t,n);default:case"nb_workouts":case"total_duration":return t}},f=(e,t,n,a,o,s,i)=>{const l=N(e,t),c=U[e.duration],u=n.filter((e=>a.includes(e.id))),d=[],m=h(u),_={};return u.map((e=>_[e.label]=e.id)),l.map((t=>{const n=(0,r.Z)(t,c.api),a=(0,r.Z)(t,"week"===e.duration?(0,p.mh)(i,I.value):c.chart,{locale:A.v1[I.value]});d.push(a),g.map((e=>{m[e].map((t=>{t.data.push(n in o&&_[t.label]in o[n]?w(e,o[n][_[t.label]][e],s):"average_speed"===e?null:0)}))}))})),{labels:d,datasets:m}},v=(e,t,n)=>{const r=n?1:0,m="year"===t?(0,a.Z)((0,o.Z)(e,9)):"week"===t?(0,s.Z)((0,i.Z)(e,2),{weekStartsOn:r}):(0,l.Z)((0,i.Z)(e,11)),_="year"===t?(0,c.Z)(e):"week"===t?(0,u.Z)(e,{weekStartsOn:r}):(0,d.Z)(e);return{duration:t,end:_,start:m}},C=(e,t,n)=>{const{duration:r,start:T,end:p}=e,A=n?1:0;return{duration:r,end:"year"===r?(0,c.Z)(t?(0,o.Z)(p,1):(0,m.Z)(p,1)):"week"===r?(0,u.Z)(t?(0,_.Z)(p,1):(0,E.Z)(p,1),{weekStartsOn:A}):(0,d.Z)(t?(0,i.Z)(p,1):(0,S.Z)(p,1)),start:"year"===r?(0,a.Z)(t?(0,o.Z)(T,1):(0,m.Z)(T,1)):"week"===r?(0,s.Z)(t?(0,_.Z)(T,1):(0,E.Z)(T,1),{weekStartsOn:A}):(0,l.Z)(t?(0,i.Z)(T,1):(0,S.Z)(T,1))}}},3649:function(e,t,n){"use strict";n.d(t,{Dl:function(){return r},f3:function(){return s},sC:function(){return o}});const r={ft:{unit:"ft",system:"imperial",multiplier:1,defaultTarget:"m"},mi:{unit:"mi",system:"imperial",multiplier:5280,defaultTarget:"km"},m:{unit:"m",system:"metric",multiplier:1,defaultTarget:"ft"},km:{unit:"m",system:"metric",multiplier:1e3,defaultTarget:"mi"}},a={metric:{imperial:3.280839895,metric:1},imperial:{metric:1/3.280839895,imperial:1}},o=(e,t,n,o=3)=>{const s=r[t],i=r[n],l=e*s.multiplier*a[s.system][i.system]/i.multiplier;return null!==o?parseFloat(l.toFixed(o)):l},s=(e,t,n)=>{const a=n?r[e].defaultTarget:e;return n?o(t,e,a,2):t}},3768:function(e,t,n){"use strict";n.d(t,{BN:function(){return o},EX:function(){return a},eR:function(){return s}});n(7658);var r=n(3649);const a=(e,t,n)=>{const a={speed:{label:t("workouts.SPEED"),backgroundColor:["#FFFFFF"],borderColor:["#8884d8"],borderWidth:2,data:[],yAxisID:"ySpeed"},elevation:{label:t("workouts.ELEVATION"),backgroundColor:["#e5e5e5"],borderColor:["#cccccc"],borderWidth:1,fill:!0,data:[],yAxisID:"yElevation"}},o=[],s=[],i=[];return e.map((e=>{o.push(e.distance),s.push(e.duration),a.speed.data.push((0,r.f3)("km",e.speed,n)),a.elevation.data.push((0,r.f3)("m",e.elevation,n)),i.push({latitude:e.latitude,longitude:e.longitude})})),{distance_labels:o,duration_labels:s,datasets:a,coordinates:i}},o=e=>{const t=e.length;if(0===t)return{};const n={};return e.map((e=>{n[e.sport_id]||(n[e.sport_id]={count:0,percentage:0}),n[e.sport_id].count+=1,n[e.sport_id].percentage=n[e.sport_id].count/t})),n},s={order:"desc",order_by:"workout_date"}},2531:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(6252);const a={class:"card"},o={class:"card-title"},s={class:"card-content"};function i(e,t){return(0,r.wg)(),(0,r.iD)("div",a,[(0,r._)("div",o,[(0,r.WI)(e.$slots,"title")]),(0,r._)("div",s,[(0,r.WI)(e.$slots,"content")])])}var l=n(3744);const c={},u=(0,l.Z)(c,[["render",i]]);var d=u},8626:function(e,t,n){"use strict";n.d(t,{Z:function(){return T}});var r=n(6252),a=n(3577),o=n(2262);const s={class:"table-selects"},i=["value"],l=["value"],c=["value"],u=["value"],d=["value"],m=["value"];var _=(0,r.aZ)({__name:"FilterSelects",props:{order_by:null,query:null,sort:null,message:null},emits:["updateSelect"],setup(e,{emit:t}){const n=e,{order_by:_,query:E,sort:S,message:T}=(0,o.BK)(n),p=[10,25,50,100];function A(e){t("updateSelect",e.target.id,e.target.value)}return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.ORDER_BY.LABEL"))+": ",1),(0,r._)("select",{name:"order_by",id:"order_by",value:(0,o.SU)(E).order_by,onChange:A},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(_),(t=>((0,r.wg)(),(0,r.iD)("option",{value:t,key:t},(0,a.zw)(e.$t(`${(0,o.SU)(T)}.${t.toUpperCase()}`)),9,l)))),128))],40,i)]),(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.ORDER.LABEL"))+": ",1),(0,r._)("select",{name:"order",id:"order",value:(0,o.SU)(E).order,onChange:A},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(S),(t=>((0,r.wg)(),(0,r.iD)("option",{value:t,key:t},(0,a.zw)(e.$t(`common.SELECTS.ORDER.${t.toUpperCase()}`)),9,u)))),128))],40,c)]),(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.PER_PAGE.LABEL"))+": ",1),(0,r._)("select",{name:"per_page",id:"per_page",value:(0,o.SU)(E).per_page,onChange:A},[((0,r.wg)(),(0,r.iD)(r.HY,null,(0,r.Ko)(p,(e=>(0,r._)("option",{value:e,key:e},(0,a.zw)(e),9,m))),64))],40,d)])]))}}),E=n(3744);const S=(0,E.Z)(_,[["__scopeId","data-v-72463173"]]);var T=S},7167:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(6252);const a={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 -51 512 512"},o=(0,r.uE)('',1),s=[o];function i(e,t,n,o,i,l){return(0,r.wg)(),(0,r.iD)("svg",a,s)}var l={name:"ErrorImg"},c=n(3744);const u=(0,c.Z)(l,[["render",i]]);var d=u},8273:function(e,t,n){"use strict";n.d(t,{Z:function(){return E}});var r=n(6252),a=n(2262),o=(n(7658),n(3577));const s={id:"error"},i={class:"error-content"};var l=(0,r.aZ)({__name:"Error",props:{title:null,message:null,buttonText:null,path:{default:"/"}},setup(e){const t=e,{buttonText:n,title:l,message:c,path:u}=(0,a.BK)(t);return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[(0,r._)("div",i,[(0,r._)("h1",null,(0,o.zw)((0,a.SU)(l)),1),(0,r._)("p",null,(0,o.zw)((0,a.SU)(c)),1),(0,a.SU)(n)?((0,r.wg)(),(0,r.iD)("button",{key:0,onClick:t[0]||(t[0]=t=>e.$router.push((0,a.SU)(u))),class:"upper"},(0,o.zw)((0,a.SU)(n)),1)):(0,r.kq)("",!0)])]))}}),c=n(3744);const u=(0,c.Z)(l,[["__scopeId","data-v-b60bfa80"]]);var d=u,m=(0,r.aZ)({__name:"NotFound",props:{target:{default:"PAGE"}},setup(e){const t=e,{target:n}=(0,a.BK)(t),o=(0,a.iH)(),s=(0,a.iH)(!1);function i(){o.value=setTimeout((()=>{s.value=!0}),500)}return(0,r.bv)((()=>i())),(0,r.Ah)((()=>{o.value&&clearTimeout(o.value)})),(e,t)=>s.value?((0,r.wg)(),(0,r.j4)(d,{key:0,title:"404",message:e.$t(`error.NOT_FOUND.${(0,a.SU)(n)}`),"button-text":e.$t("common.HOME")},null,8,["message","button-text"])):(0,r.kq)("",!0)}});const _=m;var E=_},5020:function(e,t,n){"use strict";n.d(t,{Z:function(){return T}});var r=n(6252),a=n(3577),o=n(2262),s=n(2766);const i=e=>((0,r.dD)("data-v-3a9a4a65"),e=e(),(0,r.Cn)(),e),l={class:"pagination-center","aria-label":"navigation"},c={class:"pagination"},u=i((()=>(0,r._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1))),d={key:0},m=i((()=>(0,r._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1)));var _=(0,r.aZ)({__name:"Pagination",props:{pagination:null,path:null,query:null},setup(e){const t=e,{pagination:n,path:i,query:_}=(0,o.BK)(t);function E(e,t){const n=Object.assign({},_.value);return n.page=t?e+t:e,n}return(e,t)=>{const _=(0,r.up)("router-link");return(0,r.wg)(),(0,r.iD)("nav",l,[(0,r._)("ul",c,[(0,r._)("li",{class:(0,a.C_)(["page-prev",{disabled:!(0,o.SU)(n).has_prev}])},[(0,r.Wm)(_,{class:"page-link",to:{path:(0,o.SU)(i),query:E((0,o.SU)(n).page,-1)},disabled:!(0,o.SU)(n).has_prev},{default:(0,r.w5)((({navigate:t})=>[(0,r.WI)(e.$slots,"default",{onClick:e=>(0,o.SU)(n).has_next?t:null},(()=>[(0,r.Uk)((0,a.zw)(e.$t("api.PAGINATION.PREVIOUS"))+" ",1),u]))])),_:3},8,["to","disabled"])],2),((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(s.lM)((0,o.SU)(n).pages,(0,o.SU)(n).page),(e=>((0,r.wg)(),(0,r.iD)("li",{key:e,class:(0,a.C_)(["page",{active:e===(0,o.SU)(n).page}])},["..."===e?((0,r.wg)(),(0,r.iD)("span",d," ... ")):((0,r.wg)(),(0,r.j4)(_,{key:1,class:"page-link",to:{path:(0,o.SU)(i),query:E(+e)}},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e),1)])),_:2},1032,["to"]))],2)))),128)),(0,r._)("li",{class:(0,a.C_)(["page-next",{disabled:!(0,o.SU)(n).has_next}])},[(0,r.Wm)(_,{class:"page-link",to:{path:(0,o.SU)(i),query:E((0,o.SU)(n).page,1)},disabled:!(0,o.SU)(n).has_next},{default:(0,r.w5)((({navigate:t})=>[(0,r.WI)(e.$slots,"default",{onClick:e=>(0,o.SU)(n).has_next?t:null},(()=>[(0,r.Uk)((0,a.zw)(e.$t("api.PAGINATION.NEXT"))+" ",1),m]))])),_:3},8,["to","disabled"])],2)])])}}}),E=n(3744);const S=(0,E.Z)(_,[["__scopeId","data-v-3a9a4a65"]]);var T=S},8403:function(e,t,n){"use strict";n.d(t,{Z:function(){return v}});var r=n(6252),a=n(2262),o=n(9963),s=n(3577),i=n(4366),l=n(5801),c=n(9917);const u=async e=>{const t=await n.e(881).then(n.bind(n,410)),r=await n.e(881).then(n.bind(n,8288)),a=await n.e(881).then(n.bind(n,6947)),o=await n.e(881).then(n.bind(n,8056)),s={de:o,en:r,fr:a,nb:r},l=s[e],c={graphs:t.default.adjacencyGraphs,dictionary:{...t.default.dictionary,...l.default.dictionary}};i.Mu.setOptions(c)},d=e=>{switch(e){case 2:return"AVERAGE";case 3:return"GOOD";case 4:return"STRONG";default:return"WEAK"}},m={class:"password-strength"},_=["value"],E={key:0,class:"password-strength-details"},S={class:"password-strength-value"},T={key:0,class:"info-box"},p={class:"password-feedback"};var A=(0,r.aZ)({__name:"PasswordStength",props:{password:null},setup(e){const t=e,{password:n}=(0,a.BK)(t),o=(0,c.o)(),A=(0,r.Fl)((()=>o.getters[l.SY.GETTERS.LANGUAGE])),O=(0,r.Fl)((()=>o.getters[l.YN.GETTERS.IS_SUCCESS])),R=(0,a.iH)(0),I=(0,a.iH)(""),U=(0,a.iH)([]),g=(0,a.iH)("0% 100%");function N(e){const t=(0,i.tu)(e);R.value=t.score,I.value=d(R.value),U.value=t.feedback.suggestions,g.value=100*R.value/4+"% 100%"}return(0,r.wF)((async()=>await u(A.value))),(0,r.YP)((()=>A.value),(async e=>{await u(e)})),(0,r.YP)((()=>n.value),(async e=>{O.value?I.value="":N(e)})),(e,t)=>((0,r.wg)(),(0,r.iD)("div",m,[(0,r._)("input",{class:(0,s.C_)(["password-slider",`strength-${R.value}`]),style:(0,s.j5)({backgroundSize:g.value}),type:"range",value:R.value,min:"0",max:"4",step:"1"},null,14,_),I.value?((0,r.wg)(),(0,r.iD)("div",E,[(0,r._)("span",S,(0,s.zw)(e.$t("user.PASSWORD_STRENGTH.LABEL"))+": "+(0,s.zw)(e.$t(`user.PASSWORD_STRENGTH.${I.value}`)),1),U.value.length>0?((0,r.wg)(),(0,r.iD)("div",T,[(0,r._)("ul",p,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)(U.value,(t=>((0,r.wg)(),(0,r.iD)("li",{key:t},(0,s.zw)(e.$t(`user.PASSWORD_STRENGTH.SUGGESTIONS.${t}`)),1)))),128))])])):(0,r.kq)("",!0)])):(0,r.kq)("",!0)]))}}),O=n(3744);const R=(0,O.Z)(A,[["__scopeId","data-v-74e71df5"]]);var I=R;const U=e=>((0,r.dD)("data-v-5a126514"),e=e(),(0,r.Cn)(),e),g={class:"password-input"},N=["id","disabled","placeholder","required","type"],z={key:0,class:"form-info"},h=U((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1)));var w=(0,r.aZ)({__name:"PasswordInput",props:{checkStrength:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},id:{default:"password"},password:{default:""},placeholder:null,required:{type:Boolean,default:!1}},emits:["updatePassword","passwordError"],setup(e,{emit:t}){const n=e,{checkStrength:i,disabled:l,id:c,password:u,placeholder:d,required:m}=(0,a.BK)(n),_=(0,a.iH)(!1),E=(0,a.iH)("");function S(){_.value=!_.value}function T(e){t("updatePassword",e.target.value)}function p(){t("passwordError")}return(0,r.YP)((()=>u.value),(e=>{""===e&&(E.value="")})),(e,t)=>((0,r.wg)(),(0,r.iD)("div",g,[(0,r.wy)((0,r._)("input",{id:(0,a.SU)(c),disabled:(0,a.SU)(l),placeholder:(0,a.SU)(d),required:(0,a.SU)(m),type:_.value?"text":"password","onUpdate:modelValue":t[0]||(t[0]=e=>E.value=e),minlength:"8",onInput:T,onInvalid:p},null,40,N),[[o.YZ,E.value]]),(0,r._)("div",{class:"show-password",onClick:S},[(0,r.Uk)((0,s.zw)(e.$t(`user.${_.value?"HIDE":"SHOW"}_PASSWORD`))+" ",1),(0,r._)("i",{class:(0,s.C_)(["fa","fa-eye"+(_.value?"-slash":"")]),"aria-hidden":"true"},null,2)]),(0,a.SU)(i)?((0,r.wg)(),(0,r.iD)("div",z,[h,(0,r.Uk)(" "+(0,s.zw)(e.$t("user.PASSWORD_INFO")),1)])):(0,r.kq)("",!0),(0,a.SU)(i)?((0,r.wg)(),(0,r.j4)(I,{key:1,password:E.value},null,8,["password"])):(0,r.kq)("",!0)]))}});const f=(0,O.Z)(w,[["__scopeId","data-v-5a126514"]]);var v=f},2056:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(6252),a=n(3577),o=n(2262),s=n(2024);const i=(0,r._)("div",{class:"map-attribution"},[(0,r._)("span",{class:"map-attribution-text"},"©"),(0,r._)("a",{class:"map-attribution-text",href:"https://www.openstreetmap.org/copyright",target:"_blank",rel:"noopener noreferrer"}," OpenStreetMap ")],-1);var l=(0,r.aZ)({__name:"StaticMap",props:{workout:null,displayHover:{type:Boolean,default:!1}},setup(e){const t=e,{displayHover:n}=(0,o.BK)(t),l=`${(0,s.k)()}workouts/map/${t.workout.map}`;return(e,t)=>((0,r.wg)(),(0,r.iD)("div",{class:(0,a.C_)(["static-map",{"display-hover":(0,o.SU)(n)}])},[(0,o.SU)(n)?((0,r.wg)(),(0,r.iD)("img",{key:0,src:l,alt:""})):((0,r.wg)(),(0,r.iD)("div",{key:1,class:"bg-map-image",style:(0,a.j5)({backgroundImage:`url(${l})`})},null,4)),i],2))}});const c=l;var u=c},3170:function(e,t,n){"use strict";n.d(t,{Z:function(){return y}});var r=n(6252),a=n(3577);const o={class:"start-chart"},s={key:0},i={key:1},l={class:"chart-radio"},c=["checked"],u=["checked"],d=["checked"],m={key:0},_=["checked"],E={key:1},S=["checked"],T={key:2},p=["checked"];function A(e,t,n,A,O,R){const I=(0,r.up)("Chart");return(0,r.wg)(),(0,r.iD)("div",o,[e.hideChartIfNoData&&e.emptyStats?((0,r.wg)(),(0,r.iD)("div",s,(0,a.zw)(e.$t("workouts.NO_WORKOUTS")),1)):((0,r.wg)(),(0,r.iD)("div",i,[(0,r._)("div",l,[(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"total_distance",checked:"total_distance"===e.displayedData,onClick:t[0]||(t[0]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,c),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DISTANCE")),1)]),(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"total_duration",checked:"total_duration"===e.displayedData,onClick:t[1]||(t[1]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,u),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DURATION")),1)]),(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"nb_workouts",checked:"nb_workouts"===e.displayedData,onClick:t[2]||(t[2]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,d),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.WORKOUT",2)),1)]),e.fullStats?((0,r.wg)(),(0,r.iD)("label",m,[(0,r._)("input",{type:"radio",name:"average_speed",checked:"average_speed"===e.displayedData,onClick:t[3]||(t[3]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,_),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.AVERAGE_SPEED")),1)])):(0,r.kq)("",!0),e.fullStats?((0,r.wg)(),(0,r.iD)("label",E,[(0,r._)("input",{type:"radio",name:"total_ascent",checked:"total_ascent"===e.displayedData,onClick:t[4]||(t[4]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,S),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.ASCENT")),1)])):(0,r.kq)("",!0),e.fullStats?((0,r.wg)(),(0,r.iD)("label",T,[(0,r._)("input",{type:"radio",name:"total_descent",checked:"total_descent"===e.displayedData,onClick:t[5]||(t[5]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,p),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DESCENT")),1)])):(0,r.kq)("",!0)]),e.labels.length>0?((0,r.wg)(),(0,r.j4)(I,{key:0,datasets:e.datasets,labels:e.labels,displayedData:e.displayedData,displayedSportIds:e.displayedSportIds,fullStats:e.fullStats,useImperialUnits:e.user.imperial_units},null,8,["datasets","labels","displayedData","displayedSportIds","fullStats","useImperialUnits"])):(0,r.kq)("",!0)]))])}var O=n(4850),R=n(2262);const I={class:"chart"};function U(e,t,n,a,o,s){const i=(0,r.up)("BarChart");return(0,r.wg)(),(0,r.iD)("div",I,[(0,r.Wm)(i,(0,r.dG)(e.barChartProps,{class:"bar-chart"}),null,16)])}var g=n(6518),N=n(9150);const z=(e,t=!1)=>{let n="0";t&&(n=String(Math.floor(e/86400)),e%=86400);const r=String(Math.floor(e/3600)).padStart(2,"0");e%=3600;const a=String(Math.floor(e/60)).padStart(2,"0"),o=String(e%60).padStart(2,"0");return t?`${"0"===n?"":`${n}d `}${"00"===r?"":`${r}h `}${a}m ${o}s`:`${"00"===r?"":`${r}:`}${a}:${o}`};var h=n(3649);const w=(e,t,n,r=!0,a="km")=>{const o=n?h.Dl[a].defaultTarget:a;switch(e){case"average_speed":return`${t.toFixed(2)} ${o}/h`;case"total_duration":return z(t,r);case"total_distance":case"total_ascent":case"total_descent":return`${t.toFixed(2)} ${o}`;default:return t.toString()}};var f=(0,r.aZ)({name:"Chart",components:{BarChart:g.vz},props:{datasets:{type:Object,required:!0},labels:{type:Object,required:!0},displayedData:{type:String,required:!0},displayedSportIds:{type:Array,required:!0},fullStats:{type:Boolean,required:!0},useImperialUnits:{type:Boolean,required:!0}},setup(e){const{t:t}=(0,N.QT)();function n(e){return isNaN(e)?0:+e}function a(e,t){return n(e)+n(t)}function o(e){return["total_ascent","total_descent"].includes(e)?"m":"km"}const s=(0,r.Fl)((()=>({labels:e.labels,datasets:JSON.parse(JSON.stringify(e.datasets))}))),i=(0,r.Fl)((()=>({responsive:!0,maintainAspectRatio:!0,animation:!1,layout:{padding:{top:e.fullStats?40:22}},scales:{x:{stacked:!0,grid:{drawOnChartArea:!1}},y:{stacked:"average_speed"!==e.displayedData,grid:{drawOnChartArea:!1},ticks:{maxTicksLimit:6,callback:function(t){return w(e.displayedData,+t,e.useImperialUnits,!1,o(e.displayedData))}},afterFit:function(t){t.width=e.fullStats?90:60}}},plugins:{datalabels:{anchor:"end",align:"end",color:function(t){return"average_speed"===e.displayedData&&t.dataset.backgroundColor?t.dataset.backgroundColor[0]:"#666666"},rotation:function(t){return e.fullStats&&t.chart.chartArea.width<580?310:0},display:function(t){return!(e.fullStats&&t.chart.chartArea.width<300)&&("average_speed"!==e.displayedData||1==e.displayedSportIds.length&&"auto")},formatter:function(t,n){if("average_speed"===e.displayedData)return w(e.displayedData,t,e.useImperialUnits,!1);{const t=n.chart.data.datasets.map((e=>e.data[n.dataIndex])).reduce(((e,t)=>a(e,t)),0);return n.datasetIndex===e.displayedSportIds.length-1&&t>0?w(e.displayedData,t,e.useImperialUnits,!1,o(e.displayedData)):null}}},legend:{display:!1},tooltip:{interaction:{intersect:!0,mode:"index",position:"average_speed"===e.displayedData?"nearest":"average"},filter:function(e){return"0"!==e.formattedValue},callbacks:{label:function(n){let r=t(`sports.${n.dataset.label}.LABEL`)||"";return r&&(r+=": "),null!==n.parsed.y&&(r+=w(e.displayedData,n.parsed.y,e.useImperialUnits,!0,o(e.displayedData))),r},footer:function(n){if("average_speed"===e.displayedData)return"";let r=0;return n.map((e=>{r+=e.parsed.y})),`${t("common.TOTAL")}: `+w(e.displayedData,r,e.useImperialUnits,!0,o(e.displayedData))}}}}}))),{barChartProps:l}=(0,g.xZ)({chartData:s,options:i});return{barChartProps:l}}}),v=n(3744);const C=(0,v.Z)(f,[["render",U]]);var D=C,k=n(5801),P=n(9917),L=n(9318),M=(0,r.aZ)({name:"UserMonthStats",components:{Chart:D},props:{sports:{type:Object,required:!0},user:{type:Object,required:!0},chartParams:{type:Object,required:!0},displayedSportIds:{type:Array,default:()=>[]},fullStats:{type:Boolean,default:!1},hideChartIfNoData:{type:Boolean,default:!1}},setup(e){const t=(0,P.o)(),n=(0,R.iH)("total_distance"),a=(0,r.Fl)((()=>t.getters[k.gu.GETTERS.USER_STATS])),o=(0,r.Fl)((()=>(0,L.v1)(e.chartParams,e.user.weekm,e.sports,e.displayedSportIds,a.value,e.user.imperial_units,e.user.date_format)));function s(n){t.dispatch(k.gu.ACTIONS.GET_USER_STATS,{username:e.user.username,filterType:"by_time",params:n})}function i(e){n.value=e.target.name}function l(e,t){return{from:(0,O.Z)(e.start,"yyyy-MM-dd"),to:(0,O.Z)(e.end,"yyyy-MM-dd"),time:"week"===e.duration?"week"+(t.weekm?"m":""):e.duration}}return(0,r.wF)((()=>s(l(e.chartParams,e.user)))),(0,r.YP)((()=>e.chartParams),(async t=>{s(l(t,e.user))})),{datasets:(0,r.Fl)((()=>o.value.datasets[n.value])),labels:(0,r.Fl)((()=>o.value.labels)),emptyStats:(0,r.Fl)((()=>0===Object.keys(a.value).length)),displayedData:n,updateDisplayData:i}}});const b=(0,v.Z)(M,[["render",A],["__scopeId","data-v-d5e9b348"]]);var y=b},2179:function(e,t,n){"use strict";n.d(t,{Z:function(){return N}});var r=n(6252),a=n(2262),o=n(3577),s=n(6595),i=n(5801),l=n(9917);const c={class:"box user-header"},u={class:"user-details"},d={class:"user-name"},m={class:"user-stats"},_={class:"user-stat"},E={class:"stat-number"},S={class:"stat-label"},T={class:"user-stat"},p={class:"stat-label"},A={class:"user-stat hide-small"},O={class:"stat-number"},R={class:"stat-label"};var I=(0,r.aZ)({__name:"UserHeader",props:{user:null},setup(e){const t=e,{user:n}=(0,a.BK)(t),I=(0,l.o)(),U=(0,r.Fl)((()=>I.getters[i.YN.GETTERS.AUTH_USER_PROFILE]));return(e,t)=>{const i=(0,r.up)("Distance");return(0,r.wg)(),(0,r.iD)("div",c,[(0,r.Wm)(s.Z,{user:(0,a.SU)(n)},null,8,["user"]),(0,r._)("div",u,[(0,r._)("div",d,(0,o.zw)((0,a.SU)(n).username),1),(0,r._)("div",m,[(0,r._)("div",_,[(0,r._)("span",E,(0,o.zw)((0,a.SU)(n).nb_workouts),1),(0,r._)("span",S,(0,o.zw)(e.$t("workouts.WORKOUT",(0,a.SU)(n).nb_workouts)),1)]),(0,r._)("div",T,[(0,r.Wm)(i,{distance:(0,a.SU)(n).total_distance,unitFrom:"km",digits:0,displayUnit:!1,useImperialUnits:(0,a.SU)(U).imperial_units},null,8,["distance","useImperialUnits"]),(0,r._)("span",p,(0,o.zw)((0,a.SU)(U).imperial_units?"miles":"km"),1)]),(0,r._)("div",A,[(0,r._)("span",O,(0,o.zw)((0,a.SU)(n).nb_sports),1),(0,r._)("span",R,(0,o.zw)(e.$t("workouts.SPORT",(0,a.SU)(n).nb_sports)),1)])])])])}}}),U=n(3744);const g=(0,U.Z)(I,[["__scopeId","data-v-20291951"]]);var N=g},1585:function(e,t,n){"use strict";n.d(t,{Z:function(){return f}});n(7658);var r=n(6252),a=n(2262),o=n(3577),s=n(9963),i=n(4850),l=n(5801),c=n(9917),u=n(6558),d=n(6287);const m={id:"user-infos",class:"description-list"},_={key:1,class:"info-box success-message"},E={key:4,class:"email-form form-box"},S={class:"form-items",for:"email"},T={class:"form-items",for:"email"},p={class:"form-buttons"},A={class:"confirm",type:"submit"},O=["onClick"],R={key:5},I={class:"user-bio"},U={key:0,class:"profile-buttons"},g=["onClick"],N={key:1,class:"profile-buttons"};var z=(0,r.aZ)({__name:"UserInfos",props:{user:null,fromAdmin:{type:Boolean,default:!1}},setup(e){const t=e,n=(0,c.o)(),{user:z,fromAdmin:h}=(0,a.BK)(t),w=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.LANGUAGE])),f=(0,r.Fl)((()=>n.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),v=(0,r.Fl)((()=>t.user.created_at?(0,u.p6)(t.user.created_at,f.value.timezone,f.value.date_format):"")),C=(0,r.Fl)((()=>t.user.birth_date?(0,i.Z)(new Date(t.user.birth_date),`${(0,u.mh)(f.value.date_format,w.value)}`,{locale:d.v1[w.value]}):"")),D=(0,r.Fl)((()=>n.getters[l.RT.GETTERS.USERS_IS_SUCCESS])),k=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),P=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.APP_CONFIG])),L=(0,a.iH)(""),M=(0,a.iH)(!1),b=(0,a.iH)(!1),y=(0,a.iH)(""),G=(0,a.iH)("");function F(e){L.value=e,""!==e&&n.commit(l.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1)}function W(e){n.dispatch(l.RT.ACTIONS.DELETE_USER_ACCOUNT,{username:e})}function K(e){G.value="password-reset",n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,resetPassword:!0})}function Y(e){n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,activate:!0})}function x(){Z(),y.value=z.value.email_to_confirm?z.value.email_to_confirm:"",b.value=!0,G.value="email-update"}function $(){y.value="",b.value=!1}function B(e){n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,new_email:y.value})}function Z(){n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),n.commit(l.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1),G.value=""}return(0,r.Ah)((()=>Z())),(0,r.YP)((()=>D.value),(e=>{e&&(F(""),$())})),(e,t)=>{const n=(0,r.up)("Modal"),i=(0,r.up)("AlertMessage"),l=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",m,[L.value?((0,r.wg)(),(0,r.j4)(n,{key:0,title:e.$t("common.CONFIRMATION"),message:"delete"===L.value?"admin.CONFIRM_USER_ACCOUNT_DELETION":"admin.CONFIRM_USER_PASSWORD_RESET",strongMessage:(0,a.SU)(z).username,onConfirmAction:t[0]||(t[0]=e=>"delete"===L.value?W((0,a.SU)(z).username):K((0,a.SU)(z).username)),onCancelAction:t[1]||(t[1]=e=>F(""))},null,8,["title","message","strongMessage"])):(0,r.kq)("",!0),(0,a.SU)(D)?((0,r.wg)(),(0,r.iD)("div",_,(0,o.zw)(e.$t(`admin.${"password-reset"===G.value?"PASSWORD_RESET":"USER_EMAIL_UPDATE"}_SUCCESSFUL`)),1)):(0,r.kq)("",!0),(0,a.SU)(z).is_active?(0,r.kq)("",!0):((0,r.wg)(),(0,r.j4)(i,{key:2,message:"user.THIS_USER_ACCOUNT_IS_INACTIVE"})),(0,a.SU)(k)?((0,r.wg)(),(0,r.j4)(l,{key:3,message:(0,a.SU)(k)},null,8,["message"])):(0,r.kq)("",!0),b.value?((0,r.wg)(),(0,r.iD)("div",E,[(0,r._)("form",{class:(0,o.C_)({errors:M.value}),onSubmit:t[4]||(t[4]=(0,s.iM)((e=>B((0,a.SU)(z).username)),["prevent"]))},[(0,r._)("label",S,[(0,r.Uk)((0,o.zw)(e.$t("admin.CURRENT_EMAIL"))+" ",1),(0,r.wy)((0,r._)("input",{id:"email",type:"email","onUpdate:modelValue":t[2]||(t[2]=e=>(0,a.SU)(z).email=e),disabled:""},null,512),[[s.nr,(0,a.SU)(z).email]])]),(0,r._)("label",T,[(0,r.Uk)((0,o.zw)(e.$t("admin.NEW_EMAIL"))+"* ",1),(0,r.wy)((0,r._)("input",{id:"new-email",type:"email",required:"","onUpdate:modelValue":t[3]||(t[3]=e=>y.value=e)},null,512),[[s.nr,y.value]])]),(0,r._)("div",p,[(0,r._)("button",A,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,r._)("button",{class:"cancel",onClick:(0,s.iM)($,["prevent"])},(0,o.zw)(e.$t("buttons.CANCEL")),9,O)])],34)])):((0,r.wg)(),(0,r.iD)("div",R,[(0,r._)("dl",null,[(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(v)),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.FIRST_NAME"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(z).first_name),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.LAST_NAME"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(z).last_name),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.BIRTH_DATE"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(C)),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.LOCATION"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(z).location),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.BIO"))+":",1),(0,r._)("dd",I,(0,o.zw)((0,a.SU)(z).bio),1)]),(0,a.SU)(h)?((0,r.wg)(),(0,r.iD)("div",U,[(0,a.SU)(f).username!==(0,a.SU)(z).username?((0,r.wg)(),(0,r.iD)("button",{key:0,class:"danger",onClick:t[5]||(t[5]=(0,s.iM)((e=>F("delete")),["prevent"]))},(0,o.zw)(e.$t("admin.DELETE_USER")),1)):(0,r.kq)("",!0),(0,a.SU)(z).is_active?(0,r.kq)("",!0):((0,r.wg)(),(0,r.iD)("button",{key:1,onClick:t[6]||(t[6]=(0,s.iM)((e=>Y((0,a.SU)(z).username)),["prevent"]))},(0,o.zw)(e.$t("admin.ACTIVATE_USER_ACCOUNT")),1)),(0,a.SU)(f).username!==(0,a.SU)(z).username?((0,r.wg)(),(0,r.iD)("button",{key:2,onClick:(0,s.iM)(x,["prevent"])},(0,o.zw)(e.$t("admin.UPDATE_USER_EMAIL")),9,g)):(0,r.kq)("",!0),(0,a.SU)(f).username!==(0,a.SU)(z).username&&(0,a.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("button",{key:3,onClick:t[7]||(t[7]=(0,s.iM)((e=>F("reset")),["prevent"]))},(0,o.zw)(e.$t("admin.RESET_USER_PASSWORD")),1)):(0,r.kq)("",!0),(0,r._)("button",{onClick:t[8]||(t[8]=t=>e.$router.go(-1))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,r.wg)(),(0,r.iD)("div",N,[(0,r._)("button",{onClick:t[9]||(t[9]=t=>e.$router.push("/profile/edit"))},(0,o.zw)(e.$t("user.PROFILE.EDIT")),1),(0,r._)("button",{onClick:t[10]||(t[10]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))]))])}}}),h=n(3744);const w=(0,h.Z)(z,[["__scopeId","data-v-217519af"]]);var f=w},2411:function(e,t,n){"use strict";n.d(t,{Z:function(){return C}});var r=n(6252),a=n(3577),o=n(2262),s=n(9963),i=n(2201),l=n(8403),c=n(5801),u=n(9917);const d=e=>((0,r.dD)("data-v-b3c885de"),e=e(),(0,r.Cn)(),e),m={id:"user-form"},_={key:2,class:"info-box success-message"},E={class:"form-items"},S=["disabled","placeholder"],T={key:1,class:"form-info"},p=d((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),A=["disabled","placeholder"],O={key:3,class:"form-info"},R=d((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),I=["disabled"],U={key:3},g={key:0},N={key:4},z={class:"account"},h={key:5};var w=(0,r.aZ)({__name:"UserAuthForm",props:{action:null,token:{default:""}},setup(e){const t=e,n=(0,i.yj)(),d=(0,u.o)(),{action:w}=(0,o.BK)(t),f=(0,o.qj)({username:"",email:"",password:""}),v=(0,r.Fl)((()=>G(t.action))),C=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.ERROR_MESSAGES])),D=(0,r.Fl)((()=>d.getters[c.YN.GETTERS.IS_REGISTRATION_SUCCESS])),k=(0,r.Fl)((()=>d.getters[c.YN.GETTERS.IS_SUCCESS])),P=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.APP_CONFIG])),L=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.LANGUAGE])),M=(0,r.Fl)((()=>"register"===t.action&&!P.value.is_registration_enabled)),b=(0,r.Fl)((()=>["reset-request","account-confirmation-resend"].includes(t.action)&&!P.value.is_email_sending_enabled)),y=(0,o.iH)(!1);function G(e){switch(e){case"reset-request":case"reset":return"buttons.SUBMIT";default:return`buttons.${t.action.toUpperCase()}`}}function F(){y.value=!0}function W(e){f.password=e}function K(e){switch(e){case"reset":return t.token?d.dispatch(c.YN.ACTIONS.RESET_USER_PASSWORD,{password:f.password,token:t.token}):d.commit(c.SY.MUTATIONS.SET_ERROR_MESSAGES,"user.INVALID_TOKEN");case"reset-request":return d.dispatch(c.YN.ACTIONS.SEND_PASSWORD_RESET_REQUEST,{email:f.email});case"account-confirmation-resend":return d.dispatch(c.YN.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL,{email:f.email});default:f["language"]=L.value,d.dispatch(c.YN.ACTIONS.LOGIN_OR_REGISTER,{actionType:e,formData:f,redirectUrl:n.query.from})}}function Y(){f.username="",f.email="",f.password=""}return(0,r.Ah)((()=>d.commit(c.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(0,r.YP)((()=>n.path),(async()=>{d.commit(c.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),d.commit(c.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),d.commit(c.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!1),y.value=!1,Y()})),(e,t)=>{const n=(0,r.up)("AlertMessage"),i=(0,r.up)("router-link"),c=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",{id:"user-auth-form",class:(0,a.C_)(`${["reset","reset-request"].includes((0,o.SU)(w))?(0,o.SU)(w):"user-form"}`)},[(0,r._)("div",m,[(0,r._)("div",{class:(0,a.C_)(["form-box",{disabled:(0,o.SU)(M)}])},[(0,o.SU)(M)?((0,r.wg)(),(0,r.j4)(n,{key:0,message:"user.REGISTER_DISABLED"})):(0,r.kq)("",!0),(0,o.SU)(b)?((0,r.wg)(),(0,r.j4)(n,{key:1,message:"admin.EMAIL_SENDING_DISABLED"})):(0,r.kq)("",!0),(0,o.SU)(k)||(0,o.SU)(D)?((0,r.wg)(),(0,r.iD)("div",_,(0,a.zw)(e.$t("user.PROFILE.SUCCESSFUL_"+((0,o.SU)(D)?"REGISTRATION"+((0,o.SU)(P).is_email_sending_enabled?"_WITH_EMAIL":""):"UPDATE"))),1)):(0,r.kq)("",!0),(0,r._)("form",{class:(0,a.C_)({errors:y.value}),onSubmit:t[2]||(t[2]=(0,s.iM)((e=>K((0,o.SU)(w))),["prevent"]))},[(0,r._)("div",E,["register"===(0,o.SU)(w)?(0,r.wy)(((0,r.wg)(),(0,r.iD)("input",{key:0,id:"username",disabled:(0,o.SU)(M),required:"",pattern:"[a-zA-Z0-9_]+",minlength:"3",maxlength:"30",onInvalid:F,"onUpdate:modelValue":t[0]||(t[0]=e=>f.username=e),placeholder:e.$t("user.USERNAME")},null,40,S)),[[s.nr,f.username]]):(0,r.kq)("",!0),"register"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",T,[p,(0,r.Uk)(" "+(0,a.zw)(e.$t("user.USERNAME_INFO")),1)])):(0,r.kq)("",!0),"reset"!==(0,o.SU)(w)?(0,r.wy)(((0,r.wg)(),(0,r.iD)("input",{key:2,id:"email",disabled:(0,o.SU)(M)||(0,o.SU)(b),required:"",onInvalid:F,type:"email","onUpdate:modelValue":t[1]||(t[1]=e=>f.email=e),placeholder:e.$t("user.EMAIL")},null,40,A)),[[s.nr,f.email]]):(0,r.kq)("",!0),["reset-request","register","account-confirmation-resend"].includes((0,o.SU)(w))?((0,r.wg)(),(0,r.iD)("div",O,[R,(0,r.Uk)(" "+(0,a.zw)(e.$t("user.EMAIL_INFO")),1)])):(0,r.kq)("",!0),["account-confirmation-resend","reset-request"].includes((0,o.SU)(w))?(0,r.kq)("",!0):((0,r.wg)(),(0,r.j4)(l.Z,{key:4,disabled:(0,o.SU)(M),required:!0,placeholder:"reset"===(0,o.SU)(w)?e.$t("user.ENTER_PASSWORD"):e.$t("user.PASSWORD"),password:f.password,checkStrength:["reset","register"].includes((0,o.SU)(w)),onUpdatePassword:W,onPasswordError:F},null,8,["disabled","placeholder","password","checkStrength"]))]),(0,r._)("button",{type:"submit",disabled:(0,o.SU)(M)||(0,o.SU)(b)},(0,a.zw)(e.$t((0,o.SU)(v))),9,I)],34),"login"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",U,[(0,r.Wm)(i,{class:"links",to:"/register"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.REGISTER")),1)])),_:1}),(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("span",g,"-")):(0,r.kq)("",!0),(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.j4)(i,{key:1,class:"links",to:"/password-reset/request"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.PASSWORD_FORGOTTEN")),1)])),_:1})):(0,r.kq)("",!0)])):(0,r.kq)("",!0),"register"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",N,[(0,r._)("span",z,(0,a.zw)(e.$t("user.ALREADY_HAVE_ACCOUNT")),1),(0,r.Wm)(i,{class:"links",to:"/login"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.LOGIN")),1)])),_:1})])):(0,r.kq)("",!0),["login","register"].includes((0,o.SU)(w))&&(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("div",h,[(0,r.Wm)(i,{class:"links",to:"/account-confirmation/resend"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.ACCOUNT_CONFIRMATION_NOT_RECEIVED")),1)])),_:1})])):(0,r.kq)("",!0),(0,o.SU)(C)?((0,r.wg)(),(0,r.j4)(c,{key:6,message:(0,o.SU)(C)},null,8,["message"])):(0,r.kq)("",!0)],2)])],2)}}}),f=n(3744);const v=(0,f.Z)(w,[["__scopeId","data-v-b3c885de"]]);var C=v},6595:function(e,t,n){"use strict";n.d(t,{Z:function(){return _}});var r=n(6252),a=n(2262),o=n(2024);const s={class:"user-picture"},i=["alt","src"],l={key:1,class:"no-picture"},c=(0,r._)("i",{class:"fa fa-user-circle-o","aria-hidden":"true"},null,-1),u=[c];var d=(0,r.aZ)({__name:"UserPicture",props:{user:null},setup(e){const t=e,n=(0,r.Fl)((()=>t.user.picture?`${(0,o.k)()}users/${t.user.username}/picture?${Date.now()}`:""));return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[""!==(0,a.SU)(n)?((0,r.wg)(),(0,r.iD)("img",{key:0,class:"profile-user-img",alt:e.$t("user.USER_PICTURE"),src:(0,a.SU)(n)},null,8,i)):((0,r.wg)(),(0,r.iD)("div",l,u))]))}});const m=d;var _=m},5630:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(6252),a=n(3577);const o={class:"no-workouts box"};function s(e,t){const n=(0,r.up)("router-link");return(0,r.wg)(),(0,r.iD)("div",o,[(0,r._)("div",null,[(0,r.Uk)((0,a.zw)(e.$t("workouts.NO_WORKOUTS"))+" ",1),(0,r.Wm)(n,{to:"/workouts/add"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("workouts.UPLOAD_FIRST_WORKOUT")),1)])),_:1})])])}var i=n(3744);const l={},c=(0,i.Z)(l,[["render",s],["__scopeId","data-v-4b4d15fb"]]);var u=c},4612:function(e,t,n){var r={"./de/de.ts":9923,"./en/en.ts":8757,"./fr/fr.ts":6625,"./nb/nb.ts":8891};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=4612}},t={};function n(r){var a=t[r];if(void 0!==a)return a.exports;var o=t[r]={exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.m=e,function(){var e=[];n.O=function(t,r,a,o){if(!r){var s=1/0;for(u=0;u=o)&&Object.keys(n.O).every((function(e){return n.O[e](r[l])}))?r.splice(l--,1):(i=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]}}(),function(){n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,{a:t}),t}}(),function(){var e,t=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__};n.t=function(r,a){if(1&a&&(r=this(r)),8&a)return r;if("object"===typeof r&&r){if(4&a&&r.__esModule)return r;if(16&a&&"function"===typeof r.then)return r}var o=Object.create(null);n.r(o);var s={};e=e||[null,t({}),t([]),t(t)];for(var i=2&a&&r;"object"==typeof i&&!~e.indexOf(i);i=t(i))Object.getOwnPropertyNames(i).forEach((function(e){s[e]=function(){return r[e]}}));return s["default"]=function(){return r},n.d(o,s),o}}(),function(){n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}}(),function(){n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce((function(t,r){return n.f[r](e,t),t}),[]))}}(),function(){n.u=function(e){return"static/js/"+({24:"reset",193:"statistics",328:"admin",401:"workouts",845:"profile",881:"password"}[e]||e)+"."+{24:"d9073cf1",93:"02cf293c",193:"c9a8011a",243:"e551248f",328:"9bc68088",401:"8abaa659",431:"e5102e07",633:"81a8ddc8",845:"430ae7df",858:"3f2a93f2",881:"43430dfc"}[e]+".js"}}(),function(){n.miniCssF=function(e){return"static/css/"+{24:"reset",193:"statistics",328:"admin",401:"workouts",845:"profile"}[e]+"."+{24:"e2527ec6",193:"40e24e75",328:"73df498d",401:"41709693",845:"203e78e2"}[e]+".css"}}(),function(){n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){var e={},t="fittrackee_client:";n.l=function(r,a,o,s){if(e[r])e[r].push(a);else{var i,l;if(void 0!==o)for(var c=document.getElementsByTagName("script"),u=0;u {\n const controller = new AbortController()\n config.signal = controller.signal\n const requestKey = removeRequestIfPending(config)\n pendingRequests.set(requestKey, controller)\n\n const authToken = store.getters[AUTH_USER_STORE.GETTERS.AUTH_TOKEN]\n if (authToken) {\n const auth = `Bearer ${authToken}`\n if (config.headers && config.headers.Authorization !== auth) {\n config.headers.Authorization = `Bearer ${authToken}`\n }\n }\n return config\n },\n (error) => Promise.reject(error)\n)\n\nauthApi.interceptors.response.use(\n (response) => {\n removeRequestIfPending(response.config)\n return response\n },\n (error) => {\n if (error.message !== 'canceled') {\n removeRequestIfPending(error.response.config)\n }\n return Promise.reject(error)\n }\n)\n\nexport default authApi\n","import { AxiosRequestConfig } from 'axios'\n\nexport const pendingRequests = new Map()\n\nconst generateRequestKey = (config: AxiosRequestConfig): string => {\n const { method, url, params = {}, data = {} } = config\n return [method, url, JSON.stringify(params), JSON.stringify(data)].join('')\n}\n\nexport const removeRequestIfPending = (config: AxiosRequestConfig): string => {\n const requestKey = generateRequestKey(config)\n if (pendingRequests.has(requestKey)) {\n const controller = pendingRequests.get(requestKey) || {}\n controller?.abort()\n pendingRequests.delete(requestKey)\n }\n return requestKey\n}\n","import { createI18n, LocaleMessages, VueMessageType } from 'vue-i18n'\n\n/**\n * Load locale messages\n *\n * The loaded `JSON` locale messages is pre-compiled by `@intlify/vue-i18n-loader`, which is integrated into `vue-cli-plugin-i18n`.\n * See: https://github.com/intlify/vue-i18n-loader#rocket-i18n-resource-pre-compilation\n */\nconst disabledLanguages = ['nb'] // to remove after norwegian translations release\n\nfunction loadLocaleMessages(): Record> {\n const locales = require.context('./locales', true, /[A-Za-z0-9-_,\\s]+\\.ts$/i)\n const messages: Record> = {}\n locales.keys().forEach((key) => {\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i)\n if (\n matched &&\n matched.length > 1 &&\n !disabledLanguages.includes(matched[1])\n ) {\n const locale = matched[1]\n messages[locale] = locales(key).default\n }\n })\n return messages\n}\n\nexport default createI18n({\n legacy: false,\n locale: 'en',\n fallbackLocale: 'en',\n globalInjection: true,\n messages: loadLocaleMessages(),\n})\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontaktiere den Administrator\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee ist ein selbst-gehosteter Outdoor-Aktivitäts-Tracker.\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"unter \", _interpolate(_list(0)), \" Lizenz \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Quellkode\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktion\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiviere Konto\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiv\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hinzufügen/Entfernen von Administratorrechten, Lösche Nutzerkonto.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontakt-E-Mail des Administrators\"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Anzahl aktiver Nutzer\"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wenn 0, gibt es keine Registrierungslimitierung..\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Dateianzahl im zip Archiv\"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Kontakt-E-Mail\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Größe der hochgeladenen Dateien (in Mb)\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungskonfiguration\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Größe des zip Archives (in Mb)\"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück zu Admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Möchtest du wirklich das \", _interpolate(_list(0)), \" Konto löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Möchtest du wirklich das \", _interpolate(_list(0)), \" Passwort zurücksetzen?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktuelle E-Mail\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lösche Nutzer\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail-Versand ist deaktiviert.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktivieren/Deaktivieren von Sportarten.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Neue E-Mail\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Das wasswort wurde zurückgesetzt.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung ist derzeit deaktiviert.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung ist derzeit aktiviert.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiv\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainings existieren\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten Administration\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktualisiere Anwemdungskonfiguration (maximale Anzahl an registrierten Nutzern, maximale Dateigröße).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktualisiere E-Mail\"])},\n \"USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzer\"])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die E-Mail Adresse wurde aktualisiert.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administratorrechte hinzufügen\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administratorrechte entfernen\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Adminstatus\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierungsdatum\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accountstatus\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzername\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainingsanzahl\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail: Eine gültige E-Mail muss angegeben werden.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler bei der GPX-Verarbeitung.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Einlesen der GPX-Datei\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Abrufen der Konfiguration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Aktualisieren der Konfiguration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Die Registrierung ist deaktiviert.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dateierweiterung ist nicht erlaubt.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die Datei ist größer als erlaubt.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültige Anmeldedaten.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die bereitgestellten Daten sind ungültig.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte erneut anmelden.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte erneut anmelden.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Netzwerkfehler.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die neue E-Mail muss sich von der aktuellen E-Mail unterscheiden\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei angegeben.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei ausgewählt.\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort: Passwort und Passwortbestätigung stimmen nicht überein.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe ein gültiges Authentifizierungstoken an.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Es tut mir leid, der Benutzername ist schon vergeben.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportart existiert nicht.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die Signatur ist abgelaufen. Bitte melde dich erneut an.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung erfolgreich.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Der Nutzer existiert nicht.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Um den Administrator zu kontaktieren, muss eine gültige E-Mail-Adresse angegeben werden\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du kannst Dein Konto nicht löschen, da kein anderer Nutzer hat Administratorrechte besitzt.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du hast keine Berechtigung.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorhergehende\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächste\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bestätigungs-E-Mail erneut senden\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Autorisieren\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abbrechen\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter löschen\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mein Konto löschen\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Deaktivieren\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bearbeiten\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktivieren\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmelden\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nein\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrieren\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurücksetzen\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Speichern\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ja\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Über\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bestätigung\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontakt\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Tag\"]), _normalize([\"Tage\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Angezeigt\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dokumentation (en)\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hier\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Versteckt\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Startseite\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sortiert nach\"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sortieren\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"aufsteigend\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"absteigend\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pro Seite\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Insgesamt\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dashboard\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dieser Monat\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bei der Anwendung scheinen einige Probleme aufgetreten zu sein.
Bitte versuche es später noch einmal oder kontaktiere den Administrator.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Seite nicht gefunden\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training nicht gefunden\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Etwas lief schief\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Eine neue OAuth2-Anwendung hinzufügen\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ID\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geheimnis\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungsbeschreibung\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erstellt am\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungsname\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Weiterleitungs-URL\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geltungsbereich\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf auth-Endpunkte\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf auth-Endpunkte\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf users-Endpunkte\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf users-Endpunkte\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf workouts-Endpunkte\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf workouts-Endpunkte\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf die Anwendungskonfiguration\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungs-URL\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung erfolgreich erstellt. Stelle sicher, dass du das Geheimnis kopierst, du kannst es nicht erneut anzeigen.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist sicher, dass du diese App löschen willst?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Die Anwendung \", _interpolate(_list(0)), \" fragt an:\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OAuth2-Anwendungen\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" den Zugriff auf deinen Account erlauben?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"in Zwischenablage kopieren\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung löschen\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung hinzufügen\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung wurde nicht gefunden!\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Anwendungen\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Beschreibung\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alle Tokens zurückrufen\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist du sicher, dass du alle Tokens zurückrufen möchtest?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alle vorhandenen und vergebenen Tokens wurde zurückgerufen.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Pendeln)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Virtuell)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wandern\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountainbiken\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountainbiken (elektrisch)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Rudern\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Laufen\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skifahren (Alpin)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skifahren (Langlauf)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schneeschuhe\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gehen\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistik\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Woche\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Monat\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jahr\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hast du keine Anweisungen erhalten?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prüfe deine E-Mail. Eine neue Bestätigungs-E-Mail wurde an die angegebene Adresse geschickt.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hast du bereits ein Konto?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Möchtest du dein Konto wirklich löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktuelles Passwort\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe eine gültige E-Mail-Adresse an.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe ein Passwort ein\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nach Benutzernamen filtern\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort verbergen\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte fordere ein neues Passworts an.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sprache\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmelden\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmeldung\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abmelden\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Neues Passwort\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Nutzer gefunden.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mindestens 8 Zeichen sind erforderlich.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort vergessen?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prüfe Deine E-Mail. Wenn Deine Adresse in der Datenbank enthalten ist, wirst du eine E-Mail mit einem Link erhalten um Dein Passwort zurückzusetzen.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"schwach\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mittel\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"gut\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwortstärke\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide vorhersehbare Buchstabenersetzungen wie \", \"@\", \" für a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide umgekehrte Schreibweisen gebräuchlicher Wörter.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schreibe einige, aber nicht alle Buchstaben groß.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schreibe mehr als nur den ersten Buchstaben groß.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Daten und Jahreszahlen, die mit Dir in Verbindung gebracht werden.\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Angabe von letzten Jahreszahlen.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Jahreszahlen, die mit Dir in Verbindung gebracht werden.\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide gebräuchliche Zeichenfolgen.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide wiederholungen von Wörtern und Zeichen.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Verwende längere Tastaturmuster und ändere mehrmals die Schreibrichtung.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Füge weitere weniger gebräuchliche Wörter hinzu.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Verwenden Sie mehrere Wörter, aber vermeide gebräuchliche Ausdrücke.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du kannst sichere Passwörter erstellen, ohne Symbole, Zahlen oder Großbuchstaben zu verwenden.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wenn Sie dieses Passwort auch anderweitig verwenden, sollten Sie es ändern.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Dein Passwort wurde aktualisiert. Klicke \", _interpolate(_list(0)), \" um dich anzumelden.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontoausgabe\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anstiegs-bezogene Daten (Aufnahmen, gesamt)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück zum Profil\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Biographie\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geburtsdatum\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Datumsanzeigeformat\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil bearbeiten\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen ändern\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen für Sportarten ändern\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Bitte \", _interpolate(_list(0)), \" um Deine E-Mail Adresse nochmals zu ändern oder kontaktiere den Administrator\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorname\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erster Tag der Woche\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sprache\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nachname\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ort\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Montag\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bildausgabe\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild aktualisieren\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild entfernen\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungsausgabe\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil-Ausgabe\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Regirierungsdatum\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten-Einstellungsausgabe\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sontag\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Konto\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungen\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktion\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Farbe\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vom Admin deaktiviert\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"aktiv\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geschwindigkeitsschwellenwert für Stopp\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich aktualisiert. Bitte prüfe Deine E-Mail um die neue E-Mail Adresse zu bestätigen.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich erstellt.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ein Aktivierungslink für Dein Konto wurde an die angegebene E-Mail Adresse geschickt.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich aktualisiert.\"])},\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einheiten für die Distanz\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Imperiales System (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Metrisches System (m, km)\"])}\n },\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zeitzone\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrieren\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail zur Kontobestätigung erneut senden\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Entschuldigung, die Registrierung ist deaktiviert.\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort anzeigen\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dieser Account ist inaktiv.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Benutzerbild\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzername\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 bis 30 Zeichen sind erforderlich, nur alphanumerische Zeichen und der Unterstrich _ sind erlaubt.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training hinzufügen\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Analyse\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aufstieg\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschn. Geschwindigkeit\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschnittsgeschwindigkeit\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"zurück zum Training\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Datum\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abstieg\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"zeige Filter\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Entfernung\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dauer\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training bearbeiten\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höhe\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ende\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Von\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".gpx Datei\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"verberge Filter\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Letzte Trainings\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lade mehr Trainings\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"maximale Höhe\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Maximale Dateianzahl\"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Maximalgröße\"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Geschwindigkeit\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"minimale Höhe\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächstes Segment\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächstes Training\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Daten aus gpx, ohne Bereinigung\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei angegeben\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"enthält keinen Ordner\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Karte\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein nächstes Segment\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein nächstes Training\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Anmerkungen\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein vorheriges Segment\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein vorheriges Training\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Aufzeichnungen.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Trainings.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmerkungen\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pausen\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorheriges Segment\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorheriges Training\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Aufzeichnung\"]), _normalize([\"Aufzeichnungen\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschn. Geschwindigkeit\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Weiteste Entfernung\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höchster Anstieg\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Längste Dauer\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Geschwindigkeit\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"verbleibende Zeichen\"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Segment\"]), _normalize([\"Segmente\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geschwindigkeit\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Sportart\"]), _normalize([\"Sportarten\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start und Ziel\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höhenachse bei Null starten\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"bis\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gesamtdauer\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Füge erstes Training hinzu!\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Luftfeuchtigkeit\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Temperatur\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wind\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNO\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NO\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ONO\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"O\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OSO\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SO\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSO\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSW\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SW\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WSW\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"W\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WNW\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NW\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNW\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"klarer Tag\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"klare Nacht\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wolkig\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nebel\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"teilweise bewölkter Tag\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"teilweise bewölkte Nacht\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Regen\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schneeregen\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schnee\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wind\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mit .gpx Datei\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ohne .gpx Datei\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Training\"]), _normalize([\"Trainings\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainingsdatum\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist du sicher, dass du dieses Training löschen möchtest?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".zip Datei\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"oder .zip Datei mit .gpx Dateien\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Contact the administrator\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee is a self-hosted outdoor activity tracker.\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"under \", _interpolate(_list(0)), \" license \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Source code\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Action\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activate account\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Active\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add/remove admin rights, delete user account.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administrator email for contact\"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. number of active users\"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"If 0, no limitation on registration.\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. files of zip archive\"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no contact email\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. size of uploaded files (in Mb)\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application configuration\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. size of zip archive (in Mb)\"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back to admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Are you sure you want to delete \", _interpolate(_list(0)), \" account? All data will be deleted, this cannot be undone.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Are you sure you want to reset \", _interpolate(_list(0)), \" password?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Current email\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete user\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email sending is disabled.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enable/disable sports.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New email\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The password has been reset.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration is currently disabled.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration is currently enabled.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset password\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Active\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workouts exist\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Label\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sports administration\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update application configuration (maximum number of registered users, maximum files size).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update email\"])},\n \"USER\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"user\"]), _normalize([\"users\"])])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The email address has been updated.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add admin rights\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove admin rights\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"admin status\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"registration date\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"account status\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"username\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workout count\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error. Please try again or contact the administrator.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email: valid email must be provided.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error during gpx processing.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error during gpx file parsing.\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error on getting configuration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error when updating configuration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error, please try again or contact the administrator.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error, registration is disabled.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File extension not allowed.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File size is greater than the allowed size.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid credentials.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Provided data are invalid.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please log in again.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please log in again.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Network Error.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The new email must be different than curent email\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No file provided.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No selected file.\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password: password and password confirmation don't match.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Provide a valid auth token.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sorry, that username is already taken.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sport does not exist.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Signature expired. Please log in again.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Successfully registered.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User does not exist.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"A valid email must be provided for administrator contact\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You can not delete your account, no other user has admin rights.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You do not have permissions.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"previous\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"next\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Resend confirmation email\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Authorize\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cancel\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Clear filters\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete my account\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disable\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enable\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Log in\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Register\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Submit\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Yes\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"about\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirmation\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"contact\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"day\"]), _normalize([\"days\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Displayed\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"here\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hidden\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Home\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"order by\"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sort\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascending\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descending\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"par page\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Total\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dashboard\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This month\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error. Please try again or contact the administrator.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The application seems to have encountered some issues.
Please try again later or contact the administrator.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Page not found\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Workout not found\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Something went wrong\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add a new OAuth2 application\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Id\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Secret\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application description\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Issue at\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application name\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Redirect URL\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scope\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to application configuration.\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to auth endpoints.\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to auth endpoints.\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to users endpoints.\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to users endpoints.\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to workouts endpoints.\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to workouts endpoints.\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application URL\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application created successfully. Make sure to copy the secret now, it won't show up again.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete this app?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"The application \", _interpolate(_list(0)), \" is requesting:\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OAuth2 applications\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Authorize \", _interpolate(_list(0)), \" to use your account?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"copy to the clipboard\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete application\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add an application\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application not found!\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no applications\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no description\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revoke all tokens\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to revoke all tokens?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"All existing associated tokens have been revoked.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Transport)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Virtual)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hiking\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountain Biking\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountain Biking (Electric)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Rowing\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Running\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skiing (Alpine)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skiing (Cross Country)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Snowshoes\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Walking\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistics\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"week\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"month\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"year\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Didn't received instructions?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Check your email. A new confirmation email has been sent to the address provided.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Already have an account?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete your account? All data will be deleted, this cannot be undone\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Current password\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter a valid email address.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter a password\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter on username\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hide password\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please request a new password reset.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Language\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"log in\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Login\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Logout\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New password\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No users found.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"At least 8 characters required.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Forgot password?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password reset\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Check your email. If your address is in our database, you'll received an email with a link to reset your password.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"weak\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"average\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"good\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"strong\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"password strength\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid predictable letter substitutions like \", \"@\", \" for a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid reversed spellings of common words.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalize some, but not all letters.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalize more than the first letter.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid dates and years that are associated with you.\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid recent years.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid years that are associated with you.\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid common character sequences.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid repeated words and characters.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Use longer keyboard patterns and change typing direction multiple times.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add more words that are less common.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Use multiple words, but avoid common phrases.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You can create strong passwords without using symbols, numbers, or uppercase letters.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"If you use this password elsewhere, you should change it.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Your password have been updated. Click \", _interpolate(_list(0)), \" to log in.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Account edition\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ascent-related data (records, total)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back to profile\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bio\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Birth date\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date display format\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit profile\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit preferences\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit sports preferences\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Please \", _interpolate(_list(0)), \" to change your email address again or contact the administrator\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"First name\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"First day of week\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Language\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Last name\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Location\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Monday\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Picture\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Picture edition\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update picture\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove picture\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preferences edition\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile edition\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration date\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sports preferences edition\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sunday\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"account\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"apps\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"picture\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"preferences\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"profile\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sports\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"action\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"color\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"disabled by admin\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"active\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"label\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"stopped speed threshold\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been updated successfully. Please check your email to confirm your new email address.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been created successfully.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"A link to activate your account has been emailed to the address provided.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been updated successfully.\"])},\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Units for distance\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Imperial system (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Metric system (m, km)\"])}\n },\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Timezone\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Register\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Resend account confirmation email\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sorry, registration is disabled.\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset your password\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"show password\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This user account is inactive.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"user picture\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Username\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 to 30 characters required, only alphanumeric characters and the underscore character \\\"_\\\" allowed.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add a workout\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"analysis\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascent\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ave. speed\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"average speed\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"back to workout\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descent\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"display filters\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"distance\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"duration\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit the workout\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"elevation\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"end\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"from\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".gpx file\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hide filters\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Latest workouts\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load more workouts\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max. altitude\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max files\"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max size\"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max. speed\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"min. altitude\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next segment\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Next workout\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"data from gpx, without any cleaning\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No file provided\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no folder inside\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No map\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next segment\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next workout\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No notes\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No previous segment\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No previous workout\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No records.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No workouts.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"notes\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pauses\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Previous segment\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Previous workout\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"record\"]), _normalize([\"records\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ave. speed\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Farthest distance\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Highest ascent\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Longest duration\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. speed\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"remaining characters\"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"segment\"]), _normalize([\"segments\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"speed\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"sport\"]), _normalize([\"sports\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start and finish\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start elevation axis at zero\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"title\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"to\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"total duration\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Upload one!\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"humidity\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"temperature\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wind\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNE\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NE\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ENE\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ESE\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SE\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSE\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSW\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SW\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WSW\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"W\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WNW\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NW\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNW\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"clear day\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"clear night\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cloudy\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fog\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partly cloudy day\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partly cloudy night\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"rain\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sleet\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"snow\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wind\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"with .gpx file\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"without .gpx file\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"workout\"]), _normalize([\"workouts\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workout date\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete this workout?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".zip file\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"or .zip file containing .gpx files\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Contacter l'administrateur\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee est un tracker d'activités sportives (en extérieur).\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"sous licence \", _interpolate(_list(0)), \" (en) \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Code source (en)\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Action\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer le compte\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Actif\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter/retirer des droits d'administration, supprimer des comptes utilisateurs.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email de l'administrateur pour contact \"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nombre maximum d'utilisateurs actifs \"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Si égal à 0, pas limite d'inscription\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Taille max. des archives zip (en Mo) \"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"non renseigné\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Taille max. des fichiers (en Mo) \"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Configuration de l'application\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nombre max. de fichiers dans une archive zip \"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revenir à l'admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Êtes-vous sûr de vouloir supprimer le compte de l'utilisateur \", _interpolate(_list(0)), \" ? Toutes les données seront définitivement.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Êtes-vous sûr de vouloir réinitialiser le mot de passe de l'utilisateur \", _interpolate(_list(0)), \" ?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Adresse email actuelle\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer l'utilisateur\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'envoi d'emails est désactivé.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer/désactiver des sports.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nouvelle adresse email\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Le mot de passe a été réinitialisé.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Les inscriptions sont actuellement désactivées.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Les inscriptions sont actuellement activées.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinit. le mot de passe\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Actif\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"des séances existent\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Label\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration - Sports\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Configurer l'application (nombre maximum d'utilisateurs inscrits, taille maximale des fichers).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Changer l'email\"])},\n \"USER\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"utilisateur\"]), _normalize([\"utilisateurs\"])])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'adresse email a été mise à jour.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter les droits d'admin\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Retirer les droits d'admin\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"status administrateur\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date d'inscription\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"statut du compte\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nom d'utilisateur\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nombre de séances\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur. Veuillez réessayer ou contacter l'administrateur.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Courriel : une adresse électronique valide doit être fournie.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors du traitement du fichier gpx.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de l'analyse du fichier.\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de la récupération de la configuration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de la mise à jour de la configuration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur, veuillez réessayer ou contacter l'administrateur.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur, les inscriptions sont désactivées.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Extension de fichier non autorisée.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"La taille du fichier est supérieure à la limite autorisée.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Identifiants invalides.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Données fournies incorrectes.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton de connexion invalide, merci de vous reconnecter.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton de connexion, merci de vous reconnecter.\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier fourni.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier sélectionné.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur réseau.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"La nouvelle addresse électronique doit être differente de l'adresse actuelle\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe : les mots de passe saisis sont différents.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Merci de fournir un jeton de connexion valide.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ce sport n'existe pas.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Signature expirée. Merci de vous reconnecter.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désolé, ce nom d'utilisateur est déjà utilisé.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Inscription validée.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'utilisateur n'existe pas.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Une adresse électronique doit être fournie pour le contact de l'administrateur\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous ne pouvez pas supprimer votre compte, aucun autre utilisateur n'a des droits d'administration.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous n'avez pas les permissions nécessaires.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"précédent\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"suivant\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Renvoyer le message de confirmation\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Autoriser\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Retour\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Annuler\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialiser\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer mon compte\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désactiver\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filtrer\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se connecter\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Non\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S'inscrire\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinit.\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Valider\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Oui\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"à propos\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirmation\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"contact\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"jour\"]), _normalize([\"jours\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Affiché\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation (en)\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ici\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Masqué\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accueil\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"trier par \"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"tri\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascendant\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descendant\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"par page\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Total\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tableau de bord\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ce mois-ci\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur. Veuillez réessayer ou contacter l'administrateur.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'application semble rencontrer quelques problèmes.
Veuillez réessayer plus tard ou contacter l'administrateur.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Page introuvable\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance introuvable\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Une erreur s'est produite\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une nouvelle application OAuth2\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Identifiant\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Secret\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Description de l'application\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Créée le\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom de l'application\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"URL de redirection\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scope\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture à la configuration de l'application.\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes auth.\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes auth.\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes users.\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes users.\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes workouts.\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes workouts.\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"URL de l'application\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application créée avec succès. Assurez-vous de copier le secret maintenant, il ne s'affichera plus.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr de vouloir supprimer cette application ?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"L'application \", _interpolate(_list(0)), \" demande les accès suivants :\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Applications OAuth2\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Autoriser \", _interpolate(_list(0)), \" à utiliser votre compte ?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"copier dans le presse papier\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer l'application\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une application\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application introuvable !\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de applications\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de description\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Révoquer tous les jetons\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr de vouloir révoquer tous les jetons ?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tous les jetons associés existants ont été révoqués.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Transport)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Virtuel)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Randonnée\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"VTT\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"VTT (Électrique)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aviron\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Course\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ski (Alpin)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ski (Randonnée)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Raquettes\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Marche\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistiques\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"semaine\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mois\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"année\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous n'avez pas reçu les instructions ?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vérifiez vos courriels. Un nouveau courriel de confirmation a été envoyé à l'adresse électronique fournie.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous avez déjà un compte ?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr·e de vouloir supprimer votre compte ? Toutes les données seront définitivement effacés\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe actuel\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Courriel\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Saisissez une adresse électronique valide.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Saisissez un mot de passe\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filtrer sur le nom d'utilisateur\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"masquer le mot de passe\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton invalide, veuillez demander une nouvelle réinitialisation de mot de passe.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Langue\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"connecter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se connecter\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se déconnecter\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nouveau mot de passe\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aucun utilisateur trouvé.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"8 caractères minimum.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe oublié ?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialisation du mot de passe\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vérifiez vos courriels. Si vote adresse est dans notre base de données, vous recevrez un courriel avec un lien pour réinitialiser votre mot de passe.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"faible\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"moyenne\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"bonne\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"forte\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"robustesse du mot de passe\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les substitutions de lettres prévisibles comme \", \"@\", \" pour a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les orthographes inversées des mots courants.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mettez quelques lettres en majuscules, mais pas toutes.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalisez mais pas seulement la première lettre.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les dates et les années qui vous sont associées. (ex : date ou année de naissance).\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les dernières années.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les années qui vous sont associées. (ex : date de naissance).\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les séquences de caractères courantes.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les mots et les caractères répétés.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Utilisez des motifs de clavier plus longs et changez de sens de frappe plusieurs fois.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajoutez des mots moins courants.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Utilisez plusieurs mots, mais évitez les phrases courantes.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous pouvez créer des mots de passe forts sans utiliser de symboles, de chiffres ou de lettres majuscules.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Si vous utilisez ce mot de passe ailleurs, vous devriez le modifier.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Votre mot de passe a été mis à jour. Cliquez \", _interpolate(_list(0)), \" pour vous connecter.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour du compte\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Données relatives au dénivelé positif (records, total)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revenir au profil\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bio\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date de naissance\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Format d'affichage de la date\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier le profil\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier les préférences\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier les préférences des sports\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Veuillez vous \", _interpolate(_list(0)), \" pour changer de nouveau votre adresse électronique ou contacter l'administrateur\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Premier jour de la semaine\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prénom\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Langue\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lieu\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lundi\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image de profil\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour de l'image de profil\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mettre à jour l'image\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour des préférences\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour du profil\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date d'inscription\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour des préférences des sports\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dimanche\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"compte\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"apps\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"image\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"préférences\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"profil\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sports\"])}\n },\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unités pour les distances\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Système impérial (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Système métrique (m, km)\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"action\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"couleur\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"désactivé par l'administrateur\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"actif\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"label\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"seuil de vitesse arrêtée\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été modifié avec succès. Veuillez vérifier votre boîte de réception pour valider votre nouvelle adresse électronique.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été créé avec succès.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Un lien pour activer votre compte a été envoyé à l'adresse électronique fournie.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été modifié avec succès.\"])},\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fuseau horaire\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S'inscrire\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désolé, les inscriptions sont désactivées.\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Envoyer à nouveau le courriel de confirmation de compte\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialiser votre mot de passe\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"afficher le mot de passe\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Le compte de cet utilisateur est inactif.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"photo de l'utilisateur\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom d'utilisateur\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 à 30 caractères requis, seuls les caractères alphanumériques et le caractère _ sont autorisés.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une séance\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"analyse\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"dénivelé positif\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse moyenne\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse moy.\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"revenir à la séance\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"dénivelé négatif\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"afficher les filtres\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"distance\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"durée\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier la séance\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fin\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"à partir de\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fichier .gpx\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"masquer les filtres\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séances récentes\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Charger les séances suivantes\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude max\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fichiers max. \"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"taille max. \"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse max\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude min\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Segment suivant\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance suivante\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"données issues du fichier gpx, sans correction\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier fourni\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de répertoire\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de carte\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de segment suivant\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séance suivante\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de notes\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de segment précédent\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séance précédente\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de records.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séances.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"notes\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pauses\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Segment précédent\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance précédente\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"record\"]), _normalize([\"records\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vitesse moy.\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Distance la + longue\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dénivelé positif le + élevé\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durée la + longue\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vitesse max.\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nombre de caractères restants \"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"segment\"]), _normalize([\"segments\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"sport\"]), _normalize([\"sports\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"début\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Départ et arrivée\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"démarrer l'axe de l'altitude à 0\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"titre\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"jusqu'au\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"durée totale\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajoutez votre première séance !\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"humidité\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"température\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vent\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNE\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NE\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ENE\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ESE\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SE\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSE\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSO\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SO\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OSO\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"O\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ONO\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NO\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNO\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ensoleillé\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuit claire\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuageux\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"brouillard\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partiellement nuageux\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuit partiellement nuageuse\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pluie\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"neige fondue\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"neige\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"venteux\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"avec un fichier .gpx\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sans fichier .gpx\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"séance\"]), _normalize([\"séances\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date de la séance\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Etes-vous sûr de vouloir supprimer cette séance ?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"archive .zip\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ou une archive .zip contenant des fichiers .gpx\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","/* eslint-disable no-console */\n\nimport { register } from 'register-service-worker'\n\nif (process.env.NODE_ENV === 'production') {\n register(`${process.env.BASE_URL}service-worker.js`, {\n ready() {\n console.log(\n 'App is being served from cache by a service worker.\\n' +\n 'For more details, visit https://goo.gl/AFskqB'\n )\n },\n registered() {\n console.log('Service worker has been registered.')\n },\n cached() {\n console.log('Content has been cached for offline use.')\n },\n updatefound() {\n console.log('New content is downloading.')\n },\n updated() {\n console.log('New content is available; please refresh.')\n },\n offline() {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n )\n },\n error(error) {\n console.error('Error during service worker registration:', error)\n },\n })\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2c73279e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"footer\" }\nconst _hoisted_2 = { class: \"footer-items\" }\nconst _hoisted_3 = { class: \"footer-item\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"strong\", null, \"FitTrackee\", -1))\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"footer-item bullet\" }, \"•\", -1))\nconst _hoisted_6 = { class: \"footer-item\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"footer-item bullet\"\n}\nconst _hoisted_8 = {\n key: 1,\n class: \"footer-item\"\n}\nconst _hoisted_9 = [\"href\"]\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"footer-item bullet\" }, \"•\", -1))\nconst _hoisted_11 = { class: \"footer-item\" }\nconst _hoisted_12 = {\n href: \"https://samr1.github.io/FitTrackee/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\n\nimport { toRefs } from 'vue'\n\n interface Props {\n version: string\n adminContact?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Footer',\n props: {\n version: null,\n adminContact: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n version: string\n adminContact?: string\n }\n\n \n\n const { adminContact, version } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _hoisted_4,\n _createTextVNode(\" v\" + _toDisplayString(_unref(version)), 1)\n ]),\n _hoisted_5,\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_router_link, { to: \"/about\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('common.ABOUT')), 1)\n ]),\n _: 1\n })\n ]),\n (_unref(adminContact))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, \"•\"))\n : _createCommentVNode(\"\", true),\n (_unref(adminContact))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"a\", {\n href: `mailto:${_unref(adminContact)}`\n }, _toDisplayString(_ctx.$t('common.CONTACT')), 9, _hoisted_9)\n ]))\n : _createCommentVNode(\"\", true),\n _hoisted_10,\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"a\", _hoisted_12, _toDisplayString(_ctx.$t('common.DOCUMENTATION')), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./Footer.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Footer.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Footer.vue?vue&type=style&index=0&id=2c73279e&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2c73279e\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-95c1cc02\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"nav\" }\nconst _hoisted_2 = { class: \"nav-container\" }\nconst _hoisted_3 = { class: \"nav-app-name\" }\nconst _hoisted_4 = { class: \"nav-items-close\" }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"app-name\" }, \"FitTrackee\", -1))\nconst _hoisted_6 = {\n key: 0,\n class: \"nav-items-group\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"nav-item nav-separator\" }, null, -1))\nconst _hoisted_8 = { class: \"nav-items-user-menu\" }\nconst _hoisted_9 = {\n key: 0,\n class: \"nav-items-group\"\n}\nconst _hoisted_10 = { class: \"nav-item nav-profile-img\" }\nconst _hoisted_11 = {\n key: 1,\n class: \"nav-items-group\"\n}\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", { class: \"fa fa-language\" }, null, -1))\n\nimport { ComputedRef, computed, ref, capitalize } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IDropdownOption } from '@/types/forms'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { availableLanguages } from '@/utils/locales'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'NavBar',\n emits: ['menuInteraction'],\n setup(__props, { emit }) {\n\n \n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const isAuthenticated: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n )\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const isMenuOpen = ref(false)\n\n function openMenu() {\n isMenuOpen.value = true\n emit('menuInteraction', true)\n }\n function closeMenu() {\n isMenuOpen.value = false\n emit('menuInteraction', false)\n }\n function updateLanguage(option: IDropdownOption) {\n store.dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n option.value.toString()\n )\n }\n function logout() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.LOGOUT)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Dropdown = _resolveComponent(\"Dropdown\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: \"nav-item app-name\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/')))\n }, \" FitTrackee \")\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"nav-icon-open\", { 'menu-open': isMenuOpen.value }])\n }, [\n _createElementVNode(\"i\", {\n class: \"fa fa-bars hamburger-icon\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (openMenu()))\n })\n ], 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"nav-items\", { 'menu-open': isMenuOpen.value }])\n }, [\n _createElementVNode(\"div\", _hoisted_4, [\n _hoisted_5,\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa fa-close close-icon nav-item\", { 'menu-closed': !isMenuOpen.value }]),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (closeMenu()))\n }, null, 2)\n ]),\n _createElementVNode(\"div\", {\n class: \"nav-items-app-menu\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (closeMenu()))\n }, [\n (_unref(isAuthenticated))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('dashboard.DASHBOARD')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/workouts\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 2))), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/statistics\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('statistics.STATISTICS')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/workouts/add\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.ADD_WORKOUT')), 1)\n ]),\n _: 1\n }),\n (_unref(isAuthenticated) && _unref(authUser).admin)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"nav-item\",\n to: \"/admin\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.ADMIN')), 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n _hoisted_7\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n (_unref(isAuthenticated))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _createVNode(UserPicture, { user: _unref(authUser) }, null, 8, [\"user\"])\n ]),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/profile\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(authUser).username), 1)\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", {\n class: \"nav-item nav-link\",\n onClick: logout\n }, _toDisplayString(_ctx.$t('user.LOGOUT')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/login\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.LOGIN')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/register\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.REGISTER')), 1)\n ]),\n _: 1\n })\n ])),\n (_unref(availableLanguages) && _unref(language))\n ? (_openBlock(), _createBlock(_component_Dropdown, {\n key: 2,\n class: \"nav-item\",\n options: _unref(availableLanguages),\n selected: _unref(language),\n onSelected: updateLanguage\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }, 8, [\"options\", \"selected\"]))\n : _createCommentVNode(\"\", true)\n ])\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./NavBar.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NavBar.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./NavBar.vue?vue&type=style&index=0&id=95c1cc02&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-95c1cc02\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-47759238\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"no-config\" }\nconst _hoisted_2 = { class: \"error-page\" }\nconst _hoisted_3 = { class: \"error-img\" }\nconst _hoisted_4 = [\"innerHTML\"]\n\nimport ErrorImg from '@/components/Common/Images/ErrorImg.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'NoConfig',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(ErrorImg)\n ]),\n _createElementVNode(\"p\", {\n class: \"error-message\",\n innerHTML: _ctx.$t('error.APP_ERROR')\n }, null, 8, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./NoConfig.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./NoConfig.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./NoConfig.vue?vue&type=style&index=0&id=47759238&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-47759238\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, createVNode as _createVNode, unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, normalizeClass as _normalizeClass, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { id: \"top\" }, null, -1)\nconst _hoisted_2 = {\n key: 0,\n class: \"app-container\"\n}\nconst _hoisted_3 = { class: \"app-loading\" }\nconst _hoisted_4 = { class: \"container scroll\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-up\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_6 = [\n _hoisted_5\n]\n\nimport { ComputedRef, computed, ref, onBeforeMount, onMounted } from 'vue'\n\n import Footer from '@/components/Footer.vue'\n import NavBar from '@/components/NavBar.vue'\n import NoConfig from '@/components/NoConfig.vue'\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { useStore } from '@/use/useStore'\n import { localeFromLanguage } from '@/utils/locales'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'App',\n setup(__props) {\n\n const store = useStore()\n\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const appLoading: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_LOADING]\n )\n const hideScrollBar = ref(false)\n const displayScrollButton = ref(false)\n\n onBeforeMount(() => {\n initLanguage()\n store.dispatch(ROOT_STORE.ACTIONS.GET_APPLICATION_CONFIG)\n })\n onMounted(() => scroll())\n\n function updateHideScrollBar(isMenuOpen: boolean) {\n hideScrollBar.value = isMenuOpen\n }\n function isScrolledToBottom(element: Element): boolean {\n return (\n element.getBoundingClientRect().top < window.innerHeight &&\n element.getBoundingClientRect().bottom >= 0\n )\n }\n function scroll() {\n window.onscroll = () => {\n const bottom = document.querySelector('#bottom')\n displayScrollButton.value = bottom !== null && isScrolledToBottom(bottom)\n }\n }\n function scrollToTop() {\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n })\n setTimeout(() => {\n displayScrollButton.value = false\n }, 300)\n }\n function initLanguage() {\n let language = 'en'\n try {\n const navigatorLanguage = navigator.language.split('-')[0]\n if (navigatorLanguage in localeFromLanguage) {\n language = navigatorLanguage\n }\n } catch (e) {\n language = 'en'\n }\n store.dispatch(ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE, language)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Loader = _resolveComponent(\"Loader\")!\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _hoisted_1,\n _createVNode(NavBar, { onMenuInteraction: updateHideScrollBar }),\n (_unref(appLoading))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Loader)\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([\"app-container\", { 'hide-scroll': hideScrollBar.value }])\n }, [\n (_unref(appConfig))\n ? (_openBlock(), _createBlock(_component_router_view, { key: 0 }))\n : (_openBlock(), _createBlock(NoConfig, { key: 1 }))\n ], 2)),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"scroll-button\", { 'display-button': displayScrollButton.value }]),\n onClick: scrollToTop\n }, _hoisted_6, 2)\n ]),\n (_unref(appConfig))\n ? (_openBlock(), _createBlock(Footer, {\n key: 2,\n version: _unref(appConfig) ? _unref(appConfig).version : '',\n adminContact: _unref(appConfig).admin_contact\n }, null, 8, [\"version\", \"adminContact\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n}\n}\n\n})","import script from \"./App.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./App.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./App.vue?vue&type=style&index=0&id=2930d5e0&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-69d7e4ff\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"alert-message\" }\nconst _hoisted_2 = [\"innerHTML\"]\n\nimport { toRefs } from 'vue'\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AlertMessage',\n props: {\n message: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n message: string\n }\n\n \n const { message } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n innerHTML: _ctx.$t(_unref(message))\n }, null, 8, _hoisted_2)\n ]))\n}\n}\n\n})","import script from \"./AlertMessage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AlertMessage.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AlertMessage.vue?vue&type=style&index=0&id=69d7e4ff&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-69d7e4ff\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8cf5cc64\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"custom-textarea\" }\nconst _hoisted_2 = [\"id\", \"name\", \"maxLenght\", \"disabled\"]\nconst _hoisted_3 = { class: \"remaining-chars\" }\n\nimport { ref, watch, withDefaults } from 'vue'\n\n interface Props {\n name: string\n charLimit?: number\n disabled?: boolean\n input?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CustomTextArea',\n props: {\n name: null,\n charLimit: { default: 500 },\n disabled: { type: Boolean, default: false },\n input: { default: '' }\n },\n emits: ['updateValue'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { name: string, charLimit: number, disabled: boolean, input: string | null }\n\n \n\n \n\n const text = ref('')\n\n function updateText(event: Event & { target: HTMLInputElement }) {\n emit('updateValue', event.target.value)\n }\n\n watch(\n () => props.input,\n (value) => {\n text.value = value === null ? '' : value\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _withDirectives(_createElementVNode(\"textarea\", {\n id: __props.name,\n name: __props.name,\n maxLenght: __props.charLimit,\n disabled: __props.disabled,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((text).value = $event)),\n onInput: updateText\n }, null, 40, _hoisted_2), [\n [_vModelText, text.value]\n ]),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('workouts.REMAINING_CHARS')) + \": \" + _toDisplayString(text.value.length) + \"/\" + _toDisplayString(__props.charLimit), 1)\n ]))\n}\n}\n\n})","import script from \"./CustomTextArea.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CustomTextArea.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CustomTextArea.vue?vue&type=style&index=0&id=8cf5cc64&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8cf5cc64\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, Fragment as _Fragment } from \"vue\"\n\nimport { ComputedRef, computed, toRefs, withDefaults } from 'vue'\n\n import { TUnit } from '@/types/units'\n import { units, convertDistance } from '@/utils/units'\n\n interface Props {\n distance: number\n unitFrom: TUnit\n useImperialUnits: boolean\n digits?: number\n displayUnit?: boolean\n speed?: boolean\n strong?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Distance',\n props: {\n distance: null,\n unitFrom: null,\n useImperialUnits: { type: Boolean },\n digits: { default: 2 },\n displayUnit: { type: Boolean, default: true },\n speed: { type: Boolean, default: false },\n strong: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { distance: number, unitFrom: TUnit, useImperialUnits: boolean, digits: number, displayUnit: boolean, speed: boolean, strong: boolean }\n\n \n\n const {\n digits,\n displayUnit,\n distance,\n speed,\n strong,\n unitFrom,\n useImperialUnits,\n } = toRefs(props)\n const unitTo: ComputedRef = computed(() =>\n useImperialUnits.value\n ? units[unitFrom.value].defaultTarget\n : unitFrom.value\n )\n const convertedDistance = computed(() =>\n useImperialUnits.value\n ? convertDistance(\n distance.value,\n unitFrom.value,\n unitTo.value,\n digits.value\n )\n : parseFloat(distance.value.toFixed(digits.value))\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"distance\", { strong: _unref(strong) }])\n }, _toDisplayString(_unref(convertedDistance)), 3),\n _createTextVNode(\" \" + _toDisplayString(' ') + \" \"),\n (_unref(displayUnit))\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n class: _normalizeClass([\"unit\", { strong: _unref(strong) }])\n }, _toDisplayString(_unref(unitTo)) + _toDisplayString(_unref(speed) ? '/h' : ''), 3))\n : _createCommentVNode(\"\", true)\n ], 64))\n}\n}\n\n})","import script from \"./Distance.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Distance.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Distance.vue?vue&type=style&index=0&id=f46ff1d6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-f46ff1d6\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2d3b4eac\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"dropdown-wrapper\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"dropdown-list\"\n}\nconst _hoisted_3 = [\"onClick\"]\n\nimport { ref, watch } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { IDropdownOption, TDropdownOptions } from '@/types/forms'\n interface Props {\n options: TDropdownOptions\n selected: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Dropdown',\n props: {\n options: null,\n selected: null\n },\n emits: {\n selected: (option: IDropdownOption) => option,\n },\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n options: TDropdownOptions\n selected: string\n }\n\n \n\n \n\n const route = useRoute()\n const isOpen = ref(false)\n const dropdownOptions = props.options.map((option) => option)\n\n function toggleDropdown() {\n isOpen.value = !isOpen.value\n }\n function updateSelected(option: IDropdownOption) {\n emit('selected', option)\n isOpen.value = false\n }\n\n watch(\n () => route.path,\n () => (isOpen.value = false)\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"dropdown-selected\",\n onClick: toggleDropdown\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n (isOpen.value)\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(dropdownOptions), (option, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n class: _normalizeClass([\"dropdown-item\", { selected: option.value === __props.selected }]),\n key: index,\n onClick: ($event: any) => (updateSelected(option))\n }, _toDisplayString(option.label), 11, _hoisted_3))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./Dropdown.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Dropdown.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Dropdown.vue?vue&type=style&index=0&id=2d3b4eac&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2d3b4eac\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2659a79a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"error-message\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { key: 1 }\n\nimport { toRefs } from 'vue'\n\n interface Props {\n message: string | string[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'ErrorMessage',\n props: {\n message: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n message: string | string[]\n }\n\n \n const { message } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (Array.isArray(_unref(message)))\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(message), (subMessage, index) => {\n return (_openBlock(), _createElementBlock(\"li\", { key: index }, _toDisplayString(_ctx.$t(subMessage)), 1))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(_unref(message))), 1))\n ]))\n}\n}\n\n})","import script from \"./ErrorMessage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ErrorMessage.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./ErrorMessage.vue?vue&type=style&index=0&id=2659a79a&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2659a79a\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingSport.vue?vue&type=template&id=be8023a2\"\nimport script from \"./CyclingSport.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingSport.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingTransport.vue?vue&type=template&id=97af5148\"\nimport script from \"./CyclingTransport.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingTransport.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingVirtual.vue?vue&type=template&id=ec8f7bb6\"\nimport script from \"./CyclingVirtual.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingVirtual.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Hiking.vue?vue&type=template&id=40903dc4\"\nimport script from \"./Hiking.vue?vue&type=script&lang=js\"\nexport * from \"./Hiking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./MountainBiking.vue?vue&type=template&id=5bdbc6e8\"\nimport script from \"./MountainBiking.vue?vue&type=script&lang=js\"\nexport * from \"./MountainBiking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./MountainBikingElectric.vue?vue&type=template&id=21e72aec\"\nimport script from \"./MountainBikingElectric.vue?vue&type=script&lang=js\"\nexport * from \"./MountainBikingElectric.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Rowing.vue?vue&type=template&id=31ae2dd5\"\nimport script from \"./Rowing.vue?vue&type=script&lang=js\"\nexport * from \"./Rowing.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Running.vue?vue&type=template&id=4d47a4fe\"\nimport script from \"./Running.vue?vue&type=script&lang=js\"\nexport * from \"./Running.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./SkiingAlpine.vue?vue&type=template&id=3ebf3bca\"\nimport script from \"./SkiingAlpine.vue?vue&type=script&lang=js\"\nexport * from \"./SkiingAlpine.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./SkiingCrossCountry.vue?vue&type=template&id=1561bbe6\"\nimport script from \"./SkiingCrossCountry.vue?vue&type=script&lang=js\"\nexport * from \"./SkiingCrossCountry.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Snowshoes.vue?vue&type=template&id=67df2761\"\nimport script from \"./Snowshoes.vue?vue&type=script&lang=js\"\nexport * from \"./Snowshoes.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Trail.vue?vue&type=template&id=32a14156\"\nimport script from \"./Trail.vue?vue&type=script&lang=js\"\nexport * from \"./Trail.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Walking.vue?vue&type=template&id=2ed4f5f4\"\nimport script from \"./Walking.vue?vue&type=script&lang=js\"\nexport * from \"./Walking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"title\"]\n\nimport { inject, toRefs, withDefaults } from 'vue'\n\n import CyclingSport from '@/components/Common/Images/SportImage/CyclingSport.vue'\n import CyclingTransport from '@/components/Common/Images/SportImage/CyclingTransport.vue'\n import CyclingVirtual from '@/components/Common/Images/SportImage/CyclingVirtual.vue'\n import Hiking from '@/components/Common/Images/SportImage/Hiking.vue'\n import MountainBiking from '@/components/Common/Images/SportImage/MountainBiking.vue'\n import MountainBikingElectric from '@/components/Common/Images/SportImage/MountainBikingElectric.vue'\n import Rowing from '@/components/Common/Images/SportImage/Rowing.vue'\n import Running from '@/components/Common/Images/SportImage/Running.vue'\n import SkiingAlpine from '@/components/Common/Images/SportImage/SkiingAlpine.vue'\n import SkiingCrossCountry from '@/components/Common/Images/SportImage/SkiingCrossCountry.vue'\n import Snowshoes from '@/components/Common/Images/SportImage/Snowshoes.vue'\n import Trail from '@/components/Common/Images/SportImage/Trail.vue'\n import Walking from '@/components/Common/Images/SportImage/Walking.vue'\n\n interface Props {\n sportLabel: string\n color: string | null\n title?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sportLabel: null,\n color: null,\n title: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { sportLabel: string, color: string | null, title: string }\n\n \n\n const { color, sportLabel, title } = toRefs(props)\n const sportColors = inject('sportColors')\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"sport-img\",\n style: _normalizeStyle({ fill: _unref(color) ? _unref(color) : _unref(sportColors)[_unref(sportLabel)] }),\n title: _unref(title) ? _unref(title) : _ctx.$t(`sports.${_unref(sportLabel)}.LABEL`)\n }, [\n (_unref(sportLabel) === 'Cycling (Sport)')\n ? (_openBlock(), _createBlock(CyclingSport, { key: 0 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Cycling (Transport)')\n ? (_openBlock(), _createBlock(CyclingTransport, { key: 1 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Cycling (Virtual)')\n ? (_openBlock(), _createBlock(CyclingVirtual, { key: 2 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Hiking')\n ? (_openBlock(), _createBlock(Hiking, { key: 3 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Mountain Biking')\n ? (_openBlock(), _createBlock(MountainBiking, { key: 4 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Mountain Biking (Electric)')\n ? (_openBlock(), _createBlock(MountainBikingElectric, { key: 5 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Rowing')\n ? (_openBlock(), _createBlock(Rowing, { key: 6 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Running')\n ? (_openBlock(), _createBlock(Running, { key: 7 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Skiing (Alpine)')\n ? (_openBlock(), _createBlock(SkiingAlpine, { key: 8 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Skiing (Cross Country)')\n ? (_openBlock(), _createBlock(SkiingCrossCountry, { key: 9 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Snowshoes')\n ? (_openBlock(), _createBlock(Snowshoes, { key: 10 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Trail')\n ? (_openBlock(), _createBlock(Trail, { key: 11 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Walking')\n ? (_openBlock(), _createBlock(Walking, { key: 12 }))\n : _createCommentVNode(\"\", true)\n ], 12, _hoisted_1))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","\n\n\n","import { render } from \"./Loader.vue?vue&type=template&id=4c9921ee&scoped=true\"\nconst script = {}\n\nimport \"./Loader.vue?vue&type=style&index=0&id=4c9921ee&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4c9921ee\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-e8fcfaba\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"modal\" }\nconst _hoisted_2 = { class: \"custom-modal\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"modal-message\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"modal-message\"\n}\nconst _hoisted_5 = { class: \"modal-buttons\" }\n\nimport { ComputedRef, computed, toRefs, withDefaults, onUnmounted } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n title: string\n message: string\n strongMessage?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Modal',\n props: {\n title: null,\n message: null,\n strongMessage: { default: () => null }\n },\n emits: ['cancelAction', 'confirmAction'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { title: string, message: string, strongMessage: string | null }\n\n \n\n \n\n const store = useStore()\n\n const { title, message, strongMessage } = toRefs(props)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\nreturn (_ctx: any,_cache: any) => {\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(title)), 1)\n ]),\n content: _withCtx(() => [\n (_unref(strongMessage))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createVNode(_component_i18n_t, { keypath: _unref(message) }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(strongMessage)), 1)\n ]),\n _: 1\n }, 8, [\"keypath\"])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, _toDisplayString(_unref(message)), 1)),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 2,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_5, [\n (!_unref(errorMessages))\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"confirm\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('confirmAction')))\n }, _toDisplayString(_ctx.$t('buttons.YES')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('cancelAction')))\n }, _toDisplayString(_ctx.$t(`buttons.${_unref(errorMessages) ? 'CANCEL' : 'NO'}`)), 1)\n ])\n ]),\n _: 1\n })\n ])\n ]))\n}\n}\n\n})","import script from \"./Modal.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Modal.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Modal.vue?vue&type=style&index=0&id=e8fcfaba&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-e8fcfaba\"]])\n\nexport default __exports__","import AlertMessage from '@/components/Common/AlertMessage.vue'\nimport Card from '@/components/Common/Card.vue'\nimport CustomTextArea from '@/components/Common/CustomTextArea.vue'\nimport Distance from '@/components/Common/Distance.vue'\nimport Dropdown from '@/components/Common/Dropdown.vue'\nimport ErrorMessage from '@/components/Common/ErrorMessage.vue'\nimport SportImage from '@/components/Common/Images/SportImage/index.vue'\nimport Loader from '@/components/Common/Loader.vue'\nimport Modal from '@/components/Common/Modal.vue'\n\nexport const customComponents = [\n { target: AlertMessage, name: 'AlertMessage' },\n { target: Card, name: 'Card' },\n { target: CustomTextArea, name: 'CustomTextArea' },\n { target: Distance, name: 'Distance' },\n { target: Dropdown, name: 'Dropdown' },\n { target: ErrorMessage, name: 'ErrorMessage' },\n { target: Loader, name: 'Loader' },\n { target: Modal, name: 'Modal' },\n { target: SportImage, name: 'SportImage' },\n]\n","import { Directive, DirectiveBinding } from 'vue'\n\ninterface ClickOutsideHTMLElement extends HTMLElement {\n clickOutsideEvent?: (event: MouseEvent | TouchEvent) => void\n}\n\nexport const clickOutsideDirective: Directive = {\n mounted: (\n element: ClickOutsideHTMLElement,\n binding: DirectiveBinding\n ): void => {\n element.clickOutsideEvent = function (event) {\n if (!(element === event.target || element.contains(event.target))) {\n binding.value(event)\n }\n }\n document.body.addEventListener('click', element.clickOutsideEvent)\n document.body.addEventListener('touchstart', element.clickOutsideEvent)\n },\n unmounted: function (element: ClickOutsideHTMLElement): void {\n if (element.clickOutsideEvent) {\n document.body.removeEventListener('click', element.clickOutsideEvent)\n document.body.removeEventListener('touchstart', element.clickOutsideEvent)\n element.clickOutsideEvent = undefined\n }\n },\n}\n","import {\n Chart,\n BarElement,\n LineElement,\n PointElement,\n Legend,\n Title,\n Tooltip,\n Filler,\n BarController,\n CategoryScale,\n LineController,\n LinearScale,\n} from 'chart.js'\nimport ChartDataLabels from 'chartjs-plugin-datalabels'\nimport { createApp } from 'vue'\nimport VueFullscreen from 'vue-fullscreen'\n\nimport './registerServiceWorker'\nimport App from './App.vue'\nimport i18n from './i18n'\nimport router from './router'\nimport store from './store'\n\nimport { customComponents } from '@/custom-components'\nimport { clickOutsideDirective } from '@/directives'\nimport { sportColors } from '@/utils/sports'\n\nChart.register(\n BarElement,\n LineElement,\n PointElement,\n Legend,\n Title,\n Tooltip,\n Filler,\n BarController,\n CategoryScale,\n LineController,\n LinearScale,\n ChartDataLabels\n)\n\nconst app = createApp(App)\n .provide('sportColors', sportColors)\n .use(i18n)\n .use(store)\n .use(router)\n .use(VueFullscreen, { name: 'VFullscreen' })\n .directive('click-outside', clickOutsideDirective)\n\ncustomComponents.forEach((component) => {\n app.component(component.name, component.target)\n})\n\napp.mount('#app')\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, vModelText as _vModelText, withDirectives as _withDirectives, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, withModifiers as _withModifiers, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-24ec93e2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-app\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = [\"onSubmit\"]\nconst _hoisted_3 = { for: \"admin_contact\" }\nconst _hoisted_4 = [\"value\"]\nconst _hoisted_5 = [\"disabled\"]\nconst _hoisted_6 = { for: \"max_users\" }\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = { class: \"user-limit-help\" }\nconst _hoisted_9 = { class: \"info-box\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { for: \"max_single_file_size\" }\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = { for: \"max_zip_file_size\" }\nconst _hoisted_14 = [\"disabled\"]\nconst _hoisted_15 = { for: \"gpx_limit_import\" }\nconst _hoisted_16 = [\"disabled\"]\nconst _hoisted_17 = {\n key: 1,\n class: \"form-buttons\"\n}\nconst _hoisted_18 = {\n class: \"confirm\",\n type: \"submit\"\n}\nconst _hoisted_19 = [\"onClick\"]\nconst _hoisted_20 = {\n key: 2,\n class: \"form-buttons\"\n}\n\nimport {\n ComputedRef,\n computed,\n reactive,\n withDefaults,\n onBeforeMount,\n toRefs,\n } from 'vue'\n import { useRouter } from 'vue-router'\n\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig, TAppConfigForm } from '@/types/application'\n import { useStore } from '@/use/useStore'\n import { getFileSizeInMB } from '@/utils/files'\n\n interface Props {\n appConfig: TAppConfig\n edition?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminApplication',\n props: {\n appConfig: null,\n edition: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { appConfig: TAppConfig, edition: boolean }\n\n \n const { edition } = toRefs(props)\n\n const store = useStore()\n const router = useRouter()\n\n const appData: TAppConfigForm = reactive({\n admin_contact: '',\n max_users: 0,\n max_single_file_size: 0,\n max_zip_file_size: 0,\n gpx_limit_import: 0,\n })\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => {\n if (props.appConfig) {\n updateForm(props.appConfig)\n }\n })\n\n function updateForm(appConfig: TAppConfig) {\n Object.keys(appData).map((key) => {\n ['max_single_file_size', 'max_zip_file_size'].includes(key)\n ? // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (appData[key] = getFileSizeInMB(appConfig[key]))\n : // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (appData[key] = appConfig[key])\n })\n }\n function onCancel() {\n updateForm(props.appConfig)\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n router.push('/admin/application')\n }\n function onSubmit() {\n const formData: TAppConfigForm = Object.assign({}, appData)\n formData.max_single_file_size *= 1048576\n formData.max_zip_file_size *= 1048576\n store.dispatch(ROOT_STORE.ACTIONS.UPDATE_APPLICATION_CONFIG, formData)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.TITLE')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"form\", {\n class: \"admin-form\",\n onSubmit: _withModifiers(onSubmit, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_3, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.ADMIN_CONTACT')) + \": \", 1),\n (!_unref(edition) && !appData.admin_contact)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"no-contact\",\n value: _ctx.$t('admin.APP_CONFIG.NO_CONTACT_EMAIL'),\n disabled: \"\"\n }, null, 8, _hoisted_4))\n : _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 1,\n id: \"admin_contact\",\n name: \"admin_contact\",\n type: \"email\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((appData.admin_contact) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_5)), [\n [_vModelText, appData.admin_contact]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_USERS_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_users\",\n name: \"max_users\",\n type: \"number\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((appData.max_users) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_7), [\n [_vModelText, appData.max_users]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"span\", _hoisted_9, [\n _hoisted_10,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_USERS_HELP')), 1)\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.SINGLE_UPLOAD_MAX_SIZE_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_single_file_size\",\n name: \"max_single_file_size\",\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((appData.max_single_file_size) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_12), [\n [_vModelText, appData.max_single_file_size]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_13, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.ZIP_UPLOAD_MAX_SIZE_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_zip_file_size\",\n name: \"max_zip_file_size\",\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((appData.max_zip_file_size) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_14), [\n [_vModelText, appData.max_zip_file_size]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_15, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_FILES_IN_ZIP_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"gpx_limit_import\",\n name: \"gpx_limit_import\",\n type: \"number\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((appData.gpx_limit_import) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_16), [\n [_vModelText, appData.gpx_limit_import]\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(edition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createElementVNode(\"button\", _hoisted_18, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(onCancel, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_19)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: _cache[5] || (_cache[5] = _withModifiers(($event: any) => (_ctx.$router.push('/admin/application/edit')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.EDIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[6] || (_cache[6] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ]))\n ], 40, _hoisted_2)\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminApplication.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminApplication.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminApplication.vue?vue&type=style&index=0&id=24ec93e2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-24ec93e2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"stat-card\" }\nconst _hoisted_2 = { class: \"stat-content box\" }\nconst _hoisted_3 = { class: \"stat-icon\" }\nconst _hoisted_4 = { class: \"stat-details\" }\nconst _hoisted_5 = { class: \"stat-huge\" }\nconst _hoisted_6 = { class: \"stat\" }\n\nimport { toRefs } from 'vue'\n\n interface Props {\n icon: string\n text: string\n value: string | number\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatCard',\n props: {\n icon: null,\n text: null,\n value: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n icon: string\n text: string\n value: string | number\n }\n\n \n const { icon, text, value } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa\", `fa-${_unref(icon)}`])\n }, null, 2)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, _toDisplayString(_unref(value)), 1),\n _createElementVNode(\"div\", _hoisted_6, _toDisplayString(_unref(text)), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./StatCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatCard.vue?vue&type=style&index=0&id=6cbb3351&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-stats\" }\n\nimport { computed, toRefs } from 'vue'\n\n import StatCard from '@/components/Common/StatCard.vue'\n import { IAppStatistics } from '@/types/application'\n import { getReadableFileSize } from '@/utils/files'\n\n interface Props {\n appStatistics: IAppStatistics\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AppStatsCards',\n props: {\n appStatistics: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n appStatistics: IAppStatistics\n }\n\n \n\n const { appStatistics } = toRefs(props)\n const uploadDirSize = computed(() =>\n getReadableFileSize(appStatistics.value.uploads_dir_size, false)\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatCard, {\n icon: \"users\",\n value: _unref(appStatistics).users,\n text: _ctx.$t('admin.USER', _unref(appStatistics).users)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"tags\",\n value: _unref(appStatistics).sports,\n text: _ctx.$t('workouts.SPORT', _unref(appStatistics).sports)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"calendar\",\n value: _unref(appStatistics).workouts,\n text: _ctx.$t('workouts.WORKOUT', _unref(appStatistics).workouts)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"folder-open\",\n value: _unref(uploadDirSize).size,\n text: _unref(uploadDirSize).suffix\n }, null, 8, [\"value\", \"text\"])\n ]))\n}\n}\n\n})","import script from \"./AppStatsCards.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStatsCards.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AppStatsCards.vue?vue&type=style&index=0&id=61c5053e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0dd66f89\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-menu\",\n class: \"center-card\"\n}\nconst _hoisted_2 = { class: \"admin-menu description-list\" }\nconst _hoisted_3 = { class: \"application-config-details\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_5 = { class: \"registration-status\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"email-sending-status\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-exclamation-triangle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { capitalize, toRefs, withDefaults } from 'vue'\n\n import AppStatsCards from '@/components/Administration/AppStatsCards.vue'\n import Card from '@/components/Common/Card.vue'\n import { IAppStatistics, TAppConfig } from '@/types/application'\n\n interface Props {\n appConfig: TAppConfig\n appStatistics?: IAppStatistics\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminMenu',\n props: {\n appConfig: null,\n appStatistics: { default: () => ({} as IAppStatistics) }\n },\n setup(__props: any) {\n\nconst props = __props as { appConfig: TAppConfig, appStatistics: IAppStatistics }\n\n \n\n const { appConfig, appStatistics } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.ADMINISTRATION')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(AppStatsCards, { appStatistics: _unref(appStatistics) }, null, 8, [\"appStatistics\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/application\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APPLICATION')), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", _hoisted_3, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.UPDATE_APPLICATION_DESCRIPTION')), 1),\n _hoisted_4,\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.$t(\n `admin.REGISTRATION_${\n _unref(appConfig).is_registration_enabled ? 'ENABLED' : 'DISABLED'\n }`\n )), 1),\n (!_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_6, [\n _hoisted_7,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.EMAIL_SENDING_DISABLED')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/sports\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('workouts.SPORT', 0))), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t('admin.ENABLE_DISABLE_SPORTS')), 1),\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/users\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('admin.USER', 0))), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t('admin.ADMIN_RIGHTS_DELETE_USER_ACCOUNT')), 1)\n ])\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminMenu.vue?vue&type=style&index=0&id=0dd66f89&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0dd66f89\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withModifiers as _withModifiers, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, createBlock as _createBlock, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6d62af67\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-sports\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = { class: \"responsive-table\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, \"#\", -1))\nconst _hoisted_4 = { class: \"text-left\" }\nconst _hoisted_5 = { class: \"text-left sport-action\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, null, -1))\nconst _hoisted_7 = { class: \"text-center\" }\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"cell-heading\" }, \"id\", -1))\nconst _hoisted_9 = { class: \"cell-heading\" }\nconst _hoisted_10 = { class: \"sport-label\" }\nconst _hoisted_11 = { class: \"cell-heading\" }\nconst _hoisted_12 = { class: \"text-center\" }\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"sport-action\" }\nconst _hoisted_15 = { class: \"cell-heading\" }\nconst _hoisted_16 = { class: \"action-button\" }\nconst _hoisted_17 = [\"onClick\"]\nconst _hoisted_18 = {\n key: 0,\n class: \"has-workouts\"\n}\nconst _hoisted_19 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-warning\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { ComputedRef, computed } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ROOT_STORE, SPORTS_STORE } from '@/store/constants'\n import { ITranslatedSport } from '@/types/sports'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminSports',\n setup(__props) {\n\n const { t } = useI18n()\n const store = useStore()\n\n const translatedSports: ComputedRef = computed(() =>\n translateSports(store.getters[SPORTS_STORE.GETTERS.SPORTS], t)\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n function updateSportStatus(id: number, isActive: boolean) {\n store.dispatch(SPORTS_STORE.ACTIONS.UPDATE_SPORTS, {\n id,\n isActive,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.SPORTS.TITLE')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"button\", {\n class: \"top-button\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_3,\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.IMAGE')), 1),\n _createElementVNode(\"th\", _hoisted_4, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.LABEL')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.ACTIVE')), 1),\n _createElementVNode(\"th\", _hoisted_5, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _hoisted_6\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: sport.id\n }, [\n _createElementVNode(\"td\", _hoisted_7, [\n _hoisted_8,\n _createTextVNode(\" \" + _toDisplayString(sport.id), 1)\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.IMAGE')), 1),\n _createVNode(_component_SportImage, {\n title: sport.translatedLabel,\n \"sport-label\": sport.label,\n color: sport.color\n }, null, 8, [\"title\", \"sport-label\", \"color\"])\n ]),\n _createElementVNode(\"td\", _hoisted_10, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.LABEL')), 1),\n _createTextVNode(\" \" + _toDisplayString(sport.translatedLabel), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_12, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.ACTIVE')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${sport.is_active ? '-check' : ''}`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_14, [\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"button\", {\n class: _normalizeClass({ danger: sport.is_active }),\n onClick: ($event: any) => (updateSportStatus(sport.id, !sport.is_active))\n }, _toDisplayString(_ctx.$t(`buttons.${sport.is_active ? 'DIS' : 'EN'}ABLE`)), 11, _hoisted_17),\n (sport.has_workouts)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_18, [\n _hoisted_19,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.HAS_WORKOUTS')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ]))\n }), 128))\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminSports.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminSports.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminSports.vue?vue&type=style&index=0&id=6d62af67&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6d62af67\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { vModelText as _vModelText, withKeys as _withKeys, createElementVNode as _createElementVNode, withDirectives as _withDirectives, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-627a8e91\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"users-filters\" }\nconst _hoisted_2 = { class: \"search-username\" }\nconst _hoisted_3 = [\"onKeyup\", \"placeholder\"]\n\nimport { ref } from 'vue'\n import { useRoute } from 'vue-router'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UsersNameFilter',\n emits: ['filterOnUsername'],\n setup(__props, { emit }) {\n\n const route = useRoute()\n const username = ref(route.query.q ? route.query.q : '')\n\n \n function searchUsers() {\n if (username.value !== '') {\n emit('filterOnUsername', username)\n }\n }\n function resetFilter() {\n username.value = ''\n emit('filterOnUsername', username.value)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"username\",\n name: \"username\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((username).value = $event)),\n onKeyup: _withKeys(searchUsers, [\"enter\"]),\n placeholder: _ctx.$t('user.FILTER_ON_USERNAME')\n }, null, 40, _hoisted_3), [\n [\n _vModelText,\n username.value,\n void 0,\n { trim: true }\n ]\n ]),\n (username.value !== '')\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-times\",\n \"aria-hidden\": \"true\",\n onClick: resetFilter\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa fa-search\", { 'fa-disabled': username.value === '' }]),\n \"aria-hidden\": \"true\",\n onClick: searchUsers\n }, null, 2)\n ]))\n}\n}\n\n})","import script from \"./UsersNameFilter.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./UsersNameFilter.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./UsersNameFilter.vue?vue&type=style&index=0&id=627a8e91&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-627a8e91\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withModifiers as _withModifiers, createElementVNode as _createElementVNode, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, withCtx as _withCtx, normalizeClass as _normalizeClass, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-dc12ff78\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-users\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"no-users\"\n}\nconst _hoisted_3 = {\n key: 1,\n class: \"responsive-table\"\n}\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, \"#\", -1))\nconst _hoisted_5 = { class: \"left-text\" }\nconst _hoisted_6 = { class: \"left-text\" }\nconst _hoisted_7 = { class: \"left-text\" }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = { class: \"cell-heading\" }\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = { class: \"cell-heading\" }\nconst _hoisted_12 = { class: \"text-center\" }\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"text-center\" }\nconst _hoisted_15 = { class: \"cell-heading\" }\nconst _hoisted_16 = { class: \"text-center\" }\nconst _hoisted_17 = { class: \"cell-heading\" }\nconst _hoisted_18 = { class: \"text-center\" }\nconst _hoisted_19 = { class: \"cell-heading\" }\nconst _hoisted_20 = [\"disabled\", \"onClick\"]\n\nimport {\n ComputedRef,\n Ref,\n computed,\n reactive,\n watch,\n capitalize,\n onBeforeMount,\n onUnmounted,\n } from 'vue'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import FilterSelects from '@/components/Common/FilterSelects.vue'\n import Pagination from '@/components/Common/Pagination.vue'\n import UserPicture from '@/components/User/UserPicture.vue'\n import UsersNameFilter from '@/components/Users/UsersNameFilter.vue'\n import { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\n import { IPagination, TPaginationPayload } from '@/types/api'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getQuery, sortList } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminUsers',\n setup(__props) {\n\n const store = useStore()\n const route = useRoute()\n const router = useRouter()\n\n const orderByList: string[] = [\n 'is_active',\n 'admin',\n 'created_at',\n 'username',\n 'workouts_count',\n ]\n const defaultOrderBy = 'created_at'\n let query: TPaginationPayload = reactive(\n getQuery(route.query, orderByList, defaultOrderBy)\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const users: ComputedRef = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS]\n )\n const pagination: ComputedRef = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS_PAGINATION]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => loadUsers(query))\n\n function loadUsers(queryParams: TPaginationPayload) {\n store.dispatch(USERS_STORE.ACTIONS.GET_USERS, queryParams)\n }\n function searchUsers(username: Ref) {\n reloadUsers('q', username.value)\n }\n\n function updateUser(username: string, admin: boolean) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n admin,\n })\n }\n function reloadUsers(queryParam: string, queryValue: string) {\n query[queryParam] = queryValue\n if (queryParam === 'per_page') {\n query.page = 1\n }\n router.push({ path: '/admin/users', query })\n }\n\n onUnmounted(() => {\n store.dispatch(USERS_STORE.ACTIONS.EMPTY_USERS)\n })\n\n watch(\n () => route.query,\n (newQuery: LocationQuery) => {\n query = getQuery(newQuery, orderByList, defaultOrderBy, { query })\n loadUsers(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('admin.USER', 0))), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"button\", {\n class: \"top-button\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1),\n _createVNode(UsersNameFilter, { onFilterOnUsername: searchUsers }),\n _createVNode(FilterSelects, {\n sort: _unref(sortList),\n order_by: orderByList,\n query: _unref(query),\n message: \"admin.USERS.SELECTS.ORDER_BY\",\n onUpdateSelect: reloadUsers\n }, null, 8, [\"sort\", \"query\"]),\n (_unref(users).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('user.NO_USERS_FOUND')), 1))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_4,\n _createElementVNode(\"th\", _hoisted_5, _toDisplayString(_ctx.$t('user.USERNAME')), 1),\n _createElementVNode(\"th\", _hoisted_6, _toDisplayString(_ctx.$t('user.EMAIL')), 1),\n _createElementVNode(\"th\", _hoisted_7, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 0))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.ACTIVE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.ADMIN')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.ACTION')), 1)\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(users), (user) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: user.username\n }, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE')), 1),\n _createVNode(UserPicture, { user: user }, null, 8, [\"user\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_ctx.$t('user.USERNAME')), 1),\n _createVNode(_component_router_link, {\n to: `/admin/users/${user.username}`\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(user.username), 1)\n ]),\n _: 2\n }, 1032, [\"to\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('user.EMAIL')), 1),\n _createTextVNode(\" \" + _toDisplayString(user.email), 1)\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')), 1),\n _createTextVNode(\" \" + _toDisplayString(_unref(formatDate)(\n user.created_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_12, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 0))), 1),\n _createTextVNode(\" \" + _toDisplayString(user.nb_workouts), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_14, [\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('admin.ACTIVE')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${user.is_active ? '-check' : ''}-square-o`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_16, [\n _createElementVNode(\"span\", _hoisted_17, _toDisplayString(_ctx.$t('user.ADMIN')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${user.admin ? '-check' : ''}-square-o`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_18, [\n _createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _createElementVNode(\"button\", {\n class: _normalizeClass({ danger: user.admin }),\n disabled: user.username === _unref(authUser).username,\n onClick: ($event: any) => (updateUser(user.username, !user.admin))\n }, _toDisplayString(_ctx.$t(\n `admin.USERS.TABLE.${\n user.admin ? 'REMOVE' : 'ADD'\n }_ADMIN_RIGHTS`\n )), 11, _hoisted_20)\n ])\n ]))\n }), 128))\n ])\n ]),\n (_unref(pagination).page)\n ? (_openBlock(), _createBlock(Pagination, {\n key: 0,\n path: \"/admin/users\",\n pagination: _unref(pagination),\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 1,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ]))\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminUsers.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminUsers.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminUsers.vue?vue&type=style&index=0&id=dc12ff78&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-dc12ff78\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = { class: \"profile-tabs custom-checkboxes-group\" }\nconst _hoisted_2 = { class: \"profile-tabs-checkboxes custom-checkboxes\" }\nconst _hoisted_3 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n tabs: string[]\n selectedTab: string\n edition: boolean\n disabled?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserProfileTabs',\n props: {\n tabs: null,\n selectedTab: null,\n edition: { type: Boolean },\n disabled: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { tabs: string[], selectedTab: string, edition: boolean, disabled: boolean }\n\n \n\n const { tabs, selectedTab, disabled } = toRefs(props)\n\n function getPath(tab: string) {\n switch (tab) {\n case 'ACCOUNT':\n case 'PICTURE':\n return `/profile/edit/${tab.toLocaleLowerCase()}`\n case 'APPS':\n case 'PREFERENCES':\n case 'SPORTS':\n return `/profile${\n props.edition ? '/edit' : ''\n }/${tab.toLocaleLowerCase()}`\n default:\n case 'PROFILE':\n return `/profile${props.edition ? '/edit' : ''}`\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(tabs), (tab) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"profile-tab custom-checkbox\",\n key: tab\n }, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: tab,\n name: tab,\n checked: _unref(selectedTab).split('/')[0] === tab,\n disabled: _unref(disabled),\n onInput: ($event: any) => (_ctx.$router.push(getPath(tab)))\n }, null, 40, _hoisted_3),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`user.PROFILE.TABS.${tab}`)), 1)\n ])\n ]))\n }), 128))\n ])\n ]))\n}\n}\n\n})","import script from \"./UserProfileTabs.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserProfileTabs.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserProfileTabs.vue?vue&type=style&index=0&id=01b05f01&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9729cba4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-profile\" }\nconst _hoisted_2 = { class: \"box\" }\n\nimport { toRefs } from 'vue'\n\n import UserHeader from '@/components/User/ProfileDisplay/UserHeader.vue'\n import UserProfileTabs from '@/components/User/UserProfileTabs.vue'\n import { IUserProfile } from '@/types/user'\n\n interface Props {\n user: IUserProfile\n tab: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null,\n tab: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n tab: string\n }\n\n \n\n const { user, tab } = toRefs(props)\n const tabs = ['PROFILE', 'PREFERENCES', 'SPORTS', 'APPS']\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(UserHeader, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(UserProfileTabs, {\n tabs: tabs,\n selectedTab: _unref(tab),\n edition: false\n }, null, 8, [\"selectedTab\"]),\n _createVNode(_component_router_view, { user: _unref(user) }, null, 8, [\"user\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=9729cba4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9729cba4\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"user-preferences\",\n class: \"description-list\"\n}\nconst _hoisted_2 = { class: \"profile-buttons\" }\n\nimport { computed, ComputedRef } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getDateFormat } from '@/utils/dates'\n import { languageLabels } from '@/utils/locales'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPreferences',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const appLanguage: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const userLanguage = computed(() =>\n props.user.language\n ? languageLabels[props.user.language]\n : languageLabels['en']\n )\n const fistDayOfWeek = computed(() => (props.user.weekm ? 'MONDAY' : 'SUNDAY'))\n const timezone = computed(() =>\n props.user.timezone ? props.user.timezone : 'Europe/Paris'\n )\n const date_format = computed(() =>\n props.user.date_format ? props.user.date_format : 'MM/dd/yyyy'\n )\n const display_ascent = computed(() =>\n props.user.display_ascent ? 'DISPLAYED' : 'HIDDEN'\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LANGUAGE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(userLanguage)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.TIMEZONE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(timezone)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.DATE_FORMAT')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(getDateFormat)(_unref(date_format), _unref(appLanguage))), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_DAY_OF_WEEK')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(`user.PROFILE.${_unref(fistDayOfWeek)}`)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.UNITS.LABEL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(\n `user.PROFILE.UNITS.${__props.user.imperial_units ? 'IMPERIAL' : 'METRIC'}`\n )), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.ASCENT_DATA')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(`common.${_unref(display_ascent)}`)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"button\", {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/edit/preferences')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPreferences.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPreferences.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"user-profile-edition\",\n class: \"center-card\"\n}\n\nimport { computed, toRefs } from 'vue'\n\n import UserProfileTabs from '@/components/User/UserProfileTabs.vue'\n import { AUTH_USER_STORE } from '@/store/constants'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n tab: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null,\n tab: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n tab: string\n }\n\n \n\n const store = useStore()\n\n const { user, tab } = toRefs(props)\n const tabs = ['PROFILE', 'ACCOUNT', 'PICTURE', 'PREFERENCES', 'SPORTS']\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(`user.PROFILE.${_unref(tab)}_EDITION`)), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserProfileTabs, {\n tabs: tabs,\n selectedTab: _unref(tab),\n edition: true,\n disabled: _unref(loading)\n }, null, 8, [\"selectedTab\", \"disabled\"]),\n _createVNode(_component_router_view, { user: _unref(user) }, null, 8, [\"user\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, createVNode as _createVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-37b8c4c8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-infos-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = {\n key: 1,\n class: \"info-box success-message\"\n}\nconst _hoisted_4 = [\"onSubmit\"]\nconst _hoisted_5 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_6 = [\"disabled\"]\nconst _hoisted_7 = {\n class: \"form-items\",\n for: \"password-field\"\n}\nconst _hoisted_8 = {\n class: \"form-items\",\n for: \"new-password-field\"\n}\nconst _hoisted_9 = { class: \"form-buttons\" }\nconst _hoisted_10 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport {\n ComputedRef,\n Ref,\n computed,\n reactive,\n ref,\n toRefs,\n onMounted,\n watch,\n onUnmounted,\n } from 'vue'\n\n import PasswordInput from '@/components/Common/PasswordInput.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IUserProfile, IUserAccountPayload } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAccountEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n const { user } = toRefs(props)\n\n const store = useStore()\n const userForm: IUserAccountPayload = reactive({\n email: '',\n password: '',\n new_password: '',\n })\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const emailUpdate = ref(false)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const formErrors = ref(false)\n const displayModal: Ref = ref(false)\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function invalidateForm() {\n formErrors.value = true\n }\n function updateUserForm(user: IUserProfile) {\n userForm.email = user.email\n }\n function updatePassword(password: string) {\n userForm.password = password\n }\n function updateNewPassword(new_password: string) {\n userForm.new_password = new_password\n }\n function updateProfile() {\n const payload: IUserAccountPayload = {\n email: userForm.email,\n password: userForm.password,\n }\n if (userForm.new_password) {\n payload.new_password = userForm.new_password\n }\n emailUpdate.value = userForm.email !== user.value.email\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_ACCOUNT, payload)\n }\n function updateDisplayModal(value: boolean) {\n displayModal.value = value\n }\n function deleteAccount(username: string) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.DELETE_ACCOUNT, { username })\n }\n\n onUnmounted(() => {\n store.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\n watch(\n () => isSuccess.value,\n async (isSuccessValue) => {\n if (isSuccessValue) {\n updatePassword('')\n updateNewPassword('')\n updateUserForm(user.value)\n formErrors.value = false\n }\n }\n )\n watch(\n () => user.value.email,\n async () => {\n updateUserForm(user.value)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t('user.CONFIRM_ACCOUNT_DELETION'),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (deleteAccount(_unref(user).username))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\n `user.PROFILE.SUCCESSFUL_${\n emailUpdate.value && _unref(appConfig).is_email_sending_enabled ? 'EMAIL_' : ''\n }UPDATE`\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_5, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.EMAIL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"email\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((userForm.email) = $event)),\n disabled: _unref(loading),\n required: true,\n onInvalid: invalidateForm\n }, null, 40, _hoisted_6), [\n [_vModelText, userForm.email]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.CURRENT_PASSWORD')) + \"* \", 1),\n _createVNode(PasswordInput, {\n id: \"password-field\",\n disabled: _unref(loading),\n password: userForm.password,\n required: true,\n onUpdatePassword: updatePassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"password\"])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.NEW_PASSWORD')) + \" \", 1),\n _createVNode(PasswordInput, {\n id: \"new-password-field\",\n disabled: _unref(loading),\n checkStrength: true,\n password: userForm.new_password,\n isSuccess: false,\n onUpdatePassword: updateNewPassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"password\"])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"button\", _hoisted_10, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[3] || (_cache[3] = _withModifiers(($event: any) => (_ctx.$router.push('/profile')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1),\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (updateDisplayModal(true)), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.DELETE_MY_ACCOUNT')), 1)\n ])\n ], 42, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserAccountEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAccountEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAccountEdition.vue?vue&type=style&index=0&id=37b8c4c8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-37b8c4c8\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, vModelText as _vModelText, withDirectives as _withDirectives, createVNode as _createVNode, withModifiers as _withModifiers, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5e5a4552\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-infos-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = {\n class: \"form-items\",\n for: \"registrationDate\"\n}\nconst _hoisted_5 = [\"value\"]\nconst _hoisted_6 = {\n class: \"form-items\",\n for: \"first_name\"\n}\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = {\n class: \"form-items\",\n for: \"last_name\"\n}\nconst _hoisted_9 = {\n class: \"form-items\",\n for: \"birth_date\"\n}\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = {\n class: \"form-items\",\n for: \"location\"\n}\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = { class: \"form-items\" }\nconst _hoisted_14 = { class: \"form-buttons\" }\nconst _hoisted_15 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport { format } from 'date-fns'\n import { ComputedRef, computed, reactive, onMounted, onUnmounted } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IUserProfile, IUserPayload, IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserInfosEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const userForm: IUserPayload = reactive({\n first_name: '',\n last_name: '',\n birth_date: '',\n location: '',\n bio: '',\n })\n const registrationDate = computed(() =>\n props.user.created_at\n ? formatDate(\n props.user.created_at,\n props.user.timezone,\n props.user.date_format\n )\n : ''\n )\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function updateUserForm(user: IUserProfile) {\n userForm.first_name = user.first_name ? user.first_name : ''\n userForm.last_name = user.last_name ? user.last_name : ''\n userForm.birth_date = user.birth_date\n ? format(new Date(user.birth_date), 'yyyy-MM-dd')\n : ''\n userForm.location = user.location ? user.location : ''\n userForm.bio = user.bio ? user.bio : ''\n }\n function updateBio(value: string) {\n userForm.bio = value\n }\n function updateProfile() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PROFILE, userForm)\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')) + \" \", 1),\n _createElementVNode(\"input\", {\n id: \"registrationDate\",\n value: _unref(registrationDate),\n disabled: \"\"\n }, null, 8, _hoisted_5)\n ]),\n _createElementVNode(\"label\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.FIRST_NAME')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"first_name\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((userForm.first_name) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_7), [\n [_vModelText, userForm.first_name]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LAST_NAME')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"last_name\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((userForm.last_name) = $event))\n }, null, 512), [\n [_vModelText, userForm.last_name]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_9, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.BIRTH_DATE')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"birth_date\",\n type: \"date\",\n class: \"birth-date\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((userForm.birth_date) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_10), [\n [_vModelText, userForm.birth_date]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LOCATION')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"location\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((userForm.location) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_12), [\n [_vModelText, userForm.location]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_13, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.BIO')) + \" \", 1),\n _createVNode(_component_CustomTextArea, {\n name: \"bio\",\n charLimit: 200,\n input: userForm.bio,\n disabled: _unref(loading),\n onUpdateValue: updateBio\n }, null, 8, [\"input\", \"disabled\"])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"button\", _hoisted_15, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (_ctx.$router.push('/profile')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserInfosEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserInfosEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserInfosEdition.vue?vue&type=style&index=0&id=5e5a4552&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5e5a4552\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-687e9604\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-picture-edition\" }\nconst _hoisted_2 = { class: \"user-picture-form\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = { class: \"picture-help\" }\nconst _hoisted_5 = { class: \"info-box\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = { class: \"picture-buttons\" }\nconst _hoisted_8 = [\"disabled\"]\n\nimport { ComputedRef, Ref, computed, ref, toRefs, onUnmounted } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getReadableFileSize } from '@/utils/files'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPictureEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const store = useStore()\n\n const { user } = toRefs(props)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const appConfig: ComputedRef = 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 pictureFile: Ref = ref(null)\n\n function deleteUserPicture() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.DELETE_PICTURE)\n }\n function updatePictureFile(event: Event & { target: HTMLInputElement }) {\n if (event.target.files) {\n pictureFile.value = event.target.files[0]\n }\n }\n function updateUserPicture() {\n if (pictureFile.value) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PICTURE, {\n picture: pictureFile.value,\n })\n }\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateUserPicture, [\"prevent\"])\n }, [\n _createElementVNode(\"input\", {\n type: \"file\",\n name: \"picture\",\n accept: \".png,.jpg,.gif\",\n onInput: updatePictureFile\n }, null, 32),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"span\", _hoisted_5, [\n _hoisted_6,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(fileSizeLimit)), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"button\", {\n type: \"submit\",\n disabled: !pictureFile.value\n }, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE_UPDATE')), 9, _hoisted_8),\n (_unref(user).picture)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"danger\",\n onClick: deleteUserPicture\n }, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE_REMOVE')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.BACK_TO_PROFILE')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPictureEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPictureEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPictureEdition.vue?vue&type=style&index=0&id=687e9604&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-687e9604\"]])\n\nexport default __exports__","export const timeZones = [\n 'Africa/Abidjan',\n 'Africa/Accra',\n 'Africa/Algiers',\n 'Africa/Bissau',\n 'Africa/Cairo',\n 'Africa/Casablanca',\n 'Africa/Ceuta',\n 'Africa/El_Aaiun',\n 'Africa/Johannesburg',\n 'Africa/Juba',\n 'Africa/Khartoum',\n 'Africa/Lagos',\n 'Africa/Maputo',\n 'Africa/Monrovia',\n 'Africa/Nairobi',\n 'Africa/Ndjamena',\n 'Africa/Sao_Tome',\n 'Africa/Tripoli',\n 'Africa/Tunis',\n 'Africa/Windhoek',\n 'America/Adak',\n 'America/Anchorage',\n 'America/Araguaina',\n 'America/Argentina/Buenos_Aires',\n 'America/Argentina/Catamarca',\n 'America/Argentina/Cordoba',\n 'America/Argentina/Jujuy',\n 'America/Argentina/La_Rioja',\n 'America/Argentina/Mendoza',\n 'America/Argentina/Rio_Gallegos',\n 'America/Argentina/Salta',\n 'America/Argentina/San_Juan',\n 'America/Argentina/San_Luis',\n 'America/Argentina/Tucuman',\n 'America/Argentina/Ushuaia',\n 'America/Asuncion',\n 'America/Atikokan',\n 'America/Bahia',\n 'America/Bahia_Banderas',\n 'America/Barbados',\n 'America/Belem',\n 'America/Belize',\n 'America/Blanc-Sablon',\n 'America/Boa_Vista',\n 'America/Bogota',\n 'America/Boise',\n 'America/Cambridge_Bay',\n 'America/Campo_Grande',\n 'America/Cancun',\n 'America/Caracas',\n 'America/Cayenne',\n 'America/Chicago',\n 'America/Chihuahua',\n 'America/Costa_Rica',\n 'America/Creston',\n 'America/Cuiaba',\n 'America/Curacao',\n 'America/Danmarkshavn',\n 'America/Dawson',\n 'America/Dawson_Creek',\n 'America/Denver',\n 'America/Detroit',\n 'America/Edmonton',\n 'America/Eirunepe',\n 'America/El_Salvador',\n 'America/Fortaleza',\n 'America/Fort_Nelson',\n 'America/Glace_Bay',\n 'America/Godthab',\n 'America/Goose_Bay',\n 'America/Grand_Turk',\n 'America/Guatemala',\n 'America/Guayaquil',\n 'America/Guyana',\n 'America/Halifax',\n 'America/Havana',\n 'America/Hermosillo',\n 'America/Indiana/Indianapolis',\n 'America/Indiana/Knox',\n 'America/Indiana/Marengo',\n 'America/Indiana/Petersburg',\n 'America/Indiana/Tell_City',\n 'America/Indiana/Vevay',\n 'America/Indiana/Vincennes',\n 'America/Indiana/Winamac',\n 'America/Inuvik',\n 'America/Iqaluit',\n 'America/Jamaica',\n 'America/Juneau',\n 'America/Kentucky/Louisville',\n 'America/Kentucky/Monticello',\n 'America/La_Paz',\n 'America/Lima',\n 'America/Los_Angeles',\n 'America/Maceio',\n 'America/Managua',\n 'America/Manaus',\n 'America/Martinique',\n 'America/Matamoros',\n 'America/Mazatlan',\n 'America/Menominee',\n 'America/Merida',\n 'America/Metlakatla',\n 'America/Mexico_City',\n 'America/Miquelon',\n 'America/Moncton',\n 'America/Monterrey',\n 'America/Montevideo',\n 'America/Nassau',\n 'America/New_York',\n 'America/Nipigon',\n 'America/Nome',\n 'America/Noronha',\n 'America/North_Dakota/Beulah',\n 'America/North_Dakota/Center',\n 'America/North_Dakota/New_Salem',\n 'America/Ojinaga',\n 'America/Panama',\n 'America/Pangnirtung',\n 'America/Paramaribo',\n 'America/Phoenix',\n 'America/Port-au-Prince',\n 'America/Port_of_Spain',\n 'America/Porto_Velho',\n 'America/Puerto_Rico',\n 'America/Punta_Arenas',\n 'America/Rainy_River',\n 'America/Rankin_Inlet',\n 'America/Recife',\n 'America/Regina',\n 'America/Resolute',\n 'America/Rio_Branco',\n 'America/Santarem',\n 'America/Santiago',\n 'America/Santo_Domingo',\n 'America/Sao_Paulo',\n 'America/Scoresbysund',\n 'America/Sitka',\n 'America/St_Johns',\n 'America/Swift_Current',\n 'America/Tegucigalpa',\n 'America/Thule',\n 'America/Thunder_Bay',\n 'America/Tijuana',\n 'America/Toronto',\n 'America/Vancouver',\n 'America/Whitehorse',\n 'America/Winnipeg',\n 'America/Yakutat',\n 'America/Yellowknife',\n 'Antarctica/Casey',\n 'Antarctica/Davis',\n 'Antarctica/DumontDUrville',\n 'Antarctica/Macquarie',\n 'Antarctica/Mawson',\n 'Antarctica/Palmer',\n 'Antarctica/Rothera',\n 'Antarctica/Syowa',\n 'Antarctica/Troll',\n 'Antarctica/Vostok',\n 'Asia/Almaty',\n 'Asia/Amman',\n 'Asia/Anadyr',\n 'Asia/Aqtau',\n 'Asia/Aqtobe',\n 'Asia/Ashgabat',\n 'Asia/Atyrau',\n 'Asia/Baghdad',\n 'Asia/Baku',\n 'Asia/Bangkok',\n 'Asia/Barnaul',\n 'Asia/Beirut',\n 'Asia/Bishkek',\n 'Asia/Brunei',\n 'Asia/Chita',\n 'Asia/Choibalsan',\n 'Asia/Colombo',\n 'Asia/Damascus',\n 'Asia/Dhaka',\n 'Asia/Dili',\n 'Asia/Dubai',\n 'Asia/Dushanbe',\n 'Asia/Famagusta',\n 'Asia/Gaza',\n 'Asia/Hebron',\n 'Asia/Ho_Chi_Minh',\n 'Asia/Hong_Kong',\n 'Asia/Hovd',\n 'Asia/Irkutsk',\n 'Asia/Jakarta',\n 'Asia/Jayapura',\n 'Asia/Jerusalem',\n 'Asia/Kabul',\n 'Asia/Kamchatka',\n 'Asia/Karachi',\n 'Asia/Kathmandu',\n 'Asia/Khandyga',\n 'Asia/Kolkata',\n 'Asia/Krasnoyarsk',\n 'Asia/Kuala_Lumpur',\n 'Asia/Kuching',\n 'Asia/Macau',\n 'Asia/Magadan',\n 'Asia/Makassar',\n 'Asia/Manila',\n 'Asia/Nicosia',\n 'Asia/Novokuznetsk',\n 'Asia/Novosibirsk',\n 'Asia/Omsk',\n 'Asia/Oral',\n 'Asia/Pontianak',\n 'Asia/Pyongyang',\n 'Asia/Qatar',\n 'Asia/Qostanay',\n 'Asia/Qyzylorda',\n 'Asia/Riyadh',\n 'Asia/Sakhalin',\n 'Asia/Samarkand',\n 'Asia/Seoul',\n 'Asia/Shanghai',\n 'Asia/Singapore',\n 'Asia/Srednekolymsk',\n 'Asia/Taipei',\n 'Asia/Tashkent',\n 'Asia/Tbilisi',\n 'Asia/Tehran',\n 'Asia/Thimphu',\n 'Asia/Tokyo',\n 'Asia/Tomsk',\n 'Asia/Ulaanbaatar',\n 'Asia/Urumqi',\n 'Asia/Ust-Nera',\n 'Asia/Vladivostok',\n 'Asia/Yakutsk',\n 'Asia/Yangon',\n 'Asia/Yekaterinburg',\n 'Asia/Yerevan',\n 'Atlantic/Azores',\n 'Atlantic/Bermuda',\n 'Atlantic/Canary',\n 'Atlantic/Cape_Verde',\n 'Atlantic/Faroe',\n 'Atlantic/Madeira',\n 'Atlantic/Reykjavik',\n 'Atlantic/South_Georgia',\n 'Atlantic/Stanley',\n 'Australia/Adelaide',\n 'Australia/Brisbane',\n 'Australia/Broken_Hill',\n 'Australia/Currie',\n 'Australia/Darwin',\n 'Australia/Eucla',\n 'Australia/Hobart',\n 'Australia/Lindeman',\n 'Australia/Lord_Howe',\n 'Australia/Melbourne',\n 'Australia/Perth',\n 'Australia/Sydney',\n 'Europe/Amsterdam',\n 'Europe/Andorra',\n 'Europe/Astrakhan',\n 'Europe/Athens',\n 'Europe/Belgrade',\n 'Europe/Berlin',\n 'Europe/Brussels',\n 'Europe/Bucharest',\n 'Europe/Budapest',\n 'Europe/Chisinau',\n 'Europe/Copenhagen',\n 'Europe/Dublin',\n 'Europe/Gibraltar',\n 'Europe/Helsinki',\n 'Europe/Istanbul',\n 'Europe/Kaliningrad',\n 'Europe/Kiev',\n 'Europe/Kirov',\n 'Europe/Lisbon',\n 'Europe/London',\n 'Europe/Luxembourg',\n 'Europe/Madrid',\n 'Europe/Malta',\n 'Europe/Minsk',\n 'Europe/Monaco',\n 'Europe/Moscow',\n 'Europe/Oslo',\n 'Europe/Paris',\n 'Europe/Prague',\n 'Europe/Riga',\n 'Europe/Rome',\n 'Europe/Samara',\n 'Europe/Saratov',\n 'Europe/Simferopol',\n 'Europe/Sofia',\n 'Europe/Stockholm',\n 'Europe/Tallinn',\n 'Europe/Tirane',\n 'Europe/Ulyanovsk',\n 'Europe/Uzhgorod',\n 'Europe/Vienna',\n 'Europe/Vilnius',\n 'Europe/Volgograd',\n 'Europe/Warsaw',\n 'Europe/Zaporozhye',\n 'Europe/Zurich',\n 'Indian/Chagos',\n 'Indian/Christmas',\n 'Indian/Cocos',\n 'Indian/Kerguelen',\n 'Indian/Mahe',\n 'Indian/Maldives',\n 'Indian/Mauritius',\n 'Indian/Reunion',\n 'Pacific/Apia',\n 'Pacific/Auckland',\n 'Pacific/Bougainville',\n 'Pacific/Chatham',\n 'Pacific/Chuuk',\n 'Pacific/Easter',\n 'Pacific/Efate',\n 'Pacific/Enderbury',\n 'Pacific/Fakaofo',\n 'Pacific/Fiji',\n 'Pacific/Funafuti',\n 'Pacific/Galapagos',\n 'Pacific/Gambier',\n 'Pacific/Guadalcanal',\n 'Pacific/Guam',\n 'Pacific/Honolulu',\n 'Pacific/Kiritimati',\n 'Pacific/Kosrae',\n 'Pacific/Kwajalein',\n 'Pacific/Majuro',\n 'Pacific/Marquesas',\n 'Pacific/Nauru',\n 'Pacific/Niue',\n 'Pacific/Norfolk',\n 'Pacific/Noumea',\n 'Pacific/Pago_Pago',\n 'Pacific/Palau',\n 'Pacific/Pitcairn',\n 'Pacific/Pohnpei',\n 'Pacific/Port_Moresby',\n 'Pacific/Rarotonga',\n 'Pacific/Tahiti',\n 'Pacific/Tarawa',\n 'Pacific/Tongatapu',\n 'Pacific/Wake',\n 'Pacific/Wallis',\n]\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, withKeys as _withKeys, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-47ea2903\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"tz-dropdown\" }\nconst _hoisted_2 = [\"value\", \"disabled\", \"onKeydown\"]\nconst _hoisted_3 = [\"onClick\", \"onMouseover\", \"autofocus\"]\n\nimport { Ref, ref, toRefs, watch, withDefaults } from 'vue'\n\n import { timeZones } from '@/utils/timezone'\n\n interface Props {\n input: string\n disabled?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'TimezoneDropdown',\n props: {\n input: null,\n disabled: { type: Boolean, default: false }\n },\n emits: ['updateTimezone'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { input: string, disabled: boolean }\n\n \n\n \n\n const { input, disabled } = toRefs(props)\n const timezone: Ref = ref(props.input)\n const isOpen: Ref = ref(false)\n const tzList: Ref = ref(null)\n const focusItemIndex: Ref = ref(0)\n\n function matchTimezone(t: string): RegExpMatchArray | null {\n return t.toLowerCase().match(timezone.value.toLowerCase())\n }\n function onMouseOver(index: number) {\n focusItemIndex.value = index\n }\n function onUpdateTimezone(value: string) {\n timezone.value = value\n isOpen.value = false\n emit('updateTimezone', value)\n }\n function onEnter(event: Event & { target: HTMLInputElement }) {\n event.preventDefault()\n if (tzList.value?.firstElementChild?.innerHTML) {\n onUpdateTimezone(tzList.value?.firstElementChild?.innerHTML)\n }\n }\n function openDropdown(event: Event & { target: HTMLInputElement }) {\n event.preventDefault()\n isOpen.value = true\n timezone.value = event.target.value.trim()\n }\n\n watch(\n () => props.input,\n (value) => {\n timezone.value = value\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"input\", {\n class: \"tz-dropdown-input\",\n id: \"timezone\",\n name: \"timezone\",\n value: timezone.value,\n disabled: _unref(disabled),\n required: \"\",\n onKeydown: [\n _cache[0] || (_cache[0] = _withKeys(($event: any) => (onUpdateTimezone(_unref(input))), [\"esc\"])),\n _withKeys(onEnter, [\"enter\"])\n ],\n onInput: openDropdown\n }, null, 40, _hoisted_2),\n (isOpen.value)\n ? (_openBlock(), _createElementBlock(\"ul\", {\n key: 0,\n class: \"tz-dropdown-list\",\n ref_key: \"tzList\",\n ref: tzList\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(timeZones).filter((t) => matchTimezone(t)), (tz, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: tz,\n class: _normalizeClass([\"tz-dropdown-item\", { focus: index === focusItemIndex.value }]),\n onClick: ($event: any) => (onUpdateTimezone(tz)),\n onMouseover: ($event: any) => (onMouseOver(index)),\n autofocus: index === focusItemIndex.value\n }, _toDisplayString(tz), 43, _hoisted_3))\n }), 128))\n ], 512))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./TimezoneDropdown.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./TimezoneDropdown.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./TimezoneDropdown.vue?vue&type=style&index=0&id=47ea2903&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-47ea2903\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, vModelSelect as _vModelSelect, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, createVNode as _createVNode, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-065d5e6c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-preferences-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = { class: \"form-items\" }\nconst _hoisted_5 = [\"disabled\"]\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = { class: \"form-items\" }\nconst _hoisted_8 = { class: \"form-items\" }\nconst _hoisted_9 = [\"disabled\"]\nconst _hoisted_10 = [\"value\"]\nconst _hoisted_11 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_12 = { class: \"checkboxes-label\" }\nconst _hoisted_13 = { class: \"checkboxes\" }\nconst _hoisted_14 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_15 = { class: \"checkbox-label\" }\nconst _hoisted_16 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_17 = { class: \"checkboxes-label\" }\nconst _hoisted_18 = { class: \"checkboxes\" }\nconst _hoisted_19 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_20 = { class: \"checkbox-label\" }\nconst _hoisted_21 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_22 = { class: \"checkboxes-label\" }\nconst _hoisted_23 = { class: \"checkboxes\" }\nconst _hoisted_24 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_25 = { class: \"checkbox-label\" }\nconst _hoisted_26 = { class: \"form-buttons\" }\nconst _hoisted_27 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport { ComputedRef, computed, reactive, onMounted, onUnmounted } from 'vue'\n\n import TimezoneDropdown from '@/components/User/ProfileEdition/TimezoneDropdown.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IUserPreferencesPayload, IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { availableDateFormatOptions } from '@/utils/dates'\n import { availableLanguages } from '@/utils/locales'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPreferencesEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const userForm: IUserPreferencesPayload = reactive({\n display_ascent: true,\n imperial_units: false,\n language: '',\n timezone: 'Europe/Paris',\n date_format: 'dd/MM/yyyy',\n weekm: false,\n })\n const weekStart = [\n {\n label: 'SUNDAY',\n value: false,\n },\n {\n label: 'MONDAY',\n value: true,\n },\n ]\n const imperialUnits = [\n {\n label: 'METRIC',\n value: false,\n },\n {\n label: 'IMPERIAL',\n value: true,\n },\n ]\n const ascentData = [\n {\n label: 'DISPLAYED',\n value: true,\n },\n {\n label: 'HIDDEN',\n value: false,\n },\n ]\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const dateFormatOptions = computed(() =>\n availableDateFormatOptions(\n new Date().toUTCString(),\n props.user.timezone,\n userForm.language\n )\n )\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function updateUserForm(user: IAuthUserProfile) {\n userForm.display_ascent = user.display_ascent\n userForm.imperial_units = user.imperial_units ? user.imperial_units : false\n userForm.language = user.language ? user.language : 'en'\n userForm.timezone = user.timezone ? user.timezone : 'Europe/Paris'\n userForm.date_format = user.date_format ? user.date_format : 'dd/MM/yyyy'\n userForm.weekm = user.weekm ? user.weekm : false\n }\n function updateProfile() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PREFERENCES, userForm)\n }\n function updateTZ(value: string) {\n userForm.timezone = value\n }\n function updateAscentDisplay(value: boolean) {\n userForm.display_ascent = value\n }\n function updateImperialUnit(value: boolean) {\n userForm.imperial_units = value\n }\n function updateWeekM(value: boolean) {\n userForm.weekm = value\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LANGUAGE')) + \" \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"language\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((userForm.language) = $event)),\n disabled: _unref(loading)\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(availableLanguages), (lang) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: lang.value,\n key: lang.value\n }, _toDisplayString(lang.label), 9, _hoisted_6))\n }), 128))\n ], 8, _hoisted_5), [\n [_vModelSelect, userForm.language]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.TIMEZONE')) + \" \", 1),\n _createVNode(TimezoneDropdown, {\n input: userForm.timezone,\n disabled: _unref(loading),\n onUpdateTimezone: updateTZ\n }, null, 8, [\"input\", \"disabled\"])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.DATE_FORMAT')) + \" \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"date_format\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((userForm.date_format) = $event)),\n disabled: _unref(loading)\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(dateFormatOptions), (dateFormat) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: dateFormat.value,\n key: dateFormat.value\n }, _toDisplayString(dateFormat.label), 9, _hoisted_10))\n }), 128))\n ], 8, _hoisted_9), [\n [_vModelSelect, userForm.date_format]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_DAY_OF_WEEK')), 1),\n _createElementVNode(\"div\", _hoisted_13, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(weekStart, (start) => {\n return _createElementVNode(\"label\", {\n key: start.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: start.label,\n name: start.label,\n checked: start.value === userForm.weekm,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateWeekM(start.value))\n }, null, 40, _hoisted_14),\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t(`user.PROFILE.${start.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"span\", _hoisted_17, _toDisplayString(_ctx.$t('user.PROFILE.UNITS.LABEL')), 1),\n _createElementVNode(\"div\", _hoisted_18, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(imperialUnits, (unit) => {\n return _createElementVNode(\"label\", {\n key: unit.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: unit.label,\n name: unit.label,\n checked: unit.value === userForm.imperial_units,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateImperialUnit(unit.value))\n }, null, 40, _hoisted_19),\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t(`user.PROFILE.UNITS.${unit.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"span\", _hoisted_22, _toDisplayString(_ctx.$t('user.PROFILE.ASCENT_DATA')), 1),\n _createElementVNode(\"div\", _hoisted_23, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(ascentData, (status) => {\n return _createElementVNode(\"label\", {\n key: status.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: status.label,\n name: status.label,\n checked: status.value === userForm.display_ascent,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateAscentDisplay(status.value))\n }, null, 40, _hoisted_24),\n _createElementVNode(\"span\", _hoisted_25, _toDisplayString(_ctx.$t(`common.${status.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_26, [\n _createElementVNode(\"button\", _hoisted_27, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/preferences')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPreferencesEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPreferencesEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPreferencesEdition.vue?vue&type=style&index=0&id=065d5e6c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-065d5e6c\"]])\n\nexport default __exports__","export const oauth2_scopes = [\n 'profile:read',\n 'profile:write',\n 'users:read',\n 'users:write',\n 'workouts:read',\n 'workouts:write',\n]\n\nexport const admin_oauth2_scopes = ['application:write']\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, vModelText as _vModelText, withDirectives as _withDirectives, resolveComponent as _resolveComponent, createVNode as _createVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0657ee77\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"new-oauth2-app\" }\nconst _hoisted_2 = { id: \"new-oauth2-title\" }\nconst _hoisted_3 = { id: \"apps-form\" }\nconst _hoisted_4 = [\"onSubmit\"]\nconst _hoisted_5 = { class: \"form-items\" }\nconst _hoisted_6 = { class: \"form-item\" }\nconst _hoisted_7 = { for: \"app-name\" }\nconst _hoisted_8 = { class: \"form-item\" }\nconst _hoisted_9 = { for: \"app-description\" }\nconst _hoisted_10 = { class: \"form-item\" }\nconst _hoisted_11 = { for: \"app-url\" }\nconst _hoisted_12 = { class: \"form-item\" }\nconst _hoisted_13 = { for: \"app-redirect-uri\" }\nconst _hoisted_14 = { class: \"form-item-scope\" }\nconst _hoisted_15 = { class: \"form-item-scope-label\" }\nconst _hoisted_16 = { class: \"scope-label\" }\nconst _hoisted_17 = [\"name\", \"checked\", \"onChange\"]\nconst _hoisted_18 = [\"innerHTML\"]\nconst _hoisted_19 = { class: \"form-buttons\" }\nconst _hoisted_20 = [\"disabled\"]\n\nimport { computed, reactive } from 'vue'\n\n import { OAUTH2_STORE } from '@/store/constants'\n import { IOAuth2ClientPayload } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { admin_oauth2_scopes, oauth2_scopes } from '@/utils/oauth'\n\n interface Props {\n authUser: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AddUserApp',\n props: {\n authUser: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n const appForm = reactive({\n client_name: '',\n client_uri: '',\n client_description: '',\n redirect_uri: '',\n })\n const scopes: string[] = reactive([])\n const filtered_scopes = computed(() =>\n getScopes(props.authUser, admin_oauth2_scopes, oauth2_scopes)\n )\n\n function createApp() {\n const payload: IOAuth2ClientPayload = {\n client_name: appForm.client_name,\n client_description: appForm.client_description,\n client_uri: appForm.client_uri,\n redirect_uris: [appForm.redirect_uri],\n scope: scopes.sort().join(' '),\n }\n store.dispatch(OAUTH2_STORE.ACTIONS.CREATE_CLIENT, payload)\n }\n function updateDescription(value: string) {\n appForm.client_description = value\n }\n function updateScopes(scope: string) {\n const index = scopes.indexOf(scope)\n if (index > -1) {\n scopes.splice(index, 1)\n } else {\n scopes.push(scope)\n }\n }\n function getScopes(\n authUser: IAuthUserProfile,\n admin_scopes: string[],\n scopes: string[]\n ) {\n const filtered_scopes = [...scopes]\n if (authUser.admin) {\n filtered_scopes.push(...admin_scopes)\n }\n return filtered_scopes.sort()\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"h1\", _hoisted_2, _toDisplayString(_ctx.$t('oauth2.ADD_A_NEW_APP')), 1),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(createApp, [\"prevent\"])\n }, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"label\", _hoisted_7, _toDisplayString(_ctx.$t('oauth2.APP.NAME')) + \"*\", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-name\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((appForm.client_name) = $event))\n }, null, 512), [\n [_vModelText, appForm.client_name]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"label\", _hoisted_9, _toDisplayString(_ctx.$t('oauth2.APP.DESCRIPTION')), 1),\n _createVNode(_component_CustomTextArea, {\n name: \"app-description\",\n charLimit: 200,\n input: appForm.description,\n onUpdateValue: updateDescription\n }, null, 8, [\"input\"])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"label\", _hoisted_11, _toDisplayString(_ctx.$t('oauth2.APP.URL')) + \"*\", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-url\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((appForm.client_uri) = $event))\n }, null, 512), [\n [_vModelText, appForm.client_uri]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"label\", _hoisted_13, _toDisplayString(_ctx.$t('oauth2.APP.REDIRECT_URL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-redirect-uri\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((appForm.redirect_uri) = $event))\n }, null, 512), [\n [_vModelText, appForm.redirect_uri]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", _hoisted_15, _toDisplayString(_ctx.$t('oauth2.APP.SCOPE.LABEL')) + \"* \", 1),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(filtered_scopes), (scope) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"form-item-scope-checkboxes\",\n key: scope\n }, [\n _createElementVNode(\"label\", _hoisted_16, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n name: scope,\n checked: scopes.includes(scope),\n onChange: ($event: any) => (updateScopes(scope))\n }, null, 40, _hoisted_17),\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]),\n _createElementVNode(\"p\", {\n class: \"scope-description\",\n innerHTML: _ctx.$t(`oauth2.APP.SCOPE.${scope}_DESCRIPTION`)\n }, null, 8, _hoisted_18)\n ]))\n }), 128))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n type: \"submit\",\n disabled: scopes.length === 0\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_20),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[3] || (_cache[3] = _withModifiers(() => _ctx.$router.push('/profile/apps'), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./AddUserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AddUserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AddUserApp.vue?vue&type=style&index=0&id=0657ee77&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0657ee77\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3b2fe9ed\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"authorize-oauth2-app\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { id: \"authorize-oauth2-title\" }\nconst _hoisted_4 = { class: \"oauth2-access description-list\" }\nconst _hoisted_5 = { class: \"client-scope\" }\nconst _hoisted_6 = [\"innerHTML\"]\nconst _hoisted_7 = { class: \"authorize-oauth2-buttons\" }\nconst _hoisted_8 = { key: 1 }\nconst _hoisted_9 = { class: \"no-app\" }\n\nimport { computed, ComputedRef, onBeforeMount } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IOAuth2Client } from '@/types/oauth'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AuthorizeUserApp',\n setup(__props) {\n\n const route = useRoute()\n const store = useStore()\n\n const client: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENT]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => loadApp())\n\n function loadApp() {\n if (route.query.client_id && typeof route.query.client_id === 'string') {\n store.dispatch(\n OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_CLIENT_ID,\n route.query.client_id\n )\n }\n }\n\n function authorizeApp() {\n store.dispatch(OAUTH2_STORE.ACTIONS.AUTHORIZE_CLIENT, {\n client_id: `${route.query.client_id}`,\n redirect_uri: `${route.query.redirect_uri}`,\n response_type: `${route.query.response_type}`,\n scope: `${route.query.scope}`,\n state: `${route.query.state ? route.query.state : ''}`,\n code_challenge: `${\n route.query.code_challenge ? route.query.code_challenge : ''\n }`,\n code_challenge_method: `${\n route.query.code_challenge_method\n ? route.query.code_challenge_method\n : ''\n }`,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(client).client_id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"h1\", _hoisted_3, [\n _createVNode(_component_i18n_t, { keypath: \"oauth2.AUTHORIZE_APP\" }, {\n default: _withCtx(() => [\n _createVNode(_component_router_link, {\n to: { name: 'UserApp', params: { id: _unref(client).id } }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(client).name), 1)\n ]),\n _: 1\n }, 8, [\"to\"])\n ]),\n _: 1\n })\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t('oauth2.APP_REQUESTING_ACCESS')), 1),\n _createElementVNode(\"dl\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(client).scope.split(' '), (scope) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: scope }, [\n _createElementVNode(\"dt\", _hoisted_5, [\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]),\n _createElementVNode(\"dd\", {\n innerHTML: _ctx.$t(`oauth2.APP.SCOPE.${scope}_DESCRIPTION`)\n }, null, 8, _hoisted_6)\n ], 64))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: authorizeApp\n }, _toDisplayString(_ctx.$t('buttons.AUTHORIZE')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"p\", _hoisted_9, _toDisplayString(_ctx.$t('oauth2.NO_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n ]))\n}\n}\n\n})","import script from \"./AuthorizeUserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AuthorizeUserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AuthorizeUserApp.vue?vue&type=style&index=0&id=3b2fe9ed&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3b2fe9ed\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"oauth2-apps\" }\n\nimport { onUnmounted, toRefs } from 'vue'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const { user } = toRefs(props)\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(OAUTH2_STORE.MUTATIONS.SET_CLIENTS, [])\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_router_view, { authUser: _unref(user) }, null, 8, [\"authUser\"])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3a844fa2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"oauth2-app\",\n class: \"description-list\"\n}\nconst _hoisted_2 = { key: 1 }\nconst _hoisted_3 = {\n key: 0,\n class: \"info-box success-message\"\n}\nconst _hoisted_4 = [\"title\"]\nconst _hoisted_5 = { key: 0 }\nconst _hoisted_6 = {\n key: 1,\n class: \"app-secret\"\n}\nconst _hoisted_7 = [\"title\"]\nconst _hoisted_8 = { class: \"client-scopes\" }\nconst _hoisted_9 = { class: \"app-buttons\" }\nconst _hoisted_10 = { key: 2 }\nconst _hoisted_11 = { class: \"no-app\" }\n\nimport {\n ComputedRef,\n Ref,\n capitalize,\n computed,\n onBeforeMount,\n toRefs,\n ref,\n onUnmounted,\n withDefaults,\n watch,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IOAuth2Client } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n authUser: IAuthUserProfile\n afterCreation?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserApp',\n props: {\n authUser: null,\n afterCreation: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, afterCreation: boolean }\n\n \n const route = useRoute()\n const store = useStore()\n\n const { afterCreation, authUser } = toRefs(props)\n const client: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENT]\n )\n const revocationSuccessful: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.REVOCATION_SUCCESSFUL]\n )\n const displayModal: Ref = ref(false)\n const messageToDisplay: Ref = ref(null)\n const idCopied: Ref = ref(false)\n const secretCopied: Ref = ref(false)\n const clipboardSupport: Ref = ref(false)\n\n onBeforeMount(() => {\n loadClient()\n if (navigator.clipboard) {\n clipboardSupport.value = true\n }\n })\n\n function loadClient() {\n // after creation, client is already in store\n if (\n !afterCreation.value &&\n route.params.id &&\n typeof route.params.id === 'string'\n ) {\n store.dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_ID, +route.params.id)\n }\n }\n function updateMessageToDisplay(forDelete: boolean) {\n messageToDisplay.value = forDelete\n ? 'oauth2.APP_DELETION_CONFIRMATION'\n : 'oauth2.TOKENS_REVOCATION_CONFIRMATION'\n updateDisplayModal(true)\n }\n function updateDisplayModal(value: boolean) {\n displayModal.value = value\n if (!value) {\n messageToDisplay.value = null\n }\n }\n function confirmAction(clientId: number) {\n if (messageToDisplay.value === 'oauth2.APP_DELETION_CONFIRMATION') {\n store.dispatch(OAUTH2_STORE.ACTIONS.DELETE_CLIENT, clientId)\n } else {\n store.dispatch(OAUTH2_STORE.ACTIONS.REVOKE_ALL_TOKENS, clientId)\n }\n }\n function copyIdToClipboard() {\n navigator.clipboard.writeText(client.value.client_id)\n idCopied.value = true\n secretCopied.value = false\n setTimeout(() => {\n idCopied.value = false\n }, 3000)\n }\n function copySecretToClipboard() {\n if (client.value.client_secret) {\n navigator.clipboard.writeText(client.value.client_secret)\n secretCopied.value = true\n idCopied.value = false\n setTimeout(() => {\n secretCopied.value = false\n }, 3000)\n }\n }\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(OAUTH2_STORE.MUTATIONS.EMPTY_CLIENT)\n store.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, false)\n })\n\n watch(\n () => revocationSuccessful.value,\n (newValue) => {\n if (newValue) {\n updateDisplayModal(false)\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t(messageToDisplay.value),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (confirmAction(_unref(client).id))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(client) && _unref(client).client_id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (_unref(afterCreation) || _unref(revocationSuccessful))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\n _unref(afterCreation)\n ? 'oauth2.APP_CREATED_SUCCESSFULLY'\n : 'oauth2.TOKENS_REVOKED'\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.CLIENT_ID')) + \":\", 1),\n _createElementVNode(\"dd\", null, [\n _createTextVNode(_toDisplayString(_unref(client).client_id) + \" \", 1),\n (_unref(afterCreation) && clipboardSupport.value)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: _normalizeClass(`fa fa-${idCopied.value ? 'check' : 'copy'}`),\n \"aria-hidden\": \"true\",\n title: _ctx.$t('oauth2.COPY_TO_CLIPBOARD'),\n onClick: copyIdToClipboard\n }, null, 10, _hoisted_4))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(afterCreation) && _unref(client).client_secret)\n ? (_openBlock(), _createElementBlock(\"dt\", _hoisted_5, _toDisplayString(_ctx.$t('oauth2.APP.CLIENT_SECRET')) + \": \", 1))\n : _createCommentVNode(\"\", true),\n (_unref(afterCreation) && _unref(client).client_secret)\n ? (_openBlock(), _createElementBlock(\"dd\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_unref(client).client_secret) + \" \", 1),\n (clipboardSupport.value)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: _normalizeClass(`fa fa-${secretCopied.value ? 'check' : 'copy'}`),\n \"aria-hidden\": \"true\",\n title: _ctx.$t('oauth2.COPY_TO_CLIPBOARD'),\n onClick: copySecretToClipboard\n }, null, 10, _hoisted_7))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"dt\", null, _toDisplayString(capitalize(_ctx.$t('oauth2.APP.ISSUE_AT'))) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(formatDate)(\n _unref(client).issued_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.DESCRIPTION')) + \":\", 1),\n _createElementVNode(\"dd\", {\n class: _normalizeClass({ 'no-description': !_unref(client).client_description })\n }, _toDisplayString(_unref(client).client_description\n ? _unref(client).client_description\n : _ctx.$t('oauth2.NO_DESCRIPTION')), 3),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.URL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).website), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.REDIRECT_URL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).redirect_uris.length > 0 ? _unref(client).redirect_uris[0] : ''), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.SCOPE.LABEL')) + \":\", 1),\n _createElementVNode(\"dd\", _hoisted_8, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(client).scope.split(' '), (scope) => {\n return (_openBlock(), _createElementBlock(\"span\", {\n class: \"client-scope\",\n key: scope\n }, [\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]))\n }), 128))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (updateMessageToDisplay(false)))\n }, _toDisplayString(_ctx.$t('oauth2.REVOKE_ALL_TOKENS')), 1),\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateMessageToDisplay(true)))\n }, _toDisplayString(_ctx.$t('oauth2.DELETE_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [\n _createElementVNode(\"p\", _hoisted_11, _toDisplayString(_ctx.$t('oauth2.NO_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n ]))\n}\n}\n\n})","import script from \"./UserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserApp.vue?vue&type=style&index=0&id=3a844fa2&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3a844fa2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-efa45ea0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"oauth2-apps-list\" }\nconst _hoisted_2 = { class: \"apps-list\" }\nconst _hoisted_3 = { key: 0 }\nconst _hoisted_4 = { class: \"app-issued-at\" }\nconst _hoisted_5 = {\n key: 1,\n class: \"no-apps\"\n}\nconst _hoisted_6 = { class: \"app-list-buttons\" }\n\nimport { ComputedRef, computed, onBeforeMount, toRefs, watch } from 'vue'\n import { LocationQuery, useRoute } from 'vue-router'\n\n import Pagination from '@/components/Common/Pagination.vue'\n import { OAUTH2_STORE } from '@/store/constants'\n import { IPagination } from '@/types/api'\n import { IOAuth2Client, IOauth2ClientsPayload } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { defaultPage, getNumberQueryValue } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n authUser: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAppsList',\n props: {\n authUser: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n const route = useRoute()\n\n const { authUser } = toRefs(props)\n const clients: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENTS]\n )\n\n const pagination: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENTS_PAGINATION]\n )\n let query: IOauth2ClientsPayload = getClientsQuery(route.query)\n\n onBeforeMount(() => {\n loadClients(query)\n })\n\n function getClientsQuery(newQuery: LocationQuery): IOauth2ClientsPayload {\n const clientsQuery: IOauth2ClientsPayload = {}\n if (newQuery.page) {\n clientsQuery.page = getNumberQueryValue(newQuery.page, defaultPage)\n }\n return clientsQuery\n }\n function loadClients(payload: IOauth2ClientsPayload) {\n store.dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENTS, payload)\n }\n\n watch(\n () => route.query,\n async (newQuery) => {\n query = getClientsQuery(newQuery)\n loadClients(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"p\", _hoisted_2, _toDisplayString(_ctx.$t('oauth2.APPS_LIST')), 1),\n (_unref(clients).length > 0)\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(clients), (client) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: client.client_id\n }, [\n _createVNode(_component_router_link, {\n to: { name: 'UserApp', params: { id: client.id } }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(client.name), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('oauth2.APP.ISSUE_AT')) + \" \" + _toDisplayString(_unref(formatDate)(\n client.issued_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1)\n ]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('oauth2.NO_APPS')), 1)),\n (_unref(clients).length > 0)\n ? (_openBlock(), _createBlock(Pagination, {\n key: 2,\n pagination: _unref(pagination),\n path: \"/profile/apps\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"button\", {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/apps/new')))\n }, _toDisplayString(_ctx.$t('oauth2.NEW_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserAppsList.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAppsList.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAppsList.vue?vue&type=style&index=0&id=efa45ea0&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-efa45ea0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, withModifiers as _withModifiers, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createBlock as _createBlock, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74e52489\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-sport-preferences\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"responsive-table\"\n}\nconst _hoisted_3 = { class: \"mobile-display\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"profile-buttons mobile-display\"\n}\nconst _hoisted_5 = {\n key: 1,\n class: \"profile-buttons\"\n}\nconst _hoisted_6 = { class: \"text-left\" }\nconst _hoisted_7 = { key: 0 }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = [\"value\"]\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"disabled-message\"\n}\nconst _hoisted_12 = {\n key: 1,\n class: \"fa fa-refresh fa-spin fa-fw\"\n}\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"cell-heading\" }\nconst _hoisted_15 = [\"checked\"]\nconst _hoisted_16 = { class: \"cell-heading\" }\nconst _hoisted_17 = [\"value\"]\nconst _hoisted_18 = { key: 1 }\nconst _hoisted_19 = {\n key: 0,\n class: \"action-buttons\"\n}\nconst _hoisted_20 = { class: \"cell-heading\" }\nconst _hoisted_21 = [\"onClick\"]\nconst _hoisted_22 = {\n key: 1,\n class: \"edition-buttons\"\n}\nconst _hoisted_23 = [\"disabled\"]\nconst _hoisted_24 = [\"disabled\", \"onClick\"]\nconst _hoisted_25 = [\"disabled\"]\nconst _hoisted_26 = {\n key: 0,\n class: \"profile-buttons\"\n}\nconst _hoisted_27 = {\n key: 1,\n class: \"profile-buttons\"\n}\n\nimport { ComputedRef, computed, inject, reactive, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { AUTH_USER_STORE, ROOT_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IUserProfile, IUserSportPreferencesPayload } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n user: IUserProfile\n isEdition: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserSportPreferences',\n props: {\n user: null,\n isEdition: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n isEdition: boolean\n }\n\n \n\n const store = useStore()\n const { t } = useI18n()\n\n const { isEdition, user } = toRefs(props)\n const defaultColor = '#838383'\n const sportColors: Record | undefined = inject('sportColors')\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(sports.value, t, 'is_active', user.value.sports_list)\n )\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const sportPayload: IUserSportPreferencesPayload = reactive({\n sport_id: 0,\n color: null,\n is_active: true,\n stopped_speed_threshold: 1,\n })\n\n function updateSportInEdition(sport: ISport | null) {\n if (sport !== null) {\n sportPayload.sport_id = sport.id\n sportPayload.color = sport.color\n ? sport.color\n : sportColors\n ? sportColors[sport.label]\n : defaultColor\n sportPayload.is_active = sport.is_active_for_user\n sportPayload.stopped_speed_threshold = sport.stopped_speed_threshold\n } else {\n resetSportPayload()\n }\n }\n function isSportInEdition(sportId: number) {\n return sportPayload.sport_id === sportId\n }\n function updateColor(event: Event & { target: HTMLInputElement }) {\n sportPayload.color = event.target.value\n }\n function updateThreshold(event: Event & { target: HTMLInputElement }) {\n sportPayload.stopped_speed_threshold = parseFloat(event.target.value)\n }\n function updateIsActive(event: Event & { target: HTMLInputElement }) {\n sportPayload.is_active = event.target.checked\n }\n function resetSportPayload() {\n sportPayload.sport_id = 0\n sportPayload.color = null\n sportPayload.is_active = true\n sportPayload.stopped_speed_threshold = 1\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n }\n function updateSport(event: Event) {\n event.preventDefault()\n store.dispatch(\n AUTH_USER_STORE.ACTIONS.UPDATE_USER_SPORT_PREFERENCES,\n sportPayload\n )\n }\n function resetSport(event: Event, sportId: number) {\n event.preventDefault()\n store.dispatch(\n AUTH_USER_STORE.ACTIONS.RESET_USER_SPORT_PREFERENCES,\n sportId\n )\n }\n\n watch(\n () => loading.value,\n (newIsLoading) => {\n if (!newIsLoading && !errorMessages.value) {\n resetSportPayload()\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/sports')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/profile/edit/sports')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_SPORTS_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]),\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.COLOR')), 1),\n _createElementVNode(\"th\", _hoisted_6, _toDisplayString(_ctx.$t('workouts.SPORT', 0)), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('workouts.WORKOUT', 0)), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.IS_ACTIVE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD')), 1),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"th\", _hoisted_7, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.ACTION')), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: sport.id\n }, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.COLOR')), 1),\n (isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"sport-color\",\n type: \"color\",\n value: sportPayload.color,\n onInput: updateColor\n }, null, 40, _hoisted_9))\n : (_openBlock(), _createBlock(_component_SportImage, {\n key: 1,\n title: sport.translatedLabel,\n \"sport-label\": sport.label,\n color: sport.color ? sport.color : _unref(sportColors)[sport.label]\n }, null, 8, [\"title\", \"sport-label\", \"color\"]))\n ]),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"sport-label\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.LABEL')), 1),\n _createTextVNode(\" \" + _toDisplayString(sport.translatedLabel) + \" \", 1),\n (!sport.is_active)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, \" (\" + _toDisplayString(_ctx.$t('user.PROFILE.SPORT.DISABLED_BY_ADMIN')) + \") \", 1))\n : _createCommentVNode(\"\", true),\n (_unref(loading) && isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"i\", _hoisted_12))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages) && sportPayload.sport_id === sport.id)\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 2,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('workouts.WORKOUT', 0)), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${\n _unref(user).sports_list.includes(sport.id) ? '-check' : ''\n }`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.IS_ACTIVE')), 1),\n (isSportInEdition(sport.id) && sport.is_active)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n type: \"checkbox\",\n checked: sport.is_active_for_user,\n onChange: updateIsActive\n }, null, 40, _hoisted_15))\n : (_openBlock(), _createElementBlock(\"i\", {\n key: 1,\n class: _normalizeClass(`fa fa${sport.is_active_for_user ? '-check' : ''}`),\n \"aria-hidden\": \"true\"\n }, null, 2))\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD')), 1),\n (isSportInEdition(sport.id) && sport.is_active)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"threshold-input\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: sportPayload.stopped_speed_threshold,\n onInput: updateThreshold\n }, null, 40, _hoisted_17))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_18, _toDisplayString(sport.stopped_speed_threshold), 1))\n ], 2),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"td\", _hoisted_19, [\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.ACTION')), 1),\n (sportPayload.sport_id === 0)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n onClick: ($event: any) => (updateSportInEdition(sport))\n }, _toDisplayString(_ctx.$t('buttons.EDIT')), 9, _hoisted_21))\n : _createCommentVNode(\"\", true),\n (isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_22, [\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: updateSport\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_23),\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: (e) => resetSport(e, sport.id)\n }, _toDisplayString(_ctx.$t('buttons.RESET')), 9, _hoisted_24),\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateSportInEdition(null)))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_25)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n }), 128))\n ])\n ]),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_26, [\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/sports')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_27, [\n _createElementVNode(\"button\", {\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.$router.push('/profile/edit/sports')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_SPORTS_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./UserSportPreferences.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserSportPreferences.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserSportPreferences.vue?vue&type=style&index=0&id=74e52489&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74e52489\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74257266\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"about-text\" }\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-book fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = {\n href: \"https://samr1.github.io/FitTrackee/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-github fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_6 = {\n href: \"https://github.com/SamR1/FitTrackee\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-balance-scale fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://choosealicense.com/licenses/agpl-3.0/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}, \" AGPLv3 \", -1))\nconst _hoisted_9 = { key: 0 }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-envelope-o fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = [\"href\"]\n\nimport { ComputedRef, computed, capitalize } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'About',\n setup(__props) {\n\n const store = useStore()\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"p\", {\n class: \"error-message\",\n innerHTML: _ctx.$t('about.FITTRACKEE_DESCRIPTION')\n }, null, 8, _hoisted_2),\n _createElementVNode(\"p\", null, [\n _hoisted_3,\n _createElementVNode(\"a\", _hoisted_4, _toDisplayString(capitalize(_ctx.$t('common.DOCUMENTATION'))), 1)\n ]),\n _createElementVNode(\"p\", null, [\n _hoisted_5,\n _createElementVNode(\"a\", _hoisted_6, _toDisplayString(_ctx.$t('about.SOURCE_CODE')), 1)\n ]),\n _createElementVNode(\"p\", null, [\n _hoisted_7,\n _createVNode(_component_i18n_t, { keypath: \"about.FITTRACKEE_LICENSE\" }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n })\n ]),\n (_unref(appConfig).admin_contact)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _hoisted_10,\n _createElementVNode(\"a\", {\n href: `mailto:${_unref(appConfig).admin_contact}`\n }, _toDisplayString(_ctx.$t('about.CONTACT_ADMIN')), 9, _hoisted_11)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./About.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./About.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./About.vue?vue&type=style&index=0&id=74257266&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74257266\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./BikePic.vue?vue&type=template&id=795f7f5f&scoped=true\"\nconst script = {}\n\nimport \"./BikePic.vue?vue&type=style&index=0&id=795f7f5f&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-795f7f5f\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-bffb50d0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"about\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = { class: \"container-sub\" }\nconst _hoisted_4 = { class: \"container-sub about-details\" }\n\nimport About from '@/components/About.vue'\n import BikePic from '@/components/BikePic.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'AboutView',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(BikePic)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(About)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./AboutView.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./AboutView.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./AboutView.vue?vue&type=style&index=0&id=bffb50d0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-bffb50d0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-96abcc38\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"timeline-workout\" }\nconst _hoisted_2 = { class: \"box\" }\nconst _hoisted_3 = { class: \"workout-user-date\" }\nconst _hoisted_4 = { class: \"workout-user\" }\nconst _hoisted_5 = [\"title\"]\nconst _hoisted_6 = { key: 0 }\nconst _hoisted_7 = {\n key: 1,\n class: \"no-map\"\n}\nconst _hoisted_8 = { class: \"img\" }\nconst _hoisted_9 = { class: \"data\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-clock-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { key: 0 }\nconst _hoisted_12 = { class: \"data\" }\nconst _hoisted_13 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-road\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_14 = {\n key: 0,\n class: \"data elevation\"\n}\nconst _hoisted_15 = [\"alt\"]\nconst _hoisted_16 = { class: \"data-values\" }\nconst _hoisted_17 = {\n key: 1,\n class: \"data altitude\"\n}\nconst _hoisted_18 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-location-arrow\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_19 = { class: \"data-values\" }\n\nimport { Locale, formatDistance } from 'date-fns'\n import { ComputedRef, computed, toRefs, withDefaults } from 'vue'\n\n import StaticMap from '@/components/Common/StaticMap.vue'\n import UserPicture from '@/components/User/UserPicture.vue'\n import { ROOT_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkout } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n user: IUserProfile\n useImperialUnits: boolean\n workout?: IWorkout\n sport?: ISport\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutCard',\n props: {\n user: null,\n useImperialUnits: { type: Boolean },\n workout: { default: () => ({} as IWorkout) },\n sport: { default: () => ({} as ISport) }\n },\n setup(__props: any) {\n\nconst props = __props as { user: IUserProfile, useImperialUnits: boolean, workout: IWorkout, sport: ISport }\n\n \n\n const store = useStore()\n\n const { user, workout, sport, useImperialUnits } = toRefs(props)\n const locale: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LOCALE]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n (_unref(user).username)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"workout-user-name\",\n to: {\n name: 'User',\n params: { username: _unref(user).username },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(user).username), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"workout-title\",\n to: {\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(workout).title), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true),\n (_unref(workout).workout_date && _unref(user))\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"workout-date\",\n title: \n _unref(formatDate)(_unref(workout).workout_date, _unref(user).timezone, _unref(user).date_format)\n \n }, _toDisplayString(_unref(formatDistance)(new Date(_unref(workout).workout_date), new Date(), {\n addSuffix: true,\n locale: _unref(locale),\n })), 9, _hoisted_5))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-map\", { 'no-cursor': !_unref(workout) }]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _unref(workout).id\n ? _ctx.$router.push({\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n })\n : null\n ))\n }, [\n (_unref(workout))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n (_unref(workout).with_gpx)\n ? (_openBlock(), _createBlock(StaticMap, {\n key: 0,\n workout: _unref(workout)\n }, null, 8, [\"workout\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.NO_MAP')), 1))\n ]))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-data\", { 'without-gpx': _unref(workout) && !_unref(workout).with_gpx }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (\n _unref(workout).id\n ? _ctx.$router.push({\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n })\n : null\n ))\n }, [\n _createElementVNode(\"div\", _hoisted_8, [\n (_unref(sport).label)\n ? (_openBlock(), _createBlock(_component_SportImage, {\n key: 0,\n \"sport-label\": _unref(sport).label,\n color: _unref(sport).color\n }, null, 8, [\"sport-label\", \"color\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n (_unref(workout))\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, _toDisplayString(_unref(workout).moving), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _hoisted_13,\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).distance,\n digits: 3,\n unitFrom: \"km\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(workout) && _unref(workout).with_gpx)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n _createElementVNode(\"img\", {\n class: \"mountains\",\n src: \"/img/workouts/mountains.svg\",\n alt: _ctx.$t('workouts.ELEVATION')\n }, null, 8, _hoisted_15),\n _createElementVNode(\"div\", _hoisted_16, [\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).min_alt,\n unitFrom: \"m\",\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\"/ \"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 1,\n distance: _unref(workout).max_alt,\n unitFrom: \"m\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(workout) && _unref(workout).with_gpx)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _hoisted_18,\n _createElementVNode(\"div\", _hoisted_19, [\n _createTextVNode(\" +\"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).ascent,\n unitFrom: \"m\",\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\"/- \"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 1,\n distance: _unref(workout).descent,\n unitFrom: \"m\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./WorkoutCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutCard.vue?vue&type=style&index=0&id=96abcc38&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-96abcc38\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-35567bf2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"timeline\" }\nconst _hoisted_2 = { class: \"section-title\" }\nconst _hoisted_3 = { key: 0 }\nconst _hoisted_4 = { key: 1 }\nconst _hoisted_5 = {\n key: 1,\n class: \"more-workouts\"\n}\n\nimport { ComputedRef, computed, ref, onBeforeMount, toRefs } from 'vue'\n\n import WorkoutCard from '@/components/Workout/WorkoutCard.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkout } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n sports: ISport[]\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Timeline',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IUserProfile\n }\n\n \n\n const store = useStore()\n\n const { sports, user } = toRefs(props)\n const page = ref(1)\n const per_page = 5\n const initWorkoutsCount =\n props.user.nb_workouts >= per_page ? per_page : props.user.nb_workouts\n onBeforeMount(() => loadWorkouts())\n const workouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.TIMELINE_WORKOUTS]\n )\n const moreWorkoutsExist: ComputedRef = computed(() =>\n workouts.value.length > 0\n ? workouts.value[workouts.value.length - 1].previous_workout !== null\n : false\n )\n\n function loadWorkouts() {\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_TIMELINE_WORKOUTS, {\n page: page.value,\n per_page,\n ...defaultOrder,\n })\n }\n function loadMoreWorkouts() {\n page.value += 1\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_MORE_TIMELINE_WORKOUTS, {\n page: page.value,\n per_page,\n ...defaultOrder,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('workouts.LATEST_WORKOUTS')), 1),\n (_unref(user).nb_workouts > 0 && _unref(workouts).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList([...Array(_unref(initWorkoutsCount)).keys()], (index) => {\n return (_openBlock(), _createBlock(WorkoutCard, {\n user: _unref(user),\n useImperialUnits: _unref(user).imperial_units,\n key: index\n }, null, 8, [\"user\", \"useImperialUnits\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout) => {\n return (_openBlock(), _createBlock(WorkoutCard, {\n workout: workout,\n sport: \n _unref(workouts).length > 0\n ? _unref(sports).filter((s) => s.id === workout.sport_id)[0]\n : null\n ,\n user: _unref(user),\n useImperialUnits: _unref(user).imperial_units,\n key: workout.id\n }, null, 8, [\"workout\", \"sport\", \"user\", \"useImperialUnits\"]))\n }), 128)),\n (_unref(workouts).length === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true),\n (_unref(moreWorkoutsExist))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"button\", { onClick: loadMoreWorkouts }, _toDisplayString(_ctx.$t('workouts.LOAD_MORE_WORKOUT')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n}\n}\n\n})","import script from \"./Timeline.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Timeline.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Timeline.vue?vue&type=style&index=0&id=35567bf2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-35567bf2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = [\"title\"]\n\nimport { toRefs } from 'vue'\n\n import { IWorkout } from '@/types/workouts'\n interface Props {\n displayHARecord: boolean\n workout: IWorkout\n sportLabel: string\n sportColor: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkout',\n props: {\n displayHARecord: { type: Boolean },\n workout: null,\n sportLabel: null,\n sportColor: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n displayHARecord: boolean\n workout: IWorkout\n sportLabel: string\n sportColor: string | null\n }\n\n \n\n const { displayHARecord, workout, sportLabel, sportColor } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"calendar-workout\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _ctx.$router.push({ name: 'Workout', params: { workoutId: _unref(workout).id } })\n ))\n }, [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(sportLabel),\n title: _unref(workout).title,\n color: _unref(sportColor)\n }, null, 8, [\"sport-label\", \"title\", \"color\"]),\n _createElementVNode(\"sup\", null, [\n (_unref(workout).records.length > 0)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-trophy custom-fa-small\",\n \"aria-hidden\": \"true\",\n title: \n _unref(workout).records\n .filter((record) =>\n _unref(displayHARecord) ? true : record.record_type !== 'HA'\n )\n .map((record) => ` ${_ctx.$t(`workouts.RECORD_${record.record_type}`)}`)\n \n }, null, 8, _hoisted_1))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkout.vue?vue&type=style&index=0&id=331e1c8b&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"donut-chart\" }\nconst _hoisted_2 = {\n height: \"34\",\n width: \"34\",\n viewBox: \"0 0 34 34\"\n}\nconst _hoisted_3 = [\"stroke\", \"stroke-dashoffset\", \"transform\"]\n\nimport { toRefs } from 'vue'\n\n interface Props {\n colors: Record\n datasets: Record>\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'DonutChart',\n props: {\n colors: null,\n datasets: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n colors: Record\n datasets: Record>\n }\n\n \n\n const { colors, datasets } = toRefs(props)\n let angleOffset = -90\n const cx = 16\n const cy = 16\n const radius = 14\n const circumference = 2 * Math.PI * radius\n\n function calculateStrokeDashOffset(\n percentage: number,\n circumference: number\n ): number {\n return circumference - percentage * circumference\n }\n function returnCircleTransformValue(\n index: number,\n percentage: number\n ): string {\n const rotation = `rotate(${angleOffset}, ${cx}, ${cy})`\n angleOffset = percentage * 360 + angleOffset\n return rotation\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(Object.entries(_unref(datasets)), (data, index) => {\n return (_openBlock(), _createElementBlock(\"g\", { key: index }, [\n _createElementVNode(\"circle\", {\n cx: cx,\n cy: cy,\n r: radius,\n fill: \"transparent\",\n stroke: _unref(colors)[+data[0]],\n \"stroke-dashoffset\": \n calculateStrokeDashOffset(data[1].percentage, circumference)\n ,\n \"stroke-dasharray\": circumference,\n \"stroke-width\": \"3\",\n \"stroke-opacity\": \"0.8\",\n transform: returnCircleTransformValue(index, data[1].percentage)\n }, null, 8, _hoisted_3)\n ]))\n }), 128))\n ]))\n ]))\n}\n}\n\n})","import script from \"./DonutChart.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./DonutChart.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-52d4310a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"calendar-workouts-chart\" }\nconst _hoisted_2 = { class: \"workouts-count\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workouts-pane\"\n}\nconst _hoisted_4 = { class: \"more-workouts\" }\n\nimport { ref, toRefs } from 'vue'\n\n import CalendarWorkout from '@/components/Dashboard/UserCalendar/CalendarWorkout.vue'\n import DonutChart from '@/components/Dashboard/UserCalendar/DonutChart.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getSportColor, getSportLabel } from '@/utils/sports'\n\n interface Props {\n colors: Record\n datasets: Record>\n sports: ISport[]\n workouts: IWorkout[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkoutsChart',\n props: {\n colors: null,\n datasets: null,\n sports: null,\n workouts: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n colors: Record\n datasets: Record>\n sports: ISport[]\n workouts: IWorkout[]\n }\n\n \n\n const { colors, datasets, sports, workouts } = toRefs(props)\n const isHidden = ref(true)\n\n function togglePane(event: Event & { target: HTMLElement }) {\n event.stopPropagation()\n isHidden.value = !isHidden.value\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _directive_click_outside = _resolveDirective(\"click-outside\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"workouts-chart\",\n onClick: togglePane\n }, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_unref(workouts).length), 1),\n _createVNode(DonutChart, {\n datasets: _unref(datasets),\n colors: _unref(colors)\n }, null, 8, [\"datasets\", \"colors\"])\n ]),\n (!isHidden.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"i\", {\n class: \"fa fa-times calendar-more\",\n \"aria-hidden\": \"true\",\n onClick: togglePane\n }),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout, index) => {\n return (_openBlock(), _createBlock(CalendarWorkout, {\n key: index,\n workout: workout,\n sportLabel: _unref(getSportLabel)(workout, _unref(sports)),\n sportColor: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"workout\", \"sportLabel\", \"sportColor\"]))\n }), 128))\n ])), [\n [_directive_click_outside, togglePane]\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkoutsChart.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkoutsChart.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkoutsChart.vue?vue&type=style&index=0&id=52d4310a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-52d4310a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-workouts\" }\nconst _hoisted_2 = { class: \"desktop-display\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workouts-display\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"donut-display\"\n}\nconst _hoisted_5 = { class: \"mobile-display\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"donut-display\"\n}\n\nimport { computed, toRefs } from 'vue'\n\n import CalendarWorkout from '@/components/Dashboard/UserCalendar/CalendarWorkout.vue'\n import CalendarWorkoutsChart from '@/components/Dashboard/UserCalendar/CalendarWorkoutsChart.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getSportColor, getSportLabel, sportIdColors } from '@/utils/sports'\n import { getDonutDatasets } from '@/utils/workouts'\n\n interface Props {\n displayHARecord: boolean\n workouts: IWorkout[]\n sports: ISport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkouts',\n props: {\n displayHARecord: { type: Boolean },\n workouts: null,\n sports: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n displayHARecord: boolean\n workouts: IWorkout[]\n sports: ISport[]\n }\n\n \n\n const { displayHARecord, workouts, sports } = toRefs(props)\n const chartDatasets = computed(() => getDonutDatasets(props.workouts))\n const colors = computed(() => sportIdColors(props.sports))\n const displayedWorkoutCount = 6\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(workouts).length <= displayedWorkoutCount)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts).slice(0, displayedWorkoutCount), (workout, index) => {\n return (_openBlock(), _createBlock(CalendarWorkout, {\n key: index,\n displayHARecord: _unref(displayHARecord),\n workout: workout,\n sportLabel: _unref(getSportLabel)(workout, _unref(sports)),\n sportColor: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"displayHARecord\", \"workout\", \"sportLabel\", \"sportColor\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(CalendarWorkoutsChart, {\n workouts: _unref(workouts),\n sports: _unref(sports),\n datasets: _unref(chartDatasets),\n colors: _unref(colors)\n }, null, 8, [\"workouts\", \"sports\", \"datasets\", \"colors\"])\n ]))\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n (_unref(workouts).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(CalendarWorkoutsChart, {\n workouts: _unref(workouts),\n sports: _unref(sports),\n datasets: _unref(chartDatasets),\n colors: _unref(colors)\n }, null, 8, [\"workouts\", \"sports\", \"datasets\", \"colors\"])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkouts.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkouts.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkouts.vue?vue&type=style&index=0&id=5aab7455&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-cells\" }\nconst _hoisted_2 = { class: \"calendar-cell-day\" }\n\nimport { addDays, format, isSameDay, isSameMonth, isToday } from 'date-fns'\n import { Ref, ref, toRefs, watch, onMounted } from 'vue'\n\n import CalendarWorkouts from '@/components/Dashboard/UserCalendar/CalendarWorkouts.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getDateWithTZ } from '@/utils/dates'\n\n interface Props {\n currentDay: Date\n displayHARecord: boolean\n endDate: Date\n sports: ISport[]\n startDate: Date\n timezone: string\n weekStartingMonday: boolean\n workouts: IWorkout[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarCells',\n props: {\n currentDay: null,\n displayHARecord: { type: Boolean },\n endDate: null,\n sports: null,\n startDate: null,\n timezone: null,\n weekStartingMonday: { type: Boolean },\n workouts: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n currentDay: Date\n displayHARecord: boolean\n endDate: Date\n sports: ISport[]\n startDate: Date\n timezone: string\n weekStartingMonday: boolean\n workouts: IWorkout[]\n }\n\n \n\n const {\n currentDay,\n displayHARecord,\n endDate,\n sports,\n startDate,\n timezone,\n weekStartingMonday,\n workouts,\n } = toRefs(props)\n const rows: Ref = ref([])\n\n onMounted(() => getDays())\n\n function getDays() {\n rows.value = []\n let day = startDate.value\n while (day <= endDate.value) {\n const days: Date[] = []\n for (let i = 0; i < 7; i++) {\n days.push(day)\n day = addDays(day, 1)\n }\n rows.value.push(days)\n }\n }\n function isWeekEnd(day: number): boolean {\n return weekStartingMonday.value\n ? [5, 6].includes(day)\n : [0, 6].includes(day)\n }\n function filterWorkouts(day: Date, workouts: IWorkout[]) {\n if (workouts) {\n return workouts\n .filter((workout) =>\n isSameDay(getDateWithTZ(workout.workout_date, timezone.value), day)\n )\n .reverse()\n }\n return []\n }\n\n watch(\n () => props.currentDay,\n () => getDays()\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(rows.value, (row, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"calendar-row\",\n key: index\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(row, (day, i) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"calendar-cell\", {\n 'disabled-cell': !_unref(isSameMonth)(day, _unref(currentDay)),\n 'week-end': isWeekEnd(i),\n today: _unref(isToday)(day),\n }]),\n key: i\n }, [\n _createVNode(CalendarWorkouts, {\n workouts: filterWorkouts(day, _unref(workouts)),\n sports: _unref(sports),\n displayHARecord: _unref(displayHARecord)\n }, null, 8, [\"workouts\", \"sports\", \"displayHARecord\"]),\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_unref(format)(day, 'd')), 1)\n ], 2))\n }), 128))\n ]))\n }), 128))\n ]))\n}\n}\n\n})","import script from \"./CalendarCells.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarCells.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarCells.vue?vue&type=style&index=0&id=34b99f0e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-days\" }\n\nimport { Locale, format, addDays } from 'date-fns'\n\n interface Props {\n startDate: Date\n localeOptions: Locale\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarDays',\n props: {\n startDate: null,\n localeOptions: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n startDate: Date\n localeOptions: Locale\n }\n\n \n\n const days = []\n for (let i = 0; i < 7; i++) {\n days.push(addDays(props.startDate, i))\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(days, (day, index) => {\n return _createElementVNode(\"div\", {\n class: \"calendar-day\",\n key: index\n }, _toDisplayString(_unref(format)(day, 'EEE', { locale: __props.localeOptions })), 1)\n }), 64))\n ]))\n}\n}\n\n})","import script from \"./CalendarDays.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarDays.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarDays.vue?vue&type=style&index=0&id=4f3dc99e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, unref as _unref, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-header\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\nconst _hoisted_4 = { class: \"calendar-month\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_6 = [\n _hoisted_5\n]\n\nimport { Locale, format } from 'date-fns'\n import { toRefs } from 'vue'\n\n interface Props {\n day: Date\n localeOptions: Locale\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarHeader',\n props: {\n day: null,\n localeOptions: null\n },\n emits: ['displayNextMonth', 'displayPreviousMonth'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n day: Date\n localeOptions: Locale\n }\n\n \n\n \n\n const { day, localeOptions } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"calendar-arrow calendar-arrow-left\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('displayPreviousMonth')))\n }, _hoisted_3),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(format)(_unref(day), 'MMM yyyy', { locale: _unref(localeOptions) })), 1)\n ]),\n _createElementVNode(\"div\", {\n class: \"calendar-arrow calendar-arrow-right\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('displayNextMonth')))\n }, _hoisted_6)\n ]))\n}\n}\n\n})","import script from \"./CalendarHeader.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarHeader.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarHeader.vue?vue&type=style&index=0&id=79a65a70&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-calendar\" }\nconst _hoisted_2 = { class: \"calendar-card box\" }\n\nimport { Locale, addMonths, format, subMonths } from 'date-fns'\n import { ComputedRef, computed, ref, toRefs, onBeforeMount } from 'vue'\n\n import CalendarCells from '@/components/Dashboard/UserCalendar/CalendarCells.vue'\n import CalendarDays from '@/components/Dashboard/UserCalendar/CalendarDays.vue'\n import CalendarHeader from '@/components/Dashboard/UserCalendar/CalendarHeader.vue'\n import { ROOT_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkout, TWorkoutsPayload } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { getCalendarStartAndEnd } from '@/utils/dates'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const { sports, user } = toRefs(props)\n const dateFormat = 'yyyy-MM-dd'\n const day = ref(new Date())\n const calendarDates = ref(getCalendarStartAndEnd(day.value, props.user.weekm))\n const calendarWorkouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.CALENDAR_WORKOUTS]\n )\n const localeOptions: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LOCALE]\n )\n\n onBeforeMount(() => getCalendarWorkouts())\n\n function getCalendarWorkouts() {\n calendarDates.value = getCalendarStartAndEnd(day.value, props.user.weekm)\n const apiParams: TWorkoutsPayload = {\n from: format(calendarDates.value.start, dateFormat),\n to: format(calendarDates.value.end, dateFormat),\n page: 1,\n per_page: 100,\n ...defaultOrder,\n }\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_CALENDAR_WORKOUTS, apiParams)\n }\n function displayNextMonth() {\n day.value = addMonths(day.value, 1)\n getCalendarWorkouts()\n }\n function displayPreviousMonth() {\n day.value = subMonths(day.value, 1)\n getCalendarWorkouts()\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(CalendarHeader, {\n day: day.value,\n \"locale-options\": _unref(localeOptions),\n onDisplayNextMonth: displayNextMonth,\n onDisplayPreviousMonth: displayPreviousMonth\n }, null, 8, [\"day\", \"locale-options\"]),\n _createVNode(CalendarDays, {\n \"start-date\": calendarDates.value.start,\n \"locale-options\": _unref(localeOptions)\n }, null, 8, [\"start-date\", \"locale-options\"]),\n _createVNode(CalendarCells, {\n currentDay: day.value,\n displayHARecord: _unref(user).display_ascent,\n \"end-date\": calendarDates.value.end,\n sports: _unref(sports),\n \"start-date\": calendarDates.value.start,\n timezone: _unref(user).timezone,\n workouts: _unref(calendarWorkouts),\n weekStartingMonday: _unref(user).weekm\n }, null, 8, [\"currentDay\", \"displayHARecord\", \"end-date\", \"sports\", \"start-date\", \"timezone\", \"workouts\", \"weekStartingMonday\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=3e7444d9&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1bcddc12\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"user-month-stats\" }\n\nimport { endOfMonth, startOfMonth } from 'date-fns'\n import { toRefs } from 'vue'\n\n import StatChart from '@/components/Common/StatsChart/index.vue'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n\n interface Props {\n sports: ISport[]\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserMonthStats',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IUserProfile\n }\n\n \n\n const { sports, user } = toRefs(props)\n const date = new Date()\n const chartParams = {\n duration: 'week',\n start: startOfMonth(date),\n end: endOfMonth(date),\n }\n const selectedSportIds = props.sports.map((sport) => sport.id)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('dashboard.THIS_MONTH')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(StatChart, {\n sports: _unref(sports),\n user: _unref(user),\n \"chart-params\": chartParams,\n \"displayed-sport-ids\": _unref(selectedSportIds),\n \"hide-chart-if-no-data\": true\n }, null, 8, [\"sports\", \"user\", \"displayed-sport-ids\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./UserMonthStats.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserMonthStats.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserMonthStats.vue?vue&type=style&index=0&id=1bcddc12&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1bcddc12\"]])\n\nexport default __exports__","import createI18n from '@/i18n'\nimport { ITranslatedSport } from '@/types/sports'\nimport { TUnit } from '@/types/units'\nimport { ICardRecord, IRecord, IRecordsBySports } from '@/types/workouts'\nimport { formatDate, getDateFormat } from '@/utils/dates'\nimport { convertDistance, units } from '@/utils/units'\n\nconst { locale } = createI18n.global\n\nexport const formatRecord = (\n record: IRecord,\n tz: string,\n useImperialUnits: boolean,\n date_format: string\n): Record => {\n const distanceUnitFrom: TUnit = 'km'\n const distanceUnitTo: TUnit = useImperialUnits\n ? units[distanceUnitFrom].defaultTarget\n : distanceUnitFrom\n const ascentUnitFrom: TUnit = 'm'\n const ascentUnitTo: TUnit = useImperialUnits\n ? units[ascentUnitFrom].defaultTarget\n : ascentUnitFrom\n let value\n switch (record.record_type) {\n case 'AS':\n case 'MS':\n value = `${convertDistance(\n +record.value,\n distanceUnitFrom,\n distanceUnitTo,\n 2\n )} ${distanceUnitTo}/h`\n break\n case 'FD':\n value = `${convertDistance(\n +record.value,\n distanceUnitFrom,\n distanceUnitTo,\n 3\n )} ${distanceUnitTo}`\n break\n case 'HA':\n value = `${convertDistance(\n +record.value,\n ascentUnitFrom,\n ascentUnitTo,\n 2\n )} ${ascentUnitTo}`\n break\n case 'LD':\n value = record.value\n break\n default:\n throw new Error(\n `Invalid record type, expected: \"AS\", \"FD\", \"HA\", \"LD\", \"MD\", got: \"${record.record_type}\"`\n )\n }\n return {\n workout_date: formatDate(record.workout_date, tz, date_format, false),\n workout_id: record.workout_id,\n id: record.id,\n record_type: record.record_type,\n value: value,\n }\n}\n\nexport const sortRecords = (a: ICardRecord, b: ICardRecord): number => {\n const recordALabel = a.label.toLowerCase()\n const recordBLabel = b.label.toLowerCase()\n return recordALabel > recordBLabel ? 1 : recordALabel < recordBLabel ? -1 : 0\n}\n\nexport const getRecordsBySports = (\n records: IRecord[],\n translatedSports: ITranslatedSport[],\n tz: string,\n useImperialUnits: boolean,\n display_ascent: boolean,\n date_format: string\n): IRecordsBySports => {\n date_format = getDateFormat(date_format, locale.value)\n return records\n .filter((r) => (display_ascent ? true : r.record_type !== 'HA'))\n .reduce((sportList: IRecordsBySports, record) => {\n const sport = translatedSports.find((s) => s.id === record.sport_id)\n if (sport && sport.label) {\n if (sportList[sport.translatedLabel] === void 0) {\n sportList[sport.translatedLabel] = {\n label: sport.label,\n color: sport.color,\n records: [],\n }\n }\n sportList[sport.translatedLabel].records.push(\n formatRecord(record, tz, useImperialUnits, date_format)\n )\n }\n return sportList\n }, {})\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8d17c606\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"records-card\" }\nconst _hoisted_2 = { class: \"record-type\" }\nconst _hoisted_3 = { class: \"record-value\" }\nconst _hoisted_4 = { class: \"record-date\" }\n\nimport { toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ICardRecord, IRecord, IRecordsBySports } from '@/types/workouts'\n import { sortRecords } from '@/utils/records'\n\n interface Props {\n records: IRecordsBySports\n sportTranslatedLabel: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'RecordsCard',\n props: {\n records: null,\n sportTranslatedLabel: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n records: IRecordsBySports\n sportTranslatedLabel: string\n }\n\n \n\n const { records, sportTranslatedLabel } = toRefs(props)\n\n const { t } = useI18n()\n\n function getTranslatedRecords(records: IRecord[]): ICardRecord[] {\n const translatedRecords: ICardRecord[] = []\n records.map((record) => {\n translatedRecords.push({\n ...record,\n label: t(`workouts.RECORD_${record.record_type}`),\n })\n })\n return translatedRecords.sort(sortRecords)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(records).label,\n color: _unref(records).color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createTextVNode(\" \" + _toDisplayString(_unref(sportTranslatedLabel)), 1)\n ]),\n content: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(getTranslatedRecords(_unref(records).records), (record) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"record\",\n key: record.id\n }, [\n _createElementVNode(\"span\", _hoisted_2, _toDisplayString(record.label), 1),\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(record.value), 1),\n _createElementVNode(\"span\", _hoisted_4, [\n _createVNode(_component_router_link, {\n to: {\n name: 'Workout',\n params: { workoutId: record.workout_id },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(record.workout_date), 1)\n ]),\n _: 2\n }, 1032, [\"to\"])\n ])\n ]))\n }), 128))\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./RecordsCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RecordsCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./RecordsCard.vue?vue&type=style&index=0&id=8d17c606&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8d17c606\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-f0c85cb8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"user-records-section\" }\nconst _hoisted_2 = { class: \"section-title\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy custom-fa-small\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { class: \"user-records\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"no-records\"\n}\n\nimport { computed } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import RecordsCard from '@/components/Dashboard/UserRecords/RecordsCard.vue'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { getRecordsBySports } from '@/utils/records'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const recordsBySport = computed(() =>\n getRecordsBySports(\n props.user.records,\n translateSports(props.sports, t),\n props.user.timezone,\n props.user.imperial_units,\n props.user.display_ascent,\n props.user.date_format\n )\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.RECORD', 2)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n (Object.keys(_unref(recordsBySport)).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('workouts.NO_RECORDS')), 1))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(Object.keys(_unref(recordsBySport)).sort(), (sportTranslatedLabel) => {\n return (_openBlock(), _createBlock(RecordsCard, {\n sportTranslatedLabel: sportTranslatedLabel,\n records: _unref(recordsBySport)[sportTranslatedLabel],\n key: sportTranslatedLabel,\n useImperialUnits: __props.user.imperial_units\n }, null, 8, [\"sportTranslatedLabel\", \"records\", \"useImperialUnits\"]))\n }), 128))\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=f0c85cb8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-f0c85cb8\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-stats\" }\n\nimport { ComputedRef, computed, toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import StatCard from '@/components/Common/StatCard.vue'\n import { TUnit } from '@/types/units'\n import { IAuthUserProfile } from '@/types/user'\n import { convertDistance, units } from '@/utils/units'\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const { user } = toRefs(props)\n const userTotalDuration: ComputedRef = computed(\n () => props.user.total_duration\n )\n const totalDuration = computed(() => get_duration(userTotalDuration))\n const distanceUnitFrom: TUnit = 'km'\n const distanceUnitTo: TUnit = user.value.imperial_units\n ? units[distanceUnitFrom].defaultTarget\n : distanceUnitFrom\n const totalDistance: ComputedRef = computed(() =>\n user.value.imperial_units\n ? convertDistance(user.value.total_distance, distanceUnitFrom, distanceUnitTo, 2)\n : parseFloat(user.value.total_distance.toFixed(2)))\n const ascentUnitFrom: TUnit = 'm'\n const ascentUnitTo: TUnit = user.value.imperial_units\n ? units[ascentUnitFrom].defaultTarget\n : ascentUnitFrom\n const totalAscent: ComputedRef = computed(() =>\n user.value.imperial_units\n ? convertDistance(user.value.total_ascent, ascentUnitFrom, ascentUnitTo, 2)\n : parseFloat(user.value.total_ascent.toFixed(2)))\n\n\n function get_duration(total_duration: ComputedRef) {\n const duration = total_duration.value.match(/day/g)\n ? total_duration.value.split(', ')[1]\n : total_duration.value\n return {\n days: total_duration.value.match(/day/g)\n ? `${total_duration.value.split(' ')[0]} ${\n total_duration.value.match(/days/g)\n ? t('common.DAY', 2)\n : t('common.DAY', 1)\n }`\n : `0 ${t('common.DAY', 2)},`,\n duration: `${duration.split(':')[0]}h ${duration.split(':')[1]}min`,\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatCard, {\n icon: \"calendar\",\n value: _unref(user).nb_workouts,\n text: _ctx.$t('workouts.WORKOUT', _unref(user).nb_workouts)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"road\",\n value: _unref(totalDistance),\n text: _unref(distanceUnitTo) === 'mi' ? 'miles' : _unref(distanceUnitTo)\n }, null, 8, [\"value\", \"text\"]),\n (_unref(user).display_ascent)\n ? (_openBlock(), _createBlock(StatCard, {\n key: 0,\n icon: \"location-arrow\",\n value: _unref(totalAscent),\n text: _unref(ascentUnitTo) === 'ft' ? 'feet' : _unref(ascentUnitTo)\n }, null, 8, [\"value\", \"text\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(StatCard, {\n icon: \"clock-o\",\n value: _unref(totalDuration).days,\n text: _unref(totalDuration).duration\n }, null, 8, [\"value\", \"text\"]),\n (!_unref(user).display_ascent)\n ? (_openBlock(), _createBlock(StatCard, {\n key: 1,\n icon: \"tags\",\n value: _unref(user).nb_sports,\n text: _ctx.$t('workouts.SPORT', _unref(user).nb_sports)\n }, null, 8, [\"value\", \"text\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=22dcb990&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4c0893c1\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"dashboard\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container mobile-menu\" }\nconst _hoisted_3 = { class: \"box\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-calendar\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_5 = [\n _hoisted_4\n]\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-bar-chart\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = [\n _hoisted_6\n]\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-map-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_9 = [\n _hoisted_8\n]\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = [\n _hoisted_10\n]\nconst _hoisted_12 = { class: \"container\" }\nconst _hoisted_13 = { class: \"container dashboard-container\" }\nconst _hoisted_14 = { class: \"left-container dashboard-sub-container\" }\nconst _hoisted_15 = { class: \"right-container dashboard-sub-container\" }\nconst _hoisted_16 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\nconst _hoisted_17 = {\n key: 1,\n class: \"app-loading\"\n}\n\nimport { ComputedRef, Ref, computed, onBeforeMount, ref } from 'vue'\n\n import Timeline from '@/components/Dashboard/Timeline.vue'\n import UserCalendar from '@/components/Dashboard/UserCalendar/index.vue'\n import UserMonthStats from '@/components/Dashboard/UserMonthStats.vue'\n import UserRecords from '@/components/Dashboard/UserRecords/index.vue'\n import UserStatsCards from '@/components/Dashboard/UserStatsCards/index.vue'\n import { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Dashboard',\n setup(__props) {\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const isSelected: Ref = ref('calendar')\n\n onBeforeMount(() => store.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE))\n\n function updateDisplayColumn(target: string) {\n isSelected.value = target\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Loader = _resolveComponent(\"Loader\")!\n\n return (_unref(authUser).username && _unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'calendar' }]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (updateDisplayColumn('calendar')))\n }, _hoisted_5, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'chart' }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayColumn('chart')))\n }, _hoisted_7, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'timeline' }]),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (updateDisplayColumn('timeline')))\n }, _hoisted_9, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'records' }]),\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateDisplayColumn('records')))\n }, _hoisted_11, 2)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createVNode(UserStatsCards, { user: _unref(authUser) }, null, 8, [\"user\"])\n ]),\n _createElementVNode(\"div\", _hoisted_13, [\n _createElementVNode(\"div\", _hoisted_14, [\n _createVNode(UserMonthStats, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'chart') })\n }, null, 8, [\"sports\", \"user\", \"class\"]),\n _createVNode(UserRecords, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'records') })\n }, null, 8, [\"sports\", \"user\", \"class\"])\n ]),\n _createElementVNode(\"div\", _hoisted_15, [\n _createVNode(UserCalendar, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'calendar') })\n }, null, 8, [\"sports\", \"user\", \"class\"]),\n _createVNode(Timeline, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'timeline') })\n }, null, 8, [\"sports\", \"user\", \"class\"])\n ])\n ]),\n _hoisted_16\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createVNode(_component_Loader)\n ]))\n}\n}\n\n})","import script from \"./Dashboard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Dashboard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Dashboard.vue?vue&type=style&index=0&id=4c0893c1&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4c0893c1\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"not-found view\" }\n\nimport NotFound from '@/components/Common/NotFound.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'NotFoundView',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(NotFound)\n ]))\n}\n}\n\n})","import script from \"./NotFoundView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NotFoundView.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6a38125b\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"loginOrRegister\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = { class: \"container-sub\" }\nconst _hoisted_4 = { class: \"container-sub\" }\n\nimport { toRefs } from 'vue'\n\n import BikePic from '@/components/BikePic.vue'\n import LoginOrRegisterForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'LoginOrRegister',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(BikePic)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(LoginOrRegisterForm, { action: _unref(action) }, null, 8, [\"action\"])\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./LoginOrRegister.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./LoginOrRegister.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./LoginOrRegister.vue?vue&type=style&index=0&id=6a38125b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6a38125b\"]])\n\nexport default __exports__","import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'\n\nimport AdminApplication from '@/components/Administration/AdminApplication.vue'\nimport AdminMenu from '@/components/Administration/AdminMenu.vue'\nimport AdminSports from '@/components/Administration/AdminSports.vue'\nimport AdminUsers from '@/components/Administration/AdminUsers.vue'\nimport Profile from '@/components/User/ProfileDisplay/index.vue'\nimport UserInfos from '@/components/User/ProfileDisplay/UserInfos.vue'\nimport UserPreferences from '@/components/User/ProfileDisplay/UserPreferences.vue'\nimport ProfileEdition from '@/components/User/ProfileEdition/index.vue'\nimport UserAccountEdition from '@/components/User/ProfileEdition/UserAccountEdition.vue'\nimport UserInfosEdition from '@/components/User/ProfileEdition/UserInfosEdition.vue'\nimport UserPictureEdition from '@/components/User/ProfileEdition/UserPictureEdition.vue'\nimport UserPreferencesEdition from '@/components/User/ProfileEdition/UserPreferencesEdition.vue'\nimport AddUserApp from '@/components/User/UserApps/AddUserApp.vue'\nimport AuthorizeUserApp from '@/components/User/UserApps/AuthorizeUserApp.vue'\nimport UserApps from '@/components/User/UserApps/index.vue'\nimport UserApp from '@/components/User/UserApps/UserApp.vue'\nimport UserAppsList from '@/components/User/UserApps/UserAppsList.vue'\nimport UserSportPreferences from '@/components/User/UserSportPreferences.vue'\nimport store from '@/store'\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport AboutView from '@/views/AboutView.vue'\nimport Dashboard from '@/views/Dashboard.vue'\nimport NotFoundView from '@/views/NotFoundView.vue'\nimport LoginOrRegister from '@/views/user/LoginOrRegister.vue'\n\nconst getTabFromPath = (path: string): string => {\n const regex = /(\\/profile)(\\/edit)*(\\/*)/\n const tag = path.replace(regex, '').toUpperCase()\n return tag === '' ? 'PROFILE' : tag.toUpperCase()\n}\n\nconst routes: Array = [\n {\n path: '/',\n name: 'Dashboard',\n component: Dashboard,\n },\n {\n path: '/login',\n name: 'Login',\n component: LoginOrRegister,\n props: { action: 'login' },\n },\n {\n path: '/register',\n name: 'Register',\n component: LoginOrRegister,\n props: { action: 'register' },\n },\n {\n path: '/account-confirmation',\n name: 'AccountConfirmation',\n component: () =>\n import(\n /* webpackChunkName: 'profile' */ '@/views/user/AccountConfirmationView.vue'\n ),\n },\n {\n path: '/account-confirmation/resend',\n name: 'AccountConfirmationResend',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/AccountConfirmationResendView.vue'\n ),\n props: { action: 'account-confirmation-resend' },\n },\n {\n path: '/account-confirmation/email-sent',\n name: 'AccountConfirmationEmailSend',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/AccountConfirmationResendView.vue'\n ),\n props: { action: 'email-sent' },\n },\n {\n path: '/password-reset/sent',\n name: 'PasswordEmailSent',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'request-sent' },\n },\n {\n path: '/password-reset/request',\n name: 'PasswordResetRequest',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'reset-request' },\n },\n {\n path: '/password-reset/password-updated',\n name: 'PasswordUpdated',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'password-updated' },\n },\n {\n path: '/password-reset',\n name: 'PasswordReset',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'reset' },\n },\n {\n path: '/email-update',\n name: 'EmailUpdate',\n component: () =>\n import(\n /* webpackChunkName: 'profile' */ '@/views/user/EmailUpdateView.vue'\n ),\n },\n {\n path: '/profile',\n name: 'Profile',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/ProfileView.vue'),\n children: [\n {\n path: '',\n name: 'UserProfile',\n component: Profile,\n props: (route) => ({\n tab: getTabFromPath(route.path),\n }),\n children: [\n {\n path: '',\n name: 'UserInfos',\n component: UserInfos,\n },\n {\n path: 'preferences',\n name: 'UserPreferences',\n component: UserPreferences,\n },\n {\n path: 'sports',\n name: 'UserSportPreferences',\n component: UserSportPreferences,\n props: { isEdition: false },\n },\n {\n path: 'apps',\n name: 'UserApps',\n component: UserApps,\n children: [\n {\n path: '',\n name: 'UserAppsList',\n component: UserAppsList,\n },\n {\n path: ':id',\n name: 'UserApp',\n component: UserApp,\n },\n {\n path: ':id/created',\n name: 'CreatedUserApp',\n component: UserApp,\n props: { afterCreation: true },\n },\n {\n path: 'new',\n name: 'AddUserApp',\n component: AddUserApp,\n },\n {\n path: 'authorize',\n name: 'AuthorizeUserApp',\n component: AuthorizeUserApp,\n },\n ],\n },\n ],\n },\n {\n path: 'edit',\n name: 'UserProfileEdition',\n component: ProfileEdition,\n props: (route) => ({\n tab: getTabFromPath(route.path),\n }),\n children: [\n {\n path: '',\n name: 'UserInfosEdition',\n component: UserInfosEdition,\n },\n {\n path: 'account',\n name: 'UserAccountEdition',\n component: UserAccountEdition,\n },\n {\n path: 'picture',\n name: 'UserPictureEdition',\n component: UserPictureEdition,\n },\n {\n path: 'preferences',\n name: 'UserPreferencesEdition',\n component: UserPreferencesEdition,\n },\n {\n path: 'sports',\n name: 'UserSportPreferencesEdition',\n component: UserSportPreferences,\n props: { isEdition: true },\n },\n ],\n },\n ],\n },\n {\n path: '/statistics',\n name: 'Statistics',\n component: () =>\n import(/* webpackChunkName: 'statistics' */ '@/views/StatisticsView.vue'),\n },\n {\n path: '/users/:username',\n name: 'User',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/UserView.vue'),\n },\n {\n path: '/workouts',\n name: 'Workouts',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/WorkoutsView.vue'\n ),\n },\n {\n path: '/workouts/:workoutId',\n name: 'Workout',\n component: () =>\n import(/* webpackChunkName: 'workouts' */ '@/views/workouts/Workout.vue'),\n props: { displaySegment: false },\n },\n {\n path: '/workouts/:workoutId/edit',\n name: 'EditWorkout',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/EditWorkout.vue'\n ),\n },\n {\n path: '/workouts/:workoutId/segment/:segmentId',\n name: 'WorkoutSegment',\n component: () =>\n import(/* webpackChunkName: 'workouts' */ '@/views/workouts/Workout.vue'),\n props: { displaySegment: true },\n },\n {\n path: '/workouts/add',\n name: 'AddWorkout',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/AddWorkout.vue'\n ),\n },\n {\n path: '/admin',\n name: 'Administration',\n component: () =>\n import(/* webpackChunkName: 'admin' */ '@/views/AdminView.vue'),\n children: [\n {\n path: '',\n name: 'AdministrationMenu',\n component: AdminMenu,\n },\n {\n path: 'application',\n name: 'ApplicationAdministration',\n component: AdminApplication,\n },\n {\n path: 'application/edit',\n name: 'ApplicationAdministrationEdition',\n component: AdminApplication,\n props: { edition: true },\n },\n {\n path: 'sports',\n name: 'SportsAdministration',\n component: AdminSports,\n },\n {\n path: 'users/:username',\n name: 'UserFromAdmin',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/UserView.vue'),\n props: { fromAdmin: true },\n },\n {\n path: 'users',\n name: 'UsersAdministration',\n component: AdminUsers,\n },\n ],\n },\n {\n path: '/about',\n name: 'About',\n component: AboutView,\n },\n {\n path: '/:pathMatch(.*)*',\n name: 'not-found',\n component: NotFoundView,\n },\n]\n\nconst router = createRouter({\n history: createWebHistory(process.env.BASE_URL),\n routes,\n})\n\nconst pathsWithoutAuthentication = [\n '/login',\n '/password-reset',\n '/password-reset/password-updated',\n '/password-reset/request',\n '/password-reset/sent',\n '/register',\n '/account-confirmation',\n '/account-confirmation/resend',\n '/account-confirmation/email-sent',\n]\n\nconst pathsWithoutChecks = ['/email-update', '/about']\n\nrouter.beforeEach((to, from, next) => {\n store\n .dispatch(AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER)\n .then(() => {\n if (pathsWithoutChecks.includes(to.path)) {\n return next()\n }\n if (\n store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED] &&\n pathsWithoutAuthentication.includes(to.path)\n ) {\n return next('/')\n }\n if (\n !store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED] &&\n !pathsWithoutAuthentication.includes(to.path)\n ) {\n const path =\n to.path === '/'\n ? { path: '/login' }\n : { path: '/login', query: { from: to.fullPath } }\n next(path)\n } else {\n next()\n }\n })\n .catch((error) => {\n console.error(error)\n next()\n })\n})\n\nexport default router\n","export enum AuthUserActions {\n CHECK_AUTH_USER = 'CHECK_AUTH_USER',\n CONFIRM_ACCOUNT = 'CONFIRM_ACCOUNT',\n CONFIRM_EMAIL = 'CONFIRM_EMAIL',\n DELETE_ACCOUNT = 'DELETE_ACCOUNT',\n DELETE_PICTURE = 'DELETE_PICTURE',\n GET_USER_PROFILE = 'GET_USER_PROFILE',\n LOGIN_OR_REGISTER = 'LOGIN_OR_REGISTER',\n LOGOUT = 'LOGOUT',\n SEND_PASSWORD_RESET_REQUEST = 'SEND_PASSWORD_RESET_REQUEST',\n RESEND_ACCOUNT_CONFIRMATION_EMAIL = 'RESEND_ACCOUNT_CONFIRMATION_EMAIL',\n RESET_USER_PASSWORD = 'RESET_USER_PASSWORD',\n RESET_USER_SPORT_PREFERENCES = 'RESET_USER_SPORT_PREFERENCES',\n UPDATE_USER_ACCOUNT = 'UPDATE_USER_ACCOUNT',\n UPDATE_USER_PICTURE = 'UPDATE_USER_PICTURE',\n UPDATE_USER_PROFILE = 'UPDATE_USER_PROFILE',\n UPDATE_USER_PREFERENCES = 'UPDATE_USER_PREFERENCES',\n UPDATE_USER_SPORT_PREFERENCES = 'UPDATE_USER_SPORT_PREFERENCES',\n}\n\nexport enum AuthUserGetters {\n AUTH_TOKEN = 'AUTH_TOKEN',\n AUTH_USER_PROFILE = 'AUTH_USER_PROFILE',\n IS_ADMIN = 'IS_ADMIN',\n IS_AUTHENTICATED = 'IS_AUTHENTICATED',\n IS_SUCCESS = 'IS_SUCCESS',\n IS_REGISTRATION_SUCCESS = 'IS_REGISTRATION_SUCCESS',\n USER_LOADING = 'USER_LOADING',\n}\n\nexport enum AuthUserMutations {\n CLEAR_AUTH_USER_TOKEN = 'CLEAR_AUTH_USER_TOKEN',\n UPDATE_AUTH_TOKEN = 'UPDATE_AUTH_TOKEN',\n UPDATE_AUTH_USER_PROFILE = 'UPDATE_AUTH_USER_PROFILE',\n UPDATE_IS_SUCCESS = 'UPDATE_USER_IS_SUCCESS',\n UPDATE_IS_REGISTRATION_SUCCESS = 'UPDATE_IS_REGISTRATION_SUCCESS',\n UPDATE_USER_LOADING = 'UPDATE_USER_LOADING',\n}\n","export enum OAuth2Actions {\n AUTHORIZE_CLIENT = 'AUTHORIZE_CLIENT',\n CREATE_CLIENT = 'CREATE_CLIENT',\n DELETE_CLIENT = 'DELETE_CLIENT',\n GET_CLIENTS = 'GET_CLIENTS',\n GET_CLIENT_BY_CLIENT_ID = 'GET_CLIENT_BY_CLIENT_ID',\n GET_CLIENT_BY_ID = 'GET_CLIENT_BY_ID',\n REVOKE_ALL_TOKENS = 'REVOKE_ALL_TOKENS',\n}\n\nexport enum OAuth2Getters {\n CLIENT = 'CLIENT',\n CLIENTS = 'CLIENTS',\n CLIENTS_PAGINATION = 'CLIENTS_PAGINATION',\n REVOCATION_SUCCESSFUL = 'REVOCATION_SUCCESSFUL',\n}\n\nexport enum OAuth2Mutations {\n EMPTY_CLIENT = 'EMPTY_CLIENT',\n SET_CLIENT = 'SET_CLIENT',\n SET_CLIENTS = 'SET_CLIENTS',\n SET_CLIENTS_PAGINATION = 'SET_CLIENTS_PAGINATION',\n SET_REVOCATION_SUCCESSFUL = 'SET_REVOCATION_SUCCESSFUL',\n}\n","export enum RootActions {\n GET_APPLICATION_CONFIG = 'GET_APPLICATION_CONFIG',\n GET_APPLICATION_STATS = 'GET_APPLICATION_STATS',\n UPDATE_APPLICATION_CONFIG = 'UPDATE_APPLICATION_CONFIG',\n UPDATE_APPLICATION_LANGUAGE = 'UPDATE_APPLICATION_LANGUAGE',\n}\n\nexport enum RootGetters {\n APP_CONFIG = 'APP_CONFIG',\n APP_LOADING = 'APP_LOADING',\n APP_STATS = 'APP_STATS',\n ERROR_MESSAGES = 'ERROR_MESSAGES',\n LANGUAGE = 'LANGUAGE',\n LOCALE = 'LOCALE', // date-fns\n}\n\nexport enum RootMutations {\n EMPTY_ERROR_MESSAGES = 'EMPTY_ERROR_MESSAGES',\n SET_ERROR_MESSAGES = 'SET_ERROR_MESSAGES',\n UPDATE_APPLICATION_CONFIG = 'UPDATE_APPLICATION_CONFIG',\n UPDATE_APPLICATION_LOADING = 'UPDATE_APPLICATION_LOADING',\n UPDATE_APPLICATION_STATS = 'UPDATE_APPLICATION_STATS',\n UPDATE_LANG = 'UPDATE_LANG',\n}\n","export enum SportsActions {\n GET_SPORTS = 'GET_SPORTS',\n UPDATE_SPORTS = 'UPDATE_SPORTS',\n}\n\nexport enum SportsGetters {\n SPORTS = 'SPORTS',\n}\n\nexport enum SportsMutation {\n SET_SPORTS = 'SET_SPORTS',\n}\n","export enum StatisticsActions {\n GET_USER_STATS = 'GET_USER_STATS',\n}\n\nexport enum StatisticsGetters {\n USER_STATS = 'USER_STATS',\n}\n\nexport enum StatisticsMutations {\n EMPTY_USER_STATS = 'EMPTY_USER_STATS',\n UPDATE_USER_STATS = 'UPDATE_USER_STATS',\n}\n","export enum UsersActions {\n EMPTY_USER = 'EMPTY_USER',\n EMPTY_USERS = 'EMPTY_USERS',\n GET_USER = 'GET_USER',\n GET_USERS = 'GET_USERS',\n UPDATE_USER = 'UPDATE_USER',\n DELETE_USER_ACCOUNT = 'DELETE_USER_ACCOUNT',\n}\n\nexport enum UsersGetters {\n USER = 'USER',\n USERS = 'USERS',\n USERS_IS_SUCCESS = 'USERS_IS_SUCCESS',\n USERS_LOADING = 'USERS_LOADING',\n USERS_PAGINATION = 'USERS_PAGINATION',\n}\n\nexport enum UsersMutations {\n UPDATE_USER = 'UPDATE_USER',\n UPDATE_USER_IN_USERS = 'UPDATE_USER_IN_USERS',\n UPDATE_USERS = 'UPDATE_USERS',\n UPDATE_USERS_LOADING = 'UPDATE_USERS_LOADING',\n UPDATE_USERS_PAGINATION = 'UPDATE_USERS_PAGINATION',\n UPDATE_IS_SUCCESS = 'UPDATE_IS_SUCCESS',\n}\n","import {\n AuthUserActions,\n AuthUserGetters,\n AuthUserMutations,\n} from '@/store/modules/authUser/enums'\nimport {\n OAuth2Actions,\n OAuth2Getters,\n OAuth2Mutations,\n} from '@/store/modules/oauth2/enums'\nimport {\n RootActions,\n RootGetters,\n RootMutations,\n} from '@/store/modules/root/enums'\nimport {\n SportsActions,\n SportsGetters,\n SportsMutation,\n} from '@/store/modules/sports/enums'\nimport {\n StatisticsActions,\n StatisticsGetters,\n StatisticsMutations,\n} from '@/store/modules/statistics/enums'\nimport {\n UsersActions,\n UsersGetters,\n UsersMutations,\n} from '@/store/modules/users/enums'\nimport {\n WorkoutsActions,\n WorkoutsGetters,\n WorkoutsMutations,\n} from '@/store/modules/workouts/enums'\n\nexport const ROOT_STORE = {\n ACTIONS: RootActions,\n GETTERS: RootGetters,\n MUTATIONS: RootMutations,\n}\n\nexport const SPORTS_STORE = {\n ACTIONS: SportsActions,\n GETTERS: SportsGetters,\n MUTATIONS: SportsMutation,\n}\n\nexport const STATS_STORE = {\n ACTIONS: StatisticsActions,\n GETTERS: StatisticsGetters,\n MUTATIONS: StatisticsMutations,\n}\n\nexport const AUTH_USER_STORE = {\n ACTIONS: AuthUserActions,\n GETTERS: AuthUserGetters,\n MUTATIONS: AuthUserMutations,\n}\nexport const OAUTH2_STORE = {\n ACTIONS: OAuth2Actions,\n GETTERS: OAuth2Getters,\n MUTATIONS: OAuth2Mutations,\n}\n\nexport const USERS_STORE = {\n ACTIONS: UsersActions,\n GETTERS: UsersGetters,\n MUTATIONS: UsersMutations,\n}\n\nexport const WORKOUTS_STORE = {\n ACTIONS: WorkoutsActions,\n GETTERS: WorkoutsGetters,\n MUTATIONS: WorkoutsMutations,\n}\n","import axios from 'axios'\n\nimport { pendingRequests, removeRequestIfPending } from '@/api/pending'\nimport { getApiUrl } from '@/utils'\n\nconst api = axios.create({\n baseURL: getApiUrl(),\n})\n\napi.interceptors.request.use(\n (config) => {\n const controller = new AbortController()\n config.signal = controller.signal\n const requestKey = removeRequestIfPending(config)\n pendingRequests.set(requestKey, controller)\n return config\n },\n (error) => Promise.reject(error)\n)\n\napi.interceptors.response.use(\n (response) => {\n removeRequestIfPending(response.config)\n return response\n },\n (error) => {\n if (error.message !== 'canceled') {\n removeRequestIfPending(error.response.config)\n }\n return Promise.reject(error)\n }\n)\n\nexport default api\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { IUsersActions, IUsersState } from '@/store/modules/users/types'\nimport { TPaginationPayload } from '@/types/api'\nimport { IAdminUserPayload, IUserDeletionPayload } from '@/types/user'\nimport { handleError } from '@/utils'\n\nexport const deleteUserAccount = (\n context:\n | ActionContext\n | ActionContext,\n payload: IUserDeletionPayload\n): void => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .delete(`users/${payload.username}`)\n .then((res) => {\n if (res.status === 204) {\n if (payload.fromAdmin) {\n router.push('/admin/users')\n } else {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.LOGOUT)\n .then(() => router.push('/'))\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree & IUsersActions = {\n [USERS_STORE.ACTIONS.EMPTY_USER](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USER, {})\n },\n [USERS_STORE.ACTIONS.EMPTY_USERS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS, [])\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION, {})\n },\n [USERS_STORE.ACTIONS.GET_USER](\n context: ActionContext,\n username: string\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, true)\n authApi\n .get(`users/${username}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER,\n res.data.data.users[0]\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.GET_USERS](\n context: ActionContext,\n payload: TPaginationPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, true)\n authApi\n .get('users', { params: payload })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USERS,\n res.data.data.users\n )\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION,\n res.data.pagination\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.UPDATE_USER](\n context: ActionContext,\n payload: IAdminUserPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n const data: Record = {}\n if (payload.admin !== undefined) {\n data.admin = payload.admin\n }\n if (payload.resetPassword) {\n data.reset_password = payload.resetPassword\n }\n if (payload.activate) {\n data.activate = payload.activate\n }\n if (payload.new_email !== undefined) {\n data.new_email = payload.new_email\n }\n authApi\n .patch(`users/${payload.username}`, data)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER_IN_USERS,\n res.data.data.users[0]\n )\n if (payload.resetPassword || payload.new_email) {\n context.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n }\n if (payload.activate || payload.new_email) {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER,\n res.data.data.users[0]\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.DELETE_USER_ACCOUNT](\n context: ActionContext,\n payload: IUserDeletionPayload\n ): void {\n deleteUserAccount(context, {\n username: payload.username,\n fromAdmin: true,\n })\n },\n}\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport api from '@/api/defaultApi'\nimport router from '@/router'\nimport {\n AUTH_USER_STORE,\n ROOT_STORE,\n SPORTS_STORE,\n STATS_STORE,\n USERS_STORE,\n WORKOUTS_STORE,\n} from '@/store/constants'\nimport {\n IAuthUserActions,\n IAuthUserState,\n} from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { deleteUserAccount } from '@/store/modules/users/actions'\nimport {\n ILoginOrRegisterData,\n IUserAccountPayload,\n IUserDeletionPayload,\n IUserAccountUpdatePayload,\n IUserEmailPayload,\n IUserPasswordResetPayload,\n IUserPayload,\n IUserPicturePayload,\n IUserPreferencesPayload,\n IUserSportPreferencesPayload,\n} from '@/types/user'\nimport { handleError } from '@/utils'\n\nconst removeAuthUserData = (\n context: ActionContext\n) => {\n localStorage.removeItem('authToken')\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(STATS_STORE.MUTATIONS.EMPTY_USER_STATS)\n context.commit(AUTH_USER_STORE.MUTATIONS.CLEAR_AUTH_USER_TOKEN)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS, [])\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUTS)\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n router.push('/login')\n}\n\nexport const actions: ActionTree &\n IAuthUserActions = {\n [AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER](\n context: ActionContext\n ): void {\n if (\n window.localStorage.authToken &&\n !context.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n ) {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN,\n window.localStorage.authToken\n )\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n }\n // after logout in another tab\n if (\n !window.localStorage.authToken &&\n context.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n ) {\n removeAuthUserData(context)\n }\n },\n [AUTH_USER_STORE.ACTIONS.CONFIRM_ACCOUNT](\n context: ActionContext,\n payload: IUserAccountUpdatePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/account/confirm', { token: payload.token })\n .then((res) => {\n if (res.data.status === 'success') {\n const token = res.data.auth_token\n window.localStorage.setItem('authToken', token)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN, token)\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n },\n [AUTH_USER_STORE.ACTIONS.CONFIRM_EMAIL](\n context: ActionContext,\n payload: IUserAccountUpdatePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n api\n .post('/auth/email/update', { token: payload.token })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n if (payload.refreshUser) {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => {\n return router.push('/profile/edit/account')\n })\n }\n router.push('/profile/edit/account')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n },\n [AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('auth/profile')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n if (res.data.data.language) {\n context.dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n res.data.data.language\n )\n }\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n removeAuthUserData(context)\n }\n })\n .catch((error) => {\n if (error.message !== 'canceled') {\n handleError(context, error)\n removeAuthUserData(context)\n }\n })\n },\n [AUTH_USER_STORE.ACTIONS.LOGIN_OR_REGISTER](\n context: ActionContext,\n data: ILoginOrRegisterData\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n false\n )\n api\n .post(`/auth/${data.actionType}`, data.formData)\n .then((res) => {\n if (res.data.status === 'success') {\n if (data.actionType === 'login') {\n const token = res.data.auth_token\n window.localStorage.setItem('authToken', token)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN, token)\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() =>\n router.push(\n typeof data.redirectUrl === 'string' ? data.redirectUrl : '/'\n )\n )\n } else {\n router\n .push('/login')\n .then(() =>\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n true\n )\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.LOGOUT](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .post('auth/logout')\n .then((res) => {\n if (res.data.status === 'success') {\n removeAuthUserData(context)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PROFILE](\n context: ActionContext,\n payload: IUserPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n router.push('/profile')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_ACCOUNT](\n context: ActionContext,\n payload: IUserAccountPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n authApi\n .patch('auth/profile/edit/account', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PREFERENCES](\n context: ActionContext,\n payload: IUserPreferencesPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit/preferences', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n context\n .dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n res.data.data.language\n )\n .then(() => router.push('/profile/preferences'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.RESET_USER_SPORT_PREFERENCES](\n context: ActionContext,\n sportId: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .delete(`auth/profile/reset/sports/${sportId}`)\n .then((res) => {\n if (res.status === 204) {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n })\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_SPORT_PREFERENCES](\n context: ActionContext,\n payload: IUserSportPreferencesPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit/sports', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n })\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PICTURE](\n context: ActionContext,\n payload: IUserPicturePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n if (!payload.picture) {\n throw new Error('No file part')\n }\n const form = new FormData()\n form.append('file', payload.picture)\n authApi\n .post('auth/picture', form, {\n headers: {\n 'content-type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/profile'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.DELETE_ACCOUNT](\n context: ActionContext,\n payload: IUserDeletionPayload\n ): void {\n deleteUserAccount(context, payload)\n },\n [AUTH_USER_STORE.ACTIONS.DELETE_PICTURE](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .delete(`auth/picture`)\n .then((res) => {\n if (res.status === 204) {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/profile'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.SEND_PASSWORD_RESET_REQUEST](\n context: ActionContext,\n payload: IUserEmailPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/password/reset-request', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/password-reset/sent')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL](\n context: ActionContext,\n payload: IUserEmailPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/account/resend-confirmation', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/account-confirmation/email-sent')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.RESET_USER_PASSWORD](\n context: ActionContext,\n payload: IUserPasswordResetPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/password/update', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/password-reset/password-updated')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport {\n IAuthUserGetters,\n IAuthUserState,\n} from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree &\n IAuthUserGetters = {\n [AUTH_USER_STORE.GETTERS.AUTH_TOKEN]: (state: IAuthUserState) => {\n return state.authToken\n },\n [AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]: (state: IAuthUserState) => {\n return state.authUserProfile\n },\n [AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]: (state: IAuthUserState) => {\n return state.authToken !== null\n },\n [AUTH_USER_STORE.GETTERS.IS_ADMIN]: (state: IAuthUserState) => {\n return state.authUserProfile && state.authUserProfile.admin\n },\n [AUTH_USER_STORE.GETTERS.IS_REGISTRATION_SUCCESS]: (\n state: IAuthUserState\n ) => {\n return state.isRegistrationSuccess\n },\n [AUTH_USER_STORE.GETTERS.IS_SUCCESS]: (state: IAuthUserState) => {\n return state.isSuccess\n },\n [AUTH_USER_STORE.GETTERS.USER_LOADING]: (state: IAuthUserState) => {\n return state.loading\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport {\n IAuthUserState,\n TAuthUserMutations,\n} from '@/store/modules/authUser/types'\nimport { IAuthUserProfile } from '@/types/user'\n\nexport const mutations: MutationTree & TAuthUserMutations = {\n [AUTH_USER_STORE.MUTATIONS.CLEAR_AUTH_USER_TOKEN](state: IAuthUserState) {\n state.authToken = null\n state.authUserProfile = {}\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN](\n state: IAuthUserState,\n authToken: string\n ) {\n state.authToken = authToken\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE](\n state: IAuthUserState,\n authUserProfile: IAuthUserProfile\n ) {\n state.authUserProfile = authUserProfile\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS](\n state: IAuthUserState,\n isRegistrationSuccess: boolean\n ) {\n state.isRegistrationSuccess = isRegistrationSuccess\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS](\n state: IAuthUserState,\n isSuccess: boolean\n ) {\n state.isSuccess = isSuccess\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING](\n state: IAuthUserState,\n loading: boolean\n ) {\n state.loading = loading\n },\n}\n","import { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IAuthUserProfile } from '@/types/user'\n\nexport const authUserState: IAuthUserState = {\n authToken: null,\n authUserProfile: {},\n isSuccess: false,\n isRegistrationSuccess: false,\n loading: false,\n}\n","import { Module } from 'vuex'\n\nimport { actions } from '@/store/modules/authUser/actions'\nimport { getters } from '@/store/modules/authUser/getters'\nimport { mutations } from '@/store/modules/authUser/mutations'\nimport { authUserState } from '@/store/modules/authUser/state'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst authUser: Module = {\n state: authUserState,\n actions,\n getters,\n mutations,\n}\n\nexport default authUser\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\nimport { IOAuth2Actions, IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IOauth2ClientsPayload,\n IOAuth2ClientPayload,\n IOAuth2ClientAuthorizePayload,\n} from '@/types/oauth'\nimport { handleError } from '@/utils'\n\nconst get_client = (\n context: ActionContext,\n url: string\n) => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get(url)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(OAUTH2_STORE.MUTATIONS.SET_CLIENT, res.data.data.client)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree & IOAuth2Actions = {\n [OAUTH2_STORE.ACTIONS.AUTHORIZE_CLIENT](\n context: ActionContext,\n payload: IOAuth2ClientAuthorizePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n const form = new FormData()\n form.set('client_id', payload.client_id)\n form.set('response_type', payload.response_type)\n form.set('scope', payload.scope)\n form.set('confirm', 'true')\n if (payload.state) {\n form.set('state', payload.state)\n }\n if (payload.code_challenge) {\n form.set('code_challenge', payload.code_challenge)\n }\n if (payload.code_challenge_method) {\n form.set('code_challenge_method', payload.code_challenge_method)\n }\n\n authApi\n .post('oauth/authorize', form, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.status == 200 && res.data.redirect_url) {\n window.location.href = res.data.redirect_url\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.CREATE_CLIENT](\n context: ActionContext,\n payload: IOAuth2ClientPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .post('oauth/apps', payload)\n .then((res) => {\n if (res.data.status === 'created') {\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENT,\n res.data.data.client\n )\n router.push(`/profile/apps/${res.data.data.client.id}/created`)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.DELETE_CLIENT](\n context: ActionContext,\n id: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .delete(`oauth/apps/${id}`)\n .then((res) => {\n if (res.status === 204) {\n context\n .dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENTS)\n .then(() => router.push('/profile/apps'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_CLIENT_ID](\n context: ActionContext,\n client_id: string\n ): void {\n get_client(context, `oauth/apps/${client_id}`)\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_ID](\n context: ActionContext,\n id: number\n ): void {\n get_client(context, `oauth/apps/${id}/by_id`)\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENTS](\n context: ActionContext,\n payload: IOauth2ClientsPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('oauth/apps', {\n params: payload,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENTS,\n res.data.data.clients\n )\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENTS_PAGINATION,\n res.data.pagination\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.REVOKE_ALL_TOKENS](\n context: ActionContext,\n id: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, false)\n authApi\n .post(`oauth/apps/${id}/revoke`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, true)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { OAUTH2_STORE } from '@/store/constants'\nimport { IOAuth2Getters, IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree & IOAuth2Getters = {\n [OAUTH2_STORE.GETTERS.CLIENT]: (state: IOAuth2State) => state.client,\n [OAUTH2_STORE.GETTERS.CLIENTS]: (state: IOAuth2State) => state.clients,\n [OAUTH2_STORE.GETTERS.CLIENTS_PAGINATION]: (state: IOAuth2State) =>\n state.pagination,\n [OAUTH2_STORE.GETTERS.REVOCATION_SUCCESSFUL]: (state: IOAuth2State) =>\n state.revocationSuccessful,\n}\n","import { MutationTree } from 'vuex'\n\nimport { OAUTH2_STORE } from '@/store/constants'\nimport { IOAuth2State, TOAuth2Mutations } from '@/store/modules/oauth2/types'\nimport { IPagination } from '@/types/api'\nimport { IOAuth2Client } from '@/types/oauth'\n\nexport const mutations: MutationTree & TOAuth2Mutations = {\n [OAUTH2_STORE.MUTATIONS.SET_CLIENT](\n state: IOAuth2State,\n client: IOAuth2Client\n ) {\n state.client = client\n },\n [OAUTH2_STORE.MUTATIONS.EMPTY_CLIENT](state: IOAuth2State) {\n state.client = {}\n },\n [OAUTH2_STORE.MUTATIONS.SET_CLIENTS](\n state: IOAuth2State,\n clients: IOAuth2Client[]\n ) {\n state.clients = clients\n },\n [OAUTH2_STORE.MUTATIONS.SET_CLIENTS_PAGINATION](\n state: IOAuth2State,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL](\n state: IOAuth2State,\n revocationSuccessful: boolean\n ) {\n state.revocationSuccessful = revocationSuccessful\n },\n}\n","import { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IPagination } from '@/types/api'\nimport { IOAuth2Client } from '@/types/oauth'\n\nexport const oAuth2State: IOAuth2State = {\n client: {},\n clients: [],\n pagination: {},\n revocationSuccessful: false,\n}\n","import { Module } from 'vuex'\n\nimport { actions } from '@/store/modules/oauth2/actions'\nimport { getters } from '@/store/modules/oauth2/getters'\nimport { mutations } from '@/store/modules/oauth2/mutations'\nimport { oAuth2State } from '@/store/modules/oauth2/state'\nimport { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst oauth2: Module = {\n state: oAuth2State,\n actions,\n getters,\n mutations,\n}\n\nexport default oauth2\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport createI18n from '@/i18n'\nimport router from '@/router'\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootActions, IRootState } from '@/store/modules/root/types'\nimport { TAppConfigForm } from '@/types/application'\nimport { handleError } from '@/utils'\n\nconst { locale } = createI18n.global\n\nexport const actions: ActionTree & IRootActions = {\n [ROOT_STORE.ACTIONS.GET_APPLICATION_CONFIG](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING, true)\n authApi\n .get('config')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG,\n res.data.data\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING, false)\n )\n },\n [ROOT_STORE.ACTIONS.GET_APPLICATION_STATS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('stats/all')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_STATS,\n res.data.data\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [ROOT_STORE.ACTIONS.UPDATE_APPLICATION_CONFIG](\n context: ActionContext,\n payload: TAppConfigForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .patch('config', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG,\n res.data.data\n )\n router.push('/admin/application')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE](\n context: ActionContext,\n language: string\n ): void {\n document.querySelector('html')?.setAttribute('lang', language)\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_LANG, language)\n locale.value = language\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootGetters, IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree & IRootGetters = {\n [ROOT_STORE.GETTERS.APP_CONFIG]: (state: IRootState) => {\n return state.application.config\n },\n [ROOT_STORE.GETTERS.APP_LOADING]: (state: IRootState) => {\n return state.appLoading\n },\n [ROOT_STORE.GETTERS.APP_STATS]: (state: IRootState) => {\n return state.application.statistics\n },\n [ROOT_STORE.GETTERS.ERROR_MESSAGES]: (state: IRootState) => {\n return state.errorMessages\n },\n [ROOT_STORE.GETTERS.LANGUAGE]: (state: IRootState) => {\n return state.language\n },\n [ROOT_STORE.GETTERS.LOCALE]: (state: IRootState) => {\n return state.locale\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootState, TRootMutations } from '@/store/modules/root/types'\nimport { TAppConfig, IAppStatistics } from '@/types/application'\nimport { localeFromLanguage } from '@/utils/locales'\n\nexport const mutations: MutationTree & TRootMutations = {\n [ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES](state: IRootState) {\n state.errorMessages = null\n },\n [ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES](\n state: IRootState,\n errorMessages: string\n ) {\n state.errorMessages = errorMessages\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG](\n state: IRootState,\n config: TAppConfig\n ) {\n state.application.config = config\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING](\n state: IRootState,\n loading: boolean\n ) {\n state.appLoading = loading\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_STATS](\n state: IRootState,\n statistics: IAppStatistics\n ) {\n state.application.statistics = statistics\n },\n [ROOT_STORE.MUTATIONS.UPDATE_LANG](state: IRootState, language: string) {\n state.language = language\n state.locale = localeFromLanguage[language]\n },\n}\n","import { enUS } from 'date-fns/locale'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { IApplication } from '@/types/application'\n\nexport const state: IRootState = {\n root: true,\n language: 'en',\n locale: enUS,\n errorMessages: null,\n application: {\n statistics: {\n sports: 0,\n uploads_dir_size: 0,\n users: 0,\n workouts: 0,\n },\n },\n appLoading: false,\n}\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport { AUTH_USER_STORE, ROOT_STORE, SPORTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsActions, ISportsState } from '@/store/modules/sports/types'\nimport { ISportPayload } from '@/types/sports'\nimport { handleError } from '@/utils'\n\nexport const actions: ActionTree & ISportsActions = {\n [SPORTS_STORE.ACTIONS.GET_SPORTS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('sports')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n SPORTS_STORE.MUTATIONS.SET_SPORTS,\n res.data.data.sports\n )\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [SPORTS_STORE.ACTIONS.UPDATE_SPORTS](\n context: ActionContext,\n payload: ISportPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .patch(`sports/${payload.id}`, { is_active: payload.isActive })\n .then((res) => {\n if (res.data.status === 'success') {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { SPORTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsGetters, ISportsState } from '@/store/modules/sports/types'\n\nexport const getters: GetterTree & ISportsGetters = {\n [SPORTS_STORE.GETTERS.SPORTS]: (state: ISportsState) => state.sports,\n}\n","import { MutationTree } from 'vuex'\n\nimport { SPORTS_STORE } from '@/store/constants'\nimport { ISportsState, TSportsMutations } from '@/store/modules/sports/types'\nimport { ISport } from '@/types/sports'\n\nexport const mutations: MutationTree & TSportsMutations = {\n [SPORTS_STORE.MUTATIONS.SET_SPORTS](state: ISportsState, sports: ISport[]) {\n state.sports = sports\n },\n}\n","import { ISportsState } from '@/store/modules/sports/types'\n\nexport const sportsState: ISportsState = {\n sports: [],\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/sports/actions'\nimport { getters } from '@/store/modules/sports/getters'\nimport { mutations } from '@/store/modules/sports/mutations'\nimport { sportsState } from '@/store/modules/sports/state'\nimport { ISportsState } from '@/store/modules/sports/types'\n\nconst sports: Module = {\n state: sportsState,\n actions,\n getters,\n mutations,\n}\n\nexport default sports\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport { STATS_STORE, ROOT_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IStatisticsActions,\n IStatisticsState,\n} from '@/store/modules/statistics/types'\nimport { IUserStatisticsPayload } from '@/types/statistics'\nimport { handleError } from '@/utils'\n\nexport const actions: ActionTree &\n IStatisticsActions = {\n [STATS_STORE.ACTIONS.GET_USER_STATS](\n context: ActionContext,\n payload: IUserStatisticsPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get(`stats/${payload.username}/${payload.filterType}`, {\n params: payload.params,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n STATS_STORE.MUTATIONS.UPDATE_USER_STATS,\n res.data.data.statistics\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { STATS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IStatisticsGetters,\n IStatisticsState,\n} from '@/store/modules/statistics/types'\n\nexport const getters: GetterTree &\n IStatisticsGetters = {\n [STATS_STORE.GETTERS.USER_STATS]: (state: IStatisticsState) => {\n return state.statistics\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { STATS_STORE } from '@/store/constants'\nimport {\n IStatisticsState,\n TStatisticsMutations,\n} from '@/store/modules/statistics/types'\nimport { TStatisticsFromApi } from '@/types/statistics'\n\nexport const mutations: MutationTree & TStatisticsMutations =\n {\n [STATS_STORE.MUTATIONS.UPDATE_USER_STATS](\n state: IStatisticsState,\n statistics: TStatisticsFromApi\n ) {\n state.statistics = statistics\n },\n [STATS_STORE.MUTATIONS.EMPTY_USER_STATS](state: IStatisticsState) {\n state.statistics = {}\n },\n }\n","import { IStatisticsState } from '@/store/modules/statistics/types'\nimport { TStatisticsFromApi } from '@/types/statistics'\n\nexport const statisticsState: IStatisticsState = {\n statistics: {},\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/statistics/actions'\nimport { getters } from '@/store/modules/statistics/getters'\nimport { mutations } from '@/store/modules/statistics/mutations'\nimport { statisticsState } from '@/store/modules/statistics/state'\nimport { IStatisticsState } from '@/store/modules/statistics/types'\n\nconst statistics: Module = {\n state: statisticsState,\n actions,\n getters,\n mutations,\n}\n\nexport default statistics\n","import { GetterTree } from 'vuex'\n\nimport { USERS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { IUsersGetters, IUsersState } from '@/store/modules/users/types'\n\nexport const getters: GetterTree & IUsersGetters = {\n [USERS_STORE.GETTERS.USER]: (state: IUsersState) => {\n return state.user\n },\n [USERS_STORE.GETTERS.USERS]: (state: IUsersState) => {\n return state.users\n },\n [USERS_STORE.GETTERS.USERS_IS_SUCCESS]: (state: IUsersState) => {\n return state.isSuccess\n },\n [USERS_STORE.GETTERS.USERS_LOADING]: (state: IUsersState) => {\n return state.loading\n },\n [USERS_STORE.GETTERS.USERS_PAGINATION]: (state: IUsersState) => {\n return state.pagination\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { USERS_STORE } from '@/store/constants'\nimport { IUsersState, TUsersMutations } from '@/store/modules/users/types'\nimport { IPagination } from '@/types/api'\nimport { IUserProfile } from '@/types/user'\n\nexport const mutations: MutationTree & TUsersMutations = {\n [USERS_STORE.MUTATIONS.UPDATE_USER](state: IUsersState, user: IUserProfile) {\n state.user = user\n },\n [USERS_STORE.MUTATIONS.UPDATE_USER_IN_USERS](\n state: IUsersState,\n updatedUser: IUserProfile\n ) {\n state.users = state.users.map((user) => {\n if (user.username === updatedUser.username) {\n return updatedUser\n }\n return user\n })\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS](\n state: IUsersState,\n users: IUserProfile[]\n ) {\n state.users = users\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING](\n state: IUsersState,\n loading: boolean\n ) {\n state.loading = loading\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION](\n state: IUsersState,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS](\n state: IUsersState,\n isSuccess: boolean\n ) {\n state.isSuccess = isSuccess\n },\n}\n","import { IUsersState } from '@/store/modules/users/types'\nimport { IPagination } from '@/types/api'\nimport { IUserProfile } from '@/types/user'\n\nexport const usersState: IUsersState = {\n user: {},\n users: [],\n loading: false,\n isSuccess: false,\n pagination: {},\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/users/actions'\nimport { getters } from '@/store/modules/users/getters'\nimport { mutations } from '@/store/modules/users/mutations'\nimport { usersState } from '@/store/modules/users/state'\nimport { IUsersState } from '@/store/modules/users/types'\n\nconst users: Module = {\n state: usersState,\n actions,\n getters,\n mutations,\n}\n\nexport default users\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { ROOT_STORE, AUTH_USER_STORE, WORKOUTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { WorkoutsMutations } from '@/store/modules/workouts/enums'\nimport {\n IWorkoutsActions,\n IWorkoutsState,\n} from '@/store/modules/workouts/types'\nimport {\n IWorkout,\n IWorkoutForm,\n IWorkoutPayload,\n TWorkoutsPayload,\n} from '@/types/workouts'\nimport { handleError } from '@/utils'\n\nconst getWorkouts = (\n context: ActionContext,\n payload: TWorkoutsPayload,\n target: WorkoutsMutations\n): void => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('workouts', {\n params: payload,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(WORKOUTS_STORE.MUTATIONS[target], res.data.data.workouts)\n if (target === WorkoutsMutations['SET_USER_WORKOUTS']) {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUTS_PAGINATION,\n res.data.pagination\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree &\n IWorkoutsActions = {\n [WORKOUTS_STORE.ACTIONS.GET_CALENDAR_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_CALENDAR_WORKOUTS)\n getWorkouts(context, payload, WorkoutsMutations['SET_CALENDAR_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_USER_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['SET_USER_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_TIMELINE_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['SET_TIMELINE_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_MORE_TIMELINE_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['ADD_TIMELINE_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n const segmentUrl = payload.segmentId ? `/segment/${payload.segmentId}` : ''\n authApi\n .get(`workouts/${payload.workoutId}`)\n .then((res) => {\n const workout: IWorkout = res.data.data.workouts[0]\n if (res.data.status === 'success') {\n if (\n payload.segmentId &&\n (workout.segments.length === 0 ||\n !workout.segments[+payload.segmentId - 1])\n ) {\n throw new Error('WORKOUT_NOT_FOUND')\n }\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT,\n res.data.data.workouts[0]\n )\n if (res.data.data.workouts[0].with_gpx) {\n authApi\n .get(`workouts/${payload.workoutId}/chart_data${segmentUrl}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_CHART_DATA,\n res.data.data.chart_data\n )\n }\n })\n authApi\n .get(`workouts/${payload.workoutId}/gpx${segmentUrl}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_GPX,\n res.data.data.gpx\n )\n }\n })\n }\n } else {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n handleError(context, null)\n }\n })\n .catch((error) => {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.DELETE_WORKOUT](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .delete(`workouts/${payload.workoutId}`)\n .then(() => {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n router.push('/')\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.EDIT_WORKOUT](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .patch(`workouts/${payload.workoutId}`, payload.data)\n .then(() => {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n context\n .dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, {\n workoutId: payload.workoutId,\n })\n .then(() => {\n router.push({\n name: 'Workout',\n params: { workoutId: payload.workoutId },\n })\n })\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.ADD_WORKOUT](\n context: ActionContext,\n payload: IWorkoutForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n if (!payload.file) {\n throw new Error('No file part')\n }\n const form = new FormData()\n form.append('file', payload.file)\n form.append(\n 'data',\n `{\"sport_id\": ${payload.sport_id}, \"notes\": \"${payload.notes}\"}`\n )\n authApi\n .post('workouts', form, {\n headers: {\n 'content-type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.data.status === 'created') {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n const workout: IWorkout = res.data.data.workouts[0]\n router.push(\n res.data.data.workouts.length === 1\n ? `/workouts/${workout.id}`\n : '/'\n )\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX](\n context: ActionContext,\n payload: IWorkoutForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .post('workouts/no_gpx', payload)\n .then((res) => {\n if (res.data.status === 'created') {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n const workout: IWorkout = res.data.data.workouts[0]\n router.push(`/workouts/${workout.id}`)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { WORKOUTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IWorkoutsGetters,\n IWorkoutsState,\n} from '@/store/modules/workouts/types'\n\nexport const getters: GetterTree &\n IWorkoutsGetters = {\n [WORKOUTS_STORE.GETTERS.CALENDAR_WORKOUTS]: (state: IWorkoutsState) => {\n return state.calendar_workouts\n },\n [WORKOUTS_STORE.GETTERS.TIMELINE_WORKOUTS]: (state: IWorkoutsState) => {\n return state.timeline_workouts\n },\n [WORKOUTS_STORE.GETTERS.USER_WORKOUTS]: (state: IWorkoutsState) => {\n return state.user_workouts\n },\n [WORKOUTS_STORE.GETTERS.WORKOUT_DATA]: (state: IWorkoutsState) => {\n return state.workoutData\n },\n [WORKOUTS_STORE.GETTERS.WORKOUTS_PAGINATION]: (state: IWorkoutsState) => {\n return state.pagination\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { WORKOUTS_STORE } from '@/store/constants'\nimport {\n IWorkoutsState,\n TWorkoutsMutations,\n} from '@/store/modules/workouts/types'\nimport { IPagination } from '@/types/api'\nimport { IWorkout, IWorkoutApiChartData } from '@/types/workouts'\n\nexport const mutations: MutationTree & TWorkoutsMutations = {\n [WORKOUTS_STORE.MUTATIONS.ADD_TIMELINE_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.timeline_workouts = state.timeline_workouts.concat(workouts)\n },\n [WORKOUTS_STORE.MUTATIONS.SET_CALENDAR_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.calendar_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_TIMELINE_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.timeline_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_USER_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.user_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUTS_PAGINATION](\n state: IWorkoutsState,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT](\n state: IWorkoutsState,\n workout: IWorkout\n ) {\n state.workoutData.workout = workout\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_CHART_DATA](\n state: IWorkoutsState,\n chartData: IWorkoutApiChartData[]\n ) {\n state.workoutData.chartData = chartData\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_GPX](\n state: IWorkoutsState,\n gpx: string\n ) {\n state.workoutData.gpx = gpx\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING](\n state: IWorkoutsState,\n loading: boolean\n ) {\n state.workoutData.loading = loading\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_CALENDAR_WORKOUTS](state: IWorkoutsState) {\n state.calendar_workouts = []\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUTS](state: IWorkoutsState) {\n state.calendar_workouts = []\n state.user_workouts = []\n state.timeline_workouts = []\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT](state: IWorkoutsState) {\n state.workoutData = {\n gpx: '',\n loading: false,\n workout: {},\n chartData: [],\n }\n },\n}\n","import { IWorkoutsState } from '@/store/modules/workouts/types'\nimport { IPagination } from '@/types/api'\nimport { IWorkout } from '@/types/workouts'\n\nexport const workoutsState: IWorkoutsState = {\n calendar_workouts: [],\n timeline_workouts: [],\n pagination: {},\n user_workouts: [],\n workoutData: {\n gpx: '',\n loading: false,\n workout: {},\n chartData: [],\n },\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/workouts/actions'\nimport { getters } from '@/store/modules/workouts/getters'\nimport { mutations } from '@/store/modules/workouts/mutations'\nimport { workoutsState } from '@/store/modules/workouts/state'\nimport { IWorkoutsState } from '@/store/modules/workouts/types'\n\nconst workouts: Module = {\n state: workoutsState,\n actions,\n getters,\n mutations,\n}\n\nexport default workouts\n","import { Module, ModuleTree } from 'vuex'\n\nimport authUserModule from '@/store/modules/authUser'\nimport oAuthModule from '@/store/modules/oauth2'\nimport { actions } from '@/store/modules/root/actions'\nimport { getters } from '@/store/modules/root/getters'\nimport { mutations } from '@/store/modules/root/mutations'\nimport { state } from '@/store/modules/root/state'\nimport { IRootState } from '@/store/modules/root/types'\nimport sportsModule from '@/store/modules/sports'\nimport statsModule from '@/store/modules/statistics'\nimport usersModule from '@/store/modules/users'\nimport workoutsModule from '@/store/modules/workouts'\n\nconst modules: ModuleTree = {\n authUserModule,\n oAuthModule,\n sportsModule,\n statsModule,\n usersModule,\n workoutsModule,\n}\n\nconst root: Module = {\n state,\n actions,\n getters,\n mutations,\n modules,\n}\n\nexport default root\n","import { createStore } from 'vuex'\n\nimport root from '@/store/modules/root'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst store = createStore(root)\n\nexport default store\n","export enum WorkoutsActions {\n ADD_WORKOUT = 'ADD_WORKOUT',\n ADD_WORKOUT_WITHOUT_GPX = 'ADD_WORKOUT_WITHOUT_GPX',\n DELETE_WORKOUT = 'DELETE_WORKOUT',\n EDIT_WORKOUT = 'EDIT_WORKOUT',\n GET_CALENDAR_WORKOUTS = 'GET_CALENDAR_WORKOUTS',\n GET_USER_WORKOUTS = 'GET_USER_WORKOUTS',\n GET_TIMELINE_WORKOUTS = 'GET_TIMELINE_WORKOUTS',\n GET_MORE_TIMELINE_WORKOUTS = 'GET_MORE_TIMELINE_WORKOUTS',\n GET_WORKOUT_DATA = 'GET_WORKOUT_DATA',\n}\n\nexport enum WorkoutsGetters {\n CALENDAR_WORKOUTS = 'CALENDAR_WORKOUTS',\n TIMELINE_WORKOUTS = 'TIMELINE_WORKOUTS',\n USER_WORKOUTS = 'USER_WORKOUTS',\n WORKOUT_DATA = 'WORKOUT_DATA',\n WORKOUTS_PAGINATION = 'WORKOUTS_PAGINATION',\n}\n\nexport enum WorkoutsMutations {\n ADD_TIMELINE_WORKOUTS = 'ADD_TIMELINE_WORKOUTS',\n EMPTY_WORKOUTS = 'EMPTY_WORKOUTS',\n EMPTY_CALENDAR_WORKOUTS = 'EMPTY_CALENDAR_WORKOUTS',\n EMPTY_WORKOUT = 'EMPTY_WORKOUT',\n SET_CALENDAR_WORKOUTS = 'SET_CALENDAR_WORKOUTS',\n SET_TIMELINE_WORKOUTS = 'SET_TIMELINE_WORKOUTS',\n SET_USER_WORKOUTS = 'SET_USER_WORKOUTS',\n SET_WORKOUT = 'SET_WORKOUT',\n SET_WORKOUT_GPX = 'SET_WORKOUT_GPX',\n SET_WORKOUT_CHART_DATA = 'SET_WORKOUT_CHART_DATA',\n SET_WORKOUT_LOADING = 'SET_WORKOUT_LOADING',\n SET_WORKOUTS_PAGINATION = 'SET_WORKOUTS_PAGINATION',\n}\n","import { useStore as VuexStore } from 'vuex'\n\nimport { Store } from '@/store/types'\n\nexport function useStore(): Store {\n return VuexStore() as Store\n}\n","import { LocationQuery } from 'vue-router'\n\nimport { IQueryOptions, TPaginationPayload } from '@/types/api'\n\nexport const sortList: string[] = ['asc', 'desc']\nexport const defaultPage = 1\nexport const defaultPerPage = 10\n\nexport const getNumberQueryValue = (\n queryValue: string | (string | null)[] | null,\n defaultValue: number\n): number => {\n return queryValue && typeof queryValue === 'string' && +queryValue > 0\n ? +queryValue\n : defaultValue\n}\n\nexport const getStringQueryValue = (\n queryValue: string | (string | null)[] | null,\n availableValues: string[],\n defaultValue: string\n): string => {\n return queryValue &&\n typeof queryValue === 'string' &&\n availableValues.includes(queryValue)\n ? queryValue\n : defaultValue\n}\n\nexport const getQuery = (\n locationQuery: LocationQuery,\n orderByList: string[],\n defaultOrderBy: string,\n options?: IQueryOptions\n): TPaginationPayload => {\n const queryOptions = options || {}\n const defaultSort = queryOptions.defaultSort || 'asc'\n const query = {}\n\n query.page = getNumberQueryValue(locationQuery.page, defaultPage)\n query.per_page = getNumberQueryValue(locationQuery.per_page, defaultPerPage)\n query.order = getStringQueryValue(locationQuery.order, sortList, defaultSort)\n query.order_by = getStringQueryValue(\n locationQuery.order_by,\n orderByList,\n defaultOrderBy\n )\n if (typeof locationQuery.q === 'string') {\n query.q = locationQuery.q\n } else {\n delete query.q\n }\n\n return query\n}\n\nexport const workoutsPayloadKeys = [\n 'from',\n 'to',\n 'ave_speed_from',\n 'ave_speed_to',\n 'max_speed_from',\n 'max_speed_to',\n 'distance_from',\n 'distance_to',\n 'duration_from',\n 'duration_to',\n 'sport_id',\n]\n\nconst getRange = (stop: number, start = 1): number[] => {\n return Array.from({ length: stop - start + 1 }, (_, i) => start + i)\n}\n\nexport const rangePagination = (\n pages: number,\n currentPage: number\n): (string | number)[] => {\n if (pages < 0) {\n return []\n }\n\n if (pages < 9) {\n return getRange(pages)\n }\n\n let pagination: (string | number)[] = [1, 2]\n if (currentPage < 4) {\n pagination = pagination.concat([3, 4, 5])\n } else if (currentPage < 6) {\n pagination = pagination.concat(getRange(currentPage + 2, 3))\n } else {\n pagination = pagination.concat(['...'])\n if (currentPage < pages - 2) {\n pagination = pagination.concat(getRange(currentPage + 2, currentPage - 2))\n }\n }\n if (currentPage + 2 <= pages - 2) {\n pagination = pagination.concat(['...'])\n pagination = pagination.concat(getRange(pages, pages - 1))\n } else {\n if (\n pagination[pagination.length - 1] !== '...' &&\n pagination[pagination.length - 1] >= pages - 2 &&\n pagination[pagination.length - 1] < pages\n ) {\n pagination = pagination.concat(\n getRange(pages, +pagination[pagination.length - 1] + 1)\n )\n } else {\n pagination = pagination.concat(\n getRange(\n pages,\n currentPage < pages - 3 ? currentPage + 3 : currentPage - 5\n )\n )\n }\n }\n\n return pagination\n}\n","import {\n addDays,\n addMonths,\n addYears,\n endOfMonth,\n endOfWeek,\n format,\n startOfMonth,\n startOfWeek,\n startOfYear,\n} from 'date-fns'\nimport { utcToZonedTime } from 'date-fns-tz'\n\nimport createI18n from '@/i18n'\nimport { localeFromLanguage } from '@/utils/locales'\n\nconst { locale } = createI18n.global\n\nexport const getStartDate = (\n duration: string,\n day: Date,\n weekStartingMonday: boolean\n): Date => {\n switch (duration) {\n case 'week':\n return startOfWeek(day, { weekStartsOn: weekStartingMonday ? 1 : 0 })\n case 'year':\n return startOfYear(day)\n case 'month':\n return startOfMonth(day)\n default:\n throw new Error(\n `Invalid duration, expected: \"week\", \"month\", \"year\", got: \"${duration}\"`\n )\n }\n}\n\nexport const incrementDate = (duration: string, day: Date): Date => {\n switch (duration) {\n case 'week':\n return addDays(day, 7)\n case 'year':\n return addYears(day, 1)\n case 'month':\n return addMonths(day, 1)\n default:\n throw new Error(\n `Invalid duration, expected: \"week\", \"month\", \"year\", got: \"${duration}\"`\n )\n }\n}\n\nexport const getDateWithTZ = (dateInUTC: string, tz: string): Date => {\n return utcToZonedTime(new Date(dateInUTC), tz)\n}\n\nexport const getCalendarStartAndEnd = (\n date: Date,\n weekStartingMonday: boolean\n): Record => {\n const monthStart = startOfMonth(date)\n const monthEnd = endOfMonth(date)\n const weekStartsOn = weekStartingMonday ? 1 : 0\n return {\n start: startOfWeek(monthStart, { weekStartsOn }),\n end: endOfWeek(monthEnd, { weekStartsOn }),\n }\n}\n\nexport const formatWorkoutDate = (\n dateTime: Date,\n dateFormat: string | null = null,\n timeFormat: string | null = null\n): Record => {\n if (!dateFormat) {\n dateFormat = 'yyyy/MM/dd'\n }\n dateFormat = getDateFormat(dateFormat, locale.value)\n if (!timeFormat) {\n timeFormat = 'HH:mm'\n }\n return {\n workout_date: format(dateTime, dateFormat, {\n locale: localeFromLanguage[locale.value],\n }),\n workout_time: format(dateTime, timeFormat),\n }\n}\n\nconst availableDateFormats = [\n 'MM/dd/yyyy',\n 'dd/MM/yyyy',\n 'yyyy-MM-dd',\n 'date_string',\n]\nconst dateStringFormats: Record = {\n de: 'do MMM yyyy',\n en: 'MMM. do, yyyy',\n fr: 'd MMM yyyy',\n // nb: 'do MMM yyyy',\n}\n\nexport const getDateFormat = (dateFormat: string, language: string): string => {\n return dateFormat === 'date_string' ? dateStringFormats[language] : dateFormat\n}\n\nexport const formatDate = (\n dateString: string,\n timezone: string,\n dateFormat: string,\n withTime = true,\n language: string | null = null\n): string => {\n if (!language) {\n language = locale.value\n }\n return format(\n getDateWithTZ(dateString, timezone),\n `${getDateFormat(dateFormat, language)}${withTime ? ' HH:mm' : ''}`,\n { locale: localeFromLanguage[language] }\n )\n}\n\nexport const availableDateFormatOptions = (\n inputDate: string,\n timezone: string,\n language: string | null = null\n) => {\n const l: string = language ? language : locale.value\n const options: Record[] = []\n availableDateFormats.map((df) => {\n const dateFormat = getDateFormat(df, l)\n options.push({\n label: `${dateFormat} - ${formatDate(\n inputDate,\n timezone,\n dateFormat,\n false,\n l\n )}`,\n value: df,\n })\n })\n return options\n}\n","const suffixes = ['bytes', 'KB', 'MB', 'GB', 'TB']\n\nexport const getReadableFileSize = (\n fileSize: number,\n asText = true\n): string | Record => {\n const i = Math.floor(Math.log(fileSize) / Math.log(1024))\n if (!fileSize) {\n return asText ? '0 bytes' : { size: '0', suffix: 'bytes' }\n }\n const size = (fileSize / Math.pow(1024, i)).toFixed(1)\n const suffix = suffixes[i]\n return asText ? `${size}${suffix}` : { size, suffix }\n}\n\nexport const getFileSizeInMB = (fileSize: number): number => {\n const value = fileSize / 1048576\n return (!fileSize && 0) || +value.toFixed(2)\n}\n","import { AxiosError } from 'axios'\nimport { ActionContext } from 'vuex'\n\nimport { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsState } from '@/store/modules/sports/types'\nimport { IStatisticsState } from '@/store/modules/statistics/types'\nimport { IUsersState } from '@/store/modules/users/types'\nimport { IWorkoutsState } from '@/store/modules/workouts/types'\n\nexport const getApiUrl = (): string => {\n return process.env.NODE_ENV === 'production'\n ? '/api/'\n : `${process.env.VUE_APP_API_URL}/api/`\n}\n\nexport const handleError = (\n context:\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext,\n error: AxiosError | null,\n msg = 'UNKNOWN'\n): void => {\n // if request is cancelled, no error to display\n if (error && error.message === 'canceled') {\n return\n }\n\n // if stored token is blacklisted, disconnect user\n if (\n error?.response?.status === 401 &&\n error.response.data.error === 'invalid_token'\n ) {\n localStorage.removeItem('authToken')\n context.dispatch(AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER)\n return\n }\n\n const errorMessages = !error\n ? msg\n : error.response\n ? error.response.status === 413\n ? 'file size is greater than the allowed size'\n : error.response.data.message\n ? error.response.data.message\n : msg\n : error.message\n ? error.message\n : msg\n context.commit(\n ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES,\n errorMessages.includes('\\n')\n ? errorMessages\n .split('\\n')\n .filter((m: string) => m !== '')\n .map((m: string) => `api.ERROR.${m}`)\n : `api.ERROR.${errorMessages}`\n )\n}\n","/* eslint-disable import/no-duplicates */\nimport { Locale } from 'date-fns'\nimport { de, enUS, fr } from 'date-fns/locale'\n\nimport createI18n from '@/i18n'\n\nexport const localeFromLanguage: Record = {\n de: de,\n en: enUS,\n fr: fr,\n // nb: nb, // disabled for now\n}\n\nexport const languageLabels: Record = {\n de: 'Deutsch',\n en: 'English',\n fr: 'Français',\n // nb: 'Norsk bokmål', // disabled for now\n}\n\nconst { availableLocales } = createI18n.global\nexport const availableLanguages = availableLocales.map((l) => {\n return { label: languageLabels[l], value: l }\n})\n","import { ISport, ITranslatedSport, TActiveStatus } from '@/types/sports'\nimport { IWorkout } from '@/types/workouts'\n\nexport const sportColors: Record = {\n 'Cycling (Sport)': '#4c9792',\n 'Cycling (Transport)': '#88af98',\n 'Cycling (Virtual)': '#64a360',\n Hiking: '#bb757c',\n 'Mountain Biking': '#d4b371',\n 'Mountain Biking (Electric)': '#fc9d6f',\n Rowing: '#fcce72',\n Running: '#835b83',\n 'Skiing (Alpine)': '#67a4bd',\n 'Skiing (Cross Country)': '#9498d0',\n Snowshoes: '#5780a8',\n Trail: '#09a98a',\n Walking: '#838383',\n}\n\nexport const sportIdColors = (sports: ISport[]): Record => {\n const colors: Record = {}\n sports.map(\n (sport) =>\n (colors[sport.id] = sport.color ? sport.color : sportColors[sport.label])\n )\n return colors\n}\n\nconst sortSports = (a: ITranslatedSport, b: ITranslatedSport): number => {\n const sportATranslatedLabel = a.translatedLabel.toLowerCase()\n const sportBTranslatedLabel = b.translatedLabel.toLowerCase()\n return sportATranslatedLabel > sportBTranslatedLabel\n ? 1\n : sportATranslatedLabel < sportBTranslatedLabel\n ? -1\n : 0\n}\n\nexport const translateSports = (\n sports: ISport[],\n t: CallableFunction,\n activeStatus: TActiveStatus = 'all',\n sportsToInclude: number[] = []\n): ITranslatedSport[] =>\n sports\n .filter((sport) =>\n activeStatus === 'all'\n ? true\n : sportsToInclude.includes(sport.id) || sport[activeStatus]\n )\n .map((sport) => ({\n ...sport,\n translatedLabel: t(`sports.${sport.label}.LABEL`),\n }))\n .sort(sortSports)\n\nexport const getSportLabel = (workout: IWorkout, sports: ISport[]): string => {\n return sports\n .filter((sport) => sport.id === workout.sport_id)\n .map((sport) => sport.label)[0]\n}\n\nexport const getSportColor = (\n workout: IWorkout,\n sports: ISport[]\n): string | null => {\n return sports\n .filter((sport) => sport.id === workout.sport_id)\n .map((sport) => sport.color)[0]\n}\n","import {\n addMonths,\n addWeeks,\n addYears,\n endOfMonth,\n endOfWeek,\n endOfYear,\n format,\n startOfMonth,\n startOfWeek,\n startOfYear,\n subMonths,\n subWeeks,\n subYears,\n} from 'date-fns'\n\nimport createI18n from '@/i18n'\nimport { IChartDataset } from '@/types/chart'\nimport { ISport } from '@/types/sports'\nimport {\n IStatisticsChartData,\n IStatisticsDateParams,\n TStatisticsDatasetKeys,\n TStatisticsDatasets,\n TStatisticsFromApi,\n} from '@/types/statistics'\nimport { incrementDate, getStartDate, getDateFormat } from '@/utils/dates'\nimport { localeFromLanguage } from '@/utils/locales'\nimport { sportColors } from '@/utils/sports'\nimport { convertStatsDistance } from '@/utils/units'\n\nconst { locale } = createI18n.global\n\nconst dateFormats: Record> = {\n week: {\n api: 'yyyy-MM-dd',\n chart: 'MM/dd/yyyy',\n },\n month: {\n api: 'yyyy-MM',\n chart: 'MM/yyyy',\n },\n year: {\n api: 'yyyy',\n chart: 'yyyy',\n },\n}\n\nexport const datasetKeys: TStatisticsDatasetKeys[] = [\n 'average_speed',\n 'nb_workouts',\n 'total_duration',\n 'total_distance',\n 'total_ascent',\n 'total_descent',\n]\n\nexport const getDateKeys = (\n params: IStatisticsDateParams,\n weekStartingMonday: boolean\n): Date[] => {\n const days = []\n for (\n let day = getStartDate(params.duration, params.start, weekStartingMonday);\n day <= params.end;\n day = incrementDate(params.duration, day)\n ) {\n days.push(day)\n }\n return days\n}\n\nconst getStatisticsChartDataset = (\n sportLabel: string,\n color: string,\n isLineChart = false\n): IChartDataset => {\n const dataset: IChartDataset = {\n label: sportLabel,\n backgroundColor: [color],\n data: [],\n }\n if (isLineChart) {\n dataset.type = 'line'\n dataset.borderColor = [color]\n dataset.spanGaps = true\n }\n return dataset\n}\n\nexport const getDatasets = (displayedSports: ISport[]): TStatisticsDatasets => {\n const datasets: TStatisticsDatasets = {\n average_speed: [],\n nb_workouts: [],\n total_distance: [],\n total_duration: [],\n total_ascent: [],\n total_descent: [],\n }\n displayedSports.map((sport) => {\n const color = sport.color ? sport.color : sportColors[sport.label]\n datasets.average_speed.push(\n getStatisticsChartDataset(sport.label, color, true)\n )\n datasets.nb_workouts.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_distance.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_duration.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_ascent.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_descent.push(getStatisticsChartDataset(sport.label, color))\n })\n return datasets\n}\n\nexport const convertStatsValue = (\n datasetKey: TStatisticsDatasetKeys,\n value: number,\n useImperialUnits: boolean\n): number => {\n switch (datasetKey) {\n case 'average_speed':\n case 'total_distance':\n case 'total_ascent':\n case 'total_descent':\n return convertStatsDistance(\n ['average_speed', 'total_distance'].includes(datasetKey) ? 'km' : 'm',\n value,\n useImperialUnits\n )\n default:\n case 'nb_workouts':\n case 'total_duration':\n return value\n }\n}\n\nexport const formatStats = (\n params: IStatisticsDateParams,\n weekStartingMonday: boolean,\n sports: ISport[],\n displayedSportsId: number[],\n apiStats: TStatisticsFromApi,\n useImperialUnits: boolean,\n userDateFormat: string\n): IStatisticsChartData => {\n const dayKeys = getDateKeys(params, weekStartingMonday)\n const dateFormat = dateFormats[params.duration]\n const displayedSports = sports.filter((sport) =>\n displayedSportsId.includes(sport.id)\n )\n const labels: string[] = []\n const datasets = getDatasets(displayedSports)\n const sportsId: Record = {}\n displayedSports.map(\n (displayedSport) => (sportsId[displayedSport.label] = displayedSport.id)\n )\n\n dayKeys.map((key) => {\n const date: string = format(key, dateFormat.api)\n const label: string = format(\n key,\n params.duration === 'week'\n ? getDateFormat(userDateFormat, locale.value)\n : dateFormat.chart,\n { locale: localeFromLanguage[locale.value] }\n )\n labels.push(label)\n datasetKeys.map((datasetKey) => {\n datasets[datasetKey].map((dataset) => {\n dataset.data.push(\n date in apiStats && sportsId[dataset.label] in apiStats[date]\n ? convertStatsValue(\n datasetKey,\n apiStats[date][sportsId[dataset.label]][datasetKey],\n useImperialUnits\n )\n : datasetKey === 'average_speed'\n ? null\n : 0\n )\n })\n })\n })\n return {\n labels,\n datasets,\n }\n}\n\nexport const getStatsDateParams = (\n date: Date,\n timeFrame: string,\n weekStartingMonday: boolean\n): IStatisticsDateParams => {\n const weekStartsOn = weekStartingMonday ? 1 : 0\n const start =\n timeFrame === 'year'\n ? startOfYear(subYears(date, 9))\n : timeFrame === 'week'\n ? startOfWeek(subMonths(date, 2), { weekStartsOn })\n : startOfMonth(subMonths(date, 11)) // month\n const end =\n timeFrame === 'year'\n ? endOfYear(date)\n : timeFrame === 'week'\n ? endOfWeek(date, { weekStartsOn })\n : endOfMonth(date) // month\n return {\n duration: timeFrame,\n end,\n start,\n }\n}\n\nexport const updateChartParams = (\n chartParams: IStatisticsDateParams,\n backward: boolean,\n weekStartingMonday: boolean\n): IStatisticsDateParams => {\n const { duration, start, end } = chartParams\n const weekStartsOn = weekStartingMonday ? 1 : 0\n return {\n duration,\n end:\n duration === 'year'\n ? endOfYear(backward ? subYears(end, 1) : addYears(end, 1))\n : duration === 'week'\n ? endOfWeek(backward ? subWeeks(end, 1) : addWeeks(end, 1), {\n weekStartsOn,\n })\n : endOfMonth(backward ? subMonths(end, 1) : addMonths(end, 1)),\n start:\n duration === 'year'\n ? startOfYear(backward ? subYears(start, 1) : addYears(start, 1))\n : duration === 'week'\n ? startOfWeek(backward ? subWeeks(start, 1) : addWeeks(start, 1), {\n weekStartsOn,\n })\n : startOfMonth(backward ? subMonths(start, 1) : addMonths(start, 1)),\n }\n}\n","import { IUnit, TFactor, TUnit } from '@/types/units'\n\nexport const units: Record = {\n ft: {\n unit: 'ft',\n system: 'imperial',\n multiplier: 1,\n defaultTarget: 'm',\n },\n mi: {\n unit: 'mi',\n system: 'imperial',\n multiplier: 5280,\n defaultTarget: 'km',\n },\n m: {\n unit: 'm',\n system: 'metric',\n multiplier: 1,\n defaultTarget: 'ft',\n },\n km: {\n unit: 'm',\n system: 'metric',\n multiplier: 1000,\n defaultTarget: 'mi',\n },\n}\n\nconst factors: TFactor = {\n metric: {\n imperial: 3.280839895,\n metric: 1,\n },\n imperial: {\n metric: 1 / 3.280839895,\n imperial: 1,\n },\n}\n\nexport const convertDistance = (\n distance: number,\n from: TUnit,\n to: TUnit,\n digits: number | null = 3\n): number => {\n const unitFrom = units[from]\n const unitTo = units[to]\n const convertedDistance =\n (distance * unitFrom.multiplier * factors[unitFrom.system][unitTo.system]) /\n unitTo.multiplier\n if (digits !== null) {\n return parseFloat(convertedDistance.toFixed(digits))\n }\n return convertedDistance\n}\n\nexport const convertStatsDistance = (\n unitFrom: TUnit,\n value: number,\n useImperialUnits: boolean\n): number => {\n const unitTo = useImperialUnits ? units[unitFrom].defaultTarget : unitFrom\n return useImperialUnits ? convertDistance(value, unitFrom, unitTo, 2) : value\n}\n","import {\n IWorkout,\n IWorkoutApiChartData,\n IWorkoutChartData,\n TCoordinates,\n TWorkoutDatasets,\n} from '@/types/workouts'\nimport { convertStatsDistance } from '@/utils/units'\n\nexport const getDatasets = (\n chartData: IWorkoutApiChartData[],\n t: CallableFunction,\n useImperialUnits: boolean\n): IWorkoutChartData => {\n const datasets: TWorkoutDatasets = {\n speed: {\n label: t('workouts.SPEED'),\n backgroundColor: ['#FFFFFF'],\n borderColor: ['#8884d8'],\n borderWidth: 2,\n data: [],\n yAxisID: 'ySpeed',\n },\n elevation: {\n label: t('workouts.ELEVATION'),\n backgroundColor: ['#e5e5e5'],\n borderColor: ['#cccccc'],\n borderWidth: 1,\n fill: true,\n data: [],\n yAxisID: 'yElevation',\n },\n }\n const distance_labels: unknown[] = []\n const duration_labels: unknown[] = []\n const coordinates: TCoordinates[] = []\n\n chartData.map((data) => {\n distance_labels.push(data.distance)\n duration_labels.push(data.duration)\n datasets.speed.data.push(\n convertStatsDistance('km', data.speed, useImperialUnits)\n )\n datasets.elevation.data.push(\n convertStatsDistance('m', data.elevation, useImperialUnits)\n )\n coordinates.push({ latitude: data.latitude, longitude: data.longitude })\n })\n\n return { distance_labels, duration_labels, datasets, coordinates }\n}\n\nexport const getDonutDatasets = (\n workouts: IWorkout[]\n): Record> => {\n const total = workouts.length\n if (total === 0) {\n return {}\n }\n\n const datasets: Record> = {}\n workouts.map((workout) => {\n if (!datasets[workout.sport_id]) {\n datasets[workout.sport_id] = {\n count: 0,\n percentage: 0,\n }\n }\n datasets[workout.sport_id].count += 1\n datasets[workout.sport_id].percentage =\n datasets[workout.sport_id].count / total\n })\n\n return datasets\n}\n\nexport const defaultOrder = {\n order: 'desc',\n order_by: 'workout_date',\n}\n","\n\n\n","import { render } from \"./Card.vue?vue&type=template&id=ad374c24\"\nconst script = {}\n\nimport \"./Card.vue?vue&type=style&index=0&id=ad374c24&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-72463173\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"table-selects\" }\nconst _hoisted_2 = [\"value\"]\nconst _hoisted_3 = [\"value\"]\nconst _hoisted_4 = [\"value\"]\nconst _hoisted_5 = [\"value\"]\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = [\"value\"]\n\nimport { toRefs } from 'vue'\n\n import { TPaginationPayload } from '@/types/api'\n\n interface Props {\n order_by: string[]\n query: TPaginationPayload\n sort: string[]\n message: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'FilterSelects',\n props: {\n order_by: null,\n query: null,\n sort: null,\n message: null\n },\n emits: ['updateSelect'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n order_by: string[]\n query: TPaginationPayload\n sort: string[]\n message: string\n }\n\n \n\n \n\n const { order_by, query, sort, message } = toRefs(props)\n const perPage = [10, 25, 50, 100]\n\n function onSelectUpdate(event: Event & { target: HTMLInputElement }) {\n emit('updateSelect', event.target.id, event.target.value)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.ORDER_BY.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"order_by\",\n id: \"order_by\",\n value: _unref(query).order_by,\n onChange: onSelectUpdate\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(order_by), (order) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: order,\n key: order\n }, _toDisplayString(_ctx.$t(`${_unref(message)}.${order.toUpperCase()}`)), 9, _hoisted_3))\n }), 128))\n ], 40, _hoisted_2)\n ]),\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.ORDER.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"order\",\n id: \"order\",\n value: _unref(query).order,\n onChange: onSelectUpdate\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(sort), (order) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: order,\n key: order\n }, _toDisplayString(_ctx.$t(`common.SELECTS.ORDER.${order.toUpperCase()}`)), 9, _hoisted_5))\n }), 128))\n ], 40, _hoisted_4)\n ]),\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.PER_PAGE.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"per_page\",\n id: \"per_page\",\n value: _unref(query).per_page,\n onChange: onSelectUpdate\n }, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(perPage, (nb) => {\n return _createElementVNode(\"option\", {\n value: nb,\n key: nb\n }, _toDisplayString(nb), 9, _hoisted_7)\n }), 64))\n ], 40, _hoisted_6)\n ])\n ]))\n}\n}\n\n})","import script from \"./FilterSelects.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./FilterSelects.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./FilterSelects.vue?vue&type=style&index=0&id=72463173&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-72463173\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./ErrorImg.vue?vue&type=template&id=e620aed4\"\nimport script from \"./ErrorImg.vue?vue&type=script&lang=js\"\nexport * from \"./ErrorImg.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-b60bfa80\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"error\" }\nconst _hoisted_2 = { class: \"error-content\" }\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n title: string\n message: string\n buttonText: string\n path?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Error',\n props: {\n title: null,\n message: null,\n buttonText: null,\n path: { default: '/' }\n },\n setup(__props: any) {\n\nconst props = __props as { title: string, message: string, buttonText: string, path: string }\n\n \n const { buttonText, title, message, path } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"h1\", null, _toDisplayString(_unref(title)), 1),\n _createElementVNode(\"p\", null, _toDisplayString(_unref(message)), 1),\n (_unref(buttonText))\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push(_unref(path)))),\n class: \"upper\"\n }, _toDisplayString(_unref(buttonText)), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./Error.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Error.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Error.vue?vue&type=style&index=0&id=b60bfa80&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b60bfa80\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nimport { Ref, onMounted, ref, toRefs, withDefaults, onUnmounted } from 'vue'\n\n import Error from '@/components/Common/Error.vue'\n interface Props {\n target?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'NotFound',\n props: {\n target: { default: 'PAGE' }\n },\n setup(__props: any) {\n\nconst props = __props as { target: string }\n\n \n const { target } = toRefs(props)\n const timer = ref()\n const errorDisplayed: Ref = ref(false)\n\n onMounted(() => displayError())\n\n function displayError() {\n timer.value = setTimeout(() => {\n errorDisplayed.value = true\n }, 500)\n }\n\n onUnmounted(() => {\n if (timer.value) {\n clearTimeout(timer.value)\n }\n })\n\nreturn (_ctx: any,_cache: any) => {\n return (errorDisplayed.value)\n ? (_openBlock(), _createBlock(Error, {\n key: 0,\n title: \"404\",\n message: _ctx.$t(`error.NOT_FOUND.${_unref(target)}`),\n \"button-text\": _ctx.$t('common.HOME')\n }, null, 8, [\"message\", \"button-text\"]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./NotFound.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NotFound.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderSlot as _renderSlot, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3a9a4a65\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n class: \"pagination-center\",\n \"aria-label\": \"navigation\"\n}\nconst _hoisted_2 = { class: \"pagination\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { toRefs } from 'vue'\n\n import { IPagination, TPaginationPayload } from '@/types/api'\n import { IOauth2ClientsPayload } from '@/types/oauth'\n import { TWorkoutsPayload } from '@/types/workouts'\n import { rangePagination } from '@/utils/api'\n\n interface Props {\n pagination: IPagination\n path: string\n query: TWorkoutsPayload | TPaginationPayload | IOauth2ClientsPayload\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Pagination',\n props: {\n pagination: null,\n path: null,\n query: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n pagination: IPagination\n path: string\n query: TWorkoutsPayload | TPaginationPayload | IOauth2ClientsPayload\n }\n\n \n\n const { pagination, path, query } = toRefs(props)\n\n function getQuery(\n page: number,\n cursor?: number\n ): TPaginationPayload | IOauth2ClientsPayload {\n const newQuery = Object.assign({}, query.value)\n newQuery.page = cursor ? page + cursor : page\n return newQuery\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"nav\", _hoisted_1, [\n _createElementVNode(\"ul\", _hoisted_2, [\n _createElementVNode(\"li\", {\n class: _normalizeClass([\"page-prev\", { disabled: !_unref(pagination).has_prev }])\n }, [\n _createVNode(_component_router_link, {\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(_unref(pagination).page, -1) },\n disabled: !_unref(pagination).has_prev\n }, {\n default: _withCtx(({ navigate }) => [\n _renderSlot(_ctx.$slots, \"default\", {\n onClick: ($event: any) => (_unref(pagination).has_next ? navigate : null)\n }, () => [\n _createTextVNode(_toDisplayString(_ctx.$t('api.PAGINATION.PREVIOUS')) + \" \", 1),\n _hoisted_3\n ])\n ]),\n _: 3\n }, 8, [\"to\", \"disabled\"])\n ], 2),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(rangePagination)(_unref(pagination).pages, _unref(pagination).page), (page) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: page,\n class: _normalizeClass([\"page\", { active: page === _unref(pagination).page }])\n }, [\n (page === '...')\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, \" ... \"))\n : (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(+page) }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(page), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]))\n ], 2))\n }), 128)),\n _createElementVNode(\"li\", {\n class: _normalizeClass([\"page-next\", { disabled: !_unref(pagination).has_next }])\n }, [\n _createVNode(_component_router_link, {\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(_unref(pagination).page, 1) },\n disabled: !_unref(pagination).has_next\n }, {\n default: _withCtx(({ navigate }) => [\n _renderSlot(_ctx.$slots, \"default\", {\n onClick: ($event: any) => (_unref(pagination).has_next ? navigate : null)\n }, () => [\n _createTextVNode(_toDisplayString(_ctx.$t('api.PAGINATION.NEXT')) + \" \", 1),\n _hoisted_5\n ])\n ]),\n _: 3\n }, 8, [\"to\", \"disabled\"])\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./Pagination.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Pagination.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Pagination.vue?vue&type=style&index=0&id=3a9a4a65&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3a9a4a65\"]])\n\nexport default __exports__","import { zxcvbnOptions } from '@zxcvbn-ts/core'\n\nexport const setZxcvbnOptions = async (language: string) => {\n const zxcvbnCommonPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-common'\n )\n const zxcvbnEnPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-en'\n )\n const zxcvbnFrPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-fr'\n )\n const zxcvbnDePackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-de'\n )\n const zxcvbnLangPackages: Record = {\n de: zxcvbnDePackage,\n en: zxcvbnEnPackage,\n fr: zxcvbnFrPackage,\n // no package available for norwegian bokmal, fallback on english\n nb: zxcvbnEnPackage,\n }\n const zxcvbnPackage = zxcvbnLangPackages[language]\n const options = {\n graphs: zxcvbnCommonPackage.default.adjacencyGraphs,\n dictionary: {\n ...zxcvbnCommonPackage.default.dictionary,\n ...zxcvbnPackage.default.dictionary,\n },\n }\n zxcvbnOptions.setOptions(options)\n}\n\nexport const getPasswordStrength = (strength: number): string => {\n switch (strength) {\n case 2:\n return 'AVERAGE'\n case 3:\n return 'GOOD'\n case 4:\n return 'STRONG'\n default:\n return 'WEAK'\n }\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74e71df5\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"password-strength\" }\nconst _hoisted_2 = [\"value\"]\nconst _hoisted_3 = {\n key: 0,\n class: \"password-strength-details\"\n}\nconst _hoisted_4 = { class: \"password-strength-value\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"info-box\"\n}\nconst _hoisted_6 = { class: \"password-feedback\" }\n\nimport { zxcvbn } from '@zxcvbn-ts/core'\n import {\n ComputedRef,\n Ref,\n computed,\n ref,\n onBeforeMount,\n toRefs,\n watch,\n } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { useStore } from '@/use/useStore'\n import { getPasswordStrength, setZxcvbnOptions } from '@/utils/password'\n\n interface Props {\n password: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordStength',\n props: {\n password: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n password: string\n }\n\n \n const { password } = toRefs(props)\n\n const store = useStore()\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const passwordScore: Ref = ref(0)\n const passwordStrength: Ref = ref('')\n const passwordSuggestions: Ref = ref([])\n const backgroundSize = ref('0% 100%')\n\n onBeforeMount(async () => await setZxcvbnOptions(language.value))\n\n function calculatePasswordStrength(password: string) {\n const zxcvbnResult = zxcvbn(password)\n passwordScore.value = zxcvbnResult.score\n passwordStrength.value = getPasswordStrength(passwordScore.value)\n passwordSuggestions.value = zxcvbnResult.feedback.suggestions\n backgroundSize.value = (passwordScore.value * 100) / 4 + '% 100%'\n }\n\n watch(\n () => language.value,\n async (newLanguageValue) => {\n await setZxcvbnOptions(newLanguageValue)\n }\n )\n watch(\n () => password.value,\n async (newPassword) => {\n if (isSuccess.value) {\n passwordStrength.value = ''\n } else {\n calculatePasswordStrength(newPassword)\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"input\", {\n class: _normalizeClass([\"password-slider\", `strength-${passwordScore.value}`]),\n style: _normalizeStyle({ backgroundSize: backgroundSize.value }),\n type: \"range\",\n value: passwordScore.value,\n min: \"0\",\n max: \"4\",\n step: \"1\"\n }, null, 14, _hoisted_2),\n (passwordStrength.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('user.PASSWORD_STRENGTH.LABEL')) + \": \" + _toDisplayString(_ctx.$t(`user.PASSWORD_STRENGTH.${passwordStrength.value}`)), 1),\n (passwordSuggestions.value.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"ul\", _hoisted_6, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(passwordSuggestions.value, (suggestion) => {\n return (_openBlock(), _createElementBlock(\"li\", { key: suggestion }, _toDisplayString(_ctx.$t(`user.PASSWORD_STRENGTH.SUGGESTIONS.${suggestion}`)), 1))\n }), 128))\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./PasswordStength.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordStength.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordStength.vue?vue&type=style&index=0&id=74e71df5&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74e71df5\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, vModelDynamic as _vModelDynamic, createElementVNode as _createElementVNode, withDirectives as _withDirectives, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5a126514\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"password-input\" }\nconst _hoisted_2 = [\"id\", \"disabled\", \"placeholder\", \"required\", \"type\"]\nconst _hoisted_3 = {\n key: 0,\n class: \"form-info\"\n}\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { Ref, ref, toRefs, watch, withDefaults } from 'vue'\n\n import PasswordStrength from '@/components/Common/PasswordStength.vue'\n\n interface Props {\n checkStrength?: boolean\n disabled?: boolean\n id?: string\n password?: string\n placeholder?: string\n required?: boolean\n }\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordInput',\n props: {\n checkStrength: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n id: { default: 'password' },\n password: { default: '' },\n placeholder: null,\n required: { type: Boolean, default: false }\n },\n emits: ['updatePassword', 'passwordError'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { checkStrength: boolean, disabled: boolean, id: string, password: string, placeholder?: string, required: boolean }\n\n \n const { checkStrength, disabled, id, password, placeholder, required } =\n toRefs(props)\n\n const showPassword: Ref = ref(false)\n const passwordValue: Ref = ref('')\n\n \n\n function togglePassword() {\n showPassword.value = !showPassword.value\n }\n function updatePassword(event: Event & { target: HTMLInputElement }) {\n emit('updatePassword', event.target.value)\n }\n function invalidPassword() {\n emit('passwordError')\n }\n\n watch(\n () => password.value,\n (newPassword) => {\n if (newPassword === '') {\n passwordValue.value = ''\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _withDirectives(_createElementVNode(\"input\", {\n id: _unref(id),\n disabled: _unref(disabled),\n placeholder: _unref(placeholder),\n required: _unref(required),\n type: showPassword.value ? 'text' : 'password',\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((passwordValue).value = $event)),\n minlength: \"8\",\n onInput: updatePassword,\n onInvalid: invalidPassword\n }, null, 40, _hoisted_2), [\n [_vModelDynamic, passwordValue.value]\n ]),\n _createElementVNode(\"div\", {\n class: \"show-password\",\n onClick: togglePassword\n }, [\n _createTextVNode(_toDisplayString(_ctx.$t(`user.${showPassword.value ? 'HIDE' : 'SHOW'}_PASSWORD`)) + \" \", 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa\", `fa-eye${showPassword.value ? '-slash' : ''}`]),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n (_unref(checkStrength))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _hoisted_4,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.PASSWORD_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(checkStrength))\n ? (_openBlock(), _createBlock(PasswordStrength, {\n key: 1,\n password: passwordValue.value\n }, null, 8, [\"password\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./PasswordInput.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordInput.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordInput.vue?vue&type=style&index=0&id=5a126514&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5a126514\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"map-attribution\" }, [\n /*#__PURE__*/_createElementVNode(\"span\", { class: \"map-attribution-text\" }, \"©\"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n class: \"map-attribution-text\",\n href: \"https://www.openstreetmap.org/copyright\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \" OpenStreetMap \")\n], -1)\n\nimport { toRefs, withDefaults } from 'vue'\n\n import { IWorkout } from '@/types/workouts'\n import { getApiUrl } from '@/utils'\n\n interface Props {\n workout: IWorkout\n displayHover?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StaticMap',\n props: {\n workout: null,\n displayHover: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { workout: IWorkout, displayHover: boolean }\n\n \n const { displayHover } = toRefs(props)\n const imageUrl = `${getApiUrl()}workouts/map/${props.workout.map}`\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"static-map\", { 'display-hover': _unref(displayHover) }])\n }, [\n (_unref(displayHover))\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: imageUrl,\n alt: \"\"\n }))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"bg-map-image\",\n style: _normalizeStyle({\n backgroundImage: `url(${imageUrl})`,\n })\n }, null, 4)),\n _hoisted_1\n ], 2))\n}\n}\n\n})","import script from \"./StaticMap.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StaticMap.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StaticMap.vue?vue&type=style&index=0&id=6b7e4baf&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-d5e9b348\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"start-chart\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { key: 1 }\nconst _hoisted_4 = { class: \"chart-radio\" }\nconst _hoisted_5 = [\"checked\"]\nconst _hoisted_6 = [\"checked\"]\nconst _hoisted_7 = [\"checked\"]\nconst _hoisted_8 = { key: 0 }\nconst _hoisted_9 = [\"checked\"]\nconst _hoisted_10 = { key: 1 }\nconst _hoisted_11 = [\"checked\"]\nconst _hoisted_12 = { key: 2 }\nconst _hoisted_13 = [\"checked\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Chart = _resolveComponent(\"Chart\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.hideChartIfNoData && _ctx.emptyStats)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('workouts.NO_WORKOUTS')), 1))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_distance\",\n checked: _ctx.displayedData === 'total_distance',\n onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_5),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_duration\",\n checked: _ctx.displayedData === 'total_duration',\n onClick: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_6),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DURATION')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"nb_workouts\",\n checked: _ctx.displayedData === 'nb_workouts',\n onClick: _cache[2] || (_cache[2] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_7),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.WORKOUT', 2)), 1)\n ]),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_8, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"average_speed\",\n checked: _ctx.displayedData === 'average_speed',\n onClick: _cache[3] || (_cache[3] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_9),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.AVERAGE_SPEED')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_10, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_ascent\",\n checked: _ctx.displayedData === 'total_ascent',\n onClick: _cache[4] || (_cache[4] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_11),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.ASCENT')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_12, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_descent\",\n checked: _ctx.displayedData === 'total_descent',\n onClick: _cache[5] || (_cache[5] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_13),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DESCENT')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n (_ctx.labels.length > 0)\n ? (_openBlock(), _createBlock(_component_Chart, {\n key: 0,\n datasets: _ctx.datasets,\n labels: _ctx.labels,\n displayedData: _ctx.displayedData,\n displayedSportIds: _ctx.displayedSportIds,\n fullStats: _ctx.fullStats,\n useImperialUnits: _ctx.user.imperial_units\n }, null, 8, [\"datasets\", \"labels\", \"displayedData\", \"displayedSportIds\", \"fullStats\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n}","import { resolveComponent as _resolveComponent, mergeProps as _mergeProps, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"chart\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BarChart = _resolveComponent(\"BarChart\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_BarChart, _mergeProps(_ctx.barChartProps, { class: \"bar-chart\" }), null, 16)\n ]))\n}","export const formatDuration = (\n totalSeconds: number,\n formatWithUnits = false\n): string => {\n let days = '0'\n if (formatWithUnits) {\n days = String(Math.floor(totalSeconds / 86400))\n totalSeconds %= 86400\n }\n const hours = String(Math.floor(totalSeconds / 3600)).padStart(2, '0')\n totalSeconds %= 3600\n const minutes = String(Math.floor(totalSeconds / 60)).padStart(2, '0')\n const seconds = String(totalSeconds % 60).padStart(2, '0')\n if (formatWithUnits) {\n return `${days === '0' ? '' : `${days}d `}${\n hours === '00' ? '' : `${hours}h `\n }${minutes}m ${seconds}s`\n }\n return `${hours === '00' ? '' : `${hours}:`}${minutes}:${seconds}`\n}\n","import { TStatisticsDatasetKeys } from '@/types/statistics'\nimport { formatDuration } from '@/utils/duration'\nimport { units } from '@/utils/units'\n\nexport const formatTooltipValue = (\n displayedData: TStatisticsDatasetKeys,\n value: number,\n useImperialUnits: boolean,\n formatWithUnits = true,\n unitFrom = 'km'\n): string => {\n const unitTo = useImperialUnits ? units[unitFrom].defaultTarget : unitFrom\n switch (displayedData) {\n case 'average_speed':\n return `${value.toFixed(2)} ${unitTo}/h`\n case 'total_duration':\n return formatDuration(value, formatWithUnits)\n case 'total_distance':\n case 'total_ascent':\n case 'total_descent':\n return `${value.toFixed(2)} ${unitTo}`\n default:\n return value.toString()\n }\n}\n","\n import { ChartData, ChartOptions, LayoutItem } from 'chart.js'\n import { ComputedRef, PropType, computed, defineComponent } from 'vue'\n import { BarChart, useBarChart } from 'vue-chart-3'\n import { useI18n } from 'vue-i18n'\n\n import { IChartDataset } from '@/types/chart'\n import { TStatisticsDatasetKeys } from '@/types/statistics'\n import { formatTooltipValue } from '@/utils/tooltip'\n\n export default defineComponent({\n name: 'Chart',\n components: {\n BarChart,\n },\n props: {\n datasets: {\n type: Object as PropType,\n required: true,\n },\n labels: {\n type: Object as PropType,\n required: true,\n },\n displayedData: {\n type: String as PropType,\n required: true,\n },\n displayedSportIds: {\n type: Array as PropType,\n required: true,\n },\n fullStats: {\n type: Boolean,\n required: true,\n },\n useImperialUnits: {\n type: Boolean,\n required: true,\n },\n },\n setup(props) {\n const { t } = useI18n()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function getNumber(value: any): number {\n return isNaN(value) ? 0 : +value\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function getSum(total: any, value: any): number {\n return getNumber(total) + getNumber(value)\n }\n function getUnit(displayedData: string) {\n return ['total_ascent', 'total_descent'].includes(displayedData)\n ? 'm'\n : 'km'\n }\n const chartData: ComputedRef> = computed(() => ({\n labels: props.labels,\n // workaround to avoid dataset modification\n datasets: JSON.parse(JSON.stringify(props.datasets)),\n }))\n const options = computed>(() => ({\n responsive: true,\n maintainAspectRatio: true,\n animation: false,\n layout: {\n padding: {\n top: props.fullStats ? 40 : 22,\n },\n },\n scales: {\n x: {\n stacked: true,\n grid: {\n drawOnChartArea: false,\n },\n },\n y: {\n stacked: props.displayedData !== 'average_speed',\n grid: {\n drawOnChartArea: false,\n },\n ticks: {\n maxTicksLimit: 6,\n callback: function (value) {\n return formatTooltipValue(\n props.displayedData,\n +value,\n props.useImperialUnits,\n false,\n getUnit(props.displayedData)\n )\n },\n },\n afterFit: function (scale: LayoutItem) {\n scale.width = props.fullStats ? 90 : 60\n },\n },\n },\n plugins: {\n datalabels: {\n anchor: 'end',\n align: 'end',\n color: function (context) {\n return props.displayedData === 'average_speed' &&\n context.dataset.backgroundColor\n ? // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n context.dataset.backgroundColor[0]\n : '#666666'\n },\n rotation: function (context) {\n return props.fullStats && context.chart.chartArea.width < 580\n ? 310\n : 0\n },\n display: function (context) {\n return props.fullStats && context.chart.chartArea.width < 300\n ? false\n : props.displayedData === 'average_speed'\n ? props.displayedSportIds.length == 1\n ? 'auto'\n : false\n : true\n },\n formatter: function (value, context) {\n if (props.displayedData === 'average_speed') {\n return formatTooltipValue(\n props.displayedData,\n value,\n props.useImperialUnits,\n false\n )\n } else {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const total: number = context.chart.data.datasets\n .map((d) => d.data[context.dataIndex])\n .reduce((total, value) => getSum(total, value), 0)\n return context.datasetIndex ===\n props.displayedSportIds.length - 1 && total > 0\n ? formatTooltipValue(\n props.displayedData,\n total,\n props.useImperialUnits,\n false,\n getUnit(props.displayedData)\n )\n : null\n }\n },\n },\n legend: {\n display: false,\n },\n tooltip: {\n interaction: {\n intersect: true,\n mode: 'index',\n position:\n props.displayedData === 'average_speed' ? 'nearest' : 'average',\n },\n filter: function (tooltipItem) {\n return tooltipItem.formattedValue !== '0'\n },\n callbacks: {\n label: function (context) {\n let label = t(`sports.${context.dataset.label}.LABEL`) || ''\n if (label) {\n label += ': '\n }\n if (context.parsed.y !== null) {\n label += formatTooltipValue(\n props.displayedData,\n context.parsed.y,\n props.useImperialUnits,\n true,\n getUnit(props.displayedData)\n )\n }\n return label\n },\n footer: function (tooltipItems) {\n if (props.displayedData === 'average_speed') {\n return ''\n }\n let sum = 0\n tooltipItems.map((tooltipItem) => {\n sum += tooltipItem.parsed.y\n })\n return (\n `${t('common.TOTAL')}: ` +\n formatTooltipValue(\n props.displayedData,\n sum,\n props.useImperialUnits,\n true,\n getUnit(props.displayedData)\n )\n )\n },\n },\n },\n },\n }))\n const { barChartProps } = useBarChart({\n chartData,\n options,\n })\n return { barChartProps }\n },\n })\n","import { render } from \"./Chart.vue?vue&type=template&id=6c8b76cd&ts=true\"\nimport script from \"./Chart.vue?vue&type=script&lang=ts\"\nexport * from \"./Chart.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n import { format } from 'date-fns'\n import {\n ComputedRef,\n PropType,\n Ref,\n computed,\n defineComponent,\n ref,\n watch,\n onBeforeMount,\n } from 'vue'\n\n import Chart from '@/components/Common/StatsChart/Chart.vue'\n import { STATS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import {\n IStatisticsChartData,\n TStatisticsDatasetKeys,\n IStatisticsDateParams,\n TStatisticsFromApi,\n IStatisticsParams,\n } from '@/types/statistics'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatStats } from '@/utils/statistics'\n\n export default defineComponent({\n name: 'UserMonthStats',\n components: {\n Chart,\n },\n props: {\n sports: {\n type: Object as PropType,\n required: true,\n },\n user: {\n type: Object as PropType,\n required: true,\n },\n chartParams: {\n type: Object as PropType,\n required: true,\n },\n displayedSportIds: {\n type: Array as PropType,\n default: () => [],\n },\n fullStats: {\n type: Boolean,\n default: false,\n },\n hideChartIfNoData: {\n type: Boolean,\n default: false,\n },\n },\n setup(props) {\n const store = useStore()\n\n const displayedData: Ref = ref('total_distance')\n const statistics: ComputedRef = computed(\n () => store.getters[STATS_STORE.GETTERS.USER_STATS]\n )\n const formattedStats: ComputedRef = computed(() =>\n formatStats(\n props.chartParams,\n props.user.weekm,\n props.sports,\n props.displayedSportIds,\n statistics.value,\n props.user.imperial_units,\n props.user.date_format\n )\n )\n\n onBeforeMount(() =>\n getStatistics(getApiParams(props.chartParams, props.user))\n )\n\n function getStatistics(apiParams: IStatisticsParams) {\n store.dispatch(STATS_STORE.ACTIONS.GET_USER_STATS, {\n username: props.user.username,\n filterType: 'by_time',\n params: apiParams,\n })\n }\n function updateDisplayData(\n event: Event & {\n target: HTMLInputElement & { name: TStatisticsDatasetKeys }\n }\n ) {\n displayedData.value = event.target.name\n }\n function getApiParams(\n chartParams: IStatisticsDateParams,\n user: IAuthUserProfile\n ): IStatisticsParams {\n return {\n from: format(chartParams.start, 'yyyy-MM-dd'),\n to: format(chartParams.end, 'yyyy-MM-dd'),\n time:\n chartParams.duration === 'week'\n ? `week${user.weekm ? 'm' : ''}`\n : chartParams.duration,\n }\n }\n\n watch(\n () => props.chartParams,\n async (newParams) => {\n getStatistics(getApiParams(newParams, props.user))\n }\n )\n\n return {\n datasets: computed(\n () => formattedStats.value.datasets[displayedData.value]\n ),\n labels: computed(() => formattedStats.value.labels),\n emptyStats: computed(() => Object.keys(statistics.value).length === 0),\n displayedData,\n updateDisplayData,\n }\n },\n })\n","import { render } from \"./index.vue?vue&type=template&id=d5e9b348&scoped=true&ts=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=d5e9b348&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-d5e9b348\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-20291951\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"box user-header\" }\nconst _hoisted_2 = { class: \"user-details\" }\nconst _hoisted_3 = { class: \"user-name\" }\nconst _hoisted_4 = { class: \"user-stats\" }\nconst _hoisted_5 = { class: \"user-stat\" }\nconst _hoisted_6 = { class: \"stat-number\" }\nconst _hoisted_7 = { class: \"stat-label\" }\nconst _hoisted_8 = { class: \"user-stat\" }\nconst _hoisted_9 = { class: \"stat-label\" }\nconst _hoisted_10 = { class: \"user-stat hide-small\" }\nconst _hoisted_11 = { class: \"stat-number\" }\nconst _hoisted_12 = { class: \"stat-label\" }\n\nimport { computed, ComputedRef, toRefs } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE } from '@/store/constants'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserHeader',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const { user } = toRefs(props)\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_unref(user).username), 1),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"span\", _hoisted_6, _toDisplayString(_unref(user).nb_workouts), 1),\n _createElementVNode(\"span\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.WORKOUT', _unref(user).nb_workouts)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createVNode(_component_Distance, {\n distance: _unref(user).total_distance,\n unitFrom: \"km\",\n digits: 0,\n displayUnit: false,\n useImperialUnits: _unref(authUser).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_unref(authUser).imperial_units ? 'miles' : 'km'), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_unref(user).nb_sports), 1),\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('workouts.SPORT', _unref(user).nb_sports)), 1)\n ])\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./UserHeader.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserHeader.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserHeader.vue?vue&type=style&index=0&id=20291951&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-20291951\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-217519af\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"user-infos\",\n class: \"description-list\"\n}\nconst _hoisted_2 = {\n key: 1,\n class: \"info-box success-message\"\n}\nconst _hoisted_3 = {\n key: 4,\n class: \"email-form form-box\"\n}\nconst _hoisted_4 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_5 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_6 = { class: \"form-buttons\" }\nconst _hoisted_7 = {\n class: \"confirm\",\n type: \"submit\"\n}\nconst _hoisted_8 = [\"onClick\"]\nconst _hoisted_9 = { key: 5 }\nconst _hoisted_10 = { class: \"user-bio\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"profile-buttons\"\n}\nconst _hoisted_12 = [\"onClick\"]\nconst _hoisted_13 = {\n key: 1,\n class: \"profile-buttons\"\n}\n\nimport { format } from 'date-fns'\n import {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n withDefaults,\n watch,\n onUnmounted,\n } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate, getDateFormat } from '@/utils/dates'\n import { localeFromLanguage } from '@/utils/locales'\n\n interface Props {\n user: IUserProfile\n fromAdmin?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserInfos',\n props: {\n user: null,\n fromAdmin: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { user: IUserProfile, fromAdmin: boolean }\n\n \n\n const store = useStore()\n\n const { user, fromAdmin } = toRefs(props)\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const registrationDate = computed(() =>\n props.user.created_at\n ? formatDate(\n props.user.created_at,\n authUser.value.timezone,\n authUser.value.date_format\n )\n : ''\n )\n const birthDate = computed(() =>\n props.user.birth_date\n ? format(\n new Date(props.user.birth_date),\n `${getDateFormat(authUser.value.date_format, language.value)}`,\n { locale: localeFromLanguage[language.value] }\n )\n : ''\n )\n const isSuccess = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS_IS_SUCCESS]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const displayModal: Ref = ref('')\n const formErrors = ref(false)\n const displayUserEmailForm: Ref = ref(false)\n const newUserEmail: Ref = ref('')\n const currentAction: Ref = ref('')\n\n function updateDisplayModal(value: string) {\n displayModal.value = value\n if (value !== '') {\n store.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n }\n }\n function deleteUserAccount(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.DELETE_USER_ACCOUNT, { username })\n }\n function resetUserPassword(username: string) {\n currentAction.value = 'password-reset'\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n resetPassword: true,\n })\n }\n function confirmUserAccount(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n activate: true,\n })\n }\n function displayEmailForm() {\n resetErrorsAndSuccess()\n newUserEmail.value = user.value.email_to_confirm\n ? user.value.email_to_confirm\n : ''\n displayUserEmailForm.value = true\n currentAction.value = 'email-update'\n }\n function hideEmailForm() {\n newUserEmail.value = ''\n displayUserEmailForm.value = false\n }\n function updateUserEmail(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n new_email: newUserEmail.value,\n })\n }\n function resetErrorsAndSuccess() {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n currentAction.value = ''\n }\n\n onUnmounted(() => resetErrorsAndSuccess())\n\n watch(\n () => isSuccess.value,\n (newIsSuccess) => {\n if (newIsSuccess) {\n updateDisplayModal('')\n hideEmailForm()\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_AlertMessage = _resolveComponent(\"AlertMessage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: \n displayModal.value === 'delete'\n ? 'admin.CONFIRM_USER_ACCOUNT_DELETION'\n : 'admin.CONFIRM_USER_PASSWORD_RESET'\n ,\n strongMessage: _unref(user).username,\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (\n displayModal.value === 'delete'\n ? deleteUserAccount(_unref(user).username)\n : resetUserPassword(_unref(user).username)\n )),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal('')))\n }, null, 8, [\"title\", \"message\", \"strongMessage\"]))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\n `admin.${\n currentAction.value === 'password-reset'\n ? 'PASSWORD_RESET'\n : 'USER_EMAIL_UPDATE'\n }_SUCCESSFUL`\n )), 1))\n : _createCommentVNode(\"\", true),\n (!_unref(user).is_active)\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 2,\n message: \"user.THIS_USER_ACCOUNT_IS_INACTIVE\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 3,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (displayUserEmailForm.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (updateUserEmail(_unref(user).username)), [\"prevent\"]))\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.CURRENT_EMAIL')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"email\",\n type: \"email\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_unref(user).email) = $event)),\n disabled: \"\"\n }, null, 512), [\n [_vModelText, _unref(user).email]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_5, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.NEW_EMAIL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"new-email\",\n type: \"email\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((newUserEmail).value = $event))\n }, null, 512), [\n [_vModelText, newUserEmail.value]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"button\", _hoisted_7, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(hideEmailForm, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_8)\n ])\n ], 34)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(registrationDate)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).first_name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LAST_NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).last_name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.BIRTH_DATE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(birthDate)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LOCATION')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).location), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.BIO')) + \":\", 1),\n _createElementVNode(\"dd\", _hoisted_10, _toDisplayString(_unref(user).bio), 1)\n ]),\n (_unref(fromAdmin))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n (_unref(authUser).username !== _unref(user).username)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"danger\",\n onClick: _cache[5] || (_cache[5] = _withModifiers(($event: any) => (updateDisplayModal('delete')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.DELETE_USER')), 1))\n : _createCommentVNode(\"\", true),\n (!_unref(user).is_active)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 1,\n onClick: _cache[6] || (_cache[6] = _withModifiers(($event: any) => (confirmUserAccount(_unref(user).username)), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.ACTIVATE_USER_ACCOUNT')), 1))\n : _createCommentVNode(\"\", true),\n (_unref(authUser).username !== _unref(user).username)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 2,\n onClick: _withModifiers(displayEmailForm, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('admin.UPDATE_USER_EMAIL')), 9, _hoisted_12))\n : _createCommentVNode(\"\", true),\n (\n _unref(authUser).username !== _unref(user).username &&\n _unref(appConfig).is_email_sending_enabled\n )\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 3,\n onClick: _cache[7] || (_cache[7] = _withModifiers(($event: any) => (updateDisplayModal('reset')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.RESET_USER_PASSWORD')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.$router.go(-1)))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createElementVNode(\"button\", {\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.$router.push('/profile/edit')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]))\n ]))\n}\n}\n\n})","import script from \"./UserInfos.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserInfos.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserInfos.vue?vue&type=style&index=0&id=217519af&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-217519af\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, withDirectives as _withDirectives, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-b3c885de\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-form\" }\nconst _hoisted_2 = {\n key: 2,\n class: \"info-box success-message\"\n}\nconst _hoisted_3 = { class: \"form-items\" }\nconst _hoisted_4 = [\"disabled\", \"placeholder\"]\nconst _hoisted_5 = {\n key: 1,\n class: \"form-info\"\n}\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = [\"disabled\", \"placeholder\"]\nconst _hoisted_8 = {\n key: 3,\n class: \"form-info\"\n}\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = { key: 3 }\nconst _hoisted_12 = { key: 0 }\nconst _hoisted_13 = { key: 4 }\nconst _hoisted_14 = { class: \"account\" }\nconst _hoisted_15 = { key: 5 }\n\nimport {\n ComputedRef,\n computed,\n onUnmounted,\n reactive,\n ref,\n toRefs,\n watch,\n withDefaults,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import PasswordInput from '@/components/Common/PasswordInput.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { ILoginRegisterFormData } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n action: string\n token?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAuthForm',\n props: {\n action: null,\n token: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { action: string, token: string }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { action } = toRefs(props)\n const formData: ILoginRegisterFormData = reactive({\n username: '',\n email: '',\n password: '',\n })\n const buttonText: ComputedRef = computed(() =>\n getButtonText(props.action)\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const isRegistrationSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_REGISTRATION_SUCCESS]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const registration_disabled: ComputedRef = computed(\n () =>\n props.action === 'register' && !appConfig.value.is_registration_enabled\n )\n const sendingEmailDisabled: ComputedRef = computed(\n () =>\n ['reset-request', 'account-confirmation-resend'].includes(props.action) &&\n !appConfig.value.is_email_sending_enabled\n )\n const formErrors = ref(false)\n\n function getButtonText(action: string): string {\n switch (action) {\n case 'reset-request':\n case 'reset':\n return 'buttons.SUBMIT'\n default:\n return `buttons.${props.action.toUpperCase()}`\n }\n }\n function invalidateForm() {\n formErrors.value = true\n }\n function updatePassword(password: string) {\n formData.password = password\n }\n function onSubmit(actionType: string) {\n switch (actionType) {\n case 'reset':\n if (!props.token) {\n return store.commit(\n ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES,\n 'user.INVALID_TOKEN'\n )\n }\n return store.dispatch(AUTH_USER_STORE.ACTIONS.RESET_USER_PASSWORD, {\n password: formData.password,\n token: props.token,\n })\n case 'reset-request':\n return store.dispatch(\n AUTH_USER_STORE.ACTIONS.SEND_PASSWORD_RESET_REQUEST,\n {\n email: formData.email,\n }\n )\n case 'account-confirmation-resend':\n return store.dispatch(\n AUTH_USER_STORE.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL,\n {\n email: formData.email,\n }\n )\n default:\n formData['language'] = language.value\n store.dispatch(AUTH_USER_STORE.ACTIONS.LOGIN_OR_REGISTER, {\n actionType,\n formData,\n redirectUrl: route.query.from,\n })\n }\n }\n function resetFormData() {\n formData.username = ''\n formData.email = ''\n formData.password = ''\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\n watch(\n () => route.path,\n async () => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n store.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n false\n )\n formErrors.value = false\n resetFormData()\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_AlertMessage = _resolveComponent(\"AlertMessage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n id: \"user-auth-form\",\n class: _normalizeClass(`${\n ['reset', 'reset-request'].includes(_unref(action)) ? _unref(action) : 'user-form'\n }`)\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"form-box\", {\n disabled: _unref(registration_disabled),\n }])\n }, [\n (_unref(registration_disabled))\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 0,\n message: \"user.REGISTER_DISABLED\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(sendingEmailDisabled))\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 1,\n message: \"admin.EMAIL_SENDING_DISABLED\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess) || _unref(isRegistrationSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\n `user.PROFILE.SUCCESSFUL_${\n _unref(isRegistrationSuccess)\n ? `REGISTRATION${\n _unref(appConfig).is_email_sending_enabled ? '_WITH_EMAIL' : ''\n }`\n : 'UPDATE'\n }`\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (onSubmit(_unref(action))), [\"prevent\"]))\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(action) === 'register')\n ? _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n id: \"username\",\n disabled: _unref(registration_disabled),\n required: \"\",\n pattern: \"[a-zA-Z0-9_]+\",\n minlength: \"3\",\n maxlength: \"30\",\n onInvalid: invalidateForm,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((formData.username) = $event)),\n placeholder: _ctx.$t('user.USERNAME')\n }, null, 40, _hoisted_4)), [\n [_vModelText, formData.username]\n ])\n : _createCommentVNode(\"\", true),\n (_unref(action) === 'register')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _hoisted_6,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.USERNAME_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(action) !== 'reset')\n ? _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 2,\n id: \"email\",\n disabled: _unref(registration_disabled) || _unref(sendingEmailDisabled),\n required: \"\",\n onInvalid: invalidateForm,\n type: \"email\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((formData.email) = $event)),\n placeholder: _ctx.$t('user.EMAIL')\n }, null, 40, _hoisted_7)), [\n [_vModelText, formData.email]\n ])\n : _createCommentVNode(\"\", true),\n (\n [\n 'reset-request',\n 'register',\n 'account-confirmation-resend',\n ].includes(_unref(action))\n )\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _hoisted_9,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.EMAIL_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (\n !['account-confirmation-resend', 'reset-request'].includes(\n _unref(action)\n )\n )\n ? (_openBlock(), _createBlock(PasswordInput, {\n key: 4,\n disabled: _unref(registration_disabled),\n required: true,\n placeholder: \n _unref(action) === 'reset'\n ? _ctx.$t('user.ENTER_PASSWORD')\n : _ctx.$t('user.PASSWORD')\n ,\n password: formData.password,\n checkStrength: ['reset', 'register'].includes(_unref(action)),\n onUpdatePassword: updatePassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"placeholder\", \"password\", \"checkStrength\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"button\", {\n type: \"submit\",\n disabled: _unref(registration_disabled) || _unref(sendingEmailDisabled)\n }, _toDisplayString(_ctx.$t(_unref(buttonText))), 9, _hoisted_10)\n ], 34),\n (_unref(action) === 'login')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/register\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.REGISTER')), 1)\n ]),\n _: 1\n }),\n (_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_12, \"-\"))\n : _createCommentVNode(\"\", true),\n (_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n class: \"links\",\n to: \"/password-reset/request\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PASSWORD_FORGOTTEN')), 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(action) === 'register')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('user.ALREADY_HAVE_ACCOUNT')), 1),\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/login\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.LOGIN')), 1)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (\n ['login', 'register'].includes(_unref(action)) &&\n _unref(appConfig).is_email_sending_enabled\n )\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/account-confirmation/resend\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.ACCOUNT_CONFIRMATION_NOT_RECEIVED')), 1)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 6,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ])\n ], 2))\n}\n}\n\n})","import script from \"./UserAuthForm.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAuthForm.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAuthForm.vue?vue&type=style&index=0&id=b3c885de&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b3c885de\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"user-picture\" }\nconst _hoisted_2 = [\"alt\", \"src\"]\nconst _hoisted_3 = {\n key: 1,\n class: \"no-picture\"\n}\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-user-circle-o\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_5 = [\n _hoisted_4\n]\n\nimport { computed } from 'vue'\n\n import { IUserProfile } from '@/types/user'\n import { getApiUrl } from '@/utils'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPicture',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const authUserPictureUrl = computed(() =>\n props.user.picture\n ? `${getApiUrl()}users/${props.user.username}/picture?${Date.now()}`\n : ''\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(authUserPictureUrl) !== '')\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n class: \"profile-user-img\",\n alt: _ctx.$t('user.USER_PICTURE'),\n src: _unref(authUserPictureUrl)\n }, null, 8, _hoisted_2))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _hoisted_5))\n ]))\n}\n}\n\n})","import script from \"./UserPicture.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPicture.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPicture.vue?vue&type=style&index=0&id=26bea286&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","\n\n\n","import { render } from \"./NoWorkouts.vue?vue&type=template&id=4b4d15fb&scoped=true\"\nconst script = {}\n\nimport \"./NoWorkouts.vue?vue&type=style&index=0&id=4b4d15fb&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4b4d15fb\"]])\n\nexport default __exports__","var map = {\n\t\"./de/de.ts\": 9923,\n\t\"./en/en.ts\": 8757,\n\t\"./fr/fr.ts\": 6625,\n\t\"./nb/nb.ts\": 8891\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 4612;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + ({\"24\":\"reset\",\"193\":\"statistics\",\"328\":\"admin\",\"401\":\"workouts\",\"845\":\"profile\",\"881\":\"password\"}[chunkId] || chunkId) + \".\" + {\"24\":\"d9073cf1\",\"93\":\"02cf293c\",\"193\":\"c9a8011a\",\"243\":\"e551248f\",\"328\":\"9bc68088\",\"401\":\"8abaa659\",\"431\":\"e5102e07\",\"633\":\"81a8ddc8\",\"845\":\"430ae7df\",\"858\":\"3f2a93f2\",\"881\":\"43430dfc\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/css/\" + {\"24\":\"reset\",\"193\":\"statistics\",\"328\":\"admin\",\"401\":\"workouts\",\"845\":\"profile\"}[chunkId] + \".\" + {\"24\":\"e2527ec6\",\"193\":\"40e24e75\",\"328\":\"73df498d\",\"401\":\"41709693\",\"845\":\"203e78e2\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"fittrackee_client:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"24\":1,\"193\":1,\"328\":1,\"401\":1,\"845\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkfittrackee_client\"] = self[\"webpackChunkfittrackee_client\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(4970); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["authApi","axios","baseURL","getApiUrl","interceptors","request","use","config","controller","AbortController","signal","requestKey","removeRequestIfPending","pendingRequests","authToken","store","AUTH_USER_STORE","auth","headers","Authorization","error","Promise","reject","response","message","Map","generateRequestKey","method","url","params","data","JSON","stringify","join","has","get","abort","delete","disabledLanguages","loadLocaleMessages","locales","require","messages","keys","forEach","key","matched","match","length","includes","locale","default","createI18n","legacy","fallbackLocale","globalInjection","ctx","normalize","_normalize","interpolate","_interpolate","list","_list","plural","_plural","about","AboutTranslations","admin","AdministrationTranslations","api","ApiTranslations","buttons","ButtonsTranslations","common","CommonTranslations","dashboard","DashboardTranslations","ErrorTranslations","oauth2","OAuth2Translations","sports","SportsTranslations","statistics","StatisticsTranslations","user","UserTranslations","workouts","WorkoutsTranslations","register","ready","console","log","registered","cached","updatefound","updated","offline","_withScopeId","n","_pushScopeId","_popScopeId","_hoisted_1","id","_hoisted_2","class","_hoisted_3","_hoisted_4","_createElementVNode","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","href","target","rel","_defineComponent","__name","props","version","adminContact","setup","__props","toRefs","_ctx","_cache","_component_router_link","_resolveComponent","_openBlock","_createElementBlock","_createTextVNode","_toDisplayString","_unref","_createVNode","to","_withCtx","$t","_","_createCommentVNode","__exports__","emits","emit","useStore","authUser","computed","getters","isAuthenticated","language","ROOT_STORE","isMenuOpen","ref","openMenu","value","closeMenu","updateLanguage","option","dispatch","toString","logout","_component_Dropdown","onClick","$event","$router","push","_normalizeClass","capitalize","_createBlock","UserPicture","username","availableLanguages","options","selected","onSelected","ErrorImg","innerHTML","appConfig","appLoading","hideScrollBar","displayScrollButton","updateHideScrollBar","isScrolledToBottom","element","getBoundingClientRect","top","window","innerHeight","bottom","scroll","onscroll","document","querySelector","scrollToTop","scrollTo","behavior","setTimeout","initLanguage","navigatorLanguage","navigator","split","localeFromLanguage","e","onBeforeMount","onMounted","_component_Loader","_component_router_view","_Fragment","NavBar","onMenuInteraction","NoConfig","Footer","admin_contact","name","charLimit","disabled","type","Boolean","input","text","updateText","event","watch","_withDirectives","maxLenght","onInput","_vModelText","distance","unitFrom","useImperialUnits","digits","displayUnit","speed","strong","unitTo","units","defaultTarget","convertedDistance","convertDistance","parseFloat","toFixed","route","useRoute","isOpen","dropdownOptions","map","toggleDropdown","updateSelected","path","_renderSlot","$slots","_renderList","index","label","Array","isArray","subMessage","xmlns","x","y","viewBox","style","d","render","cx","cy","r","sportLabel","color","title","sportColors","inject","_normalizeStyle","fill","CyclingSport","CyclingTransport","CyclingVirtual","Hiking","MountainBiking","MountainBikingElectric","Rowing","Running","SkiingAlpine","SkiingCrossCountry","Snowshoes","Trail","Walking","script","strongMessage","errorMessages","onUnmounted","commit","_component_i18n_t","_component_ErrorMessage","_component_Card","content","keypath","customComponents","AlertMessage","Card","CustomTextArea","Distance","Dropdown","ErrorMessage","Loader","Modal","SportImage","clickOutsideDirective","mounted","binding","clickOutsideEvent","contains","body","addEventListener","unmounted","removeEventListener","undefined","Chart","BarElement","LineElement","PointElement","Legend","Title","Tooltip","Filler","BarController","CategoryScale","LineController","LinearScale","ChartDataLabels","app","createApp","App","provide","i18n","router","VueFullscreen","directive","component","mount","for","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","edition","useRouter","appData","reactive","max_users","max_single_file_size","max_zip_file_size","gpx_limit_import","updateForm","Object","getFileSizeInMB","onCancel","onSubmit","formData","assign","_withModifiers","min","step","icon","appStatistics","uploadDirSize","getReadableFileSize","uploads_dir_size","StatCard","users","size","suffix","AppStatsCards","is_registration_enabled","is_email_sending_enabled","t","useI18n","translatedSports","translateSports","SPORTS_STORE","updateSportStatus","isActive","_component_SportImage","sport","translatedLabel","is_active","danger","has_workouts","query","q","searchUsers","resetFilter","onKeyup","_withKeys","placeholder","trim","orderByList","defaultOrderBy","getQuery","USERS_STORE","pagination","loadUsers","queryParams","reloadUsers","updateUser","queryParam","queryValue","page","newQuery","UsersNameFilter","onFilterOnUsername","FilterSelects","sort","sortList","order_by","onUpdateSelect","email","formatDate","created_at","timezone","date_format","nb_workouts","Pagination","tabs","selectedTab","getPath","tab","toLocaleLowerCase","checked","UserHeader","UserProfileTabs","appLanguage","userLanguage","languageLabels","fistDayOfWeek","weekm","display_ascent","getDateFormat","imperial_units","loading","userForm","password","new_password","isSuccess","emailUpdate","formErrors","displayModal","invalidateForm","updateUserForm","updatePassword","updateNewPassword","updateProfile","payload","updateDisplayModal","deleteAccount","async","isSuccessValue","_component_Modal","onConfirmAction","onCancelAction","errors","required","onInvalid","PasswordInput","onUpdatePassword","onPasswordError","checkStrength","first_name","last_name","birth_date","location","bio","registrationDate","format","Date","updateBio","_component_CustomTextArea","onUpdateValue","fileSizeLimit","pictureFile","deleteUserPicture","updatePictureFile","files","updateUserPicture","picture","accept","timeZones","tzList","focusItemIndex","matchTimezone","toLowerCase","onMouseOver","onUpdateTimezone","onEnter","preventDefault","firstElementChild","openDropdown","onKeydown","ref_key","filter","tz","focus","onMouseover","autofocus","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","weekStart","imperialUnits","ascentData","dateFormatOptions","availableDateFormatOptions","toUTCString","updateTZ","updateAscentDisplay","updateImperialUnit","updateWeekM","lang","_vModelSelect","TimezoneDropdown","dateFormat","start","unit","status","oauth2_scopes","admin_oauth2_scopes","appForm","client_name","client_uri","client_description","redirect_uri","scopes","filtered_scopes","getScopes","redirect_uris","scope","OAUTH2_STORE","updateDescription","updateScopes","indexOf","splice","admin_scopes","description","onChange","client","loadApp","client_id","authorizeApp","response_type","state","code_challenge","code_challenge_method","afterCreation","revocationSuccessful","messageToDisplay","idCopied","secretCopied","clipboardSupport","loadClient","updateMessageToDisplay","forDelete","confirmAction","clientId","copyIdToClipboard","clipboard","writeText","copySecretToClipboard","client_secret","newValue","issued_at","website","clients","getClientsQuery","clientsQuery","getNumberQueryValue","defaultPage","loadClients","isEdition","defaultColor","sports_list","sportPayload","sport_id","stopped_speed_threshold","updateSportInEdition","is_active_for_user","resetSportPayload","isSportInEdition","sportId","updateColor","updateThreshold","updateIsActive","updateSport","resetSport","newIsLoading","src","alt","BikePic","About","workout","_component_Distance","workoutId","workout_date","formatDistance","addSuffix","with_gpx","StaticMap","moving","min_alt","max_alt","ascent","descent","per_page","initWorkoutsCount","loadWorkouts","WORKOUTS_STORE","moreWorkoutsExist","previous_workout","defaultOrder","loadMoreWorkouts","WorkoutCard","s","NoWorkouts","displayHARecord","sportColor","records","record","record_type","height","width","colors","datasets","angleOffset","radius","circumference","Math","PI","calculateStrokeDashOffset","percentage","returnCircleTransformValue","rotation","entries","stroke","transform","isHidden","togglePane","stopPropagation","_directive_click_outside","_resolveDirective","DonutChart","CalendarWorkout","getSportLabel","getSportColor","chartDatasets","getDonutDatasets","sportIdColors","displayedWorkoutCount","slice","CalendarWorkoutsChart","currentDay","endDate","startDate","weekStartingMonday","rows","getDays","day","days","i","addDays","isWeekEnd","filterWorkouts","isSameDay","getDateWithTZ","reverse","row","isSameMonth","today","isToday","CalendarWorkouts","localeOptions","calendarDates","getCalendarStartAndEnd","calendarWorkouts","getCalendarWorkouts","apiParams","from","end","displayNextMonth","addMonths","displayPreviousMonth","subMonths","CalendarHeader","onDisplayNextMonth","onDisplayPreviousMonth","CalendarDays","CalendarCells","date","chartParams","duration","startOfMonth","endOfMonth","selectedSportIds","StatChart","formatRecord","distanceUnitFrom","distanceUnitTo","ascentUnitFrom","ascentUnitTo","Error","workout_id","sortRecords","a","b","recordALabel","recordBLabel","getRecordsBySports","reduce","sportList","find","sportTranslatedLabel","getTranslatedRecords","translatedRecords","recordsBySport","RecordsCard","userTotalDuration","total_duration","totalDuration","get_duration","totalDistance","total_distance","totalAscent","total_ascent","nb_sports","isSelected","updateDisplayColumn","UserStatsCards","UserMonthStats","UserRecords","UserCalendar","Timeline","NotFound","action","LoginOrRegisterForm","getTabFromPath","regex","tag","replace","toUpperCase","routes","Dashboard","LoginOrRegister","children","Profile","UserInfos","UserPreferences","UserSportPreferences","UserApps","UserAppsList","UserApp","AddUserApp","AuthorizeUserApp","ProfileEdition","UserInfosEdition","UserAccountEdition","UserPictureEdition","UserPreferencesEdition","displaySegment","AdminMenu","AdminApplication","AdminSports","fromAdmin","AdminUsers","AboutView","NotFoundView","createRouter","history","createWebHistory","process","pathsWithoutAuthentication","pathsWithoutChecks","beforeEach","next","then","fullPath","catch","AuthUserActions","AuthUserGetters","AuthUserMutations","OAuth2Actions","OAuth2Getters","OAuth2Mutations","RootActions","RootGetters","RootMutations","SportsActions","SportsGetters","SportsMutation","StatisticsActions","StatisticsGetters","StatisticsMutations","UsersActions","UsersGetters","UsersMutations","ACTIONS","GETTERS","MUTATIONS","STATS_STORE","WorkoutsActions","WorkoutsGetters","WorkoutsMutations","deleteUserAccount","context","res","handleError","actions","finally","resetPassword","reset_password","activate","new_email","removeAuthUserData","localStorage","removeItem","token","auth_token","setItem","refreshUser","actionType","redirectUrl","form","FormData","append","authUserProfile","isRegistrationSuccess","mutations","authUserState","get_client","set","redirect_url","oAuth2State","setAttribute","application","root","enUS","sportsState","filterType","statisticsState","updatedUser","usersState","getWorkouts","segmentUrl","segmentId","segments","chart_data","gpx","file","notes","calendar_workouts","timeline_workouts","user_workouts","workoutData","concat","chartData","workoutsState","modules","authUserModule","oAuthModule","sportsModule","statsModule","usersModule","workoutsModule","createStore","VuexStore","defaultPerPage","defaultValue","getStringQueryValue","availableValues","locationQuery","queryOptions","defaultSort","order","workoutsPayloadKeys","getRange","stop","rangePagination","pages","currentPage","getStartDate","startOfWeek","weekStartsOn","startOfYear","incrementDate","addYears","dateInUTC","utcToZonedTime","monthStart","monthEnd","endOfWeek","formatWorkoutDate","dateTime","timeFormat","workout_time","availableDateFormats","dateStringFormats","de","en","fr","dateString","withTime","inputDate","l","df","suffixes","fileSize","asText","floor","pow","msg","m","availableLocales","sortSports","sportATranslatedLabel","sportBTranslatedLabel","activeStatus","sportsToInclude","dateFormats","week","chart","month","year","datasetKeys","getDateKeys","getStatisticsChartDataset","isLineChart","dataset","backgroundColor","borderColor","spanGaps","getDatasets","displayedSports","average_speed","total_descent","convertStatsValue","datasetKey","convertStatsDistance","formatStats","displayedSportsId","apiStats","userDateFormat","dayKeys","labels","sportsId","displayedSport","getStatsDateParams","timeFrame","subYears","endOfYear","updateChartParams","backward","subWeeks","addWeeks","ft","system","multiplier","mi","km","factors","metric","imperial","borderWidth","yAxisID","elevation","distance_labels","duration_labels","coordinates","latitude","longitude","total","count","perPage","onSelectUpdate","nb","buttonText","timer","errorDisplayed","displayError","clearTimeout","cursor","has_prev","navigate","has_next","active","setZxcvbnOptions","zxcvbnCommonPackage","zxcvbnEnPackage","zxcvbnFrPackage","zxcvbnDePackage","zxcvbnLangPackages","zxcvbnPackage","graphs","adjacencyGraphs","dictionary","zxcvbnOptions","getPasswordStrength","strength","passwordScore","passwordStrength","passwordSuggestions","backgroundSize","calculatePasswordStrength","zxcvbnResult","zxcvbn","score","feedback","suggestions","newLanguageValue","newPassword","max","suggestion","showPassword","passwordValue","togglePassword","invalidPassword","minlength","_vModelDynamic","PasswordStrength","displayHover","imageUrl","backgroundImage","$props","$setup","$data","$options","_component_Chart","hideChartIfNoData","emptyStats","displayedData","args","updateDisplayData","fullStats","displayedSportIds","_component_BarChart","_mergeProps","barChartProps","formatDuration","totalSeconds","formatWithUnits","String","hours","padStart","minutes","seconds","formatTooltipValue","defineComponent","components","BarChart","getNumber","isNaN","getSum","getUnit","parse","responsive","maintainAspectRatio","animation","layout","padding","scales","stacked","grid","drawOnChartArea","ticks","maxTicksLimit","callback","afterFit","scale","plugins","datalabels","anchor","align","chartArea","display","formatter","dataIndex","datasetIndex","legend","tooltip","interaction","intersect","mode","position","tooltipItem","formattedValue","callbacks","parsed","footer","tooltipItems","sum","useBarChart","formattedStats","getStatistics","getApiParams","time","newParams","birthDate","displayUserEmailForm","newUserEmail","currentAction","resetUserPassword","confirmUserAccount","displayEmailForm","resetErrorsAndSuccess","email_to_confirm","hideEmailForm","updateUserEmail","newIsSuccess","_component_AlertMessage","go","getButtonText","registration_disabled","sendingEmailDisabled","resetFormData","pattern","maxlength","authUserPictureUrl","now","webpackContext","req","webpackContextResolve","__webpack_require__","o","code","resolve","module","exports","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","call","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","getter","__esModule","leafPrototypes","getProto","getPrototypeOf","obj","__proto__","this","ns","create","def","current","getOwnPropertyNames","definition","defineProperty","enumerable","f","chunkId","all","promises","u","miniCssF","g","globalThis","Function","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","done","needAttach","scripts","getElementsByTagName","getAttribute","createElement","charset","timeout","nc","onScriptComplete","prev","onerror","onload","doneFns","parentNode","removeChild","bind","head","appendChild","Symbol","toStringTag","p","createStylesheet","fullhref","linkTag","onLinkComplete","errorType","realHref","err","findStylesheet","existingLinkTags","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","promise","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/fittrackee/dist/static/js/reset.d9073cf1.js b/fittrackee/dist/static/js/reset.3194c9f0.js similarity index 99% rename from fittrackee/dist/static/js/reset.d9073cf1.js rename to fittrackee/dist/static/js/reset.3194c9f0.js index 238ca78e..a7799245 100644 --- a/fittrackee/dist/static/js/reset.d9073cf1.js +++ b/fittrackee/dist/static/js/reset.3194c9f0.js @@ -1,2 +1,2 @@ "use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[24],{3228:function(t,c,n){n.d(c,{Z:function(){return d}});var a=n(6252);const e={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 345.834 345.834",style:{"enable-background":"new 0 0 345.834 345.834"},"xml:space":"preserve"},s=(0,a._)("g",null,[(0,a._)("path",{d:"M339.798,260.429c0.13-0.026,0.257-0.061,0.385-0.094c0.109-0.028,0.219-0.051,0.326-0.084\n\t\tc0.125-0.038,0.247-0.085,0.369-0.129c0.108-0.039,0.217-0.074,0.324-0.119c0.115-0.048,0.226-0.104,0.338-0.157\n\t\tc0.109-0.052,0.22-0.1,0.327-0.158c0.107-0.057,0.208-0.122,0.312-0.184c0.107-0.064,0.215-0.124,0.319-0.194\n\t\tc0.111-0.074,0.214-0.156,0.321-0.236c0.09-0.067,0.182-0.13,0.27-0.202c0.162-0.133,0.316-0.275,0.466-0.421\n\t\tc0.027-0.026,0.056-0.048,0.083-0.075c0.028-0.028,0.052-0.059,0.079-0.088c0.144-0.148,0.284-0.3,0.416-0.46\n\t\tc0.077-0.094,0.144-0.192,0.216-0.289c0.074-0.1,0.152-0.197,0.221-0.301c0.074-0.111,0.139-0.226,0.207-0.34\n\t\tc0.057-0.096,0.118-0.19,0.171-0.289c0.062-0.115,0.114-0.234,0.169-0.351c0.049-0.104,0.101-0.207,0.146-0.314\n\t\tc0.048-0.115,0.086-0.232,0.128-0.349c0.041-0.114,0.085-0.227,0.12-0.343c0.036-0.118,0.062-0.238,0.092-0.358\n\t\tc0.029-0.118,0.063-0.234,0.086-0.353c0.028-0.141,0.045-0.283,0.065-0.425c0.014-0.1,0.033-0.199,0.043-0.3\n\t\tc0.025-0.249,0.038-0.498,0.038-0.748V92.76c0-4.143-3.357-7.5-7.5-7.5h-236.25c-0.066,0-0.13,0.008-0.196,0.01\n\t\tc-0.143,0.004-0.285,0.01-0.427,0.022c-0.113,0.009-0.225,0.022-0.337,0.037c-0.128,0.016-0.255,0.035-0.382,0.058\n\t\tc-0.119,0.021-0.237,0.046-0.354,0.073c-0.119,0.028-0.238,0.058-0.356,0.092c-0.117,0.033-0.232,0.069-0.346,0.107\n\t\tc-0.117,0.04-0.234,0.082-0.349,0.128c-0.109,0.043-0.216,0.087-0.322,0.135c-0.118,0.053-0.235,0.11-0.351,0.169\n\t\tc-0.099,0.051-0.196,0.103-0.292,0.158c-0.116,0.066-0.23,0.136-0.343,0.208c-0.093,0.06-0.184,0.122-0.274,0.185\n\t\tc-0.106,0.075-0.211,0.153-0.314,0.235c-0.094,0.075-0.186,0.152-0.277,0.231c-0.09,0.079-0.179,0.158-0.266,0.242\n\t\tc-0.099,0.095-0.194,0.194-0.288,0.294c-0.047,0.05-0.097,0.094-0.142,0.145c-0.027,0.03-0.048,0.063-0.074,0.093\n\t\tc-0.094,0.109-0.182,0.223-0.27,0.338c-0.064,0.084-0.13,0.168-0.19,0.254c-0.078,0.112-0.15,0.227-0.222,0.343\n\t\tc-0.059,0.095-0.12,0.189-0.174,0.286c-0.063,0.112-0.118,0.227-0.175,0.342c-0.052,0.105-0.106,0.21-0.153,0.317\n\t\tc-0.049,0.113-0.092,0.23-0.135,0.345c-0.043,0.113-0.087,0.225-0.124,0.339c-0.037,0.115-0.067,0.232-0.099,0.349\n\t\tc-0.032,0.12-0.066,0.239-0.093,0.36c-0.025,0.113-0.042,0.228-0.062,0.342c-0.022,0.13-0.044,0.26-0.06,0.39\n\t\tc-0.013,0.108-0.019,0.218-0.027,0.328c-0.01,0.14-0.019,0.28-0.021,0.421c-0.001,0.041-0.006,0.081-0.006,0.122v46.252\n\t\tc0,4.143,3.357,7.5,7.5,7.5s7.5-3.357,7.5-7.5v-29.595l66.681,59.037c-0.348,0.245-0.683,0.516-0.995,0.827l-65.687,65.687v-49.288\n\t\tc0-4.143-3.357-7.5-7.5-7.5s-7.5,3.357-7.5,7.5v9.164h-38.75c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h38.75v43.231\n\t\tc0,4.143,3.357,7.5,7.5,7.5h236.25c0.247,0,0.494-0.013,0.74-0.037c0.115-0.011,0.226-0.033,0.339-0.049\n\t\tC339.542,260.469,339.67,260.454,339.798,260.429z M330.834,234.967l-65.688-65.687c-0.042-0.042-0.087-0.077-0.13-0.117\n\t\tl49.383-41.897c3.158-2.68,3.546-7.412,0.866-10.571c-2.678-3.157-7.41-3.547-10.571-0.866l-84.381,71.59l-98.444-87.158h208.965\n\t\tV234.967z M185.878,179.888c0.535-0.535,0.969-1.131,1.308-1.765l28.051,24.835c1.418,1.255,3.194,1.885,4.972,1.885\n\t\tc1.726,0,3.451-0.593,4.853-1.781l28.587-24.254c0.26,0.38,0.553,0.743,0.89,1.08l65.687,65.687H120.191L185.878,179.888z"}),(0,a._)("path",{d:"M7.5,170.676h126.667c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5H7.5c-4.143,0-7.5,3.357-7.5,7.5\n\t\tS3.357,170.676,7.5,170.676z"}),(0,a._)("path",{d:"M20.625,129.345H77.5c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5H20.625c-4.143,0-7.5,3.357-7.5,7.5\n\t\tS16.482,129.345,20.625,129.345z"}),(0,a._)("path",{d:"M62.5,226.51h-55c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h55c4.143,0,7.5-3.357,7.5-7.5S66.643,226.51,62.5,226.51z"})],-1),o=[s];function r(t,c,n,s,r,i){return(0,a.wg)(),(0,a.iD)("svg",e,o)}var i={name:"EmailSent"},l=n(3744);const u=(0,l.Z)(i,[["render",r]]);var d=u},5639:function(t,c,n){n.r(c),n.d(c,{default:function(){return S}});var a=n(6252),e=n(2262),s=n(3577),o=n(3228),r=n(2411);const i={id:"account-confirmation-email",class:"center-card with-margin"},l={key:0,class:"email-sent"},u={class:"email-sent-message"},d={key:1};var v=(0,a.aZ)({__name:"AccountConfirmationEmail",props:{action:null},setup(t){const c=t,{action:n}=(0,e.BK)(c);return(t,c)=>{const v=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",i,["email-sent"===(0,e.SU)(n)?((0,a.wg)(),(0,a.iD)("div",l,[(0,a.Wm)(o.Z),(0,a._)("div",u,(0,s.zw)(t.$t("user.ACCOUNT_CONFIRMATION_SENT")),1)])):((0,a.wg)(),(0,a.iD)("div",d,[(0,a.Wm)(v,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(t.$t("user.RESENT_ACCOUNT_CONFIRMATION")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(r.Z,{action:(0,e.SU)(n)},null,8,["action"])])),_:1})]))])}}}),p=n(3744);const w=(0,p.Z)(v,[["__scopeId","data-v-66aca424"]]);var g=w;const _={id:"account-confirmation",class:"view"},h={class:"container"};var m=(0,a.aZ)({__name:"AccountConfirmationResendView",props:{action:null},setup(t){const c=t,{action:n}=(0,e.BK)(c);return(t,c)=>((0,a.wg)(),(0,a.iD)("div",_,[(0,a._)("div",h,[(0,a.Wm)(g,{action:(0,e.SU)(n)},null,8,["action"])])]))}});const k=(0,p.Z)(m,[["__scopeId","data-v-35aad344"]]);var S=k},1627:function(t,c,n){n.r(c),n.d(c,{default:function(){return A}});n(7658);var a=n(6252),e=n(2262),s=n(2201),o=n(3577),r=n(3228);const i={version:"1.1",id:"Layer_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 512.001 512.001",style:{"enable-background":"new 0 0 512.001 512.001"},"xml:space":"preserve"},l=(0,a.uE)('',7),u=[l];function d(t,c,n,e,s,o){return(0,a.wg)(),(0,a.iD)("svg",i,u)}var v={name:"Password"},p=n(3744);const w=(0,p.Z)(v,[["render",d]]);var g=w;const _={id:"password-action-done",class:"center-card with-margin"},h={class:"password-message"},m={key:0};var k=(0,a.aZ)({__name:"PasswordActionDone",props:{action:null},setup(t){const c=t,{action:n}=(0,e.BK)(c);return(t,c)=>{const s=(0,a.up)("router-link"),i=(0,a.up)("i18n-t");return(0,a.wg)(),(0,a.iD)("div",_,["request-sent"===(0,e.SU)(n)?((0,a.wg)(),(0,a.j4)(r.Z,{key:0})):((0,a.wg)(),(0,a.j4)(g,{key:1})),(0,a._)("div",h,["request-sent"===(0,e.SU)(n)?((0,a.wg)(),(0,a.iD)("span",m,(0,o.zw)(t.$t("user.PASSWORD_SENT_EMAIL_TEXT")),1)):((0,a.wg)(),(0,a.j4)(i,{key:1,keypath:"user.PASSWORD_UPDATED"},{default:(0,a.w5)((()=>[(0,a.Wm)(s,{to:"/login"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.$t("common.HERE")),1)])),_:1})])),_:1}))])])}}});const S=(0,p.Z)(k,[["__scopeId","data-v-eac78356"]]);var C=S,f=n(2411);const x={id:"password-reset-request",class:"center-card with-margin"};var z=(0,a.aZ)({__name:"PasswordResetForm",props:{action:null,token:{default:""}},setup(t){const c=t,{action:n,token:s}=(0,e.BK)(c);return(t,c)=>{const r=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",x,[(0,a.Wm)(r,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.$t("user.RESET_PASSWORD")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(f.Z,{action:(0,e.SU)(n),token:(0,e.SU)(s)},null,8,["action","token"])])),_:1})])}}});const U=(0,p.Z)(z,[["__scopeId","data-v-68377e44"]]);var Z=U;const y={id:"password-reset",class:"view"},D={class:"container"};var M=(0,a.aZ)({__name:"PasswordResetView",props:{action:null},setup(t){const c=t,n=(0,s.yj)(),o=(0,s.tv)(),{action:r}=(0,e.BK)(c),i=(0,a.Fl)((()=>n.query.token));return(0,a.wF)((()=>{"reset"!==c.action||i.value||o.push("/")})),(t,c)=>((0,a.wg)(),(0,a.iD)("div",y,[(0,a._)("div",D,[(0,e.SU)(r).startsWith("reset")?((0,a.wg)(),(0,a.j4)(Z,{key:0,action:(0,e.SU)(r),token:(0,e.SU)(i)},null,8,["action","token"])):((0,a.wg)(),(0,a.j4)(C,{key:1,action:(0,e.SU)(r)},null,8,["action"]))])]))}});const E=(0,p.Z)(M,[["__scopeId","data-v-a1cc55c4"]]);var A=E}}]); -//# sourceMappingURL=reset.d9073cf1.js.map \ No newline at end of file +//# sourceMappingURL=reset.3194c9f0.js.map \ No newline at end of file diff --git a/fittrackee/dist/static/js/reset.d9073cf1.js.map b/fittrackee/dist/static/js/reset.3194c9f0.js.map similarity index 99% rename from fittrackee/dist/static/js/reset.d9073cf1.js.map rename to fittrackee/dist/static/js/reset.3194c9f0.js.map index 128156a6..baa2fd73 100644 --- a/fittrackee/dist/static/js/reset.d9073cf1.js.map +++ b/fittrackee/dist/static/js/reset.3194c9f0.js.map @@ -1 +1 @@ -{"version":3,"file":"static/js/reset.d9073cf1.js","mappings":"uLAEIA,QAAQ,MACRC,GAAG,SACHC,MAAM,6BACN,cAAY,+BACZC,EAAE,MACFC,EAAE,MACFC,QAAQ,sBACRC,MAAA,gDACA,YAAU,Y,GAEVC,EAAAA,EAAAA,GA0CI,WAzCFA,EAAAA,EAAAA,GA6BE,QA5BAC,EAAE,upGA6BJD,EAAAA,EAAAA,GAGE,QAFAC,EAAE,uIAGJD,EAAAA,EAAAA,GAGE,QAFAC,EAAE,8IAGJD,EAAAA,EAAAA,GAEE,QADAC,EAAE,4HAAuH,G,GAxC7HC,G,0CAXFC,EAAAA,EAAAA,IAsDM,MAtDNC,EAsDM,E,CAIN,OACEC,KAAM,a,UCvDV,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,KAEpE,O,0HCJA,MACMH,EAAa,CACjBV,GAAI,6BACJc,MAAO,2BAEHN,EAAa,CACjBO,IAAK,EACLD,MAAO,cAEHE,EAAa,CAAEF,MAAO,sBACtBG,EAAa,CAAEF,IAAK,GAW1B,OAA4BG,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,2BACRC,MAAO,CACLC,OAAQ,MAEVC,MAAMC,GAER,MAAMH,EAAQG,GAMN,OAAEF,IAAWG,EAAAA,EAAAA,IAAOJ,GAE5B,MAAO,CAACK,EAAUC,KAChB,MAAMC,GAAkBC,EAAAA,EAAAA,IAAkB,QAE1C,OAAQC,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOC,EAAY,CACvC,gBAAnBoB,EAAAA,EAAAA,IAAOT,KACHQ,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOD,EAAY,EACpDuB,EAAAA,EAAAA,IAAaC,EAAAA,IACb1B,EAAAA,EAAAA,GAAoB,MAAOU,GAAYiB,EAAAA,EAAAA,IAAiBR,EAAKS,GAAG,mCAAoC,QAErGL,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOQ,EAAY,EACpDc,EAAAA,EAAAA,IAAaJ,EAAiB,KAAM,CAClCQ,OAAOC,EAAAA,EAAAA,KAAS,IAAM,EACpBC,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAiBR,EAAKS,GAAG,qCAAsC,MAElFI,SAASF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,IAAaQ,EAAAA,EAAc,CAAElB,QAAQS,EAAAA,EAAAA,IAAOT,IAAW,KAAM,EAAG,CAAC,cAEnEmB,EAAG,QAGX,CAEJ,I,UCvDA,MAAM5B,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,QCLA,MACMF,EAAa,CACjBV,GAAI,uBACJc,MAAO,QAEHN,EAAa,CAAEM,MAAO,aAS5B,OAA4BI,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,gCACRC,MAAO,CACLC,OAAQ,MAEVC,MAAMC,GAER,MAAMH,EAAQG,GAKN,OAAEF,IAAWG,EAAAA,EAAAA,IAAOJ,GAE5B,MAAO,CAACK,EAAUC,MACRG,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOC,EAAY,EAC3DJ,EAAAA,EAAAA,GAAoB,MAAOE,EAAY,EACrCuB,EAAAA,EAAAA,IAAaU,EAA2B,CAAEpB,QAAQS,EAAAA,EAAAA,IAAOT,IAAW,KAAM,EAAG,CAAC,eAIpF,IChCA,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,O,2ICNItB,QAAQ,MACRC,GAAG,UACHC,MAAM,6BACN,cAAY,+BACZC,EAAE,MACFC,EAAE,MACFC,QAAQ,sBACRC,MAAA,gDACA,YAAU,Y,mqHAEVG,G,0CAXFC,EAAAA,EAAAA,IAqFM,MArFNC,EAqFM,E,CAIN,OACEC,KAAM,Y,UCtFV,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,KAEpE,QCJA,MACMH,EAAa,CACjBV,GAAI,uBACJc,MAAO,2BAEHN,EAAa,CAAEM,MAAO,oBACtBE,EAAa,CAAED,IAAK,GAW1B,OAA4BG,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,qBACRC,MAAO,CACLC,OAAQ,MAEVC,MAAMC,GAER,MAAMH,EAAQG,GAMN,OAAEF,IAAWG,EAAAA,EAAAA,IAAOJ,GAE5B,MAAO,CAACK,EAAUC,KAChB,MAAMgB,GAAyBd,EAAAA,EAAAA,IAAkB,eAC3Ce,GAAoBf,EAAAA,EAAAA,IAAkB,UAE5C,OAAQC,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOC,EAAY,CACvC,kBAAnBoB,EAAAA,EAAAA,IAAOT,KACHQ,EAAAA,EAAAA,OAAce,EAAAA,EAAAA,IAAaZ,EAAAA,EAAW,CAAEjB,IAAK,OAC7Cc,EAAAA,EAAAA,OAAce,EAAAA,EAAAA,IAAaC,EAAU,CAAE9B,IAAK,MACjDT,EAAAA,EAAAA,GAAoB,MAAOE,EAAY,CACjB,kBAAnBsB,EAAAA,EAAAA,IAAOT,KACHQ,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,OAAQO,GAAYiB,EAAAA,EAAAA,IAAiBR,EAAKS,GAAG,kCAAmC,MAClHL,EAAAA,EAAAA,OAAce,EAAAA,EAAAA,IAAaD,EAAmB,CAC7C5B,IAAK,EACL+B,QAAS,yBACR,CACDC,SAASX,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,IAAaW,EAAwB,CAAEM,GAAI,UAAY,CACrDD,SAASX,EAAAA,EAAAA,KAAS,IAAM,EACtBC,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAiBR,EAAKS,GAAG,gBAAiB,MAE7DM,EAAG,OAGPA,EAAG,QAGX,CAEJ,ICzDA,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,Q,UCLA,MACM9B,EAAa,CACjBV,GAAI,yBACJc,MAAO,2BAYT,OAA4BI,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,oBACRC,MAAO,CACLC,OAAQ,KACR4B,MAAO,CAAEF,QAAS,KAEpBzB,MAAMC,GAER,MAAMH,EAAQG,GAIN,OAAEF,EAAM,MAAE4B,IAAUzB,EAAAA,EAAAA,IAAOJ,GAEnC,MAAO,CAACK,EAAUC,KAChB,MAAMC,GAAkBC,EAAAA,EAAAA,IAAkB,QAE1C,OAAQC,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOC,EAAY,EAC3DqB,EAAAA,EAAAA,IAAaJ,EAAiB,KAAM,CAClCQ,OAAOC,EAAAA,EAAAA,KAAS,IAAM,EACpBC,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAiBR,EAAKS,GAAG,wBAAyB,MAErEI,SAASF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,IAAaQ,EAAAA,EAAc,CACzBlB,QAAQS,EAAAA,EAAAA,IAAOT,GACf4B,OAAOnB,EAAAA,EAAAA,IAAOmB,IACb,KAAM,EAAG,CAAC,SAAU,aAEzBT,EAAG,KAEL,CAEJ,IC5CA,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,QCLA,MACM9B,EAAa,CACjBV,GAAI,iBACJc,MAAO,QAEHN,EAAa,CAAEM,MAAO,aAY5B,OAA4BI,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,oBACRC,MAAO,CACLC,OAAQ,MAEVC,MAAMC,GAER,MAAMH,EAAQG,EAMN2B,GAAQC,EAAAA,EAAAA,MACRC,GAASC,EAAAA,EAAAA,OAET,OAAEhC,IAAWG,EAAAA,EAAAA,IAAOJ,GACpB6B,GAAQK,EAAAA,EAAAA,KAAS,IAAMJ,EAAMK,MAAMN,QAQ3C,OANEO,EAAAA,EAAAA,KAAc,KACS,UAAjBpC,EAAMC,QAAuB4B,EAAMQ,OACrCL,EAAOM,KAAK,I,IAIX,CAACjC,EAAUC,MACRG,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOC,EAAY,EAC3DJ,EAAAA,EAAAA,GAAoB,MAAOE,EAAY,EACpCsB,EAAAA,EAAAA,IAAOT,GAAQsC,WAAW,WACtB9B,EAAAA,EAAAA,OAAce,EAAAA,EAAAA,IAAagB,EAAsB,CAChD7C,IAAK,EACLM,QAAQS,EAAAA,EAAAA,IAAOT,GACf4B,OAAOnB,EAAAA,EAAAA,IAAOmB,IACb,KAAM,EAAG,CAAC,SAAU,aACtBpB,EAAAA,EAAAA,OAAce,EAAAA,EAAAA,IAAaiB,EAAmB,CAC7C9C,IAAK,EACLM,QAAQS,EAAAA,EAAAA,IAAOT,IACd,KAAM,EAAG,CAAC,gBAIvB,ICvDA,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,O","sources":["webpack://fittrackee_client/./src/components/Common/Images/EmailSent.vue","webpack://fittrackee_client/./src/components/Common/Images/EmailSent.vue?2d84","webpack://fittrackee_client/./src/components/User/AccountConfirmationEmail.vue?37ef","webpack://fittrackee_client/./src/components/User/AccountConfirmationEmail.vue","webpack://fittrackee_client/./src/views/user/AccountConfirmationResendView.vue?3fd8","webpack://fittrackee_client/./src/views/user/AccountConfirmationResendView.vue","webpack://fittrackee_client/./src/components/Common/Images/Password.vue","webpack://fittrackee_client/./src/components/Common/Images/Password.vue?2ae3","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordActionDone.vue?977e","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordActionDone.vue","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordResetForm.vue?e08b","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordResetForm.vue","webpack://fittrackee_client/./src/views/user/PasswordResetView.vue?1ecf","webpack://fittrackee_client/./src/views/user/PasswordResetView.vue"],"sourcesContent":["\n\n\n","import { render } from \"./EmailSent.vue?vue&type=template&id=3377e6a0\"\nimport script from \"./EmailSent.vue?vue&type=script&lang=js\"\nexport * from \"./EmailSent.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-66aca424\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"account-confirmation-email\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"email-sent\"\n}\nconst _hoisted_3 = { class: \"email-sent-message\" }\nconst _hoisted_4 = { key: 1 }\n\nimport { toRefs } from 'vue'\n\n import EmailSent from '@/components/Common/Images/EmailSent.vue'\n import UserAuthForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AccountConfirmationEmail',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(action) === 'email-sent')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(EmailSent),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('user.ACCOUNT_CONFIRMATION_SENT')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.RESENT_ACCOUNT_CONFIRMATION')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserAuthForm, { action: _unref(action) }, null, 8, [\"action\"])\n ]),\n _: 1\n })\n ]))\n ]))\n}\n}\n\n})","import script from \"./AccountConfirmationEmail.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AccountConfirmationEmail.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AccountConfirmationEmail.vue?vue&type=style&index=0&id=66aca424&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-66aca424\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-35aad344\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"account-confirmation\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { toRefs } from 'vue'\n\n import AccountConfirmationResend from '@/components/User/AccountConfirmationEmail.vue'\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AccountConfirmationResendView',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(AccountConfirmationResend, { action: _unref(action) }, null, 8, [\"action\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./AccountConfirmationResendView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AccountConfirmationResendView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AccountConfirmationResendView.vue?vue&type=style&index=0&id=35aad344&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-35aad344\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Password.vue?vue&type=template&id=356e77a2\"\nimport script from \"./Password.vue?vue&type=script&lang=js\"\nexport * from \"./Password.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-eac78356\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-action-done\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = { class: \"password-message\" }\nconst _hoisted_3 = { key: 0 }\n\nimport { toRefs } from 'vue'\n\n import EmailSent from '@/components/Common/Images/EmailSent.vue'\n import Password from '@/components/Common/Images/Password.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordActionDone',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(action) === 'request-sent')\n ? (_openBlock(), _createBlock(EmailSent, { key: 0 }))\n : (_openBlock(), _createBlock(Password, { key: 1 })),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(action) === 'request-sent')\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('user.PASSWORD_SENT_EMAIL_TEXT')), 1))\n : (_openBlock(), _createBlock(_component_i18n_t, {\n key: 1,\n keypath: \"user.PASSWORD_UPDATED\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_router_link, { to: \"/login\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('common.HERE')), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }))\n ])\n ]))\n}\n}\n\n})","import script from \"./PasswordActionDone.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordActionDone.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordActionDone.vue?vue&type=style&index=0&id=eac78356&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-eac78356\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-68377e44\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-reset-request\",\n class: \"center-card with-margin\"\n}\n\nimport { toRefs, withDefaults } from 'vue'\n\n import UserAuthForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n token?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordResetForm',\n props: {\n action: null,\n token: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { action: string, token: string }\n\n \n\n const { action, token } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.RESET_PASSWORD')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserAuthForm, {\n action: _unref(action),\n token: _unref(token)\n }, null, 8, [\"action\", \"token\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./PasswordResetForm.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordResetForm.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordResetForm.vue?vue&type=style&index=0&id=68377e44&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-68377e44\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-a1cc55c4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-reset\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { computed, toRefs, onBeforeMount } from 'vue'\n import { useRoute, useRouter } from 'vue-router'\n\n import PasswordEmailSent from '@/components/User/PasswordReset/PasswordActionDone.vue'\n import PasswordResetRequest from '@/components/User/PasswordReset/PasswordResetForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordResetView',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const route = useRoute()\n const router = useRouter()\n\n const { action } = toRefs(props)\n const token = computed(() => route.query.token)\n\n onBeforeMount(() => {\n if (props.action === 'reset' && !token.value) {\n router.push('/')\n }\n })\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(action).startsWith('reset'))\n ? (_openBlock(), _createBlock(PasswordResetRequest, {\n key: 0,\n action: _unref(action),\n token: _unref(token)\n }, null, 8, [\"action\", \"token\"]))\n : (_openBlock(), _createBlock(PasswordEmailSent, {\n key: 1,\n action: _unref(action)\n }, null, 8, [\"action\"]))\n ])\n ]))\n}\n}\n\n})","import script from \"./PasswordResetView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordResetView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordResetView.vue?vue&type=style&index=0&id=a1cc55c4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-a1cc55c4\"]])\n\nexport default __exports__"],"names":["version","id","xmlns","x","y","viewBox","style","_createElementVNode","d","_hoisted_2","_createElementBlock","_hoisted_1","name","__exports__","render","class","key","_hoisted_3","_hoisted_4","_defineComponent","__name","props","action","setup","__props","toRefs","_ctx","_cache","_component_Card","_resolveComponent","_openBlock","_unref","_createVNode","EmailSent","_toDisplayString","$t","title","_withCtx","_createTextVNode","content","UserAuthForm","_","AccountConfirmationResend","_component_router_link","_component_i18n_t","_createBlock","Password","keypath","default","to","token","route","useRoute","router","useRouter","computed","query","onBeforeMount","value","push","startsWith","PasswordResetRequest","PasswordEmailSent"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/reset.3194c9f0.js","mappings":"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","sources":["webpack://fittrackee_client/./src/components/Common/Images/EmailSent.vue","webpack://fittrackee_client/./src/components/Common/Images/EmailSent.vue?2d84","webpack://fittrackee_client/./src/components/User/AccountConfirmationEmail.vue?37ef","webpack://fittrackee_client/./src/components/User/AccountConfirmationEmail.vue","webpack://fittrackee_client/./src/views/user/AccountConfirmationResendView.vue?3fd8","webpack://fittrackee_client/./src/views/user/AccountConfirmationResendView.vue","webpack://fittrackee_client/./src/components/Common/Images/Password.vue","webpack://fittrackee_client/./src/components/Common/Images/Password.vue?2ae3","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordActionDone.vue?977e","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordActionDone.vue","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordResetForm.vue?e08b","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordResetForm.vue","webpack://fittrackee_client/./src/views/user/PasswordResetView.vue?1ecf","webpack://fittrackee_client/./src/views/user/PasswordResetView.vue"],"sourcesContent":["\n\n\n","import { render } from \"./EmailSent.vue?vue&type=template&id=3377e6a0\"\nimport script from \"./EmailSent.vue?vue&type=script&lang=js\"\nexport * from \"./EmailSent.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-66aca424\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"account-confirmation-email\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"email-sent\"\n}\nconst _hoisted_3 = { class: \"email-sent-message\" }\nconst _hoisted_4 = { key: 1 }\n\nimport { toRefs } from 'vue'\n\n import EmailSent from '@/components/Common/Images/EmailSent.vue'\n import UserAuthForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AccountConfirmationEmail',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(action) === 'email-sent')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(EmailSent),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('user.ACCOUNT_CONFIRMATION_SENT')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.RESENT_ACCOUNT_CONFIRMATION')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserAuthForm, { action: _unref(action) }, null, 8, [\"action\"])\n ]),\n _: 1\n })\n ]))\n ]))\n}\n}\n\n})","import script from \"./AccountConfirmationEmail.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AccountConfirmationEmail.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AccountConfirmationEmail.vue?vue&type=style&index=0&id=66aca424&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-66aca424\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-35aad344\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"account-confirmation\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { toRefs } from 'vue'\n\n import AccountConfirmationResend from '@/components/User/AccountConfirmationEmail.vue'\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AccountConfirmationResendView',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(AccountConfirmationResend, { action: _unref(action) }, null, 8, [\"action\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./AccountConfirmationResendView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AccountConfirmationResendView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AccountConfirmationResendView.vue?vue&type=style&index=0&id=35aad344&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-35aad344\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Password.vue?vue&type=template&id=356e77a2\"\nimport script from \"./Password.vue?vue&type=script&lang=js\"\nexport * from \"./Password.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-eac78356\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-action-done\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = { class: \"password-message\" }\nconst _hoisted_3 = { key: 0 }\n\nimport { toRefs } from 'vue'\n\n import EmailSent from '@/components/Common/Images/EmailSent.vue'\n import Password from '@/components/Common/Images/Password.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordActionDone',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(action) === 'request-sent')\n ? (_openBlock(), _createBlock(EmailSent, { key: 0 }))\n : (_openBlock(), _createBlock(Password, { key: 1 })),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(action) === 'request-sent')\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('user.PASSWORD_SENT_EMAIL_TEXT')), 1))\n : (_openBlock(), _createBlock(_component_i18n_t, {\n key: 1,\n keypath: \"user.PASSWORD_UPDATED\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_router_link, { to: \"/login\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('common.HERE')), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }))\n ])\n ]))\n}\n}\n\n})","import script from \"./PasswordActionDone.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordActionDone.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordActionDone.vue?vue&type=style&index=0&id=eac78356&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-eac78356\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-68377e44\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-reset-request\",\n class: \"center-card with-margin\"\n}\n\nimport { toRefs, withDefaults } from 'vue'\n\n import UserAuthForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n token?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordResetForm',\n props: {\n action: null,\n token: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { action: string, token: string }\n\n \n\n const { action, token } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.RESET_PASSWORD')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserAuthForm, {\n action: _unref(action),\n token: _unref(token)\n }, null, 8, [\"action\", \"token\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./PasswordResetForm.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordResetForm.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordResetForm.vue?vue&type=style&index=0&id=68377e44&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-68377e44\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-a1cc55c4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-reset\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { computed, toRefs, onBeforeMount } from 'vue'\n import { useRoute, useRouter } from 'vue-router'\n\n import PasswordEmailSent from '@/components/User/PasswordReset/PasswordActionDone.vue'\n import PasswordResetRequest from '@/components/User/PasswordReset/PasswordResetForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordResetView',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const route = useRoute()\n const router = useRouter()\n\n const { action } = toRefs(props)\n const token = computed(() => route.query.token)\n\n onBeforeMount(() => {\n if (props.action === 'reset' && !token.value) {\n router.push('/')\n }\n })\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(action).startsWith('reset'))\n ? (_openBlock(), _createBlock(PasswordResetRequest, {\n key: 0,\n action: _unref(action),\n token: _unref(token)\n }, null, 8, [\"action\", \"token\"]))\n : (_openBlock(), _createBlock(PasswordEmailSent, {\n key: 1,\n action: _unref(action)\n }, null, 8, [\"action\"]))\n ])\n ]))\n}\n}\n\n})","import script from \"./PasswordResetView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordResetView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordResetView.vue?vue&type=style&index=0&id=a1cc55c4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-a1cc55c4\"]])\n\nexport default __exports__"],"names":["version","id","xmlns","x","y","viewBox","style","_createElementVNode","d","_hoisted_2","_createElementBlock","_hoisted_1","name","__exports__","render","class","key","_hoisted_3","_hoisted_4","_defineComponent","__name","props","action","setup","__props","toRefs","_ctx","_cache","_component_Card","_resolveComponent","_openBlock","_unref","_createVNode","EmailSent","_toDisplayString","$t","title","_withCtx","_createTextVNode","content","UserAuthForm","_","AccountConfirmationResend","_component_router_link","_component_i18n_t","_createBlock","Password","keypath","default","to","token","route","useRoute","router","useRouter","computed","query","onBeforeMount","value","push","startsWith","PasswordResetRequest","PasswordEmailSent"],"sourceRoot":""} \ No newline at end of file diff --git a/fittrackee/dist/static/js/statistics.c9a8011a.js b/fittrackee/dist/static/js/statistics.04a17f2e.js similarity index 98% rename from fittrackee/dist/static/js/statistics.c9a8011a.js rename to fittrackee/dist/static/js/statistics.04a17f2e.js index 3dea87ce..961bf8f9 100644 --- a/fittrackee/dist/static/js/statistics.c9a8011a.js +++ b/fittrackee/dist/static/js/statistics.04a17f2e.js @@ -1,2 +1,2 @@ "use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[193],{7885:function(e,s,t){t.r(s),t.d(s,{default:function(){return A}});var a=t(6252),r=t(2262),l=t(3577),o=(t(7658),t(9150)),n=t(3170);const c={class:"chart-menu"},i={class:"chart-arrow"},u={class:"time-frames custom-checkboxes-group"},d={class:"time-frames-checkboxes custom-checkboxes"},p=["id","name","checked","onInput"],m={class:"chart-arrow"};var v=(0,a.aZ)({__name:"StatsMenu",emits:["arrowClick","timeFrameUpdate"],setup(e,{emit:s}){const t=(0,r.iH)("month"),o=["week","month","year"];function n(e){t.value=e,s("timeFrameUpdate",e)}return(e,r)=>((0,a.wg)(),(0,a.iD)("div",c,[(0,a._)("div",i,[(0,a._)("i",{class:"fa fa-chevron-left","aria-hidden":"true",onClick:r[0]||(r[0]=e=>s("arrowClick",!0))})]),(0,a._)("div",u,[(0,a._)("div",d,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(o,(s=>(0,a._)("div",{class:"time-frame custom-checkbox",key:s},[(0,a._)("label",null,[(0,a._)("input",{type:"radio",id:s,name:s,checked:t.value===s,onInput:e=>n(s)},null,40,p),(0,a._)("span",null,(0,l.zw)(e.$t(`statistics.TIME_FRAMES.${s}`)),1)])]))),64))])]),(0,a._)("div",m,[(0,a._)("i",{class:"fa fa-chevron-right","aria-hidden":"true",onClick:r[1]||(r[1]=e=>s("arrowClick",!1))})])]))}}),k=t(3744);const _=(0,k.Z)(v,[["__scopeId","data-v-22d55de2"]]);var S=_,w=t(631);const f={class:"sports-menu"},h=["id","name","checked","onInput"],U={class:"sport-label"};var b=(0,a.aZ)({__name:"StatsSportsMenu",props:{userSports:null,selectedSportIds:{default:()=>[]}},emits:["selectedSportIdsUpdate"],setup(e,{emit:s}){const t=e,{t:n}=(0,o.QT)(),c=(0,a.f3)("sportColors"),{selectedSportIds:i}=(0,r.BK)(t),u=(0,a.Fl)((()=>(0,w.xH)(t.userSports,n)));function d(e){s("selectedSportIdsUpdate",e)}return(e,s)=>{const t=(0,a.up)("SportImage");return(0,a.wg)(),(0,a.iD)("div",f,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,r.SU)(u),(e=>((0,a.wg)(),(0,a.iD)("label",{type:"checkbox",key:e.id,style:(0,l.j5)({color:e.color?e.color:(0,r.SU)(c)[e.label]})},[(0,a._)("input",{type:"checkbox",id:e.id,name:e.label,checked:(0,r.SU)(i).includes(e.id),onInput:s=>d(e.id)},null,40,h),(0,a.Wm)(t,{"sport-label":e.label,color:e.color},null,8,["sport-label","color"]),(0,a._)("span",U,(0,l.zw)(e.translatedLabel),1)],4)))),128))])}}});const I=b;var g=I,T=t(9318);const y={key:0,id:"user-statistics"};var C=(0,a.aZ)({__name:"index",props:{sports:null,user:null},setup(e){const s=e,{t:t}=(0,o.QT)(),{sports:l,user:c}=(0,r.BK)(s),i=(0,r.iH)("month"),u=(0,r.iH)(v(i.value)),d=(0,a.Fl)((()=>(0,w.xH)(s.sports,t))),p=(0,r.iH)(_(s.sports));function m(e){i.value=e,u.value=v(i.value)}function v(e){return(0,T.aZ)(new Date,e,s.user.weekm)}function k(e){u.value=(0,T.FN)(u.value,e,s.user.weekm)}function _(e){return e.map((e=>e.id))}function f(e){p.value.includes(e)?p.value=p.value.filter((s=>s!==e)):p.value.push(e)}return(0,a.YP)((()=>s.sports),(e=>{p.value=_(e)})),(e,s)=>(0,r.SU)(d)?((0,a.wg)(),(0,a.iD)("div",y,[(0,a.Wm)(S,{onTimeFrameUpdate:m,onArrowClick:k}),(0,a.Wm)(n.Z,{sports:(0,r.SU)(l),user:(0,r.SU)(c),chartParams:u.value,"displayed-sport-ids":p.value,fullStats:!0},null,8,["sports","user","chartParams","displayed-sport-ids"]),(0,a.Wm)(g,{"selected-sport-ids":p.value,"user-sports":(0,r.SU)(l),onSelectedSportIdsUpdate:f},null,8,["selected-sport-ids","user-sports"])])):(0,a.kq)("",!0)}});const F=(0,k.Z)(C,[["__scopeId","data-v-30799d13"]]);var Z=F,x=t(5630),D=t(5801),H=t(9917);const E={id:"statistics",class:"view"},R={key:0,class:"container"};var W=(0,a.aZ)({__name:"StatisticsView",setup(e){const s=(0,H.o)(),t=(0,a.Fl)((()=>s.getters[D.YN.GETTERS.AUTH_USER_PROFILE])),o=(0,a.Fl)((()=>s.getters[D.O8.GETTERS.SPORTS].filter((e=>t.value.sports_list.includes(e.id)))));return(e,s)=>{const n=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",E,[(0,r.SU)(t).username?((0,a.wg)(),(0,a.iD)("div",R,[(0,a.Wm)(n,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,l.zw)(e.$t("statistics.STATISTICS")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(Z,{class:(0,l.C_)({"stats-disabled":0===(0,r.SU)(t).nb_workouts}),user:(0,r.SU)(t),sports:(0,r.SU)(o)},null,8,["class","user","sports"])])),_:1}),0===(0,r.SU)(t).nb_workouts?((0,a.wg)(),(0,a.j4)(x.Z,{key:0})):(0,a.kq)("",!0)])):(0,a.kq)("",!0)])}}});const P=(0,k.Z)(W,[["__scopeId","data-v-2e341d4e"]]);var A=P}}]); -//# sourceMappingURL=statistics.c9a8011a.js.map \ No newline at end of file +//# sourceMappingURL=statistics.04a17f2e.js.map \ No newline at end of file diff --git a/fittrackee/dist/static/js/statistics.c9a8011a.js.map b/fittrackee/dist/static/js/statistics.04a17f2e.js.map similarity index 99% rename from fittrackee/dist/static/js/statistics.c9a8011a.js.map rename to fittrackee/dist/static/js/statistics.04a17f2e.js.map index ec5d98d6..2d0db841 100644 --- a/fittrackee/dist/static/js/statistics.c9a8011a.js.map +++ b/fittrackee/dist/static/js/statistics.04a17f2e.js.map @@ -1 +1 @@ -{"version":3,"file":"static/js/statistics.c9a8011a.js","mappings":"8OAGA,MACMA,EAAa,CAAEC,MAAO,cACtBC,EAAa,CAAED,MAAO,eACtBE,EAAa,CAAEF,MAAO,uCACtBG,EAAa,CAAEH,MAAO,4CACtBI,EAAa,CAAC,KAAM,OAAQ,UAAW,WACvCC,EAAa,CAAEL,MAAO,eAK5B,OAA4BM,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,YACRC,MAAO,CAAC,aAAc,mBACtBC,MAAMC,GAAS,KAAEC,IAIjB,MAAMC,GAAoBC,EAAAA,EAAAA,IAAI,SACxBC,EAAa,CAAC,OAAQ,QAAS,QAErC,SAASC,EAAkBC,GACzBJ,EAAkBK,MAAQD,EAC1BL,EAAK,kBAAmBK,EAC1B,CAEF,MAAO,CAACE,EAAUC,MACRC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOtB,EAAY,EAC3DuB,EAAAA,EAAAA,GAAoB,MAAOrB,EAAY,EACrCqB,EAAAA,EAAAA,GAAoB,IAAK,CACvBtB,MAAO,qBACP,cAAe,OACfuB,QAASJ,EAAO,KAAOA,EAAO,GAAMK,GAAiBb,EAAK,cAAc,SAG5EW,EAAAA,EAAAA,GAAoB,MAAOpB,EAAY,EACrCoB,EAAAA,EAAAA,GAAoB,MAAOnB,EAAY,GACpCiB,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoBI,EAAAA,GAAW,MAAMC,EAAAA,EAAAA,IAAYZ,GAAaa,IACpEL,EAAAA,EAAAA,GAAoB,MAAO,CAChCtB,MAAO,6BACP4B,IAAKD,GACJ,EACDL,EAAAA,EAAAA,GAAoB,QAAS,KAAM,EACjCA,EAAAA,EAAAA,GAAoB,QAAS,CAC3BO,KAAM,QACNC,GAAIH,EACJI,KAAMJ,EACNK,QAASpB,EAAkBK,QAAUU,EACrCM,QAAUT,GAAiBT,EAAkBY,IAC5C,KAAM,GAAIvB,IACbkB,EAAAA,EAAAA,GAAoB,OAAQ,MAAMY,EAAAA,EAAAA,IAAiBhB,EAAKiB,GAAG,0BAA0BR,MAAW,SAGlG,UAGRL,EAAAA,EAAAA,GAAoB,MAAOjB,EAAY,EACrCiB,EAAAA,EAAAA,GAAoB,IAAK,CACvBtB,MAAO,sBACP,cAAe,OACfuB,QAASJ,EAAO,KAAOA,EAAO,GAAMK,GAAiBb,EAAK,cAAc,UAKhF,I,UC9DA,MAAMyB,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,Q,SCLA,MAAMrC,EAAa,CAAEC,MAAO,eACtBC,EAAa,CAAC,KAAM,OAAQ,UAAW,WACvCC,EAAa,CAAEF,MAAO,eAa5B,OAA4BM,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,kBACR8B,MAAO,CACLC,WAAY,KACZC,iBAAkB,CAAEC,QAAS,IAAM,KAErChC,MAAO,CAAC,0BACRC,MAAMC,GAAc,KAAEC,IAExB,MAAM0B,EAAQ3B,GAMN,EAAE+B,IAAMC,EAAAA,EAAAA,MAERC,GAAcC,EAAAA,EAAAA,IAAO,gBACrB,iBAAEL,IAAqBM,EAAAA,EAAAA,IAAOR,GAC9BS,GAAoDC,EAAAA,EAAAA,KAAS,KACjEC,EAAAA,EAAAA,IAAgBX,EAAMC,WAAYG,KAGpC,SAASQ,EAAuBC,GAC9BvC,EAAK,yBAA0BuC,EACjC,CAEF,MAAO,CAAChC,EAAUC,KAChB,MAAMgC,GAAwBC,EAAAA,EAAAA,IAAkB,cAEhD,OAAQhC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOtB,EAAY,GAC1DqB,EAAAA,EAAAA,KAAW,IAAOC,EAAAA,EAAAA,IAAoBI,EAAAA,GAAW,MAAMC,EAAAA,EAAAA,KAAY2B,EAAAA,EAAAA,IAAOP,IAAoBQ,KACrFlC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,QAAS,CACjDQ,KAAM,WACND,IAAK0B,EAAMxB,GACXyB,OAAOC,EAAAA,EAAAA,IAAgB,CAAEC,MAAOH,EAAMG,MAAQH,EAAMG,OAAQJ,EAAAA,EAAAA,IAAOV,GAAaW,EAAMI,UACrF,EACDpC,EAAAA,EAAAA,GAAoB,QAAS,CAC3BO,KAAM,WACNC,GAAIwB,EAAMxB,GACVC,KAAMuB,EAAMI,MACZ1B,SAASqB,EAAAA,EAAAA,IAAOd,GAAkBoB,SAASL,EAAMxB,IACjDG,QAAUT,GAAiByB,EAAuBK,EAAMxB,KACvD,KAAM,GAAI7B,IACb2D,EAAAA,EAAAA,IAAaT,EAAuB,CAClC,cAAeG,EAAMI,MACrBD,MAAOH,EAAMG,OACZ,KAAM,EAAG,CAAC,cAAe,WAC5BnC,EAAAA,EAAAA,GAAoB,OAAQpB,GAAYgC,EAAAA,EAAAA,IAAiBoB,EAAMO,iBAAkB,IAChF,MACD,OACJ,CAEJ,IClEA,MAAM,EAAc,EAEpB,Q,UCJA,MACM9D,EAAa,CACjB6B,IAAK,EACLE,GAAI,mBAoBN,OAA4BxB,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,QACR8B,MAAO,CACLyB,OAAQ,KACRC,KAAM,MAERtD,MAAMC,GAER,MAAM2B,EAAQ3B,GAON,EAAE+B,IAAMC,EAAAA,EAAAA,OAER,OAAEoB,EAAM,KAAEC,IAASlB,EAAAA,EAAAA,IAAOR,GAC1BzB,GAAoBC,EAAAA,EAAAA,IAAI,SACxBmD,GAA0CnD,EAAAA,EAAAA,IAC9CoD,EAAerD,EAAkBK,QAE7B6B,GAAoDC,EAAAA,EAAAA,KAAS,KACjEC,EAAAA,EAAAA,IAAgBX,EAAMyB,OAAQrB,KAE1BF,GAAkC1B,EAAAA,EAAAA,IAAIqD,EAAU7B,EAAMyB,SAE5D,SAASK,EAAgBnD,GACvBJ,EAAkBK,MAAQD,EAC1BgD,EAAY/C,MAAQgD,EAAerD,EAAkBK,MACvD,CACA,SAASgD,EAAejD,GACtB,OAAOoD,EAAAA,EAAAA,IAAmB,IAAIC,KAAQrD,EAAWqB,EAAM0B,KAAKO,MAC9D,CACA,SAASC,EAAoBC,GAC3BR,EAAY/C,OAAQwD,EAAAA,EAAAA,IAClBT,EAAY/C,MACZuD,EACAnC,EAAM0B,KAAKO,MAEf,CACA,SAASJ,EAAUJ,GACjB,OAAOA,EAAOY,KAAKpB,GAAUA,EAAMxB,IACrC,CACA,SAASmB,EAAuBC,GAC1BX,EAAiBtB,MAAM0C,SAAST,GAClCX,EAAiBtB,MAAQsB,EAAiBtB,MAAM0D,QAC7C7C,GAAOA,IAAOoB,IAGjBX,EAAiBtB,MAAM2D,KAAK1B,EAEhC,CASF,OAPE2B,EAAAA,EAAAA,KACE,IAAMxC,EAAMyB,SACXgB,IACCvC,EAAiBtB,MAAQiD,EAAUY,EAAU,IAI5C,CAAC5D,EAAUC,KACRkC,EAAAA,EAAAA,IAAOP,KACV1B,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOtB,EAAY,EACpD6D,EAAAA,EAAAA,IAAamB,EAAW,CACtBC,kBAAmBb,EACnBc,aAAcV,KAEhBX,EAAAA,EAAAA,IAAasB,EAAAA,EAAW,CACtBpB,QAAQT,EAAAA,EAAAA,IAAOS,GACfC,MAAMV,EAAAA,EAAAA,IAAOU,GACbC,YAAaA,EAAY/C,MACzB,sBAAuBsB,EAAiBtB,MACxCkE,WAAW,GACV,KAAM,EAAG,CAAC,SAAU,OAAQ,cAAe,yBAC9CvB,EAAAA,EAAAA,IAAawB,EAAY,CACvB,qBAAsB7C,EAAiBtB,MACvC,eAAeoC,EAAAA,EAAAA,IAAOS,GACtBuB,yBAA0BpC,GACzB,KAAM,EAAG,CAAC,qBAAsB,oBAErCqC,EAAAA,EAAAA,IAAoB,IAAI,EAE9B,ICvGA,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,Q,8BCLA,MACMvF,EAAa,CACjB+B,GAAI,aACJ9B,MAAO,QAEHC,EAAa,CACjB2B,IAAK,EACL5B,MAAO,aAaT,OAA4BM,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,iBACRE,MAAMC,GAEN,MAAM6E,GAAQC,EAAAA,EAAAA,KAERC,GAA0C1C,EAAAA,EAAAA,KAC9C,IAAMwC,EAAMG,QAAQC,EAAAA,GAAAA,QAAAA,qBAEhB7B,GAAgCf,EAAAA,EAAAA,KAAS,IAC7CwC,EAAMG,QAAQE,EAAAA,GAAAA,QAAAA,QAA6BjB,QAAQrB,GACjDmC,EAASxE,MAAM4E,YAAYlC,SAASL,EAAMxB,QAIhD,MAAO,CAACZ,EAAUC,KAChB,MAAM2E,GAAkB1C,EAAAA,EAAAA,IAAkB,QAE1C,OAAQhC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOtB,EAAY,EAC1DsD,EAAAA,EAAAA,IAAOoC,GAAUM,WACb3E,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOpB,EAAY,EACpD2D,EAAAA,EAAAA,IAAakC,EAAiB,KAAM,CAClCE,OAAOC,EAAAA,EAAAA,KAAS,IAAM,EACpBC,EAAAA,EAAAA,KAAiBhE,EAAAA,EAAAA,IAAiBhB,EAAKiB,GAAG,0BAA2B,MAEvEgE,SAASF,EAAAA,EAAAA,KAAS,IAAM,EACtBrC,EAAAA,EAAAA,IAAawC,EAAY,CACvBpG,OAAOqG,EAAAA,EAAAA,IAAgB,CAAE,iBAAmD,KAAjChD,EAAAA,EAAAA,IAAOoC,GAAUa,cAC5DvC,MAAMV,EAAAA,EAAAA,IAAOoC,GACb3B,QAAQT,EAAAA,EAAAA,IAAOS,IACd,KAAM,EAAG,CAAC,QAAS,OAAQ,cAEhCyC,EAAG,IAE6B,KAAjClD,EAAAA,EAAAA,IAAOoC,GAAUa,cACblF,EAAAA,EAAAA,OAAcoF,EAAAA,EAAAA,IAAaC,EAAAA,EAAY,CAAE7E,IAAK,MAC/C0D,EAAAA,EAAAA,IAAoB,IAAI,OAE9BA,EAAAA,EAAAA,IAAoB,IAAI,IAC5B,CAEJ,IC1DA,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,O","sources":["webpack://fittrackee_client/./src/components/Statistics/StatsMenu.vue?b88a","webpack://fittrackee_client/./src/components/Statistics/StatsMenu.vue","webpack://fittrackee_client/./src/components/Statistics/StatsSportsMenu.vue?57e4","webpack://fittrackee_client/./src/components/Statistics/StatsSportsMenu.vue","webpack://fittrackee_client/./src/components/Statistics/index.vue?2efa","webpack://fittrackee_client/./src/components/Statistics/index.vue","webpack://fittrackee_client/./src/views/StatisticsView.vue?9d34","webpack://fittrackee_client/./src/views/StatisticsView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-22d55de2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"chart-menu\" }\nconst _hoisted_2 = { class: \"chart-arrow\" }\nconst _hoisted_3 = { class: \"time-frames custom-checkboxes-group\" }\nconst _hoisted_4 = { class: \"time-frames-checkboxes custom-checkboxes\" }\nconst _hoisted_5 = [\"id\", \"name\", \"checked\", \"onInput\"]\nconst _hoisted_6 = { class: \"chart-arrow\" }\n\nimport { ref } from 'vue'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatsMenu',\n emits: ['arrowClick', 'timeFrameUpdate'],\n setup(__props, { emit }) {\n\n \n\n const selectedTimeFrame = ref('month')\n const timeFrames = ['week', 'month', 'year']\n\n function onUpdateTimeFrame(timeFrame: string) {\n selectedTimeFrame.value = timeFrame\n emit('timeFrameUpdate', timeFrame)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('arrowClick', true)))\n })\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(timeFrames, (frame) => {\n return _createElementVNode(\"div\", {\n class: \"time-frame custom-checkbox\",\n key: frame\n }, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: frame,\n name: frame,\n checked: selectedTimeFrame.value === frame,\n onInput: ($event: any) => (onUpdateTimeFrame(frame))\n }, null, 40, _hoisted_5),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`statistics.TIME_FRAMES.${frame}`)), 1)\n ])\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('arrowClick', false)))\n })\n ])\n ]))\n}\n}\n\n})","import script from \"./StatsMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatsMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatsMenu.vue?vue&type=style&index=0&id=22d55de2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-22d55de2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = { class: \"sports-menu\" }\nconst _hoisted_2 = [\"id\", \"name\", \"checked\", \"onInput\"]\nconst _hoisted_3 = { class: \"sport-label\" }\n\nimport { ComputedRef, computed, inject, withDefaults, toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n userSports: ISport[]\n selectedSportIds?: number[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatsSportsMenu',\n props: {\n userSports: null,\n selectedSportIds: { default: () => [] }\n },\n emits: ['selectedSportIdsUpdate'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { userSports: ISport[], selectedSportIds: number[] }\n\n \n\n \n\n const { t } = useI18n()\n\n const sportColors = inject('sportColors')\n const { selectedSportIds } = toRefs(props)\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.userSports, t)\n )\n\n function updateSelectedSportIds(sportId: number) {\n emit('selectedSportIdsUpdate', sportId)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"label\", {\n type: \"checkbox\",\n key: sport.id,\n style: _normalizeStyle({ color: sport.color ? sport.color : _unref(sportColors)[sport.label] })\n }, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n id: sport.id,\n name: sport.label,\n checked: _unref(selectedSportIds).includes(sport.id),\n onInput: ($event: any) => (updateSelectedSportIds(sport.id))\n }, null, 40, _hoisted_2),\n _createVNode(_component_SportImage, {\n \"sport-label\": sport.label,\n color: sport.color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(sport.translatedLabel), 1)\n ], 4))\n }), 128))\n ]))\n}\n}\n\n})","import script from \"./StatsSportsMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatsSportsMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatsSportsMenu.vue?vue&type=style&index=0&id=31a8ca60&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-30799d13\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"user-statistics\"\n}\n\nimport { ComputedRef, Ref, computed, ref, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import StatChart from '@/components/Common/StatsChart/index.vue'\n import StatsMenu from '@/components/Statistics/StatsMenu.vue'\n import SportsMenu from '@/components/Statistics/StatsSportsMenu.vue'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IStatisticsDateParams } from '@/types/statistics'\n import { IAuthUserProfile } from '@/types/user'\n import { translateSports } from '@/utils/sports'\n import { getStatsDateParams, updateChartParams } from '@/utils/statistics'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const { sports, user } = toRefs(props)\n const selectedTimeFrame = ref('month')\n const chartParams: Ref = ref(\n getChartParams(selectedTimeFrame.value)\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.sports, t)\n )\n const selectedSportIds: Ref = ref(getSports(props.sports))\n\n function updateTimeFrame(timeFrame: string) {\n selectedTimeFrame.value = timeFrame\n chartParams.value = getChartParams(selectedTimeFrame.value)\n }\n function getChartParams(timeFrame: string): IStatisticsDateParams {\n return getStatsDateParams(new Date(), timeFrame, props.user.weekm)\n }\n function handleOnClickArrows(backward: boolean) {\n chartParams.value = updateChartParams(\n chartParams.value,\n backward,\n props.user.weekm\n )\n }\n function getSports(sports: ISport[]) {\n return sports.map((sport) => sport.id)\n }\n function updateSelectedSportIds(sportId: number) {\n if (selectedSportIds.value.includes(sportId)) {\n selectedSportIds.value = selectedSportIds.value.filter(\n (id) => id !== sportId\n )\n } else {\n selectedSportIds.value.push(sportId)\n }\n }\n\n watch(\n () => props.sports,\n (newSports) => {\n selectedSportIds.value = getSports(newSports)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(translatedSports))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatsMenu, {\n onTimeFrameUpdate: updateTimeFrame,\n onArrowClick: handleOnClickArrows\n }),\n _createVNode(StatChart, {\n sports: _unref(sports),\n user: _unref(user),\n chartParams: chartParams.value,\n \"displayed-sport-ids\": selectedSportIds.value,\n fullStats: true\n }, null, 8, [\"sports\", \"user\", \"chartParams\", \"displayed-sport-ids\"]),\n _createVNode(SportsMenu, {\n \"selected-sport-ids\": selectedSportIds.value,\n \"user-sports\": _unref(sports),\n onSelectedSportIdsUpdate: updateSelectedSportIds\n }, null, 8, [\"selected-sport-ids\", \"user-sports\"])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=30799d13&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-30799d13\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2e341d4e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"statistics\",\n class: \"view\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"container\"\n}\n\nimport { ComputedRef, computed } from 'vue'\n\n import Statistics from '@/components/Statistics/index.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatisticsView',\n setup(__props) {\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(() =>\n store.getters[SPORTS_STORE.GETTERS.SPORTS].filter((sport) =>\n authUser.value.sports_list.includes(sport.id)\n )\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('statistics.STATISTICS')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(Statistics, {\n class: _normalizeClass({ 'stats-disabled': _unref(authUser).nb_workouts === 0 }),\n user: _unref(authUser),\n sports: _unref(sports)\n }, null, 8, [\"class\", \"user\", \"sports\"])\n ]),\n _: 1\n }),\n (_unref(authUser).nb_workouts === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./StatisticsView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatisticsView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatisticsView.vue?vue&type=style&index=0&id=2e341d4e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2e341d4e\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_defineComponent","__name","emits","setup","__props","emit","selectedTimeFrame","ref","timeFrames","onUpdateTimeFrame","timeFrame","value","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","onClick","$event","_Fragment","_renderList","frame","key","type","id","name","checked","onInput","_toDisplayString","$t","__exports__","props","userSports","selectedSportIds","default","t","useI18n","sportColors","inject","toRefs","translatedSports","computed","translateSports","updateSelectedSportIds","sportId","_component_SportImage","_resolveComponent","_unref","sport","style","_normalizeStyle","color","label","includes","_createVNode","translatedLabel","sports","user","chartParams","getChartParams","getSports","updateTimeFrame","getStatsDateParams","Date","weekm","handleOnClickArrows","backward","updateChartParams","map","filter","push","watch","newSports","StatsMenu","onTimeFrameUpdate","onArrowClick","StatChart","fullStats","SportsMenu","onSelectedSportIdsUpdate","_createCommentVNode","store","useStore","authUser","getters","AUTH_USER_STORE","SPORTS_STORE","sports_list","_component_Card","username","title","_withCtx","_createTextVNode","content","Statistics","_normalizeClass","nb_workouts","_","_createBlock","NoWorkouts"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/statistics.04a17f2e.js","mappings":"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","sources":["webpack://fittrackee_client/./src/components/Statistics/StatsMenu.vue?b88a","webpack://fittrackee_client/./src/components/Statistics/StatsMenu.vue","webpack://fittrackee_client/./src/components/Statistics/StatsSportsMenu.vue?57e4","webpack://fittrackee_client/./src/components/Statistics/StatsSportsMenu.vue","webpack://fittrackee_client/./src/components/Statistics/index.vue?2efa","webpack://fittrackee_client/./src/components/Statistics/index.vue","webpack://fittrackee_client/./src/views/StatisticsView.vue?9d34","webpack://fittrackee_client/./src/views/StatisticsView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-22d55de2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"chart-menu\" }\nconst _hoisted_2 = { class: \"chart-arrow\" }\nconst _hoisted_3 = { class: \"time-frames custom-checkboxes-group\" }\nconst _hoisted_4 = { class: \"time-frames-checkboxes custom-checkboxes\" }\nconst _hoisted_5 = [\"id\", \"name\", \"checked\", \"onInput\"]\nconst _hoisted_6 = { class: \"chart-arrow\" }\n\nimport { ref } from 'vue'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatsMenu',\n emits: ['arrowClick', 'timeFrameUpdate'],\n setup(__props, { emit }) {\n\n \n\n const selectedTimeFrame = ref('month')\n const timeFrames = ['week', 'month', 'year']\n\n function onUpdateTimeFrame(timeFrame: string) {\n selectedTimeFrame.value = timeFrame\n emit('timeFrameUpdate', timeFrame)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('arrowClick', true)))\n })\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(timeFrames, (frame) => {\n return _createElementVNode(\"div\", {\n class: \"time-frame custom-checkbox\",\n key: frame\n }, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: frame,\n name: frame,\n checked: selectedTimeFrame.value === frame,\n onInput: ($event: any) => (onUpdateTimeFrame(frame))\n }, null, 40, _hoisted_5),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`statistics.TIME_FRAMES.${frame}`)), 1)\n ])\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('arrowClick', false)))\n })\n ])\n ]))\n}\n}\n\n})","import script from \"./StatsMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatsMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatsMenu.vue?vue&type=style&index=0&id=22d55de2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-22d55de2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = { class: \"sports-menu\" }\nconst _hoisted_2 = [\"id\", \"name\", \"checked\", \"onInput\"]\nconst _hoisted_3 = { class: \"sport-label\" }\n\nimport { ComputedRef, computed, inject, withDefaults, toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n userSports: ISport[]\n selectedSportIds?: number[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatsSportsMenu',\n props: {\n userSports: null,\n selectedSportIds: { default: () => [] }\n },\n emits: ['selectedSportIdsUpdate'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { userSports: ISport[], selectedSportIds: number[] }\n\n \n\n \n\n const { t } = useI18n()\n\n const sportColors = inject('sportColors')\n const { selectedSportIds } = toRefs(props)\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.userSports, t)\n )\n\n function updateSelectedSportIds(sportId: number) {\n emit('selectedSportIdsUpdate', sportId)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"label\", {\n type: \"checkbox\",\n key: sport.id,\n style: _normalizeStyle({ color: sport.color ? sport.color : _unref(sportColors)[sport.label] })\n }, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n id: sport.id,\n name: sport.label,\n checked: _unref(selectedSportIds).includes(sport.id),\n onInput: ($event: any) => (updateSelectedSportIds(sport.id))\n }, null, 40, _hoisted_2),\n _createVNode(_component_SportImage, {\n \"sport-label\": sport.label,\n color: sport.color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(sport.translatedLabel), 1)\n ], 4))\n }), 128))\n ]))\n}\n}\n\n})","import script from \"./StatsSportsMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatsSportsMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatsSportsMenu.vue?vue&type=style&index=0&id=31a8ca60&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-30799d13\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"user-statistics\"\n}\n\nimport { ComputedRef, Ref, computed, ref, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import StatChart from '@/components/Common/StatsChart/index.vue'\n import StatsMenu from '@/components/Statistics/StatsMenu.vue'\n import SportsMenu from '@/components/Statistics/StatsSportsMenu.vue'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IStatisticsDateParams } from '@/types/statistics'\n import { IAuthUserProfile } from '@/types/user'\n import { translateSports } from '@/utils/sports'\n import { getStatsDateParams, updateChartParams } from '@/utils/statistics'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const { sports, user } = toRefs(props)\n const selectedTimeFrame = ref('month')\n const chartParams: Ref = ref(\n getChartParams(selectedTimeFrame.value)\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.sports, t)\n )\n const selectedSportIds: Ref = ref(getSports(props.sports))\n\n function updateTimeFrame(timeFrame: string) {\n selectedTimeFrame.value = timeFrame\n chartParams.value = getChartParams(selectedTimeFrame.value)\n }\n function getChartParams(timeFrame: string): IStatisticsDateParams {\n return getStatsDateParams(new Date(), timeFrame, props.user.weekm)\n }\n function handleOnClickArrows(backward: boolean) {\n chartParams.value = updateChartParams(\n chartParams.value,\n backward,\n props.user.weekm\n )\n }\n function getSports(sports: ISport[]) {\n return sports.map((sport) => sport.id)\n }\n function updateSelectedSportIds(sportId: number) {\n if (selectedSportIds.value.includes(sportId)) {\n selectedSportIds.value = selectedSportIds.value.filter(\n (id) => id !== sportId\n )\n } else {\n selectedSportIds.value.push(sportId)\n }\n }\n\n watch(\n () => props.sports,\n (newSports) => {\n selectedSportIds.value = getSports(newSports)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(translatedSports))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatsMenu, {\n onTimeFrameUpdate: updateTimeFrame,\n onArrowClick: handleOnClickArrows\n }),\n _createVNode(StatChart, {\n sports: _unref(sports),\n user: _unref(user),\n chartParams: chartParams.value,\n \"displayed-sport-ids\": selectedSportIds.value,\n fullStats: true\n }, null, 8, [\"sports\", \"user\", \"chartParams\", \"displayed-sport-ids\"]),\n _createVNode(SportsMenu, {\n \"selected-sport-ids\": selectedSportIds.value,\n \"user-sports\": _unref(sports),\n onSelectedSportIdsUpdate: updateSelectedSportIds\n }, null, 8, [\"selected-sport-ids\", \"user-sports\"])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=30799d13&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-30799d13\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2e341d4e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"statistics\",\n class: \"view\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"container\"\n}\n\nimport { ComputedRef, computed } from 'vue'\n\n import Statistics from '@/components/Statistics/index.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatisticsView',\n setup(__props) {\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(() =>\n store.getters[SPORTS_STORE.GETTERS.SPORTS].filter((sport) =>\n authUser.value.sports_list.includes(sport.id)\n )\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('statistics.STATISTICS')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(Statistics, {\n class: _normalizeClass({ 'stats-disabled': _unref(authUser).nb_workouts === 0 }),\n user: _unref(authUser),\n sports: _unref(sports)\n }, null, 8, [\"class\", \"user\", \"sports\"])\n ]),\n _: 1\n }),\n (_unref(authUser).nb_workouts === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./StatisticsView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatisticsView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatisticsView.vue?vue&type=style&index=0&id=2e341d4e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2e341d4e\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_defineComponent","__name","emits","setup","__props","emit","selectedTimeFrame","ref","timeFrames","onUpdateTimeFrame","timeFrame","value","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","onClick","$event","_Fragment","_renderList","frame","key","type","id","name","checked","onInput","_toDisplayString","$t","__exports__","props","userSports","selectedSportIds","default","t","useI18n","sportColors","inject","toRefs","translatedSports","computed","translateSports","updateSelectedSportIds","sportId","_component_SportImage","_resolveComponent","_unref","sport","style","_normalizeStyle","color","label","includes","_createVNode","translatedLabel","sports","user","chartParams","getChartParams","getSports","updateTimeFrame","getStatsDateParams","Date","weekm","handleOnClickArrows","backward","updateChartParams","map","filter","push","watch","newSports","StatsMenu","onTimeFrameUpdate","onArrowClick","StatChart","fullStats","SportsMenu","onSelectedSportIdsUpdate","_createCommentVNode","store","useStore","authUser","getters","AUTH_USER_STORE","SPORTS_STORE","sports_list","_component_Card","username","title","_withCtx","_createTextVNode","content","Statistics","_normalizeClass","nb_workouts","_","_createBlock","NoWorkouts"],"sourceRoot":""} \ No newline at end of file diff --git a/fittrackee/dist/static/js/workouts.8abaa659.js b/fittrackee/dist/static/js/workouts.a514f12a.js similarity index 99% rename from fittrackee/dist/static/js/workouts.8abaa659.js rename to fittrackee/dist/static/js/workouts.a514f12a.js index 9f7f4cc0..b7b54e24 100644 --- a/fittrackee/dist/static/js/workouts.8abaa659.js +++ b/fittrackee/dist/static/js/workouts.a514f12a.js @@ -1,2 +1,2 @@ "use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[401],{2528:function(t,e,o){o.d(e,{Z:function(){return Q}});o(7658);var a=o(6252),n=o(3577),l=o(2262),r=o(9963),s=o(9150),i=o(2201),u=o(5801),d=o(9917),c=o(6558),p=o(8966),m=o(631),w=o(3649);const k={id:"workout-form"},f=["onSubmit"],_={class:"form-items"},v={key:0,class:"form-item-radio"},g=["checked","disabled"],y={for:"withGpx"},S=["checked","disabled"],U={for:"withoutGpx"},h={class:"form-item"},b=["disabled"],T=["value"],E={key:1,class:"form-item"},D={for:"gpxFile"},O=["disabled"],I={class:"files-help info-box"},A={key:2,class:"form-item"},C={for:"title"},R=["required","disabled"],$={key:3},N={class:"workout-date-duration"},x={class:"form-item"},z={class:"workout-date-time"},L=["disabled"],j=["disabled"],W={class:"form-item"},P=["disabled"],B=["disabled"],F=["disabled"],H={class:"form-item"},M=["disabled"],Z={class:"form-item"},q={key:1},G={key:2,class:"form-buttons"},K=["disabled"],Y=["onClick"];var V=(0,a.aZ)({__name:"WorkoutEdition",props:{authUser:null,sports:null,isCreation:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},workout:{default:()=>({})}},setup(t){const e=t,{t:o}=(0,s.QT)(),V=(0,d.o)(),J=(0,i.tv)(),{authUser:X,workout:Q,isCreation:tt,loading:et}=(0,l.BK)(e),ot=(0,a.Fl)((()=>(0,m.xH)(e.sports,o,"is_active_for_user",Q.value.id?[Q.value.sport_id]:[]))),at=(0,a.Fl)((()=>V.getters[u.SY.GETTERS.APP_CONFIG])),nt=at.value.max_single_file_size?(0,p.Z)(at.value.max_single_file_size):"",lt=at.value.gpx_limit_import,rt=at.value.max_zip_file_size?(0,p.Z)(at.value.max_zip_file_size):"",st=(0,a.Fl)((()=>V.getters[u.SY.GETTERS.ERROR_MESSAGES])),it=(0,l.qj)({sport_id:"",title:"",notes:"",workoutDate:"",workoutTime:"",workoutDurationHour:"",workoutDurationMinutes:"",workoutDurationSeconds:"",workoutDistance:""}),ut=(0,l.iH)(e.workout.id?e.workout.with_gpx:e.isCreation);let dt=null;const ct=(0,l.iH)(!1);function pt(t){it.notes=t}function mt(){ut.value=!ut.value,ct.value=!1}function wt(t){t.target.files&&(dt=t.target.files[0])}function kt(t){if(it.sport_id=`${t.sport_id}`,it.title=t.title,it.notes=t.notes,!t.with_gpx){const o=(0,c.Jo)((0,c.eB)(t.workout_date,e.authUser.timezone),"yyyy-MM-dd"),a=t.duration.split(":");it.workoutDistance=`${X.value.imperial_units?(0,w.sC)(t.distance,"km","mi",2):parseFloat(t.distance.toFixed(2))}`,it.workoutDate=o.workout_date,it.workoutTime=o.workout_time,it.workoutDurationHour=a[0],it.workoutDurationMinutes=a[1],it.workoutDurationSeconds=a[2]}}function ft(t){t.title=it.title,t.distance=X.value.imperial_units?(0,w.sC)(+it.workoutDistance,"mi","km",3):+it.workoutDistance,t.duration=3600*+it.workoutDurationHour+60*+it.workoutDurationMinutes+ +it.workoutDurationSeconds,t.workout_date=`${it.workoutDate} ${it.workoutTime}`}function _t(){const t={sport_id:+it.sport_id,notes:it.notes};if(e.workout.id)e.workout.with_gpx?t.title=it.title:ft(t),V.dispatch(u.aX.ACTIONS.EDIT_WORKOUT,{workoutId:e.workout.id,data:t});else if(ut.value){if(!dt){const t="workouts.NO_FILE_PROVIDED";return void V.commit(u.SY.MUTATIONS.SET_ERROR_MESSAGES,t)}t.file=dt,V.dispatch(u.aX.ACTIONS.ADD_WORKOUT,t)}else ft(t),V.dispatch(u.aX.ACTIONS.ADD_WORKOUT_WITHOUT_GPX,t)}function vt(){e.workout.id?J.push({name:"Workout",params:{workoutId:e.workout.id}}):J.go(-1)}function gt(){ct.value=!0}return(0,a.bv)((()=>{e.workout.id&&kt(e.workout)})),(0,a.Ah)((()=>V.commit(u.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(0,a.YP)((()=>e.workout),(async(t,e)=>{t!==e&&t&&t.id&&kt(t)})),(t,e)=>{const o=(0,a.up)("CustomTextArea"),s=(0,a.up)("ErrorMessage"),i=(0,a.up)("Loader"),u=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",{id:"workout-edition",class:(0,n.C_)(["center-card with-margin",{"center-form":(0,l.SU)(Q)&&(0,l.SU)(Q).with_gpx}])},[(0,a.Wm)(u,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,n.zw)(t.$t(`workouts.${(0,l.SU)(tt)?"ADD":"EDIT"}_WORKOUT`)),1)])),content:(0,a.w5)((()=>[(0,a._)("div",k,[(0,a._)("form",{class:(0,n.C_)({errors:ct.value}),onSubmit:(0,r.iM)(_t,["prevent"])},[(0,a._)("div",_,[(0,l.SU)(tt)?((0,a.wg)(),(0,a.iD)("div",v,[(0,a._)("div",null,[(0,a._)("input",{id:"withGpx",type:"radio",checked:ut.value,disabled:(0,l.SU)(et),onClick:mt},null,8,g),(0,a._)("label",y,(0,n.zw)(t.$t("workouts.WITH_GPX")),1)]),(0,a._)("div",null,[(0,a._)("input",{id:"withoutGpx",type:"radio",checked:!ut.value,disabled:(0,l.SU)(et),onClick:mt},null,8,S),(0,a._)("label",U,(0,n.zw)(t.$t("workouts.WITHOUT_GPX")),1)])])):(0,a.kq)("",!0),(0,a._)("div",h,[(0,a._)("label",null,(0,n.zw)(t.$t("workouts.SPORT",1))+": ",1),(0,a.wy)((0,a._)("select",{id:"sport",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[0]||(e[0]=t=>it.sport_id=t)},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,l.SU)(ot),(t=>((0,a.wg)(),(0,a.iD)("option",{value:t.id,key:t.id},(0,n.zw)(t.translatedLabel),9,T)))),128))],40,b),[[r.bM,it.sport_id]])]),(0,l.SU)(tt)&&ut.value?((0,a.wg)(),(0,a.iD)("div",E,[(0,a._)("label",D,(0,n.zw)(t.$t("workouts.GPX_FILE"))+" "+(0,n.zw)(t.$t("workouts.ZIP_ARCHIVE_DESCRIPTION"))+": ",1),(0,a._)("input",{id:"gpxFile",name:"gpxFile",type:"file",accept:".gpx, .zip",disabled:(0,l.SU)(et),required:"",onInvalid:gt,onInput:wt},null,40,O),(0,a._)("div",I,[(0,a._)("div",null,[(0,a._)("strong",null,(0,n.zw)(t.$t("workouts.GPX_FILE"))+":",1),(0,a._)("ul",null,[(0,a._)("li",null,(0,n.zw)(t.$t("workouts.MAX_SIZE"))+": "+(0,n.zw)((0,l.SU)(nt)),1)])]),(0,a._)("div",null,[(0,a._)("strong",null,(0,n.zw)(t.$t("workouts.ZIP_ARCHIVE"))+":",1),(0,a._)("ul",null,[(0,a._)("li",null,(0,n.zw)(t.$t("workouts.NO_FOLDER")),1),(0,a._)("li",null,(0,n.zw)(t.$t("workouts.MAX_FILES"))+": "+(0,n.zw)((0,l.SU)(lt)),1),(0,a._)("li",null,(0,n.zw)(t.$t("workouts.MAX_SIZE"))+": "+(0,n.zw)((0,l.SU)(rt)),1)])])])])):((0,a.wg)(),(0,a.iD)("div",A,[(0,a._)("label",C,(0,n.zw)(t.$t("workouts.TITLE"))+": ",1),(0,a.wy)((0,a._)("input",{id:"title",name:"title",type:"text",required:!(0,l.SU)(tt),onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[1]||(e[1]=t=>it.title=t)},null,40,R),[[r.nr,it.title]])])),ut.value?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("div",$,[(0,a._)("div",N,[(0,a._)("div",x,[(0,a._)("label",null,(0,n.zw)(t.$t("workouts.WORKOUT_DATE"))+":",1),(0,a._)("div",z,[(0,a.wy)((0,a._)("input",{id:"workout-date",name:"workout-date",type:"date",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[2]||(e[2]=t=>it.workoutDate=t)},null,40,L),[[r.nr,it.workoutDate]]),(0,a.wy)((0,a._)("input",{id:"workout-time",name:"workout-time",class:"workout-time",type:"time",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[3]||(e[3]=t=>it.workoutTime=t)},null,40,j),[[r.nr,it.workoutTime]])])]),(0,a._)("div",W,[(0,a._)("label",null,(0,n.zw)(t.$t("workouts.DURATION"))+":",1),(0,a._)("div",null,[(0,a.wy)((0,a._)("input",{id:"workout-duration-hour",name:"workout-duration-hour",class:"workout-duration",type:"text",placeholder:"HH",minlength:"1",maxlength:"2",pattern:"^([0-1]?[0-9]|2[0-3])$",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[4]||(e[4]=t=>it.workoutDurationHour=t)},null,40,P),[[r.nr,it.workoutDurationHour]]),(0,a.Uk)(" : "),(0,a.wy)((0,a._)("input",{id:"workout-duration-minutes",name:"workout-duration-minutes",class:"workout-duration",type:"text",pattern:"^([0-5][0-9])$",minlength:"2",maxlength:"2",placeholder:"MM",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[5]||(e[5]=t=>it.workoutDurationMinutes=t)},null,40,B),[[r.nr,it.workoutDurationMinutes]]),(0,a.Uk)(" : "),(0,a.wy)((0,a._)("input",{id:"workout-duration-seconds",name:"workout-duration-seconds",class:"workout-duration",type:"text",pattern:"^([0-5][0-9])$",minlength:"2",maxlength:"2",placeholder:"SS",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[6]||(e[6]=t=>it.workoutDurationSeconds=t)},null,40,F),[[r.nr,it.workoutDurationSeconds]])])])]),(0,a._)("div",H,[(0,a._)("label",null,(0,n.zw)(t.$t("workouts.DISTANCE"))+" ("+(0,n.zw)((0,l.SU)(X).imperial_units?"mi":"km")+"): ",1),(0,a.wy)((0,a._)("input",{name:"workout-distance",type:"number",min:"0",step:"0.001",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[7]||(e[7]=t=>it.workoutDistance=t)},null,40,M),[[r.nr,it.workoutDistance]])])])),(0,a._)("div",Z,[(0,a._)("label",null,(0,n.zw)(t.$t("workouts.NOTES"))+": ",1),(0,a.Wm)(o,{name:"notes",input:it.notes,disabled:(0,l.SU)(et),onUpdateValue:pt},null,8,["input","disabled"])])]),(0,l.SU)(st)?((0,a.wg)(),(0,a.j4)(s,{key:0,message:(0,l.SU)(st)},null,8,["message"])):(0,a.kq)("",!0),(0,l.SU)(et)?((0,a.wg)(),(0,a.iD)("div",q,[(0,a.Wm)(i)])):((0,a.wg)(),(0,a.iD)("div",G,[(0,a._)("button",{class:"confirm",type:"submit",disabled:(0,l.SU)(et)},(0,n.zw)(t.$t("buttons.SUBMIT")),9,K),(0,a._)("button",{class:"cancel",onClick:(0,r.iM)(vt,["prevent"])},(0,n.zw)(t.$t("buttons.CANCEL")),9,Y)]))],42,f)])])),_:1})],2)}}}),J=o(3744);const X=(0,J.Z)(V,[["__scopeId","data-v-886f93f6"]]);var Q=X},4189:function(t,e,o){o.r(e),o.d(e,{default:function(){return p}});var a=o(6252),n=o(2262),l=o(2528),r=o(5801),s=o(9917);const i={id:"add-workout",class:"view"},u={class:"container"};var d=(0,a.aZ)({__name:"AddWorkout",setup(t){const e=(0,s.o)(),o=(0,a.Fl)((()=>e.getters[r.O8.GETTERS.SPORTS])),d=(0,a.Fl)((()=>e.getters[r.YN.GETTERS.AUTH_USER_PROFILE])),c=(0,a.Fl)((()=>e.getters[r.aX.GETTERS.WORKOUT_DATA]));return(t,e)=>((0,a.wg)(),(0,a.iD)("div",i,[(0,a._)("div",u,[(0,a.Wm)(l.Z,{authUser:(0,n.SU)(d),sports:(0,n.SU)(o),isCreation:!0,loading:(0,n.SU)(c).loading},null,8,["authUser","sports","loading"])])]))}});const c=d;var p=c},8237:function(t,e,o){o.r(e),o.d(e,{default:function(){return m}});var a=o(6252),n=o(2262),l=o(2201),r=o(2528),s=o(5801),i=o(9917);const u={id:"edit-workout",class:"view"},d={class:"container"};var c=(0,a.aZ)({__name:"EditWorkout",setup(t){const e=(0,l.yj)(),o=(0,i.o)(),c=(0,a.Fl)((()=>o.getters[s.YN.GETTERS.AUTH_USER_PROFILE])),p=(0,a.Fl)((()=>o.getters[s.O8.GETTERS.SPORTS])),m=(0,a.Fl)((()=>o.getters[s.aX.GETTERS.WORKOUT_DATA]));return(0,a.wF)((()=>{o.dispatch(s.aX.ACTIONS.GET_WORKOUT_DATA,{workoutId:e.params.workoutId})})),(0,a.YP)((()=>e.params.workoutId),(async t=>{t||o.commit(s.aX.MUTATIONS.EMPTY_WORKOUT)})),(t,e)=>((0,a.wg)(),(0,a.iD)("div",u,[(0,a._)("div",d,[(0,n.SU)(m).workout.id?((0,a.wg)(),(0,a.j4)(r.Z,{key:0,authUser:(0,n.SU)(c),sports:(0,n.SU)(p),workout:(0,n.SU)(m).workout,loading:(0,n.SU)(m).loading},null,8,["authUser","sports","workout","loading"])):(0,a.kq)("",!0)])]))}});const p=c;var m=p},4915:function(t,e,o){o.r(e),o.d(e,{default:function(){return Yo}});var a=o(6252),n=o(2262),l=o(2201),r=o(8273),s=(o(7658),o(3577)),i=o(9963),u=o(5167);const d=t=>((0,a.dD)("data-v-4d9f9a8a"),t=t(),(0,a.Cn)(),t),c={id:"workout-card-title"},p=["title"],m=d((()=>(0,a._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1))),w=[m],k={class:"workout-card-title"},f={class:"workout-title-date"},_={key:0,class:"workout-title"},v={key:1,class:"workout-title"},g={class:"workout-segment"},y=d((()=>(0,a._)("i",{class:"fa fa-map-marker","aria-hidden":"true"},null,-1))),S={class:"workout-date"},U={class:"workout-link"},h=["title"],b=d((()=>(0,a._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1))),T=[b];var E=(0,a.aZ)({__name:"WorkoutCardTitle",props:{sport:null,workoutObject:null},emits:["displayModal"],setup(t,{emit:e}){const o=t,{sport:l,workoutObject:r}=(0,n.BK)(o);async function d(t){await u.Z.get(`workouts/${t}/gpx/download`,{responseType:"blob"}).then((e=>{const o=window.URL.createObjectURL(new Blob([e.data],{type:"application/gpx+xml"})),a=document.createElement("a");a.href=o,a.setAttribute("download",`${t}.gpx`),document.body.appendChild(a),a.click()}))}return(t,o)=>{const u=(0,a.up)("SportImage"),m=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("div",c,[(0,a._)("div",{class:(0,s.C_)(["workout-previous workout-arrow",{inactive:!(0,n.SU)(r).previousUrl}]),title:(0,n.SU)(r).previousUrl?t.$t(`workouts.PREVIOUS_${(0,n.SU)(r).type}`):t.$t(`workouts.NO_PREVIOUS_${(0,n.SU)(r).type}`),onClick:o[0]||(o[0]=e=>(0,n.SU)(r).previousUrl?t.$router.push((0,n.SU)(r).previousUrl):null)},w,10,p),(0,a._)("div",k,[(0,a.Wm)(u,{"sport-label":(0,n.SU)(l).label,color:(0,n.SU)(l).color},null,8,["sport-label","color"]),(0,a._)("div",f,["WORKOUT"===(0,n.SU)(r).type?((0,a.wg)(),(0,a.iD)("div",_,[(0,a._)("span",null,(0,s.zw)((0,n.SU)(r).title),1),(0,a._)("i",{class:"fa fa-edit","aria-hidden":"true",onClick:o[1]||(o[1]=e=>t.$router.push({name:"EditWorkout",params:{workoutId:(0,n.SU)(r).workoutId}}))}),(0,n.SU)(r).with_gpx?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-download","aria-hidden":"true",onClick:o[2]||(o[2]=(0,i.iM)((t=>d((0,n.SU)(r).workoutId)),["prevent"]))})):(0,a.kq)("",!0),(0,a._)("i",{class:"fa fa-trash","aria-hidden":"true",onClick:o[3]||(o[3]=t=>e("displayModal",!0))})])):((0,a.wg)(),(0,a.iD)("div",v,[(0,a.Uk)((0,s.zw)((0,n.SU)(r).title)+" ",1),(0,a._)("span",g,[(0,a.Uk)(" — "),y,(0,a.Uk)(" "+(0,s.zw)(t.$t("workouts.SEGMENT"))+" "+(0,s.zw)((0,n.SU)(r).segmentId+1),1)])])),(0,a._)("div",S,[(0,a.Uk)((0,s.zw)((0,n.SU)(r).workoutDate)+" - "+(0,s.zw)((0,n.SU)(r).workoutTime)+" ",1),(0,a._)("span",U,["SEGMENT"===(0,n.SU)(r).type?((0,a.wg)(),(0,a.j4)(m,{key:0,to:{name:"Workout",params:{workoutId:(0,n.SU)(r).workoutId}}},{default:(0,a.w5)((()=>[(0,a.Uk)(" > "+(0,s.zw)(t.$t("workouts.BACK_TO_WORKOUT")),1)])),_:1},8,["to"])):(0,a.kq)("",!0)])])])]),(0,a._)("div",{class:(0,s.C_)(["workout-next workout-arrow",{inactive:!(0,n.SU)(r).nextUrl}]),title:(0,n.SU)(r).nextUrl?t.$t(`workouts.NEXT_${(0,n.SU)(r).type}`):t.$t(`workouts.NO_NEXT_${(0,n.SU)(r).type}`),onClick:o[4]||(o[4]=e=>(0,n.SU)(r).nextUrl?t.$router.push((0,n.SU)(r).nextUrl):null)},T,10,h)])}}}),D=o(3744);const O=(0,D.Z)(E,[["__scopeId","data-v-4d9f9a8a"]]);var I=O;const A=t=>((0,a.dD)("data-v-1a5282f6"),t=t(),(0,a.Cn)(),t),C={key:0,class:"workout-record"},R=A((()=>(0,a._)("sup",null,[(0,a._)("i",{class:"fa fa-trophy","aria-hidden":"true"})],-1))),$=[R];var N=(0,a.aZ)({__name:"WorkoutRecord",props:{recordType:null,workoutObject:null},setup(t){const e=t,{recordType:o,workoutObject:l}=(0,n.BK)(e);return(t,e)=>(0,n.SU)(l).records&&(0,n.SU)(l).records.find((t=>t.record_type===(0,n.SU)(o)))?((0,a.wg)(),(0,a.iD)("span",C,$)):(0,a.kq)("",!0)}});const x=(0,D.Z)(N,[["__scopeId","data-v-1a5282f6"]]);var z=x,L=o(9150);const j=["N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"],W=t=>{const e=Math.floor(t/22.5+.5);return j[e%16]},P={class:"wind"},B={class:"wind-bearing"},F=["title"];var H=(0,a.aZ)({__name:"WeatherWind",props:{weather:null,useImperialUnits:{type:Boolean}},setup(t){const e=t,{useImperialUnits:o,weather:l}=(0,n.BK)(e),{t:r}=(0,L.QT)();function i(t){return r(`workouts.WEATHER.WIND_DIRECTIONS.${W(t)}`)}return(t,e)=>{const r=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",P,[(0,a.Wm)(r,{distance:(0,n.SU)(l).wind,unitFrom:"m",digits:1,displayUnit:!1,useImperialUnits:(0,n.SU)(o)},null,8,["distance","useImperialUnits"]),(0,a.Uk)(" "+(0,s.zw)((0,n.SU)(o)?"ft":"m")+"/s ",1),(0,a._)("div",B,[(0,n.SU)(l).windBearing?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-long-arrow-down",style:(0,s.j5)({transform:`rotate(${(0,n.SU)(l).windBearing}deg)`}),"aria-hidden":"true",title:i((0,n.SU)(l).windBearing)},null,12,F)):(0,a.kq)("",!0)])])}}});const M=(0,D.Z)(H,[["__scopeId","data-v-46a7c31c"]]);var Z=M;const q=t=>((0,a.dD)("data-v-76e9ab62"),t=t(),(0,a.Cn)(),t),G={key:0,id:"workout-weather"},K={class:"weather-table"},Y=q((()=>(0,a._)("th",null,null,-1))),V={class:"weather-th"},J=["src","alt","title"],X={class:"weather-th"},Q=["src","alt","title"],tt=["alt","title"],et=["alt","title"],ot=["alt","title"];var at=(0,a.aZ)({__name:"WorkoutWeather",props:{workoutObject:null,useImperialUnits:{type:Boolean}},setup(t){const e=t,{useImperialUnits:o,workoutObject:l}=(0,n.BK)(e);return(t,e)=>(0,n.SU)(l).weatherStart&&(0,n.SU)(l).weatherEnd?((0,a.wg)(),(0,a.iD)("div",G,[(0,a._)("table",K,[(0,a._)("thead",null,[(0,a._)("tr",null,[Y,(0,a._)("th",null,[(0,a._)("div",V,[(0,a.Uk)((0,s.zw)(t.$t("workouts.START"))+" ",1),(0,a._)("img",{class:"weather-img",src:`/img/weather/${(0,n.SU)(l).weatherStart.icon}.svg`,alt:t.$t(`workouts.WEATHER.DARK_SKY.${(0,n.SU)(l).weatherStart.icon}`),title:t.$t(`workouts.WEATHER.DARK_SKY.${(0,n.SU)(l).weatherStart.icon}`)},null,8,J)])]),(0,a._)("th",null,[(0,a._)("div",X,[(0,a.Uk)((0,s.zw)(t.$t("workouts.END"))+" ",1),(0,a._)("img",{class:"weather-img",src:`/img/weather/${(0,n.SU)(l).weatherEnd.icon}.svg`,alt:t.$t(`workouts.WEATHER.DARK_SKY.${(0,n.SU)(l).weatherEnd.icon}`),title:t.$t(`workouts.WEATHER.DARK_SKY.${(0,n.SU)(l).weatherEnd.icon}`)},null,8,Q)])])])]),(0,a._)("tbody",null,[(0,a._)("tr",null,[(0,a._)("td",null,[(0,a._)("img",{class:"weather-img weather-img-small",src:"/img/weather/temperature.svg",alt:t.$t("workouts.WEATHER.TEMPERATURE"),title:t.$t("workouts.WEATHER.TEMPERATURE")},null,8,tt)]),(0,a._)("td",null,(0,s.zw)(Number((0,n.SU)(l).weatherStart.temperature).toFixed(1))+"°C ",1),(0,a._)("td",null,(0,s.zw)(Number((0,n.SU)(l).weatherEnd.temperature).toFixed(1))+"°C ",1)]),(0,a._)("tr",null,[(0,a._)("td",null,[(0,a._)("img",{class:"weather-img weather-img-small",src:"/img/weather/pour-rain.svg",alt:t.$t("workouts.WEATHER.HUMIDITY"),title:t.$t("workouts.WEATHER.HUMIDITY")},null,8,et)]),(0,a._)("td",null,(0,s.zw)(Number(100*(0,n.SU)(l).weatherStart.humidity).toFixed(1))+"% ",1),(0,a._)("td",null,(0,s.zw)(Number(100*(0,n.SU)(l).weatherEnd.humidity).toFixed(1))+"% ",1)]),(0,a._)("tr",null,[(0,a._)("td",null,[(0,a._)("img",{class:"weather-img weather-img-small",src:"/img/weather/breeze.svg",alt:t.$t("workouts.WEATHER.WIND"),title:t.$t("workouts.WEATHER.WIND")},null,8,ot)]),(0,a._)("td",null,[(0,a.Wm)(Z,{weather:(0,n.SU)(l).weatherStart,useImperialUnits:(0,n.SU)(o)},null,8,["weather","useImperialUnits"])]),(0,a._)("td",null,[(0,a.Wm)(Z,{weather:(0,n.SU)(l).weatherEnd,useImperialUnits:(0,n.SU)(o)},null,8,["weather","useImperialUnits"])])])])])])):(0,a.kq)("",!0)}});const nt=(0,D.Z)(at,[["__scopeId","data-v-76e9ab62"]]);var lt=nt;const rt=t=>((0,a.dD)("data-v-74c5993b"),t=t(),(0,a.Cn)(),t),st={id:"workout-info"},it={class:"workout-data"},ut=rt((()=>(0,a._)("i",{class:"fa fa-clock-o","aria-hidden":"true"},null,-1))),dt={class:"label"},ct={class:"value"},pt={key:0},mt={class:"value"},wt={class:"value"},kt={class:"workout-data"},ft=rt((()=>(0,a._)("i",{class:"fa fa-road","aria-hidden":"true"},null,-1))),_t={class:"label"},vt={class:"workout-data"},gt=rt((()=>(0,a._)("i",{class:"fa fa-tachometer","aria-hidden":"true"},null,-1))),yt={class:"label"},St=rt((()=>(0,a._)("br",null,null,-1))),Ut={class:"label"},ht={key:0,class:"workout-data"},bt=["alt"],Tt={class:"label"},Et=rt((()=>(0,a._)("br",null,null,-1))),Dt={class:"label"},Ot={key:1,class:"workout-data"},It=rt((()=>(0,a._)("i",{class:"fa fa-location-arrow","aria-hidden":"true"},null,-1))),At={class:"label"},Ct=rt((()=>(0,a._)("br",null,null,-1))),Rt={class:"label"};var $t=(0,a.aZ)({__name:"WorkoutData",props:{workoutObject:null,useImperialUnits:{type:Boolean},displayHARecord:{type:Boolean}},setup(t){const e=t,{displayHARecord:o,workoutObject:l,useImperialUnits:r}=(0,n.BK)(e),i=(0,a.Fl)((()=>"0:00:00"!==e.workoutObject.pauses&&null!==e.workoutObject.pauses));return(t,e)=>{const u=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",st,[(0,a._)("div",it,[ut,(0,a._)("span",dt,(0,s.zw)(t.$t("workouts.DURATION")),1),(0,a.Uk)(": "),(0,a._)("span",ct,(0,s.zw)((0,n.SU)(l).moving),1),(0,a.Wm)(z,{workoutObject:(0,n.SU)(l),recordType:"LD"},null,8,["workoutObject"]),(0,n.SU)(i)?((0,a.wg)(),(0,a.iD)("div",pt,[(0,a.Uk)(" ("+(0,s.zw)(t.$t("workouts.PAUSES"))+": ",1),(0,a._)("span",mt,(0,s.zw)((0,n.SU)(l).pauses),1),(0,a.Uk)(" - "+(0,s.zw)(t.$t("workouts.TOTAL_DURATION"))+": ",1),(0,a._)("span",wt,(0,s.zw)((0,n.SU)(l).duration)+")",1)])):(0,a.kq)("",!0)]),(0,a._)("div",kt,[ft,(0,a._)("span",_t,(0,s.zw)(t.$t("workouts.DISTANCE")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).distance,digits:3,unitFrom:"km",strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"]),(0,a.Wm)(z,{workoutObject:(0,n.SU)(l),recordType:"FD"},null,8,["workoutObject"])]),(0,a._)("div",vt,[gt,(0,a._)("span",yt,(0,s.zw)(t.$t("workouts.AVERAGE_SPEED")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).aveSpeed,unitFrom:"km",speed:!0,strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"]),(0,a.Wm)(z,{workoutObject:(0,n.SU)(l),recordType:"AS"},null,8,["workoutObject"]),St,(0,a._)("span",Ut,(0,s.zw)(t.$t("workouts.MAX_SPEED")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).maxSpeed,unitFrom:"km",speed:!0,strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"]),(0,a.Wm)(z,{workoutObject:(0,n.SU)(l),recordType:"MS"},null,8,["workoutObject"])]),null!==(0,n.SU)(l).maxAlt&&null!==(0,n.SU)(l).minAlt?((0,a.wg)(),(0,a.iD)("div",ht,[(0,a._)("img",{class:"mountains",src:"/img/workouts/mountains.svg",alt:t.$t("workouts.ELEVATION")},null,8,bt),(0,a._)("span",Tt,(0,s.zw)(t.$t("workouts.MIN_ALTITUDE")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).minAlt,unitFrom:"m",strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"]),Et,(0,a._)("span",Dt,(0,s.zw)(t.$t("workouts.MAX_ALTITUDE")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).maxAlt,unitFrom:"m",strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"])])):(0,a.kq)("",!0),null!==(0,n.SU)(l).ascent&&null!==(0,n.SU)(l).descent?((0,a.wg)(),(0,a.iD)("div",Ot,[It,(0,a._)("span",At,(0,s.zw)(t.$t("workouts.ASCENT")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).ascent,unitFrom:"m",strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"]),(0,n.SU)(o)?((0,a.wg)(),(0,a.j4)(z,{key:0,workoutObject:(0,n.SU)(l),recordType:"HA"},null,8,["workoutObject"])):(0,a.kq)("",!0),Ct,(0,a._)("span",Rt,(0,s.zw)(t.$t("workouts.DESCENT")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).descent,unitFrom:"m",strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"])])):(0,a.kq)("",!0),(0,a.Wm)(lt,{workoutObject:(0,n.SU)(l),useImperialUnits:(0,n.SU)(r)},null,8,["workoutObject","useImperialUnits"])])}}});const Nt=(0,D.Z)($t,[["__scopeId","data-v-74c5993b"]]);var xt=Nt;function zt(t,e){return Array.from(t.getElementsByTagName(e))}function Lt(t){return t?.normalize(),t&&t.textContent||""}function jt(t,e,o){const a=t.getElementsByTagName(e),n=a.length?a[0]:null;return n&&o&&o(n),n}function Wt(t,e,o){const a={};if(!t)return a;const n=t.getElementsByTagName(e),l=n.length?n[0]:null;return l&&o?o(l,a):a}function Pt(t,e,o){const a=Lt(jt(t,e));return a&&o&&o(a)||{}}function Bt(t,e,o){const a=parseFloat(Lt(jt(t,e)));if(!isNaN(a))return a&&o&&o(a)||{}}function Ft(t,e,o){const a=parseFloat(Lt(jt(t,e)));if(!isNaN(a))return a&&o&&o(a),a}function Ht(t,e){const o={};for(const a of e)Pt(t,a,(t=>{o[a]=t}));return o}function Mt(t){return 1===t?.nodeType}function Zt(t){return Wt(t,"line",(t=>{const e=Object.assign({},Pt(t,"color",(t=>({stroke:`#${t}`}))),Bt(t,"opacity",(t=>({"stroke-opacity":t}))),Bt(t,"width",(t=>({"stroke-width":96*t/25.4}))));return e}))}function qt(t){let e=[];if(null===t)return e;for(const o of Array.from(t.childNodes)){if(!Mt(o))continue;const t=Gt(o.nodeName);if("gpxtpx:TrackPointExtension"===t)e=e.concat(qt(o));else{const a=Lt(o);e.push([t,Kt(a)])}}return e}function Gt(t){return["heart","gpxtpx:hr","hr"].includes(t)?"heart":t}function Kt(t){const e=parseFloat(t);return isNaN(e)?t:e}function Yt(t){const e=[parseFloat(t.getAttribute("lon")||""),parseFloat(t.getAttribute("lat")||"")];if(isNaN(e[0])||isNaN(e[1]))return null;Ft(t,"ele",(t=>{e.push(t)}));const o=jt(t,"time");return{coordinates:e,time:o?Lt(o):null,extendedValues:qt(jt(t,"extensions"))}}function Vt(t){const e=Ht(t,["name","cmt","desc","type","time","keywords"]),o=Array.from(t.getElementsByTagNameNS("http://www.garmin.com/xmlschemas/GpxExtensions/v3","*"));for(const n of o)n.parentNode?.parentNode===t&&(e[n.tagName.replace(":","_")]=Lt(n));const a=zt(t,"link");return a.length&&(e.links=a.map((t=>Object.assign({href:t.getAttribute("href")},Ht(t,["text","type"]))))),e}function Jt(t,e){const o=zt(t,e),a=[],n=[],l={};for(let r=0;r1,r=Object.assign({_gpxType:"trk"},Vt(t),Zt(jt(t,"extensions")),a.length?{coordinateProperties:{times:l?a:a[0]}}:{});for(const s of n){o.push(s.line),r.coordinateProperties||(r.coordinateProperties={});const t=r.coordinateProperties,e=Object.entries(s.extendedValues);for(let o=0;onew Array(t.line.length).fill(null)))),t[a][o]=r):t[a]=r}}return{type:"Feature",properties:r,geometry:l?{type:"MultiLineString",coordinates:o}:{type:"LineString",coordinates:o[0]}}}function te(t){const e=Object.assign(Vt(t),Ht(t,["sym"])),o=Yt(t);return o?{type:"Feature",properties:e,geometry:{type:"Point",coordinates:o.coordinates}}:null}function*ee(t){for(const e of zt(t,"trk")){const t=Qt(e);t&&(yield t)}for(const e of zt(t,"rte")){const t=Xt(e);t&&(yield t)}for(const e of zt(t,"wpt")){const t=te(e);t&&(yield t)}}function oe(t){return{type:"FeatureCollection",features:Array.from(ee(t))}}Math.PI;const ae=(t,e)=>{let o;return function(...a){const n=this;o&&clearTimeout(o),o=setTimeout((()=>{t.apply(n,a),o=null}),e)}},ne=t=>t&&"function"===typeof t.charAt?t.charAt(0).toUpperCase()+t.slice(1):t,le=(t,e,o)=>{for(const n in o){const l="set"+ne(n);t[l]?(0,a.YP)((()=>o[n]),((e,o)=>{t[l](e,o)})):e[l]&&(0,a.YP)((()=>o[n]),(t=>{e[l](t)}))}},re=t=>{const e={};for(const o in t)if(o.startsWith("on")&&!o.startsWith("onUpdate")&&"onReady"!==o){const a=o.slice(2).toLocaleLowerCase();e[a]=t[o]}return e},se=async t=>{const e=await Promise.all([o.e(431).then(o.t.bind(o,6431,17)),o.e(93).then(o.t.bind(o,7093,17)),o.e(858).then(o.t.bind(o,8858,17))]);delete t.Default.prototype._getIconUrl,t.Default.mergeOptions({iconRetinaUrl:e[0].default,iconUrl:e[1].default,shadowUrl:e[2].default})},ie=t=>{const e=(0,n.iH)((()=>console.warn(`Method ${t} has been invoked without being replaced`))),o=(...t)=>e.value(...t);return o.wrapped=e,(0,a.JJ)(t,o),o},ue=(t,e)=>t.wrapped.value=e,de="object"===typeof self&&self.self===self&&self||"object"===typeof o.g&&o.g.global===o.g&&o.g||void 0,ce="useGlobalLeaflet",pe={options:{type:Object,default:()=>({})}},me=t=>({options:t.options,methods:{}}),we={...pe,pane:{type:String,default:"overlayPane"},attribution:{type:String,default:null},name:{type:String,custom:!0,default:void 0},layerType:{type:String,custom:!0,default:void 0},visible:{type:Boolean,custom:!0,default:!0}},ke=(t,e,o)=>{const n=(0,a.f3)("addLayer"),l=(0,a.f3)("removeLayer"),{options:r,methods:s}=me(t),i={...r,attribution:t.attribution,pane:t.pane},u=()=>n({leafletObject:e.value}),d=()=>l({leafletObject:e.value}),c={...s,setAttribution(t,e){const o=this.$parent.leafletObject.attributionControl;o.removeAttribution(e).addAttribution(t)},setName(){d(),t.visible&&u()},setLayerType(){d(),t.visible&&u()},setVisible(t){e.value&&(t?u():d())},bindPopup({leafletObject:t}){e.value.bindPopup(t)},bindTooltip({leafletObject:t}){e.value.bindTooltip(t)},unbindTooltip(){const t=e.value?e.value.getTooltip():null;t&&t.unbindTooltip()},unbindPopup(){const t=e.value?e.value.getPopup():null;t&&t.unbindPopup()},updateVisibleProp(t){o.emit("update:visible",t)}};return(0,a.JJ)("bindPopup",c.bindPopup),(0,a.JJ)("bindTooltip",c.bindTooltip),(0,a.JJ)("unbindTooltip",c.unbindTooltip),(0,a.JJ)("unbindPopup",c.unbindPopup),(0,a.Ah)((()=>{c.unbindPopup(),c.unbindTooltip(),d()})),{options:i,methods:c}},fe=(t,e)=>{if(t&&e.default)return(0,a.h)("div",{style:{display:"none"}},e.default())},_e={...pe,interactive:{type:Boolean,default:!0},bubblingMouseEvents:{type:Boolean,default:!0}},ve={...we,..._e,stroke:{type:Boolean,custom:!0,default:!0},color:{type:String,custom:!0,default:"#3388ff"},weight:{type:Number,custom:!0,default:3},opacity:{type:Number,custom:!0,default:1},lineCap:{type:String,custom:!0,default:"round"},lineJoin:{type:String,custom:!0,default:"round"},dashArray:{type:String,custom:!0,default:null},dashOffset:{type:String,custom:!0,default:null},fill:{type:Boolean,custom:!0,default:!1},fillColor:{type:String,custom:!0,default:"#3388ff"},fillOpacity:{type:Number,custom:!0,default:.2},fillRule:{type:String,custom:!0,default:"evenodd"},className:{type:String,custom:!0,default:null}},ge={...ve,latLng:{type:[Object,Array],custom:!0,default:null},radius:{type:Number,default:null}};const ye={...pe,position:{type:String,default:"topright"}},Se=(t,e)=>{const{options:o,methods:n}=me(t),l={...o,position:t.position},r={...n,setPosition(t){e.value&&e.value.setPosition(t)}};return(0,a.Ah)((()=>{e.value&&e.value.remove()})),{options:l,methods:r}},Ue=t=>t.default?(0,a.h)("div",{ref:"root"},t.default()):null;var he={name:"LControl",props:{...ye,disableClickPropagation:{type:Boolean,custom:!0,default:!0},disableScrollPropagation:{type:Boolean,custom:!0,default:!1}},setup(t,e){const l=(0,n.iH)({}),r=(0,n.iH)(null),s=(0,a.f3)(ce),i=(0,a.f3)("registerControl"),{options:u,methods:d}=Se(t,l);return(0,a.bv)((async()=>{const{Control:n,DomEvent:c}=s?de.L:await o.e(633).then(o.bind(o,6633)),p=n.extend({onAdd(){return r.value}});l.value=new p(u),le(d,l.value,t),i({leafletObject:l.value}),t.disableClickPropagation&&c.disableClickPropagation(r.value),t.disableScrollPropagation&&c.disableScrollPropagation(r.value),(0,a.Y3)((()=>e.emit("ready",l.value)))})),{root:r,leafletObject:l}},render(){return Ue(this.$slots)},__file:"src/components/LControl.vue"};const be={...ye,collapsed:{type:Boolean,default:!0},autoZIndex:{type:Boolean,default:!0},hideSingleBase:{type:Boolean,default:!1},sortLayers:{type:Boolean,default:!1},sortFunction:{type:Function,default:void 0}},Te=(t,e)=>{const{options:o}=Se(t,e),a={...o,collapsed:t.collapsed,autoZIndex:t.autoZIndex,hideSingleBase:t.hideSingleBase,sortLayers:t.sortLayers,sortFunction:t.sortFunction},n={addLayer(t){"base"===t.layerType?e.value.addBaseLayer(t.leafletObject,t.name):"overlay"===t.layerType&&e.value.addOverlay(t.leafletObject,t.name)},removeLayer(t){e.value.removeLayer(t.leafletObject)}};return{options:a,methods:n}};var Ee={name:"LControlLayers",props:be,setup(t,e){const l=(0,n.iH)({}),r=(0,a.f3)(ce),s=(0,a.f3)("registerLayerControl"),{options:i,methods:u}=Te(t,l);return(0,a.bv)((async()=>{const{control:n}=r?de.L:await o.e(633).then(o.bind(o,6633));l.value=n.layers(null,null,i),le(u,l.value,t),s({...t,...u,leafletObject:l.value}),(0,a.Y3)((()=>e.emit("ready",l.value)))})),{leafletObject:l.value}},render(){return null},__file:"src/components/LControlLayers.vue"};Boolean,Boolean,Boolean;const De={...we},Oe=(t,e,o)=>{const{options:n,methods:l}=ke(t,e,o),r={...n},s={...l,addLayer(t){e.value.addLayer(t.leafletObject)},removeLayer(t){e.value.removeLayer(t.leafletObject)}};return(0,a.JJ)("addLayer",s.addLayer),(0,a.JJ)("removeLayer",s.removeLayer),{options:r,methods:s}};const Ie={...De,geojson:{type:[Object,Array],default:()=>({})}},Ae=(t,e)=>{const{options:o,methods:a}=Oe(t,e),n={...o,...t},l={...a,setGeojson(t){e.value.clearLayers(),e.value.addData(t)},getGeoJSONData(){return e.value.toGeoJSON()},getBounds(){return e.value.getBounds()}};return{options:n,methods:l}};var Ce={props:Ie,setup(t,e){const l=(0,n.iH)({}),r=(0,n.iH)(!1),s=(0,a.f3)(ce),i=(0,a.f3)("addLayer"),{methods:u,options:d}=Ae(t,l);return(0,a.bv)((async()=>{const{geoJSON:n,DomEvent:c}=s?de.L:await o.e(633).then(o.bind(o,6633));l.value=n(t.geojson,d);const p=re(e.attrs);c.on(l.value,p),le(u,l.value,t),i({...t,...u,leafletObject:l.value}),r.value=!0,(0,a.Y3)((()=>e.emit("ready",l.value)))})),{ready:r,leafletObject:l}},render(){return fe(this.ready,this.$slots)},__file:"src/components/LGeoJson.vue"};const Re={...we,pane:{type:String,default:"tilePane"},opacity:{type:Number,custom:!1,default:1},zIndex:{type:Number,default:1},tileSize:{type:Number,default:256},noWrap:{type:Boolean,default:!1},minZoom:{type:Number,default:0},maxZoom:{type:Number,default:void 0}},$e=(t,e,o)=>{const{options:a,methods:n}=ke(t,e,o),l={...a,pane:t.pane,opacity:t.opacity,zIndex:t.zIndex,tileSize:t.tileSize,noWrap:t.noWrap,minZoom:t.minZoom,maxZoom:t.maxZoom};return{options:l,methods:{...n}}};const Ne={iconUrl:{type:String,custom:!0,default:null},iconRetinaUrl:{type:String,custom:!0,default:null},iconSize:{type:[Object,Array],custom:!0,default:null},iconAnchor:{type:[Object,Array],custom:!0,default:null},popupAnchor:{type:[Object,Array],custom:!0,default:()=>[0,0]},tooltipAnchor:{type:[Object,Array],custom:!0,default:()=>[0,0]},shadowUrl:{type:String,custom:!0,default:null},shadowRetinaUrl:{type:String,custom:!0,default:null},shadowSize:{type:[Object,Array],custom:!0,default:null},shadowAnchor:{type:[Object,Array],custom:!0,default:null},bgPos:{type:[Object,Array],custom:!0,default:()=>[0,0]},className:{type:String,custom:!0,default:""},options:{type:Object,custom:!0,default:()=>({})}};var xe={name:"LIcon",props:{...Ne,...pe},setup(t,e){const l=(0,n.iH)(null),r=(0,a.f3)(ce),s=(0,a.f3)("canSetParentHtml"),i=(0,a.f3)("setParentHtml"),u=(0,a.f3)("setIcon");let d,c,p,m,w;const k=(o,a,n)=>{const l=o&&o.innerHTML;if(!a)return void(n&&w&&s()&&i(l));const r=re(e.attrs);w&&c(w,r);const{options:k}=me(t),f={...k,iconUrl:t.iconUrl,iconRetinaUrl:t.iconRetinaUrl,iconSize:t.iconSize,iconAnchor:t.iconAnchor,popupAnchor:t.popupAnchor,tooltipAnchor:t.tooltipAnchor,shadowUrl:t.shadowUrl,shadowRetinaUrl:t.shadowRetinaUrl,shadowSize:t.shadowSize,shadowAnchor:t.shadowAnchor,bgPos:t.bgPos,className:t.className,html:l||t.html};w=f.html?p(f):m(f),d(w,r),u(w)},f=()=>{(0,a.Y3)((()=>k(l.value,!0,!1)))},_=()=>{(0,a.Y3)((()=>k(l.value,!1,!0)))},v={setIconUrl:f,setIconRetinaUrl:f,setIconSize:f,setIconAnchor:f,setPopupAnchor:f,setTooltipAnchor:f,setShadowUrl:f,setShadowRetinaUrl:f,setShadowAnchor:f,setBgPos:f,setClassName:f,setHtml:f};return(0,a.bv)((async()=>{const{DomEvent:e,divIcon:a,icon:n}=r?de.L:await o.e(633).then(o.bind(o,6633));d=e.on,c=e.off,p=a,m=n,le(v,{},t);const s=new MutationObserver(_);s.observe(l.value,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),f()})),{root:l}},render(){const t=this.$slots.default?this.$slots.default():void 0;return(0,a.h)("div",{ref:"root"},t)},__file:"src/components/LIcon.vue"};Boolean,Boolean;var ze={props:De,setup(t,e){const l=(0,n.iH)({}),r=(0,n.iH)(!1),s=(0,a.f3)(ce),i=(0,a.f3)("addLayer"),{methods:u}=Oe(t,l,e);return(0,a.bv)((async()=>{const{layerGroup:n,DomEvent:d}=s?de.L:await o.e(633).then(o.bind(o,6633));l.value=n(t.options);const c=re(e.attrs);d.on(l.value,c),le(u,l.value,t),i({...t,...u,leafletObject:l.value}),r.value=!0,(0,a.Y3)((()=>e.emit("ready",l.value)))})),{ready:r,leafletObject:l}},render(){return fe(this.ready,this.$slots)},__file:"src/components/LLayerGroup.vue"},Le={emits:["ready","update:zoom","update:center","update:bounds"],props:{...pe,center:{type:[Object,Array],default:()=>[0,0]},bounds:{type:[Array,Object],default:void 0},maxBounds:{type:[Array,Object],default:void 0},zoom:{type:Number,default:0},minZoom:{type:Number,default:void 0},maxZoom:{type:Number,default:void 0},paddingBottomRight:{type:Array,default:void 0},paddingTopLeft:{type:Array,default:void 0},padding:{type:Array,default:void 0},worldCopyJump:{type:Boolean,default:!1},crs:{type:[String,Object],default:"EPSG3857"},maxBoundsViscosity:{type:Number,default:void 0},inertia:{type:Boolean,default:void 0},inertiaDeceleration:{type:Number,default:void 0},inertiaMaxSpeed:{type:Number,default:void 0},easeLinearity:{type:Number,default:void 0},zoomAnimation:{type:Boolean,default:void 0},zoomAnimationThreshold:{type:Number,default:void 0},fadeAnimation:{type:Boolean,default:void 0},markerZoomAnimation:{type:Boolean,default:void 0},noBlockingAnimations:{type:Boolean,default:!1},useGlobalLeaflet:{type:Boolean,default:!1}},setup(t,e){const l=(0,n.iH)(null),r=(0,n.qj)({ready:!1,leafletRef:{},layersToAdd:[],layersInControl:[]}),{options:s}=me(t),i={...s,minZoom:t.minZoom,maxZoom:t.maxZoom,maxBounds:t.maxBounds,maxBoundsViscosity:t.maxBoundsViscosity,worldCopyJump:t.worldCopyJump,crs:t.crs,center:t.center,zoom:t.zoom,inertia:t.inertia,inertiaDeceleration:t.inertiaDeceleration,inertiaMaxSpeed:t.inertiaMaxSpeed,easeLinearity:t.easeLinearity,zoomAnimation:t.zoomAnimation,zoomAnimationThreshold:t.zoomAnimationThreshold,fadeAnimation:t.fadeAnimation,markerZoomAnimation:t.markerZoomAnimation},u=ie("addLayer"),d=ie("removeLayer"),c=ie("registerControl"),p=ie("registerLayerControl");(0,a.JJ)(ce,t.useGlobalLeaflet);const m={moveEndHandler(){e.emit("update:zoom",r.leafletRef.getZoom()),e.emit("update:center",r.leafletRef.getCenter()),e.emit("update:bounds",r.leafletRef.getBounds())},overlayAddHandler(t){const e=r.layersInControl.find((e=>e.name===t.name));e&&e.updateVisibleProp(!0)},overlayRemoveHandler(t){const e=r.layersInControl.find((e=>e.name===t.name));e&&e.updateVisibleProp(!1)}};(0,a.bv)((async()=>{t.useGlobalLeaflet&&(de.L=de.L||await o.e(243).then(o.t.bind(o,5243,23)));const{map:n,CRS:s,Icon:w,latLngBounds:k,latLng:f,DomEvent:_}=t.useGlobalLeaflet?de.L:await o.e(633).then(o.bind(o,6633));try{i.beforeMapMount&&await i.beforeMapMount()}catch(S){console.error(`The following error occurred running the provided beforeMapMount hook ${S.message}`)}await se(w);const v="string"==typeof i.crs?s[i.crs]:i.crs;i.crs=v||s.EPSG3857;const g={addLayer(t){if(void 0!==t.layerType)if(void 0===r.layerControl)r.layersToAdd.push(t);else{const e=r.layersInControl.find((e=>e.leafletObject._leaflet_id===t.leafletObject._leaflet_id));e||(r.layerControl.addLayer(t),r.layersInControl.push(t))}!1!==t.visible&&r.leafletRef.addLayer(t.leafletObject)},removeLayer(t){void 0!==t.layerType&&(void 0===r.layerControl?r.layersToAdd=r.layersToAdd.filter((e=>e.name!==t.name)):(r.layerControl.removeLayer(t.leafletObject),r.layersInControl=r.layersInControl.filter((e=>e.leafletObject._leaflet_id!==t.leafletObject._leaflet_id)))),r.leafletRef.removeLayer(t.leafletObject)},registerLayerControl(t){r.layerControl=t,r.layersToAdd.forEach((t=>{r.layerControl.addLayer(t)})),r.layersToAdd=[],c(t)},registerControl(t){r.leafletRef.addControl(t.leafletObject)},setZoom(e){const o=r.leafletRef.getZoom();e!==o&&r.leafletRef.setZoom(e,{animate:!t.noBlockingAnimations&&null})},setPaddingBottomRight(t){r.paddingBottomRight=t},setPaddingTopLeft(t){r.paddingTopLeft=t},setPadding(t){r.padding=t},setCrs(t){const e=r.leafletRef.getBounds();r.leafletRef.options.crs=t,r.leafletRef.fitBounds(e,{animate:!1,padding:[0,0]})},fitBounds(t){r.leafletRef.fitBounds(t,{animate:!this.noBlockingAnimations&&null})},setBounds(t){if(!t)return;const e=k(t);if(!e.isValid())return;const o=r.lastSetBounds||r.leafletRef.getBounds(),a=!o.equals(e,0);a&&(r.lastSetBounds=e,r.leafletRef.fitBounds(e,this.fitBoundsOptions))},setCenter(t){if(null==t)return;const e=f(t),o=r.lastSetCenter||r.leafletRef.getCenter();o.lat===e.lat&&o.lng===e.lng||(r.lastSetCenter=e,r.leafletRef.panTo(e,{animate:!this.noBlockingAnimations&&null}))}};ue(u,g.addLayer),ue(d,g.removeLayer),ue(c,g.registerControl),ue(p,g.registerLayerControl),r.leafletRef=n(l.value,i),le(g,r.leafletRef,t);const y=re(e.attrs);r.leafletRef.on("moveend",ae(m.moveEndHandler,100)),r.leafletRef.on("overlayadd",m.overlayAddHandler),r.leafletRef.on("overlayremove",m.overlayRemoveHandler),_.on(r.leafletRef,y),r.ready=!0,(0,a.Y3)((()=>e.emit("ready",r.leafletRef)))})),(0,a.Jd)((()=>{r.leafletRef&&r.leafletRef.remove()}));const w=(0,a.Fl)((()=>r.leafletRef)),k=(0,a.Fl)((()=>r.ready));return{root:l,ready:k,leafletObject:w}},render(){return(0,a.h)("div",{style:{width:"100%",height:"100%"},ref:"root"},this.ready?this.$slots.default():{})},__file:"src/components/LMap.vue"};const je={...we,pane:{type:String,default:"markerPane"},draggable:{type:Boolean,custom:!0,default:!1},latLng:{type:[Object,Array],custom:!0,default:null},icon:{type:[Object],default:()=>{},custom:!1},zIndexOffset:{type:Number,custom:!1,default:null}},We=(t,e,o)=>{const{options:a,methods:n}=ke(t,e,o),l={...a,...t},r={...n,setDraggable(t){e.value.dragging&&(t?e.value.dragging.enable():e.value.dragging.disable())},latLngSync(t){o.emit("update:latLng",t.latlng),o.emit("update:lat-lng",t.latlng)},setLatLng(t){if(null!=t&&e.value){const o=e.value.getLatLng();o&&o.equals(t)||e.value.setLatLng(t)}}};return{options:l,methods:r}};var Pe={name:"LMarker",props:je,setup(t,e){const l=(0,n.iH)({}),r=(0,n.iH)(!1),s=(0,a.f3)(ce),i=(0,a.f3)("addLayer");(0,a.JJ)("canSetParentHtml",(()=>!!l.value.getElement())),(0,a.JJ)("setParentHtml",(t=>l.value.getElement().innerHTML=t)),(0,a.JJ)("setIcon",(t=>l.value.setIcon&&l.value.setIcon(t)));const{options:u,methods:d}=We(t,l,e);return void 0===u.icon&&delete u.icon,(0,a.bv)((async()=>{const{marker:n,DomEvent:c}=s?de.L:await o.e(633).then(o.bind(o,6633));l.value=n(t.latLng,u);const p=re(e.attrs);c.on(l.value,p),l.value.on("move",ae(d.latLngSync,100)),le(d,l.value,t),i({...t,...d,leafletObject:l.value}),r.value=!0,(0,a.Y3)((()=>e.emit("ready",l.value)))})),{ready:r,leafletObject:l}},render(){return fe(this.ready,this.$slots)},__file:"src/components/LMarker.vue"};const Be={...ve,latLngs:{type:Array,default:()=>[]},smoothFactor:{type:Number,custom:!0,default:1},noClip:{type:Boolean,custom:!0,default:!1}},Fe={...Be};const He={...pe,content:{type:String,default:null}};const Me={...Re,tms:{type:Boolean,default:!1},subdomains:{type:String,default:"abc"},detectRetina:{type:Boolean,default:!1},url:{type:String,default:null}},Ze=(t,e)=>{const{options:o,methods:a}=$e(t,e),n={...o,tms:t.tms,subdomains:t.subdomains,detectRetina:t.detectRetina};return{options:n,methods:{...a}}};var qe={props:Me,setup(t,e){const l=(0,n.iH)({}),r=(0,a.f3)(ce),s=(0,a.f3)("addLayer"),{options:i,methods:u}=Ze(t,l);return(0,a.bv)((async()=>{const{tileLayer:n,DomEvent:d}=r?de.L:await o.e(633).then(o.bind(o,6633));l.value=n(t.url,i);const c=re(e.attrs);d.on(l.value,c),le(u,l.value,t),s({...t,...u,leafletObject:l.value}),(0,a.Y3)((()=>e.emit("ready",l.value)))})),{leafletObject:l}},render(){return null},__file:"src/components/LTileLayer.vue"};Boolean,Boolean;var Ge=(0,a.aZ)({__name:"CustomMarker",props:{markerCoordinates:null,isStart:{type:Boolean}},setup(t){const e=t,{isStart:o,markerCoordinates:l}=(0,n.BK)(e);return(t,e)=>(0,n.SU)(l).latitude?((0,a.wg)(),(0,a.j4)((0,n.SU)(Pe),{key:0,"lat-lng":[(0,n.SU)(l).latitude,(0,n.SU)(l).longitude]},{default:(0,a.w5)((()=>[(0,a.Wm)((0,n.SU)(xe),{"icon-url":`/img/workouts/${(0,n.SU)(o)?"start":"finish"}.svg`,iconSize:[15,15]},null,8,["icon-url"])])),_:1},8,["lat-lng"])):(0,a.kq)("",!0)}});const Ke=Ge;var Ye=Ke,Ve=o(5801),Je=o(9917),Xe=o(2024);const Qe=t=>((0,a.dD)("data-v-6b490f5d"),t=t(),(0,a.Cn)(),t),to={id:"workout-map"},eo={key:0,class:"leaflet-container"},oo={key:1},ao=Qe((()=>(0,a._)("i",{class:"fa fa-refresh","aria-hidden":"true"},null,-1))),no={key:1,class:"no-map"};var lo=(0,a.aZ)({__name:"index",props:{workoutData:null,markerCoordinates:{default:()=>({})}},setup(t){const e=t,o=(0,Je.o)(),{workoutData:l,markerCoordinates:r}=(0,n.BK)(e),i=(0,n.iH)(null),u=(0,a.Fl)((()=>g())),d=(0,a.Fl)((()=>o.getters[Ve.SY.GETTERS.APP_CONFIG])),c=(0,a.Fl)((()=>_(u))),p=(0,a.Fl)((()=>e.workoutData&&e.workoutData.gpx?f(e.workoutData.gpx):{})),m=(0,a.Fl)((()=>e.workoutData&&e.workoutData.chartData.length>0?{latitude:e.workoutData.chartData[0].latitude,longitude:e.workoutData.chartData[0].longitude}:{})),w=(0,a.Fl)((()=>e.workoutData&&e.workoutData.chartData.length>0?{latitude:e.workoutData.chartData[e.workoutData.chartData.length-1].latitude,longitude:e.workoutData.chartData[e.workoutData.chartData.length-1].longitude}:{})),k=(0,n.iH)(!1);function f(t){if(!t||""!==t)try{const e=oe((new DOMParser).parseFromString(t,"text/xml"));return{jsonData:e}}catch(e){return console.error("Invalid gpx content"),{}}return{}}function _(t){return[(t.value[0][0]+t.value[1][0])/2,(t.value[0][1]+t.value[1][1])/2]}function v(t){i.value?.leafletObject&&i.value?.leafletObject.fitBounds(t)}function g(){return e.workoutData?[[e.workoutData.workout.bounds[0],e.workoutData.workout.bounds[1]],[e.workoutData.workout.bounds[2],e.workoutData.workout.bounds[3]]]:[]}function y(){i.value?.leafletObject.fitBounds(g())}function S(){k.value=!k.value,k.value||setTimeout((()=>{y()}),100)}return(t,e)=>{const o=(0,a.up)("VFullscreen");return(0,a.wg)(),(0,a.iD)("div",to,[(0,n.SU)(l).loading?((0,a.wg)(),(0,a.iD)("div",eo)):((0,a.wg)(),(0,a.iD)("div",oo,[(0,n.SU)(l).workout.with_gpx?((0,a.wg)(),(0,a.j4)(o,{key:0,modelValue:k.value,"onUpdate:modelValue":e[1]||(e[1]=t=>k.value=t)},{default:(0,a.w5)((()=>[(0,a._)("div",{class:(0,s.C_)(["leaflet-container",{"fullscreen-map":k.value}])},[(0,n.SU)(p).jsonData&&(0,n.SU)(c)&&2===(0,n.SU)(u).length?((0,a.wg)(),(0,a.j4)((0,n.SU)(Le),{key:0,zoom:13,maxZoom:19,center:(0,n.SU)(c),bounds:(0,n.SU)(u),ref_key:"workoutMap",ref:i,onReady:e[0]||(e[0]=t=>v((0,n.SU)(u)))},{default:(0,a.w5)((()=>[(0,a.Wm)((0,n.SU)(Ee)),(0,a.Wm)((0,n.SU)(he),{position:"topleft",class:"map-control",onClick:y},{default:(0,a.w5)((()=>[ao])),_:1}),(0,a.Wm)((0,n.SU)(he),{position:"topleft",class:"map-control",onClick:S},{default:(0,a.w5)((()=>[(0,a._)("i",{class:(0,s.C_)("fa fa-"+(k.value?"compress":"arrows-alt")),"aria-hidden":"true"},null,2)])),_:1}),(0,a.Wm)((0,n.SU)(qe),{url:`${(0,n.SU)(Xe.k)()}workouts/map_tile/{s}/{z}/{x}/{y}.png`,attribution:(0,n.SU)(d).map_attribution,bounds:(0,n.SU)(u)},null,8,["url","attribution","bounds"]),(0,a.Wm)((0,n.SU)(Ce),{geojson:(0,n.SU)(p).jsonData},null,8,["geojson"]),(0,n.SU)(r).latitude?((0,a.wg)(),(0,a.j4)((0,n.SU)(Pe),{key:0,"lat-lng":[(0,n.SU)(r).latitude,(0,n.SU)(r).longitude]},null,8,["lat-lng"])):(0,a.kq)("",!0),(0,a.Wm)((0,n.SU)(ze),{name:t.$t("workouts.START_AND_FINISH"),"layer-type":"overlay"},{default:(0,a.w5)((()=>[(0,n.SU)(m).latitude?((0,a.wg)(),(0,a.j4)(Ye,{key:0,markerCoordinates:(0,n.SU)(m),isStart:!0},null,8,["markerCoordinates"])):(0,a.kq)("",!0),(0,n.SU)(w).latitude?((0,a.wg)(),(0,a.j4)(Ye,{key:1,markerCoordinates:(0,n.SU)(w),isStart:!1},null,8,["markerCoordinates"])):(0,a.kq)("",!0)])),_:1},8,["name"])])),_:1},8,["center","bounds"])):(0,a.kq)("",!0)],2)])),_:1},8,["modelValue"])):((0,a.wg)(),(0,a.iD)("div",no,(0,s.zw)(t.$t("workouts.NO_MAP")),1))]))])}}});const ro=(0,D.Z)(lo,[["__scopeId","data-v-6b490f5d"]]);var so=ro,io=o(6558);const uo={class:"workout-detail"};var co=(0,a.aZ)({__name:"index",props:{authUser:null,displaySegment:{type:Boolean},sports:null,workoutData:null,markerCoordinates:{default:()=>({})}},setup(t){const e=t,o=(0,l.yj)(),r=(0,Je.o)(),{authUser:s,markerCoordinates:i,workoutData:u}=(0,n.BK)(e),d=(0,a.Fl)((()=>e.workoutData.workout)),c=(0,n.iH)(o.params.workoutId?+o.params.segmentId:null),p=(0,a.Fl)((()=>d.value.segments.length>0&&c.value?d.value.segments[+c.value-1]:null)),m=(0,n.iH)(!1),w=(0,a.Fl)((()=>e.sports?e.sports.find((t=>t.id===e.workoutData.workout.sport_id)):{})),k=(0,a.Fl)((()=>_(d.value,p.value)));function f(t,e,o){const a=e&&o&&1!==o?`/workouts/${t.id}/segment/${o-1}`:!e&&t.previous_workout?`/workouts/${t.previous_workout}`:null,n=e&&o&&oo.params.segmentId),(async t=>{t&&(c.value=+t)})),(t,e)=>{const o=(0,a.up)("Modal"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",uo,[m.value?((0,a.wg)(),(0,a.j4)(o,{key:0,title:t.$t("common.CONFIRMATION"),message:t.$t("workouts.WORKOUT_DELETION_CONFIRMATION"),onConfirmAction:e[0]||(e[0]=t=>g((0,n.SU)(k).workoutId)),onCancelAction:e[1]||(e[1]=t=>v(!1))},null,8,["title","message"])):(0,a.kq)("",!0),(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Wm)(I,{sport:(0,n.SU)(w),workoutObject:(0,n.SU)(k),onDisplayModal:e[2]||(e[2]=t=>v(!0))},null,8,["sport","workoutObject"])])),content:(0,a.w5)((()=>[(0,a.Wm)(so,{workoutData:(0,n.SU)(u),markerCoordinates:(0,n.SU)(i)},null,8,["workoutData","markerCoordinates"]),(0,a.Wm)(xt,{workoutObject:(0,n.SU)(k),useImperialUnits:(0,n.SU)(s).imperial_units,displayHARecord:(0,n.SU)(s).display_ascent},null,8,["workoutObject","useImperialUnits","displayHARecord"])])),_:1})])}}});const po=(0,D.Z)(co,[["__scopeId","data-v-9fc0bab8"]]);var mo=po,wo=o(6518);const ko=t=>{const e=document.getElementById(t);if(e){let t=e.querySelector("ul");return t||(t=document.createElement("ul"),e.appendChild(t)),t}throw new Error("No legend container")},fo={id:"htmlLegend",afterUpdate(t,e,o){const a=ko(o.containerID);while(a.firstChild)a.firstChild.remove();const n=t.options.plugins?.legend?.labels?.generateLabels?t.options.plugins?.legend?.labels?.generateLabels(t):[];n.forEach((e=>{const o=document.createElement("li");o.onclick=()=>{void 0!==e.datasetIndex&&(t.setDatasetVisibility(e.datasetIndex,!t.isDatasetVisible(e.datasetIndex)),t.update())};const n=document.createElement("input");n&&(n.type="checkbox",n.id=e.text,n.checked=!e.hidden);const l=document.createTextNode(e.text),r=document.createElement("span");r&&(r.style.background=String(e.fillStyle),r.style.borderColor=String(e.strokeStyle)),o.appendChild(n),o.appendChild(l),o.appendChild(r),a.appendChild(o)}))}};var _o=o(3649),vo=o(3768);const go=t=>((0,a.dD)("data-v-dcea1168"),t=t(),(0,a.Cn)(),t),yo={id:"workout-chart"},So={class:"chart-radio"},Uo=["checked"],ho=["checked"],bo=go((()=>(0,a._)("div",{id:"chart-legend"},null,-1))),To={class:"chart-info"},Eo={class:"no-data-cleaning"},Do={class:"elevation-start"},Oo=["checked"];var Io=(0,a.aZ)({__name:"index",props:{authUser:null,workoutData:null},emits:["getCoordinates"],setup(t,{emit:e}){const o=t,{t:l}=(0,L.QT)(),r=(0,n.iH)(!0),i=(0,n.iH)(!0),u=(0,a.Fl)((()=>(0,vo.EX)(o.workoutData.chartData,l,o.authUser.imperial_units))),d=y("km"),c=y("m"),p=(0,a.Fl)((()=>({labels:r.value?u.value.distance_labels:u.value.duration_labels,datasets:JSON.parse(JSON.stringify([u.value.datasets.speed,u.value.datasets.elevation]))}))),m=(0,a.Fl)((()=>u.value.coordinates)),w=(0,a.Fl)((()=>({responsive:!0,maintainAspectRatio:!0,animation:!1,layout:{padding:{top:22}},scales:{[r.value?"xDistance":"xDuration"]:{grid:{drawOnChartArea:!1},ticks:{count:10,callback:function(t){return r.value?Number(t).toFixed(2):_(t)}},type:"linear",bounds:"data",title:{display:!0,text:r.value?l("workouts.DISTANCE")+` (${d})`:l("workouts.DURATION")}},ySpeed:{grid:{drawOnChartArea:!1},position:"left",title:{display:!0,text:l("workouts.SPEED")+` (${d}/h)`}},yElevation:{beginAtZero:i.value,grid:{drawOnChartArea:!1},position:"right",title:{display:!0,text:l("workouts.ELEVATION")+` (${c})`}}},elements:{point:{pointStyle:"circle",pointRadius:0}},plugins:{datalabels:{display:!1},tooltip:{interaction:{intersect:!1,mode:"index"},callbacks:{label:function(t){const e=` ${t.dataset.label}: ${t.formattedValue}`;return"yElevation"===t.dataset.yAxisID?e+` ${c}`:e+` ${d}/h`},title:function(t){return t.length>0&&v(m.value[t[0].dataIndex]),0===t.length?"":r.value?`${l("workouts.DISTANCE")}: ${t[0].label} ${d}`:`${l("workouts.DURATION")}: ${_(t[0].label.replace(",",""))}`}}},legend:{display:!1},htmlLegend:{containerID:"chart-legend"}}}))),{lineChartProps:k}=(0,wo.tn)({chartData:p,options:w,plugins:[fo]});function f(){r.value=!r.value}function _(t){return new Date(1e3*+t).toISOString().substr(11,8)}function v(t){e("getCoordinates",t)}function g(){v({latitude:null,longitude:null})}function y(t){return o.authUser.imperial_units?_o.Dl[t].defaultTarget:t}return(t,e)=>{const o=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",yo,[(0,a.Wm)(o,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(t.$t("workouts.ANALYSIS")),1)])),content:(0,a.w5)((()=>[(0,a._)("div",So,[(0,a._)("label",null,[(0,a._)("input",{type:"radio",name:"distance",checked:r.value,onClick:f},null,8,Uo),(0,a.Uk)(" "+(0,s.zw)(t.$t("workouts.DISTANCE")),1)]),(0,a._)("label",null,[(0,a._)("input",{type:"radio",name:"duration",checked:!r.value,onClick:f},null,8,ho),(0,a.Uk)(" "+(0,s.zw)(t.$t("workouts.DURATION")),1)])]),bo,(0,a.Wm)((0,n.SU)(wo.wW),(0,a.dG)((0,n.SU)(k),{class:"line-chart",onMouseleave:g}),null,16),(0,a._)("div",To,[(0,a._)("div",Eo,(0,s.zw)(t.$t("workouts.NO_DATA_CLEANING")),1),(0,a._)("div",Do,[(0,a._)("label",null,[(0,a._)("input",{type:"checkbox",checked:i.value,onClick:e[0]||(e[0]=t=>i.value=!i.value)},null,8,Oo),(0,a.Uk)(" "+(0,s.zw)(t.$t("workouts.START_ELEVATION_AT_ZERO")),1)])])])])),_:1})])}}});const Ao=(0,D.Z)(Io,[["__scopeId","data-v-dcea1168"]]);var Co=Ao;const Ro={id:"workout-note"};var $o=(0,a.aZ)({__name:"WorkoutNotes",props:{notes:{default:()=>null}},setup(t){const e=t,{notes:o}=(0,n.BK)(e);return(t,e)=>{const l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",Ro,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(t.$t("workouts.NOTES")),1)])),content:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)((0,n.SU)(o)&&""!==(0,n.SU)(o)?(0,n.SU)(o):t.$t("workouts.NO_NOTES")),1)])),_:1})])}}});const No=(0,D.Z)($o,[["__scopeId","data-v-028ad527"]]);var xo=No;const zo={id:"workout-segments"};var Lo=(0,a.aZ)({__name:"WorkoutSegments",props:{segments:null,useImperialUnits:{type:Boolean}},setup(t){const e=t,{segments:o,useImperialUnits:l}=(0,n.BK)(e);return(t,e)=>{const r=(0,a.up)("router-link"),i=(0,a.up)("Distance"),u=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",zo,[(0,a.Wm)(u,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(t.$t("workouts.SEGMENT",2)),1)])),content:(0,a.w5)((()=>[(0,a._)("ul",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,n.SU)(o),((e,o)=>((0,a.wg)(),(0,a.iD)("li",{key:e.segment_id},[(0,a.Wm)(r,{to:{name:"WorkoutSegment",params:{workoutId:e.workout_id,segmentId:o+1}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(t.$t("workouts.SEGMENT",1))+" "+(0,s.zw)(o+1),1)])),_:2},1032,["to"]),(0,a.Uk)(" ("+(0,s.zw)(t.$t("workouts.DISTANCE"))+": ",1),(0,a.Wm)(i,{distance:e.distance,unitFrom:"km",useImperialUnits:(0,n.SU)(l)},null,8,["distance","useImperialUnits"]),(0,a.Uk)(", "+(0,s.zw)(t.$t("workouts.DURATION"))+": "+(0,s.zw)(e.duration)+") ",1)])))),128))])])),_:1})])}}});const jo=(0,D.Z)(Lo,[["__scopeId","data-v-6b8a27cd"]]);var Wo=jo;const Po=t=>((0,a.dD)("data-v-53c4e53a"),t=t(),(0,a.Cn)(),t),Bo={id:"workout",class:"view"},Fo={class:"container"},Ho={key:0,class:"workout-container"},Mo={key:0},Zo=Po((()=>(0,a._)("div",{id:"bottom"},null,-1))),qo={key:1};var Go=(0,a.aZ)({__name:"Workout",props:{displaySegment:{type:Boolean}},setup(t){const e=t,o=(0,l.yj)(),s=(0,Je.o)(),{displaySegment:i}=(0,n.BK)(e),u=(0,a.Fl)((()=>s.getters[Ve.aX.GETTERS.WORKOUT_DATA])),d=(0,a.Fl)((()=>s.getters[Ve.YN.GETTERS.AUTH_USER_PROFILE])),c=(0,a.Fl)((()=>s.getters[Ve.O8.GETTERS.SPORTS])),p=(0,n.iH)({latitude:null,longitude:null});function m(t){p.value={latitude:t.latitude,longitude:t.longitude}}return(0,a.wF)((()=>{const t={workoutId:o.params.workoutId};e.displaySegment&&(t.segmentId=o.params.segmentId),s.dispatch(Ve.aX.ACTIONS.GET_WORKOUT_DATA,t)})),(0,a.Ah)((()=>{s.commit(Ve.aX.MUTATIONS.EMPTY_WORKOUT)})),(0,a.YP)((()=>o.params.workoutId),(async t=>{t&&s.dispatch(Ve.aX.ACTIONS.GET_WORKOUT_DATA,{workoutId:t})})),(0,a.YP)((()=>o.params.segmentId),(async t=>{if(o.params.workoutId){const e={workoutId:o.params.workoutId};t&&(e.segmentId=t),s.dispatch(Ve.aX.ACTIONS.GET_WORKOUT_DATA,e)}})),(t,e)=>((0,a.wg)(),(0,a.iD)("div",Bo,[(0,a._)("div",Fo,[(0,n.SU)(c).length>0?((0,a.wg)(),(0,a.iD)("div",Ho,[(0,n.SU)(u).workout.id?((0,a.wg)(),(0,a.iD)("div",Mo,[(0,a.Wm)(mo,{workoutData:(0,n.SU)(u),sports:(0,n.SU)(c),authUser:(0,n.SU)(d),markerCoordinates:p.value,displaySegment:(0,n.SU)(i)},null,8,["workoutData","sports","authUser","markerCoordinates","displaySegment"]),(0,n.SU)(u).workout.with_gpx&&(0,n.SU)(u).chartData.length>0?((0,a.wg)(),(0,a.j4)(Co,{key:0,workoutData:(0,n.SU)(u),authUser:(0,n.SU)(d),displaySegment:(0,n.SU)(i),onGetCoordinates:m},null,8,["workoutData","authUser","displaySegment"])):(0,a.kq)("",!0),!(0,n.SU)(i)&&(0,n.SU)(u).workout.segments.length>1?((0,a.wg)(),(0,a.j4)(Wo,{key:1,segments:(0,n.SU)(u).workout.segments,useImperialUnits:(0,n.SU)(d).imperial_units},null,8,["segments","useImperialUnits"])):(0,a.kq)("",!0),(0,n.SU)(i)?(0,a.kq)("",!0):((0,a.wg)(),(0,a.j4)(xo,{key:2,notes:(0,n.SU)(u).workout.notes},null,8,["notes"])),Zo])):((0,a.wg)(),(0,a.iD)("div",qo,[(0,n.SU)(u).loading?(0,a.kq)("",!0):((0,a.wg)(),(0,a.j4)(r.Z,{key:0,target:"WORKOUT"}))]))])):(0,a.kq)("",!0)])]))}});const Ko=(0,D.Z)(Go,[["__scopeId","data-v-53c4e53a"]]);var Yo=Ko},5651:function(t,e,o){o.r(e),o.d(e,{default:function(){return Bt}});var a=o(6252),n=o(2262),l=o(3577),r=o(9150),s=(o(7658),o(2201)),i=o(631),u=o(3649);const d=t=>((0,a.dD)("data-v-6c38593a"),t=t(),(0,a.Cn)(),t),c={class:"workouts-filters"},p={class:"box"},m={class:"form"},w={class:"form-items-group"},k={class:"form-item"},f=["value"],_={class:"form-item"},v=["value"],g={class:"form-items-group"},y={class:"form-item"},S=["value"],U=d((()=>(0,a._)("option",{value:""},null,-1))),h=["value"],b={class:"form-items-group"},T={class:"form-item"},E={class:"form-inputs-group"},D=["value"],O=["value"],I={class:"form-items-group"},A={class:"form-item"},C={class:"form-inputs-group"},R=["value"],$=["value"],N={class:"form-items-group"},x={class:"form-item"},z={class:"form-inputs-group"},L=["value"],j=["value"],W={class:"form-items-group"},P={class:"form-item"},B={class:"form-inputs-group"},F=["value"],H=["value"],M={class:"form-button"};var Z=(0,a.aZ)({__name:"WorkoutsFilters",props:{authUser:null,sports:null},emits:["filter"],setup(t,{emit:e}){const o=t,{t:d}=(0,r.QT)(),Z=(0,s.yj)(),q=(0,s.tv)(),{authUser:G}=(0,n.BK)(o),K=G.value.imperial_units?u.Dl.km.defaultTarget:"km",Y=(0,a.Fl)((()=>(0,i.xH)(o.sports,d)));let V=Object.assign({},Z.query);function J(t){""===t.target.value?delete V[t.target.name]:V[t.target.name]=t.target.value}function X(){e("filter"),"page"in V&&(V["page"]="1"),q.push({path:"/workouts",query:V})}function Q(){e("filter"),q.push({path:"/workouts",query:{}})}return(0,a.YP)((()=>Z.query),(t=>{V=Object.assign({},t)})),(t,e)=>((0,a.wg)(),(0,a.iD)("div",c,[(0,a._)("div",p,[(0,a._)("div",m,[(0,a._)("div",w,[(0,a._)("div",k,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.FROM"))+": ",1),(0,a._)("input",{name:"from",type:"date",value:t.$route.query.from,onChange:J},null,40,f)]),(0,a._)("div",_,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.TO"))+": ",1),(0,a._)("input",{name:"to",type:"date",value:t.$route.query.to,onChange:J},null,40,v)])]),(0,a._)("div",g,[(0,a._)("div",y,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.SPORT",1))+":",1),(0,a._)("select",{name:"sport_id",value:t.$route.query.sport_id,onChange:J},[U,((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,n.SU)(Y).filter((t=>(0,n.SU)(G).sports_list.includes(t.id))),(t=>((0,a.wg)(),(0,a.iD)("option",{value:t.id,key:t.id},(0,l.zw)(t.translatedLabel),9,h)))),128))],40,S)])]),(0,a._)("div",b,[(0,a._)("div",T,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.DISTANCE"))+" ("+(0,l.zw)((0,n.SU)(K))+"): ",1),(0,a._)("div",E,[(0,a._)("input",{name:"distance_from",type:"number",min:"0",step:"0.1",value:t.$route.query.distance_from,onChange:J},null,40,D),(0,a._)("span",null,(0,l.zw)(t.$t("workouts.TO")),1),(0,a._)("input",{name:"distance_to",type:"number",min:"0",step:"0.1",value:t.$route.query.distance_to,onChange:J},null,40,O)])])]),(0,a._)("div",I,[(0,a._)("div",A,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.DURATION"))+": ",1),(0,a._)("div",C,[(0,a._)("input",{name:"duration_from",value:t.$route.query.duration_from,onChange:J,pattern:"^([0-9]*[0-9]):([0-5][0-9])$",placeholder:"hh:mm",type:"text"},null,40,R),(0,a._)("span",null,(0,l.zw)(t.$t("workouts.TO")),1),(0,a._)("input",{name:"duration_to",value:t.$route.query.duration_to,onChange:J,pattern:"^([0-9]*[0-9]):([0-5][0-9])$",placeholder:"hh:mm",type:"text"},null,40,$)])])]),(0,a._)("div",N,[(0,a._)("div",x,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.AVE_SPEED"))+" ("+(0,l.zw)((0,n.SU)(K))+"/h): ",1),(0,a._)("div",z,[(0,a._)("input",{min:"0",name:"ave_speed_from",value:t.$route.query.ave_speed_from,onChange:J,step:"0.1",type:"number"},null,40,L),(0,a._)("span",null,(0,l.zw)(t.$t("workouts.TO")),1),(0,a._)("input",{min:"0",name:"ave_speed_to",value:t.$route.query.ave_speed_to,onChange:J,step:"0.1",type:"number"},null,40,j)])])]),(0,a._)("div",W,[(0,a._)("div",P,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.MAX_SPEED"))+" ("+(0,l.zw)((0,n.SU)(K))+"/h): ",1),(0,a._)("div",B,[(0,a._)("input",{min:"0",name:"max_speed_from",value:t.$route.query.max_speed_from,onChange:J,step:"0.1",type:"number"},null,40,F),(0,a._)("span",null,(0,l.zw)(t.$t("workouts.TO")),1),(0,a._)("input",{min:"0",name:"max_speed_to",value:t.$route.query.max_speed_to,onChange:J,step:"0.1",type:"number"},null,40,H)])])])]),(0,a._)("div",M,[(0,a._)("button",{class:"confirm",onClick:X},(0,l.zw)(t.$t("buttons.FILTER")),1),(0,a._)("button",{class:"confirm",onClick:Q},(0,l.zw)(t.$t("buttons.CLEAR_FILTER")),1)])])]))}}),q=o(3744);const G=(0,q.Z)(Z,[["__scopeId","data-v-6c38593a"]]);var K=G,Y=o(8626),V=o(5020),J=o(2056),X=o(5630),Q=o(5801),tt=o(9917),et=o(2766),ot=o(6558),at=o(3768);const nt=t=>((0,a.dD)("data-v-0f8ea7b0"),t=t(),(0,a.Cn)(),t),lt={class:"workouts-list"},rt={class:"total"},st={class:"total-label"},it={key:0},ut={key:0,class:"workouts-table responsive-table"},dt=nt((()=>(0,a._)("th",{class:"sport-col"},null,-1))),ct={class:"sport-col"},pt={class:"cell-heading"},mt=["onMouseover"],wt={class:"cell-heading"},kt={key:0,class:"fa fa-map-o","aria-hidden":"true"},ft={class:"title"},_t={class:"workout-date"},vt={class:"cell-heading"},gt={class:"text-right"},yt={class:"cell-heading"},St={class:"text-right"},Ut={class:"cell-heading"},ht={class:"text-right"},bt={class:"cell-heading"},Tt={class:"text-right"},Et={class:"cell-heading"},Dt={class:"text-right"},Ot={class:"cell-heading"},It={class:"text-right"},At={class:"cell-heading"},Ct=nt((()=>(0,a._)("div",{id:"bottom"},null,-1)));var Rt=(0,a.aZ)({__name:"WorkoutsList",props:{user:null,sports:null},setup(t){const e=t,o=(0,tt.o)(),r=(0,s.yj)(),d=(0,s.tv)(),{user:c,sports:p}=(0,n.BK)(e),m=["ave_speed","distance","duration","workout_date"],w=(0,a.Fl)((()=>o.getters[Q.aX.GETTERS.USER_WORKOUTS])),k=(0,a.Fl)((()=>o.getters[Q.aX.GETTERS.WORKOUTS_PAGINATION])),f=(0,a.Fl)((()=>o.getters[Q.SY.GETTERS.LANGUAGE]));let _=S(r.query);const v=(0,n.iH)(null);function g(t){o.dispatch(Q.aX.ACTIONS.GET_USER_WORKOUTS,c.value.imperial_units?U(t):t)}function y(t,e){const o=Object.assign({},r.query);o[t]=e,"per_page"===t&&(o["page"]="1"),_=S(o),d.push({path:"/workouts",query:_})}function S(t){const e=(0,et.pm)(t,m,at.eR.order_by,{defaultSort:at.eR.order});return Object.keys(t).filter((t=>et.Ne.includes(t))).map((o=>{"string"===typeof t[o]&&(e[o]=t[o])})),e}function U(t){const e={...t};return Object.entries(e).map((t=>{t[0].match("speed|distance")&&t[1]&&(e[t[0]]=(0,u.sC)(+t[1],"mi","km"))})),e}function h(t){v.value=t}return(0,a.wF)((()=>{g(_)})),(0,a.YP)((()=>r.query),(async t=>{_=S(t),g(_)})),(t,e)=>{const o=(0,a.up)("SportImage"),r=(0,a.up)("router-link"),s=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",lt,[(0,a._)("div",{class:(0,l.C_)(["box",{"empty-table":0===(0,n.SU)(w).length}])},[(0,a._)("div",rt,[(0,a._)("span",st,(0,l.zw)(t.$t("common.TOTAL").toLowerCase())+": ",1),null!==(0,n.SU)(k).total?((0,a.wg)(),(0,a.iD)("span",it,(0,l.zw)((0,n.SU)(k).total)+" "+(0,l.zw)(t.$t("workouts.WORKOUT",(0,n.SU)(k).total)),1)):(0,a.kq)("",!0)]),(0,a.Wm)(Y.Z,{sort:(0,n.SU)(et.fS),order_by:m,query:(0,n.SU)(_),message:"workouts",onUpdateSelect:y},null,8,["sort","query"]),(0,n.SU)(w).length>0?((0,a.wg)(),(0,a.iD)("div",ut,[(0,a.Wm)(V.Z,{class:"top-pagination",pagination:(0,n.SU)(k),path:"/workouts",query:(0,n.SU)(_)},null,8,["pagination","query"]),(0,a._)("table",null,[(0,a._)("thead",{class:(0,l.C_)({smaller:"de"===(0,n.SU)(f)})},[(0,a._)("tr",null,[dt,(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.WORKOUT",1))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.DATE"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.DISTANCE"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.DURATION"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.AVE_SPEED"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.MAX_SPEED"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.ASCENT"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.DESCENT"))),1)])],2),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,n.SU)(w),(u=>((0,a.wg)(),(0,a.iD)("tr",{key:u.id},[(0,a._)("td",ct,[(0,a._)("span",pt,(0,l.zw)(t.$t("workouts.SPORT",1)),1),(0,n.SU)(p).length>0?((0,a.wg)(),(0,a.j4)(o,{key:0,title:(0,n.SU)(p).find((t=>t.id===u.sport_id)).translatedLabel,"sport-label":(0,n.SU)(i.PA)(u,(0,n.SU)(p)),color:(0,n.SU)(i.CM)(u,(0,n.SU)(p))},null,8,["title","sport-label","color"])):(0,a.kq)("",!0)]),(0,a._)("td",{class:"workout-title",onMouseover:t=>h(u.id),onMouseleave:e[0]||(e[0]=t=>h(null))},[(0,a._)("span",wt,(0,l.zw)((0,l.kC)(t.$t("workouts.WORKOUT",1))),1),(0,a.Wm)(r,{class:"nav-item",to:{name:"Workout",params:{workoutId:u.id}}},{default:(0,a.w5)((()=>[u.with_gpx?((0,a.wg)(),(0,a.iD)("i",kt)):(0,a.kq)("",!0),(0,a._)("span",ft,(0,l.zw)(u.title),1)])),_:2},1032,["to"]),u.with_gpx&&v.value===u.id?((0,a.wg)(),(0,a.j4)(J.Z,{key:0,workout:u,"display-hover":!0},null,8,["workout"])):(0,a.kq)("",!0)],40,mt),(0,a._)("td",_t,[(0,a._)("span",vt,(0,l.zw)(t.$t("workouts.DATE")),1),(0,a.Uk)(" "+(0,l.zw)((0,n.SU)(ot.p6)(u.workout_date,(0,n.SU)(c).timezone,(0,n.SU)(c).date_format)),1)]),(0,a._)("td",gt,[(0,a._)("span",yt,(0,l.zw)(t.$t("workouts.DISTANCE")),1),(0,a.Wm)(s,{distance:u.distance,unitFrom:"km",useImperialUnits:(0,n.SU)(c).imperial_units},null,8,["distance","useImperialUnits"])]),(0,a._)("td",St,[(0,a._)("span",Ut,(0,l.zw)(t.$t("workouts.DURATION")),1),(0,a.Uk)(" "+(0,l.zw)(u.moving),1)]),(0,a._)("td",ht,[(0,a._)("span",bt,(0,l.zw)(t.$t("workouts.AVE_SPEED")),1),(0,a.Wm)(s,{distance:u.ave_speed,unitFrom:"km",speed:!0,useImperialUnits:(0,n.SU)(c).imperial_units},null,8,["distance","useImperialUnits"])]),(0,a._)("td",Tt,[(0,a._)("span",Et,(0,l.zw)(t.$t("workouts.MAX_SPEED")),1),(0,a.Wm)(s,{distance:u.max_speed,unitFrom:"km",speed:!0,useImperialUnits:(0,n.SU)(c).imperial_units},null,8,["distance","useImperialUnits"])]),(0,a._)("td",Dt,[(0,a._)("span",Ot,(0,l.zw)(t.$t("workouts.ASCENT")),1),u.with_gpx?((0,a.wg)(),(0,a.j4)(s,{key:0,distance:u.ascent,unitFrom:"m",useImperialUnits:(0,n.SU)(c).imperial_units},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)]),(0,a._)("td",It,[(0,a._)("span",At,(0,l.zw)(t.$t("workouts.DESCENT")),1),u.with_gpx?((0,a.wg)(),(0,a.j4)(s,{key:0,distance:u.descent,unitFrom:"m",useImperialUnits:(0,n.SU)(c).imperial_units},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)])])))),128))])]),(0,a.Wm)(V.Z,{pagination:(0,n.SU)(k),path:"/workouts",query:(0,n.SU)(_)},null,8,["pagination","query"])])):(0,a.kq)("",!0)],2),0===(0,n.SU)(w).length?((0,a.wg)(),(0,a.j4)(X.Z,{key:0})):(0,a.kq)("",!0),Ct])}}});const $t=(0,q.Z)(Rt,[["__scopeId","data-v-0f8ea7b0"]]);var Nt=$t;const xt={key:0,id:"workouts",class:"view"},zt={class:"container workouts-container"},Lt={class:"display-filters"},jt={class:"list-container"};var Wt=(0,a.aZ)({__name:"WorkoutsView",setup(t){const{t:e}=(0,r.QT)(),o=(0,tt.o)(),s=(0,a.Fl)((()=>o.getters[Q.YN.GETTERS.AUTH_USER_PROFILE])),u=(0,a.Fl)((()=>o.getters[Q.O8.GETTERS.SPORTS])),d=(0,a.Fl)((()=>(0,i.xH)(u.value,e))),c=(0,n.iH)(!0);function p(){c.value=!c.value}return(t,e)=>(0,n.SU)(s).username?((0,a.wg)(),(0,a.iD)("div",xt,[(0,a._)("div",zt,[(0,a._)("div",{class:(0,l.C_)(["filters-container",{hidden:c.value}])},[(0,a.Wm)(K,{sports:(0,n.SU)(d),authUser:(0,n.SU)(s),onFilter:p},null,8,["sports","authUser"])],2),(0,a._)("div",Lt,[(0,a._)("div",{onClick:p},[(0,a._)("i",{class:(0,l.C_)("fa fa-caret-"+(c.value?"down":"up")),"aria-hidden":"true"},null,2),(0,a._)("span",null,(0,l.zw)(t.$t(`workouts.${c.value?"DISPLAY":"HIDE"}_FILTERS`)),1)])]),(0,a._)("div",jt,[(0,a.Wm)(Nt,{user:(0,n.SU)(s),sports:(0,n.SU)(d)},null,8,["user","sports"])])])])):(0,a.kq)("",!0)}});const Pt=(0,q.Z)(Wt,[["__scopeId","data-v-77e54012"]]);var Bt=Pt}}]); -//# sourceMappingURL=workouts.8abaa659.js.map \ No newline at end of file +//# sourceMappingURL=workouts.a514f12a.js.map \ No newline at end of file diff --git a/fittrackee/dist/static/js/workouts.8abaa659.js.map b/fittrackee/dist/static/js/workouts.a514f12a.js.map similarity index 99% rename from fittrackee/dist/static/js/workouts.8abaa659.js.map rename to fittrackee/dist/static/js/workouts.a514f12a.js.map index 8b5a31ae..376668ba 100644 --- a/fittrackee/dist/static/js/workouts.8abaa659.js.map +++ b/fittrackee/dist/static/js/workouts.a514f12a.js.map @@ -1 +1 @@ -{"version":3,"file":"static/js/workouts.8abaa659.js","mappings":"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","sources":["webpack://fittrackee_client/./src/components/Workout/WorkoutEdition.vue?1df7","webpack://fittrackee_client/./src/components/Workout/WorkoutEdition.vue","webpack://fittrackee_client/./src/views/workouts/AddWorkout.vue?212d","webpack://fittrackee_client/./src/views/workouts/AddWorkout.vue","webpack://fittrackee_client/./src/views/workouts/EditWorkout.vue?ba9e","webpack://fittrackee_client/./src/views/workouts/EditWorkout.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutCardTitle.vue?4e0b","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutCardTitle.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutRecord.vue?0a89","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutRecord.vue","webpack://fittrackee_client/./src/utils/weather.ts","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WeatherWind.vue?bd35","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WeatherWind.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutWeather.vue?84e1","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutWeather.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutData.vue?ef29","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutData.vue","webpack://fittrackee_client/./node_modules/@tmcw/togeojson/dist/togeojson.es.mjs","webpack://fittrackee_client/./node_modules/@vue-leaflet/vue-leaflet/dist/vue-leaflet.esm.js","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue?3193","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/index.vue?a62d","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/index.vue?8ebb","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/legend.ts","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/index.vue?65aa","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutNotes.vue?a827","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutNotes.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutSegments.vue?037e","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutSegments.vue","webpack://fittrackee_client/./src/views/workouts/Workout.vue?3305","webpack://fittrackee_client/./src/views/workouts/Workout.vue","webpack://fittrackee_client/./src/components/Workouts/WorkoutsFilters.vue?c3bc","webpack://fittrackee_client/./src/components/Workouts/WorkoutsFilters.vue","webpack://fittrackee_client/./src/components/Workouts/WorkoutsList.vue?72e6","webpack://fittrackee_client/./src/components/Workouts/WorkoutsList.vue","webpack://fittrackee_client/./src/views/workouts/WorkoutsView.vue?ee31","webpack://fittrackee_client/./src/views/workouts/WorkoutsView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, vModelSelect as _vModelSelect, withDirectives as _withDirectives, vModelText as _vModelText, resolveComponent as _resolveComponent, createVNode as _createVNode, createBlock as _createBlock, withModifiers as _withModifiers, normalizeClass as _normalizeClass, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-886f93f6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-form\" }\nconst _hoisted_2 = [\"onSubmit\"]\nconst _hoisted_3 = { class: \"form-items\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"form-item-radio\"\n}\nconst _hoisted_5 = [\"checked\", \"disabled\"]\nconst _hoisted_6 = { for: \"withGpx\" }\nconst _hoisted_7 = [\"checked\", \"disabled\"]\nconst _hoisted_8 = { for: \"withoutGpx\" }\nconst _hoisted_9 = { class: \"form-item\" }\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = [\"value\"]\nconst _hoisted_12 = {\n key: 1,\n class: \"form-item\"\n}\nconst _hoisted_13 = { for: \"gpxFile\" }\nconst _hoisted_14 = [\"disabled\"]\nconst _hoisted_15 = { class: \"files-help info-box\" }\nconst _hoisted_16 = {\n key: 2,\n class: \"form-item\"\n}\nconst _hoisted_17 = { for: \"title\" }\nconst _hoisted_18 = [\"required\", \"disabled\"]\nconst _hoisted_19 = { key: 3 }\nconst _hoisted_20 = { class: \"workout-date-duration\" }\nconst _hoisted_21 = { class: \"form-item\" }\nconst _hoisted_22 = { class: \"workout-date-time\" }\nconst _hoisted_23 = [\"disabled\"]\nconst _hoisted_24 = [\"disabled\"]\nconst _hoisted_25 = { class: \"form-item\" }\nconst _hoisted_26 = [\"disabled\"]\nconst _hoisted_27 = [\"disabled\"]\nconst _hoisted_28 = [\"disabled\"]\nconst _hoisted_29 = { class: \"form-item\" }\nconst _hoisted_30 = [\"disabled\"]\nconst _hoisted_31 = { class: \"form-item\" }\nconst _hoisted_32 = { key: 1 }\nconst _hoisted_33 = {\n key: 2,\n class: \"form-buttons\"\n}\nconst _hoisted_34 = [\"disabled\"]\nconst _hoisted_35 = [\"onClick\"]\n\nimport {\n ComputedRef,\n computed,\n reactive,\n ref,\n toRefs,\n watch,\n onMounted,\n onUnmounted,\n withDefaults,\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 { IAuthUserProfile } 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 import { convertDistance } from '@/utils/units'\n\n interface Props {\n authUser: IAuthUserProfile\n sports: ISport[]\n isCreation?: boolean\n loading?: boolean\n workout?: IWorkout\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutEdition',\n props: {\n authUser: null,\n sports: null,\n isCreation: { type: Boolean, default: false },\n loading: { type: Boolean, default: false },\n workout: { default: () => ({} as IWorkout) }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, sports: ISport[], isCreation: boolean, loading: boolean, workout: IWorkout }\n\n \n\n const { t } = useI18n()\n const store = useStore()\n const router = useRouter()\n\n const { authUser, workout, isCreation, loading } = toRefs(props)\n const translatedSports: ComputedRef = computed(() =>\n translateSports(\n props.sports,\n t,\n 'is_active_for_user',\n workout.value.id ? [workout.value.sport_id] : []\n )\n )\n const appConfig: ComputedRef = 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 = 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 const withGpx = ref(\n props.workout.id ? props.workout.with_gpx : props.isCreation\n )\n let gpxFile: File | null = null\n const formErrors = ref(false)\n\n onMounted(() => {\n if (props.workout.id) {\n formatWorkoutForm(props.workout)\n }\n })\n\n function updateNotes(value: string) {\n workoutForm.notes = value\n }\n function updateWithGpx() {\n withGpx.value = !withGpx.value\n formErrors.value = false\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 = `${\n authUser.value.imperial_units\n ? convertDistance(workout.distance, 'km', 'mi', 2)\n : parseFloat(workout.distance.toFixed(2))\n }`\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 = authUser.value.imperial_units\n ? convertDistance(+workoutForm.workoutDistance, 'mi', 'km', 3)\n : +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.id) {\n if (props.workout.with_gpx) {\n payload.title = workoutForm.title\n } else {\n formatPayload(payload)\n }\n store.dispatch(WORKOUTS_STORE.ACTIONS.EDIT_WORKOUT, {\n workoutId: props.workout.id,\n data: payload,\n })\n } else {\n if (withGpx.value) {\n if (!gpxFile) {\n const errorMessage = 'workouts.NO_FILE_PROVIDED'\n store.commit(ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES, errorMessage)\n return\n }\n payload.file = gpxFile\n store.dispatch(WORKOUTS_STORE.ACTIONS.ADD_WORKOUT, payload)\n } else {\n formatPayload(payload)\n store.dispatch(WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX, payload)\n }\n }\n }\n function onCancel() {\n if (props.workout.id) {\n router.push({\n name: 'Workout',\n params: { workoutId: props.workout.id },\n })\n } else {\n router.go(-1)\n }\n }\n function invalidateForm() {\n formErrors.value = true\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\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\nreturn (_ctx: any,_cache: any) => {\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Loader = _resolveComponent(\"Loader\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n id: \"workout-edition\",\n class: _normalizeClass([\"center-card with-margin\", { 'center-form': _unref(workout) && _unref(workout).with_gpx }])\n }, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(`workouts.${_unref(isCreation) ? 'ADD' : 'EDIT'}_WORKOUT`)), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _withModifiers(updateWorkout, [\"prevent\"])\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(isCreation))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"input\", {\n id: \"withGpx\",\n type: \"radio\",\n checked: withGpx.value,\n disabled: _unref(loading),\n onClick: updateWithGpx\n }, null, 8, _hoisted_5),\n _createElementVNode(\"label\", _hoisted_6, _toDisplayString(_ctx.$t('workouts.WITH_GPX')), 1)\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"input\", {\n id: \"withoutGpx\",\n type: \"radio\",\n checked: !withGpx.value,\n disabled: _unref(loading),\n onClick: updateWithGpx\n }, null, 8, _hoisted_7),\n _createElementVNode(\"label\", _hoisted_8, _toDisplayString(_ctx.$t('workouts.WITHOUT_GPX')), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.SPORT', 1)) + \": \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"sport\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((workoutForm.sport_id) = $event))\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: sport.id,\n key: sport.id\n }, _toDisplayString(sport.translatedLabel), 9, _hoisted_11))\n }), 128))\n ], 40, _hoisted_10), [\n [_vModelSelect, workoutForm.sport_id]\n ])\n ]),\n (_unref(isCreation) && withGpx.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n _createElementVNode(\"label\", _hoisted_13, _toDisplayString(_ctx.$t('workouts.GPX_FILE')) + \" \" + _toDisplayString(_ctx.$t('workouts.ZIP_ARCHIVE_DESCRIPTION')) + \": \", 1),\n _createElementVNode(\"input\", {\n id: \"gpxFile\",\n name: \"gpxFile\",\n type: \"file\",\n accept: \".gpx, .zip\",\n disabled: _unref(loading),\n required: \"\",\n onInvalid: invalidateForm,\n onInput: updateFile\n }, null, 40, _hoisted_14),\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.$t('workouts.GPX_FILE')) + \":\", 1),\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(fileSizeLimit)), 1)\n ])\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.$t('workouts.ZIP_ARCHIVE')) + \":\", 1),\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.NO_FOLDER')), 1),\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_FILES')) + \": \" + _toDisplayString(_unref(gpx_limit_import)), 1),\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(zipSizeLimit)), 1)\n ])\n ])\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_16, [\n _createElementVNode(\"label\", _hoisted_17, _toDisplayString(_ctx.$t('workouts.TITLE')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"title\",\n name: \"title\",\n type: \"text\",\n required: !_unref(isCreation),\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((workoutForm.title) = $event))\n }, null, 40, _hoisted_18), [\n [_vModelText, workoutForm.title]\n ])\n ])),\n (!withGpx.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_19, [\n _createElementVNode(\"div\", _hoisted_20, [\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.WORKOUT_DATE')) + \":\", 1),\n _createElementVNode(\"div\", _hoisted_22, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-date\",\n name: \"workout-date\",\n type: \"date\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((workoutForm.workoutDate) = $event))\n }, null, 40, _hoisted_23), [\n [_vModelText, workoutForm.workoutDate]\n ]),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-time\",\n name: \"workout-time\",\n class: \"workout-time\",\n type: \"time\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((workoutForm.workoutTime) = $event))\n }, null, 40, _hoisted_24), [\n [_vModelText, workoutForm.workoutTime]\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_25, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DURATION')) + \":\", 1),\n _createElementVNode(\"div\", null, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-duration-hour\",\n name: \"workout-duration-hour\",\n class: \"workout-duration\",\n type: \"text\",\n placeholder: \"HH\",\n minlength: \"1\",\n maxlength: \"2\",\n pattern: \"^([0-1]?[0-9]|2[0-3])$\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((workoutForm.workoutDurationHour) = $event))\n }, null, 40, _hoisted_26), [\n [_vModelText, workoutForm.workoutDurationHour]\n ]),\n _createTextVNode(\" : \"),\n _withDirectives(_createElementVNode(\"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 minlength: \"2\",\n maxlength: \"2\",\n placeholder: \"MM\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = ($event: any) => ((workoutForm.workoutDurationMinutes) = $event))\n }, null, 40, _hoisted_27), [\n [_vModelText, workoutForm.workoutDurationMinutes]\n ]),\n _createTextVNode(\" : \"),\n _withDirectives(_createElementVNode(\"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 minlength: \"2\",\n maxlength: \"2\",\n placeholder: \"SS\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = ($event: any) => ((workoutForm.workoutDurationSeconds) = $event))\n }, null, 40, _hoisted_28), [\n [_vModelText, workoutForm.workoutDurationSeconds]\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_29, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \" (\" + _toDisplayString(_unref(authUser).imperial_units ? 'mi' : 'km') + \"): \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n name: \"workout-distance\",\n type: \"number\",\n min: \"0\",\n step: \"0.001\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => ((workoutForm.workoutDistance) = $event))\n }, null, 40, _hoisted_30), [\n [_vModelText, workoutForm.workoutDistance]\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_31, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.NOTES')) + \": \", 1),\n _createVNode(_component_CustomTextArea, {\n name: \"notes\",\n input: workoutForm.notes,\n disabled: _unref(loading),\n onUpdateValue: updateNotes\n }, null, 8, [\"input\", \"disabled\"])\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(loading))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [\n _createVNode(_component_Loader)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_33, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n type: \"submit\",\n disabled: _unref(loading)\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_34),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(onCancel, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_35)\n ]))\n ], 42, _hoisted_2)\n ])\n ]),\n _: 1\n })\n ], 2))\n}\n}\n\n})","import script from \"./WorkoutEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutEdition.vue?vue&type=style&index=0&id=886f93f6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-886f93f6\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"add-workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { ComputedRef, computed } from 'vue'\n\n import WorkoutEdition from '@/components/Workout/WorkoutEdition.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AddWorkout',\n setup(__props) {\n\n const store = useStore()\n\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(WorkoutEdition, {\n authUser: _unref(authUser),\n sports: _unref(sports),\n isCreation: true,\n loading: _unref(workoutData).loading\n }, null, 8, [\"authUser\", \"sports\", \"loading\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./AddWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AddWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"edit-workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { computed, watch, onBeforeMount, ComputedRef } from 'vue'\n import { useRoute } from 'vue-router'\n\n import WorkoutEdition from '@/components/Workout/WorkoutEdition.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'EditWorkout',\n setup(__props) {\n\n const route = useRoute()\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n\n onBeforeMount(() => {\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, {\n workoutId: route.params.workoutId,\n })\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\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(workoutData).workout.id)\n ? (_openBlock(), _createBlock(WorkoutEdition, {\n key: 0,\n authUser: _unref(authUser),\n sports: _unref(sports),\n workout: _unref(workoutData).workout,\n loading: _unref(workoutData).loading\n }, null, 8, [\"authUser\", \"sports\", \"workout\", \"loading\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./EditWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./EditWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, withModifiers as _withModifiers, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4d9f9a8a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-card-title\" }\nconst _hoisted_2 = [\"title\"]\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = [\n _hoisted_3\n]\nconst _hoisted_5 = { class: \"workout-card-title\" }\nconst _hoisted_6 = { class: \"workout-title-date\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"workout-title\"\n}\nconst _hoisted_8 = {\n key: 1,\n class: \"workout-title\"\n}\nconst _hoisted_9 = { class: \"workout-segment\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-map-marker\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { class: \"workout-date\" }\nconst _hoisted_12 = { class: \"workout-link\" }\nconst _hoisted_13 = [\"title\"]\nconst _hoisted_14 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_15 = [\n _hoisted_14\n]\n\nimport { toRefs } from 'vue'\n\n import authApi from '@/api/authApi'\n import { ISport } from '@/types/sports'\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n sport: ISport\n workoutObject: IWorkoutObject\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutCardTitle',\n props: {\n sport: null,\n workoutObject: null\n },\n emits: ['displayModal'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n sport: ISport\n workoutObject: IWorkoutObject\n }\n\n \n\n \n\n const { sport, workoutObject } = toRefs(props)\n\n async function downloadGpx(workoutId: string) {\n await authApi\n .get(`workouts/${workoutId}/gpx/download`, {\n responseType: 'blob',\n })\n .then((response) => {\n const gpxFileUrl = window.URL.createObjectURL(\n new Blob([response.data], { type: 'application/gpx+xml' })\n )\n const gpxLink = document.createElement('a')\n gpxLink.href = gpxFileUrl\n gpxLink.setAttribute('download', `${workoutId}.gpx`)\n document.body.appendChild(gpxLink)\n gpxLink.click()\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-previous workout-arrow\", { inactive: !_unref(workoutObject).previousUrl }]),\n title: \n _unref(workoutObject).previousUrl\n ? _ctx.$t(`workouts.PREVIOUS_${_unref(workoutObject).type}`)\n : _ctx.$t(`workouts.NO_PREVIOUS_${_unref(workoutObject).type}`)\n ,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _unref(workoutObject).previousUrl\n ? _ctx.$router.push(_unref(workoutObject).previousUrl)\n : null\n ))\n }, _hoisted_4, 10, _hoisted_2),\n _createElementVNode(\"div\", _hoisted_5, [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(sport).label,\n color: _unref(sport).color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createElementVNode(\"div\", _hoisted_6, [\n (_unref(workoutObject).type === 'WORKOUT')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(workoutObject).title), 1),\n _createElementVNode(\"i\", {\n class: \"fa fa-edit\",\n \"aria-hidden\": \"true\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (\n _ctx.$router.push({\n name: 'EditWorkout',\n params: { workoutId: _unref(workoutObject).workoutId },\n })\n ))\n }),\n (_unref(workoutObject).with_gpx)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-download\",\n \"aria-hidden\": \"true\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (downloadGpx(_unref(workoutObject).workoutId)), [\"prevent\"]))\n }))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"i\", {\n class: \"fa fa-trash\",\n \"aria-hidden\": \"true\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (emit('displayModal', true)))\n })\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_unref(workoutObject).title) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_9, [\n _createTextVNode(\" — \"),\n _hoisted_10,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.SEGMENT')) + \" \" + _toDisplayString(_unref(workoutObject).segmentId + 1), 1)\n ])\n ])),\n _createElementVNode(\"div\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_unref(workoutObject).workoutDate) + \" - \" + _toDisplayString(_unref(workoutObject).workoutTime) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_12, [\n (_unref(workoutObject).type === 'SEGMENT')\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n to: {\n name: 'Workout',\n params: { workoutId: _unref(workoutObject).workoutId },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" > \" + _toDisplayString(_ctx.$t('workouts.BACK_TO_WORKOUT')), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-next workout-arrow\", { inactive: !_unref(workoutObject).nextUrl }]),\n title: \n _unref(workoutObject).nextUrl\n ? _ctx.$t(`workouts.NEXT_${_unref(workoutObject).type}`)\n : _ctx.$t(`workouts.NO_NEXT_${_unref(workoutObject).type}`)\n ,\n onClick: _cache[4] || (_cache[4] = ($event: any) => (\n _unref(workoutObject).nextUrl ? _ctx.$router.push(_unref(workoutObject).nextUrl) : null\n ))\n }, _hoisted_15, 10, _hoisted_13)\n ]))\n}\n}\n\n})","import script from \"./WorkoutCardTitle.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutCardTitle.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutCardTitle.vue?vue&type=style&index=0&id=4d9f9a8a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4d9f9a8a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1a5282f6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n class: \"workout-record\"\n}\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"sup\", null, [\n /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy\",\n \"aria-hidden\": \"true\"\n })\n], -1))\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nimport { toRefs } from 'vue'\n\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n recordType: string\n workoutObject: IWorkoutObject\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutRecord',\n props: {\n recordType: null,\n workoutObject: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n recordType: string\n workoutObject: IWorkoutObject\n }\n\n \n\n const { recordType, workoutObject } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (\n _unref(workoutObject).records &&\n _unref(workoutObject).records.find((record) => record.record_type === _unref(recordType))\n )\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_1, _hoisted_3))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutRecord.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutRecord.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutRecord.vue?vue&type=style&index=0&id=1a5282f6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1a5282f6\"]])\n\nexport default __exports__","const directions = [\n 'N',\n 'NNE',\n 'NE',\n 'ENE',\n 'E',\n 'ESE',\n 'SE',\n 'SSE',\n 'S',\n 'SSW',\n 'SW',\n 'WSW',\n 'W',\n 'WNW',\n 'NW',\n 'NNW',\n]\n\nexport const convertDegreeToDirection = (angle: number): string => {\n const value = Math.floor(angle / 22.5 + 0.5)\n return directions[value % 16]\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-46a7c31c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"wind\" }\nconst _hoisted_2 = { class: \"wind-bearing\" }\nconst _hoisted_3 = [\"title\"]\n\nimport { toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { IWeather } from '@/types/workouts'\n import { convertDegreeToDirection } from '@/utils/weather'\n\n interface Props {\n weather: IWeather\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WeatherWind',\n props: {\n weather: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n weather: IWeather\n useImperialUnits: boolean\n }\n\n \n\n const { useImperialUnits, weather } = toRefs(props)\n const { t } = useI18n()\n\n function getWindDirectionTitle(windBearing: number): string {\n return t(\n `workouts.WEATHER.WIND_DIRECTIONS.${convertDegreeToDirection(\n windBearing\n )}`\n )\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Distance, {\n distance: _unref(weather).wind,\n unitFrom: \"m\",\n digits: 1,\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createTextVNode(\" \" + _toDisplayString(_unref(useImperialUnits) ? 'ft' : 'm') + \"/s \", 1),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(weather).windBearing)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-long-arrow-down\",\n style: _normalizeStyle({\n transform: `rotate(${_unref(weather).windBearing}deg)`,\n }),\n \"aria-hidden\": \"true\",\n title: getWindDirectionTitle(_unref(weather).windBearing)\n }, null, 12, _hoisted_3))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./WeatherWind.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WeatherWind.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WeatherWind.vue?vue&type=style&index=0&id=46a7c31c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-46a7c31c\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-76e9ab62\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"workout-weather\"\n}\nconst _hoisted_2 = { class: \"weather-table\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, null, -1))\nconst _hoisted_4 = { class: \"weather-th\" }\nconst _hoisted_5 = [\"src\", \"alt\", \"title\"]\nconst _hoisted_6 = { class: \"weather-th\" }\nconst _hoisted_7 = [\"src\", \"alt\", \"title\"]\nconst _hoisted_8 = [\"alt\", \"title\"]\nconst _hoisted_9 = [\"alt\", \"title\"]\nconst _hoisted_10 = [\"alt\", \"title\"]\n\nimport { toRefs } from 'vue'\n\n import WeatherWind from '@/components/Workout/WorkoutDetail/WeatherWind.vue'\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutWeather',\n props: {\n workoutObject: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n }\n\n \n\n const { useImperialUnits, workoutObject } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(workoutObject).weatherStart && _unref(workoutObject).weatherEnd)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"table\", _hoisted_2, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_3,\n _createElementVNode(\"th\", null, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.START')) + \" \", 1),\n _createElementVNode(\"img\", {\n class: \"weather-img\",\n src: `/img/weather/${_unref(workoutObject).weatherStart.icon}.svg`,\n alt: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherStart.icon}`\n )\n ,\n title: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherStart.icon}`\n )\n \n }, null, 8, _hoisted_5)\n ])\n ]),\n _createElementVNode(\"th\", null, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.END')) + \" \", 1),\n _createElementVNode(\"img\", {\n class: \"weather-img\",\n src: `/img/weather/${_unref(workoutObject).weatherEnd.icon}.svg`,\n alt: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherEnd.icon}`\n )\n ,\n title: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherEnd.icon}`\n )\n \n }, null, 8, _hoisted_7)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/temperature.svg\",\n alt: _ctx.$t(`workouts.WEATHER.TEMPERATURE`),\n title: _ctx.$t(`workouts.WEATHER.TEMPERATURE`)\n }, null, 8, _hoisted_8)\n ]),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherStart.temperature).toFixed(1)) + \"°C \", 1),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherEnd.temperature).toFixed(1)) + \"°C \", 1)\n ]),\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/pour-rain.svg\",\n alt: _ctx.$t(`workouts.WEATHER.HUMIDITY`),\n title: _ctx.$t(`workouts.WEATHER.HUMIDITY`)\n }, null, 8, _hoisted_9)\n ]),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherStart.humidity * 100).toFixed(1)) + \"% \", 1),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherEnd.humidity * 100).toFixed(1)) + \"% \", 1)\n ]),\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/breeze.svg\",\n alt: _ctx.$t(`workouts.WEATHER.WIND`),\n title: _ctx.$t(`workouts.WEATHER.WIND`)\n }, null, 8, _hoisted_10)\n ]),\n _createElementVNode(\"td\", null, [\n _createVNode(WeatherWind, {\n weather: _unref(workoutObject).weatherStart,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"weather\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createVNode(WeatherWind, {\n weather: _unref(workoutObject).weatherEnd,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"weather\", \"useImperialUnits\"])\n ])\n ])\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutWeather.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutWeather.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutWeather.vue?vue&type=style&index=0&id=76e9ab62&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-76e9ab62\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, unref as _unref, createVNode as _createVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74c5993b\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-info\" }\nconst _hoisted_2 = { class: \"workout-data\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-clock-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { class: \"label\" }\nconst _hoisted_5 = { class: \"value\" }\nconst _hoisted_6 = { key: 0 }\nconst _hoisted_7 = { class: \"value\" }\nconst _hoisted_8 = { class: \"value\" }\nconst _hoisted_9 = { class: \"workout-data\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-road\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { class: \"label\" }\nconst _hoisted_12 = { class: \"workout-data\" }\nconst _hoisted_13 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-tachometer\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_14 = { class: \"label\" }\nconst _hoisted_15 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_16 = { class: \"label\" }\nconst _hoisted_17 = {\n key: 0,\n class: \"workout-data\"\n}\nconst _hoisted_18 = [\"alt\"]\nconst _hoisted_19 = { class: \"label\" }\nconst _hoisted_20 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_21 = { class: \"label\" }\nconst _hoisted_22 = {\n key: 1,\n class: \"workout-data\"\n}\nconst _hoisted_23 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-location-arrow\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_24 = { class: \"label\" }\nconst _hoisted_25 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_26 = { class: \"label\" }\n\nimport { computed, toRefs } 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 interface Props {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n displayHARecord: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutData',\n props: {\n workoutObject: null,\n useImperialUnits: { type: Boolean },\n displayHARecord: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n displayHARecord: boolean\n }\n\n \n\n const { displayHARecord, workoutObject, useImperialUnits } = toRefs(props)\n const withPause = computed(\n () =>\n props.workoutObject.pauses !== '0:00:00' &&\n props.workoutObject.pauses !== null\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('workouts.DURATION')), 1),\n _createTextVNode(\": \"),\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_unref(workoutObject).moving), 1),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"LD\"\n }, null, 8, [\"workoutObject\"]),\n (_unref(withPause))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createTextVNode(\" (\" + _toDisplayString(_ctx.$t('workouts.PAUSES')) + \": \", 1),\n _createElementVNode(\"span\", _hoisted_7, _toDisplayString(_unref(workoutObject).pauses), 1),\n _createTextVNode(\" - \" + _toDisplayString(_ctx.$t('workouts.TOTAL_DURATION')) + \": \", 1),\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_unref(workoutObject).duration) + \")\", 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).distance,\n digits: 3,\n unitFrom: \"km\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"FD\"\n }, null, 8, [\"workoutObject\"])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _hoisted_13,\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('workouts.AVERAGE_SPEED')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).aveSpeed,\n unitFrom: \"km\",\n speed: true,\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"AS\"\n }, null, 8, [\"workoutObject\"]),\n _hoisted_15,\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).maxSpeed,\n unitFrom: \"km\",\n speed: true,\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"MS\"\n }, null, 8, [\"workoutObject\"])\n ]),\n (_unref(workoutObject).maxAlt !== null && _unref(workoutObject).minAlt !== null)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createElementVNode(\"img\", {\n class: \"mountains\",\n src: \"/img/workouts/mountains.svg\",\n alt: _ctx.$t('workouts.ELEVATION')\n }, null, 8, _hoisted_18),\n _createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('workouts.MIN_ALTITUDE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).minAlt,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _hoisted_20,\n _createElementVNode(\"span\", _hoisted_21, _toDisplayString(_ctx.$t('workouts.MAX_ALTITUDE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).maxAlt,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(workoutObject).ascent !== null && _unref(workoutObject).descent !== null)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_22, [\n _hoisted_23,\n _createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('workouts.ASCENT')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).ascent,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n (_unref(displayHARecord))\n ? (_openBlock(), _createBlock(WorkoutRecord, {\n key: 0,\n workoutObject: _unref(workoutObject),\n recordType: \"HA\"\n }, null, 8, [\"workoutObject\"]))\n : _createCommentVNode(\"\", true),\n _hoisted_25,\n _createElementVNode(\"span\", _hoisted_26, _toDisplayString(_ctx.$t('workouts.DESCENT')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).descent,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(WorkoutWeather, {\n workoutObject: _unref(workoutObject),\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"workoutObject\", \"useImperialUnits\"])\n ]))\n}\n}\n\n})","import script from \"./WorkoutData.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutData.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutData.vue?vue&type=style&index=0&id=74c5993b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74c5993b\"]])\n\nexport default __exports__","function $(element, tagName) {\n return Array.from(element.getElementsByTagName(tagName));\n}\nfunction normalizeId(id) {\n return id[0] === \"#\" ? id : `#${id}`;\n}\nfunction $ns(element, tagName, ns) {\n return Array.from(element.getElementsByTagNameNS(ns, tagName));\n}\n/**\n * get the content of a text node, if any\n */\nfunction nodeVal(node) {\n node?.normalize();\n return (node && node.textContent) || \"\";\n}\n/**\n * Get one Y child of X, if any, otherwise null\n */\nfunction get1(node, tagName, callback) {\n const n = node.getElementsByTagName(tagName);\n const result = n.length ? n[0] : null;\n if (result && callback)\n callback(result);\n return result;\n}\nfunction get(node, tagName, callback) {\n const properties = {};\n if (!node)\n return properties;\n const n = node.getElementsByTagName(tagName);\n const result = n.length ? n[0] : null;\n if (result && callback) {\n return callback(result, properties);\n }\n return properties;\n}\nfunction val1(node, tagName, callback) {\n const val = nodeVal(get1(node, tagName));\n if (val && callback)\n return callback(val) || {};\n return {};\n}\nfunction $num(node, tagName, callback) {\n const val = parseFloat(nodeVal(get1(node, tagName)));\n if (isNaN(val))\n return undefined;\n if (val && callback)\n return callback(val) || {};\n return {};\n}\nfunction num1(node, tagName, callback) {\n const val = parseFloat(nodeVal(get1(node, tagName)));\n if (isNaN(val))\n return undefined;\n if (val && callback)\n callback(val);\n return val;\n}\nfunction getMulti(node, propertyNames) {\n const properties = {};\n for (const property of propertyNames) {\n val1(node, property, (val) => {\n properties[property] = val;\n });\n }\n return properties;\n}\nfunction isElement(node) {\n return node?.nodeType === 1;\n}\n\nfunction getLineStyle(node) {\n return get(node, \"line\", (lineStyle) => {\n const val = Object.assign({}, val1(lineStyle, \"color\", (color) => {\n return { stroke: `#${color}` };\n }), $num(lineStyle, \"opacity\", (opacity) => {\n return { \"stroke-opacity\": opacity };\n }), $num(lineStyle, \"width\", (width) => {\n // GPX width is in mm, convert to px with 96 px per inch\n return { \"stroke-width\": (width * 96) / 25.4 };\n }));\n return val;\n });\n}\n\nfunction getExtensions(node) {\n let values = [];\n if (node === null)\n return values;\n for (const child of Array.from(node.childNodes)) {\n if (!isElement(child))\n continue;\n const name = abbreviateName(child.nodeName);\n if (name === \"gpxtpx:TrackPointExtension\") {\n // loop again for nested garmin extensions (eg. \"gpxtpx:hr\")\n values = values.concat(getExtensions(child));\n }\n else {\n // push custom extension (eg. \"power\")\n const val = nodeVal(child);\n values.push([name, parseNumeric(val)]);\n }\n }\n return values;\n}\nfunction abbreviateName(name) {\n return [\"heart\", \"gpxtpx:hr\", \"hr\"].includes(name) ? \"heart\" : name;\n}\nfunction parseNumeric(val) {\n const num = parseFloat(val);\n return isNaN(num) ? val : num;\n}\n\nfunction coordPair$1(node) {\n const ll = [\n parseFloat(node.getAttribute(\"lon\") || \"\"),\n parseFloat(node.getAttribute(\"lat\") || \"\"),\n ];\n if (isNaN(ll[0]) || isNaN(ll[1])) {\n return null;\n }\n num1(node, \"ele\", (val) => {\n ll.push(val);\n });\n const time = get1(node, \"time\");\n return {\n coordinates: ll,\n time: time ? nodeVal(time) : null,\n extendedValues: getExtensions(get1(node, \"extensions\")),\n };\n}\n\nfunction extractProperties(node) {\n const properties = getMulti(node, [\n \"name\",\n \"cmt\",\n \"desc\",\n \"type\",\n \"time\",\n \"keywords\",\n ]);\n const extensions = Array.from(node.getElementsByTagNameNS(\"http://www.garmin.com/xmlschemas/GpxExtensions/v3\", \"*\"));\n for (const child of extensions) {\n if (child.parentNode?.parentNode === node) {\n properties[child.tagName.replace(\":\", \"_\")] = nodeVal(child);\n }\n }\n const links = $(node, \"link\");\n if (links.length) {\n properties.links = links.map((link) => Object.assign({ href: link.getAttribute(\"href\") }, getMulti(link, [\"text\", \"type\"])));\n }\n return properties;\n}\n\n/**\n * Extract points from a trkseg or rte element.\n */\nfunction getPoints$1(node, pointname) {\n const pts = $(node, pointname);\n const line = [];\n const times = [];\n const extendedValues = {};\n for (let i = 0; i < pts.length; i++) {\n const c = coordPair$1(pts[i]);\n if (!c) {\n continue;\n }\n line.push(c.coordinates);\n if (c.time)\n times.push(c.time);\n for (const [name, val] of c.extendedValues) {\n const plural = name === \"heart\" ? name : name.replace(\"gpxtpx:\", \"\") + \"s\";\n if (!extendedValues[plural]) {\n extendedValues[plural] = Array(pts.length).fill(null);\n }\n extendedValues[plural][i] = val;\n }\n }\n if (line.length < 2)\n return; // Invalid line in GeoJSON\n return {\n line: line,\n times: times,\n extendedValues: extendedValues,\n };\n}\n/**\n * Extract a LineString geometry from a rte\n * element.\n */\nfunction getRoute(node) {\n const line = getPoints$1(node, \"rtept\");\n if (!line)\n return;\n return {\n type: \"Feature\",\n properties: Object.assign({ _gpxType: \"rte\" }, extractProperties(node), getLineStyle(get1(node, \"extensions\"))),\n geometry: {\n type: \"LineString\",\n coordinates: line.line,\n },\n };\n}\nfunction getTrack(node) {\n const segments = $(node, \"trkseg\");\n const track = [];\n const times = [];\n const extractedLines = [];\n for (const segment of segments) {\n const line = getPoints$1(segment, \"trkpt\");\n if (line) {\n extractedLines.push(line);\n if (line.times && line.times.length)\n times.push(line.times);\n }\n }\n if (extractedLines.length === 0)\n return null;\n const multi = extractedLines.length > 1;\n const properties = Object.assign({ _gpxType: \"trk\" }, extractProperties(node), getLineStyle(get1(node, \"extensions\")), times.length\n ? {\n coordinateProperties: {\n times: multi ? times : times[0],\n },\n }\n : {});\n for (const line of extractedLines) {\n track.push(line.line);\n if (!properties.coordinateProperties) {\n properties.coordinateProperties = {};\n }\n const props = properties.coordinateProperties;\n const entries = Object.entries(line.extendedValues);\n for (let i = 0; i < entries.length; i++) {\n const [name, val] = entries[i];\n if (multi) {\n if (!props[name]) {\n props[name] = extractedLines.map((line) => new Array(line.line.length).fill(null));\n }\n props[name][i] = val;\n }\n else {\n props[name] = val;\n }\n }\n }\n return {\n type: \"Feature\",\n properties: properties,\n geometry: multi\n ? {\n type: \"MultiLineString\",\n coordinates: track,\n }\n : {\n type: \"LineString\",\n coordinates: track[0],\n },\n };\n}\n/**\n * Extract a point, if possible, from a given node,\n * which is usually a wpt or trkpt\n */\nfunction getPoint(node) {\n const properties = Object.assign(extractProperties(node), getMulti(node, [\"sym\"]));\n const pair = coordPair$1(node);\n if (!pair)\n return null;\n return {\n type: \"Feature\",\n properties,\n geometry: {\n type: \"Point\",\n coordinates: pair.coordinates,\n },\n };\n}\n/**\n * Convert GPX to GeoJSON incrementally, returning\n * a [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)\n * that yields output feature by feature.\n */\nfunction* gpxGen(node) {\n for (const track of $(node, \"trk\")) {\n const feature = getTrack(track);\n if (feature)\n yield feature;\n }\n for (const route of $(node, \"rte\")) {\n const feature = getRoute(route);\n if (feature)\n yield feature;\n }\n for (const waypoint of $(node, \"wpt\")) {\n const point = getPoint(waypoint);\n if (point)\n yield point;\n }\n}\n/**\n *\n * Convert a GPX document to GeoJSON. The first argument, `doc`, must be a GPX\n * document as an XML DOM - not as a string. You can get this using jQuery's default\n * `.ajax` function or using a bare XMLHttpRequest with the `.response` property\n * holding an XML DOM.\n *\n * The output is a JavaScript object of GeoJSON data, same as `.kml` outputs, with the\n * addition of a `_gpxType` property on each `LineString` feature that indicates whether\n * the feature was encoded as a route (`rte`) or track (`trk`) in the GPX document.\n */\nfunction gpx(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(gpxGen(node)),\n };\n}\n\nconst EXTENSIONS_NS = \"http://www.garmin.com/xmlschemas/ActivityExtension/v2\";\nconst TRACKPOINT_ATTRIBUTES = [\n [\"heartRate\", \"heartRates\"],\n [\"Cadence\", \"cadences\"],\n // Extended Trackpoint attributes\n [\"Speed\", \"speeds\"],\n [\"Watts\", \"watts\"],\n];\nconst LAP_ATTRIBUTES = [\n [\"TotalTimeSeconds\", \"totalTimeSeconds\"],\n [\"DistanceMeters\", \"distanceMeters\"],\n [\"MaximumSpeed\", \"maxSpeed\"],\n [\"AverageHeartRateBpm\", \"avgHeartRate\"],\n [\"MaximumHeartRateBpm\", \"maxHeartRate\"],\n // Extended Lap attributes\n [\"AvgSpeed\", \"avgSpeed\"],\n [\"AvgWatts\", \"avgWatts\"],\n [\"MaxWatts\", \"maxWatts\"],\n];\nfunction getProperties(node, attributeNames) {\n const properties = [];\n for (const [tag, alias] of attributeNames) {\n let elem = get1(node, tag);\n if (!elem) {\n const elements = node.getElementsByTagNameNS(EXTENSIONS_NS, tag);\n if (elements.length) {\n elem = elements[0];\n }\n }\n const val = parseFloat(nodeVal(elem));\n if (!isNaN(val)) {\n properties.push([alias, val]);\n }\n }\n return properties;\n}\nfunction coordPair(node) {\n const ll = [num1(node, \"LongitudeDegrees\"), num1(node, \"LatitudeDegrees\")];\n if (ll[0] === undefined ||\n isNaN(ll[0]) ||\n ll[1] === undefined ||\n isNaN(ll[1])) {\n return null;\n }\n const heartRate = get1(node, \"HeartRateBpm\");\n const time = nodeVal(get1(node, \"Time\"));\n get1(node, \"AltitudeMeters\", (alt) => {\n const a = parseFloat(nodeVal(alt));\n if (!isNaN(a)) {\n ll.push(a);\n }\n });\n return {\n coordinates: ll,\n time: time || null,\n heartRate: heartRate ? parseFloat(nodeVal(heartRate)) : null,\n extensions: getProperties(node, TRACKPOINT_ATTRIBUTES),\n };\n}\nfunction getPoints(node) {\n const pts = $(node, \"Trackpoint\");\n const line = [];\n const times = [];\n const heartRates = [];\n if (pts.length < 2)\n return null; // Invalid line in GeoJSON\n const extendedProperties = {};\n const result = { extendedProperties };\n for (let i = 0; i < pts.length; i++) {\n const c = coordPair(pts[i]);\n if (c === null)\n continue;\n line.push(c.coordinates);\n const { time, heartRate, extensions } = c;\n if (time)\n times.push(time);\n if (heartRate)\n heartRates.push(heartRate);\n for (const [alias, value] of extensions) {\n if (!extendedProperties[alias]) {\n extendedProperties[alias] = Array(pts.length).fill(null);\n }\n extendedProperties[alias][i] = value;\n }\n }\n if (line.length < 2)\n return null;\n return Object.assign(result, {\n line: line,\n times: times,\n heartRates: heartRates,\n });\n}\nfunction getLap(node) {\n const segments = $(node, \"Track\");\n const track = [];\n const times = [];\n const heartRates = [];\n const allExtendedProperties = [];\n let line;\n const properties = Object.assign(Object.fromEntries(getProperties(node, LAP_ATTRIBUTES)), get(node, \"Name\", (nameElement) => {\n return { name: nodeVal(nameElement) };\n }));\n for (const segment of segments) {\n line = getPoints(segment);\n if (line) {\n track.push(line.line);\n if (line.times.length)\n times.push(line.times);\n if (line.heartRates.length)\n heartRates.push(line.heartRates);\n allExtendedProperties.push(line.extendedProperties);\n }\n }\n for (let i = 0; i < allExtendedProperties.length; i++) {\n const extendedProperties = allExtendedProperties[i];\n for (const property in extendedProperties) {\n if (segments.length === 1) {\n if (line) {\n properties[property] = line.extendedProperties[property];\n }\n }\n else {\n if (!properties[property]) {\n properties[property] = track.map((track) => Array(track.length).fill(null));\n }\n properties[property][i] = extendedProperties[property];\n }\n }\n }\n if (track.length === 0)\n return null;\n if (times.length || heartRates.length) {\n properties.coordinateProperties = Object.assign(times.length\n ? {\n times: track.length === 1 ? times[0] : times,\n }\n : {}, heartRates.length\n ? {\n heart: track.length === 1 ? heartRates[0] : heartRates,\n }\n : {});\n }\n return {\n type: \"Feature\",\n properties: properties,\n geometry: track.length === 1\n ? {\n type: \"LineString\",\n coordinates: track[0],\n }\n : {\n type: \"MultiLineString\",\n coordinates: track,\n },\n };\n}\n/**\n * Incrementally convert a TCX document to GeoJSON. The\n * first argument, `doc`, must be a TCX\n * document as an XML DOM - not as a string.\n */\nfunction* tcxGen(node) {\n for (const lap of $(node, \"Lap\")) {\n const feature = getLap(lap);\n if (feature)\n yield feature;\n }\n for (const course of $(node, \"Courses\")) {\n const feature = getLap(course);\n if (feature)\n yield feature;\n }\n}\n/**\n * Convert a TCX document to GeoJSON. The first argument, `doc`, must be a TCX\n * document as an XML DOM - not as a string.\n */\nfunction tcx(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(tcxGen(node)),\n };\n}\n\nfunction fixColor(v, prefix) {\n const properties = {};\n const colorProp = prefix == \"stroke\" || prefix === \"fill\" ? prefix : prefix + \"-color\";\n if (v[0] === \"#\") {\n v = v.substring(1);\n }\n if (v.length === 6 || v.length === 3) {\n properties[colorProp] = \"#\" + v;\n }\n else if (v.length === 8) {\n properties[prefix + \"-opacity\"] = parseInt(v.substring(0, 2), 16) / 255;\n properties[colorProp] =\n \"#\" + v.substring(6, 8) + v.substring(4, 6) + v.substring(2, 4);\n }\n return properties;\n}\n\nfunction numericProperty(node, source, target) {\n const properties = {};\n num1(node, source, (val) => {\n properties[target] = val;\n });\n return properties;\n}\nfunction getColor(node, output) {\n return get(node, \"color\", (elem) => fixColor(nodeVal(elem), output));\n}\nfunction extractIconHref(node) {\n return get(node, \"Icon\", (icon, properties) => {\n val1(icon, \"href\", (href) => {\n properties.icon = href;\n });\n return properties;\n });\n}\nfunction extractIcon(node) {\n return get(node, \"IconStyle\", (iconStyle) => {\n return Object.assign(getColor(iconStyle, \"icon\"), numericProperty(iconStyle, \"scale\", \"icon-scale\"), numericProperty(iconStyle, \"heading\", \"icon-heading\"), get(iconStyle, \"hotSpot\", (hotspot) => {\n const left = parseFloat(hotspot.getAttribute(\"x\") || \"\");\n const top = parseFloat(hotspot.getAttribute(\"y\") || \"\");\n const xunits = hotspot.getAttribute(\"xunits\") || \"\";\n const yunits = hotspot.getAttribute(\"yunits\") || \"\";\n if (!isNaN(left) && !isNaN(top))\n return {\n \"icon-offset\": [left, top],\n \"icon-offset-units\": [xunits, yunits],\n };\n return {};\n }), extractIconHref(iconStyle));\n });\n}\nfunction extractLabel(node) {\n return get(node, \"LabelStyle\", (labelStyle) => {\n return Object.assign(getColor(labelStyle, \"label\"), numericProperty(labelStyle, \"scale\", \"label-scale\"));\n });\n}\nfunction extractLine(node) {\n return get(node, \"LineStyle\", (lineStyle) => {\n return Object.assign(getColor(lineStyle, \"stroke\"), numericProperty(lineStyle, \"width\", \"stroke-width\"));\n });\n}\nfunction extractPoly(node) {\n return get(node, \"PolyStyle\", (polyStyle, properties) => {\n return Object.assign(properties, get(polyStyle, \"color\", (elem) => fixColor(nodeVal(elem), \"fill\")), val1(polyStyle, \"fill\", (fill) => {\n if (fill === \"0\")\n return { \"fill-opacity\": 0 };\n }), val1(polyStyle, \"outline\", (outline) => {\n if (outline === \"0\")\n return { \"stroke-opacity\": 0 };\n }));\n });\n}\nfunction extractStyle(node) {\n return Object.assign({}, extractPoly(node), extractLine(node), extractLabel(node), extractIcon(node));\n}\n\nfunction extractExtendedData(node) {\n return get(node, \"ExtendedData\", (extendedData, properties) => {\n for (const data of $(extendedData, \"Data\")) {\n properties[data.getAttribute(\"name\") || \"\"] = nodeVal(get1(data, \"value\"));\n }\n for (const simpleData of $(extendedData, \"SimpleData\")) {\n properties[simpleData.getAttribute(\"name\") || \"\"] = nodeVal(simpleData);\n }\n return properties;\n });\n}\nfunction getMaybeHTMLDescription(node) {\n const descriptionNode = get1(node, \"description\");\n for (const c of Array.from(descriptionNode?.childNodes || [])) {\n if (c.nodeType === 4) {\n return {\n description: {\n \"@type\": \"html\",\n value: nodeVal(c),\n },\n };\n }\n }\n return {};\n}\nfunction extractTimeSpan(node) {\n return get(node, \"TimeSpan\", (timeSpan) => {\n return {\n timespan: {\n begin: nodeVal(get1(timeSpan, \"begin\")),\n end: nodeVal(get1(timeSpan, \"end\")),\n },\n };\n });\n}\nfunction extractTimeStamp(node) {\n return get(node, \"TimeStamp\", (timeStamp) => {\n return { timestamp: nodeVal(get1(timeStamp, \"when\")) };\n });\n}\nfunction extractCascadedStyle(node, styleMap) {\n return val1(node, \"styleUrl\", (styleUrl) => {\n styleUrl = normalizeId(styleUrl);\n if (styleMap[styleUrl]) {\n return Object.assign({ styleUrl }, styleMap[styleUrl]);\n }\n // For backward-compatibility. Should we still include\n // styleUrl even if it's not resolved?\n return { styleUrl };\n });\n}\n\nconst removeSpace = /\\s*/g;\nconst trimSpace = /^\\s*|\\s*$/g;\nconst splitSpace = /\\s+/;\n/**\n * Get one coordinate from a coordinate array, if any\n */\nfunction coord1(value) {\n return value\n .replace(removeSpace, \"\")\n .split(\",\")\n .map(parseFloat)\n .filter((num) => !isNaN(num))\n .slice(0, 3);\n}\n/**\n * Get all coordinates from a coordinate array as [[],[]]\n */\nfunction coord(value) {\n return value\n .replace(trimSpace, \"\")\n .split(splitSpace)\n .map(coord1)\n .filter((coord) => {\n return coord.length >= 2;\n });\n}\nfunction gxCoords(node) {\n let elems = $(node, \"coord\");\n if (elems.length === 0) {\n elems = $ns(node, \"coord\", \"*\");\n }\n const coordinates = elems.map((elem) => {\n return nodeVal(elem).split(\" \").map(parseFloat);\n });\n if (coordinates.length === 0) {\n return null;\n }\n return {\n geometry: coordinates.length > 2\n ? {\n type: \"LineString\",\n coordinates,\n }\n : {\n type: \"Point\",\n coordinates: coordinates[0],\n },\n times: $(node, \"when\").map((elem) => nodeVal(elem)),\n };\n}\nfunction fixRing(ring) {\n if (ring.length === 0)\n return ring;\n const first = ring[0];\n const last = ring[ring.length - 1];\n let equal = true;\n for (let i = 0; i < Math.max(first.length, last.length); i++) {\n if (first[i] !== last[i]) {\n equal = false;\n break;\n }\n }\n if (!equal) {\n return ring.concat([ring[0]]);\n }\n return ring;\n}\nfunction getCoordinates(node) {\n return nodeVal(get1(node, \"coordinates\"));\n}\nfunction getGeometry(node) {\n let geometries = [];\n let coordTimes = [];\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = node.childNodes.item(i);\n if (isElement(child)) {\n switch (child.tagName) {\n case \"MultiGeometry\":\n case \"MultiTrack\":\n case \"gx:MultiTrack\": {\n const childGeometries = getGeometry(child);\n geometries = geometries.concat(childGeometries.geometries);\n coordTimes = coordTimes.concat(childGeometries.coordTimes);\n break;\n }\n case \"Point\": {\n const coordinates = coord1(getCoordinates(child));\n if (coordinates.length >= 2) {\n geometries.push({\n type: \"Point\",\n coordinates,\n });\n }\n break;\n }\n case \"LineString\": {\n const coordinates = coord(getCoordinates(child));\n if (coordinates.length >= 2) {\n geometries.push({\n type: \"LineString\",\n coordinates,\n });\n }\n break;\n }\n case \"Polygon\": {\n const coords = [];\n for (const linearRing of $(child, \"LinearRing\")) {\n const ring = fixRing(coord(getCoordinates(linearRing)));\n if (ring.length >= 4) {\n coords.push(ring);\n }\n }\n if (coords.length) {\n geometries.push({\n type: \"Polygon\",\n coordinates: coords,\n });\n }\n break;\n }\n case \"Track\":\n case \"gx:Track\": {\n const gx = gxCoords(child);\n if (!gx)\n break;\n const { times, geometry } = gx;\n geometries.push(geometry);\n if (times.length)\n coordTimes.push(times);\n break;\n }\n }\n }\n }\n return {\n geometries,\n coordTimes,\n };\n}\n\nfunction geometryListToGeometry(geometries) {\n return geometries.length === 0\n ? null\n : geometries.length === 1\n ? geometries[0]\n : {\n type: \"GeometryCollection\",\n geometries,\n };\n}\nfunction getPlacemark(node, styleMap) {\n const { coordTimes, geometries } = getGeometry(node);\n const feature = {\n type: \"Feature\",\n geometry: geometryListToGeometry(geometries),\n properties: Object.assign(getMulti(node, [\n \"name\",\n \"address\",\n \"visibility\",\n \"open\",\n \"phoneNumber\",\n \"description\",\n ]), getMaybeHTMLDescription(node), extractCascadedStyle(node, styleMap), extractStyle(node), extractExtendedData(node), extractTimeSpan(node), extractTimeStamp(node), coordTimes.length\n ? {\n coordinateProperties: {\n times: coordTimes.length === 1 ? coordTimes[0] : coordTimes,\n },\n }\n : {}),\n };\n if (feature.properties?.visibility !== undefined) {\n feature.properties.visibility = feature.properties.visibility !== \"0\";\n }\n const id = node.getAttribute(\"id\");\n if (id !== null && id !== \"\")\n feature.id = id;\n return feature;\n}\n\nfunction getGroundOverlayBox(node) {\n const latLonQuad = get1(node, \"gx:LatLonQuad\");\n if (latLonQuad) {\n const ring = fixRing(coord(getCoordinates(node)));\n return {\n type: \"Polygon\",\n coordinates: [ring],\n };\n }\n return getLatLonBox(node);\n}\nconst DEGREES_TO_RADIANS = Math.PI / 180;\nfunction rotateBox(bbox, coordinates, rotation) {\n const center = [(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2];\n return [\n coordinates[0].map((coordinate) => {\n const dy = coordinate[1] - center[1];\n const dx = coordinate[0] - center[0];\n const distance = Math.sqrt(Math.pow(dy, 2) + Math.pow(dx, 2));\n const angle = Math.atan2(dy, dx) - rotation * DEGREES_TO_RADIANS;\n return [\n center[0] + Math.cos(angle) * distance,\n center[1] + Math.sin(angle) * distance,\n ];\n }),\n ];\n}\nfunction getLatLonBox(node) {\n const latLonBox = get1(node, \"LatLonBox\");\n if (latLonBox) {\n const north = num1(latLonBox, \"north\");\n const west = num1(latLonBox, \"west\");\n const east = num1(latLonBox, \"east\");\n const south = num1(latLonBox, \"south\");\n const rotation = num1(latLonBox, \"rotation\");\n if (typeof north === \"number\" &&\n typeof south === \"number\" &&\n typeof west === \"number\" &&\n typeof east === \"number\") {\n const bbox = [west, south, east, north];\n let coordinates = [\n [\n [west, north],\n [east, north],\n [east, south],\n [west, south],\n [west, north], // top left (again)\n ],\n ];\n if (typeof rotation === \"number\") {\n coordinates = rotateBox(bbox, coordinates, rotation);\n }\n return {\n type: \"Polygon\",\n coordinates,\n };\n }\n }\n return null;\n}\nfunction getGroundOverlay(node, styleMap) {\n const geometry = getGroundOverlayBox(node);\n const feature = {\n type: \"Feature\",\n geometry,\n properties: Object.assign(\n /**\n * Related to\n * https://gist.github.com/tmcw/037a1cb6660d74a392e9da7446540f46\n */\n { \"@geometry-type\": \"groundoverlay\" }, getMulti(node, [\n \"name\",\n \"address\",\n \"visibility\",\n \"open\",\n \"phoneNumber\",\n \"description\",\n ]), getMaybeHTMLDescription(node), extractCascadedStyle(node, styleMap), extractStyle(node), extractIconHref(node), extractExtendedData(node), extractTimeSpan(node), extractTimeStamp(node)),\n };\n if (feature.properties?.visibility !== undefined) {\n feature.properties.visibility = feature.properties.visibility !== \"0\";\n }\n const id = node.getAttribute(\"id\");\n if (id !== null && id !== \"\")\n feature.id = id;\n return feature;\n}\n\nfunction getStyleId(style) {\n let id = style.getAttribute(\"id\");\n const parentNode = style.parentNode;\n if (!id &&\n isElement(parentNode) &&\n parentNode.localName === \"CascadingStyle\") {\n id = parentNode.getAttribute(\"kml:id\") || parentNode.getAttribute(\"id\");\n }\n return normalizeId(id || \"\");\n}\nfunction buildStyleMap(node) {\n const styleMap = {};\n for (const style of $(node, \"Style\")) {\n styleMap[getStyleId(style)] = extractStyle(style);\n }\n for (const map of $(node, \"StyleMap\")) {\n const id = normalizeId(map.getAttribute(\"id\") || \"\");\n val1(map, \"styleUrl\", (styleUrl) => {\n styleUrl = normalizeId(styleUrl);\n if (styleMap[styleUrl]) {\n styleMap[id] = styleMap[styleUrl];\n }\n });\n }\n return styleMap;\n}\nconst FOLDER_PROPS = [\n \"name\",\n \"visibility\",\n \"open\",\n \"address\",\n \"description\",\n \"phoneNumber\",\n \"visibility\",\n];\nfunction getFolder(node) {\n const meta = {};\n for (const child of Array.from(node.childNodes)) {\n if (isElement(child) && FOLDER_PROPS.includes(child.tagName)) {\n meta[child.tagName] = nodeVal(child);\n }\n }\n return {\n type: \"folder\",\n meta,\n children: [],\n };\n}\n/**\n * Yield a nested tree with KML folder structure\n *\n * This generates a tree with the given structure:\n *\n * ```js\n * {\n * \"type\": \"root\",\n * \"children\": [\n * {\n * \"type\": \"folder\",\n * \"meta\": {\n * \"name\": \"Test\"\n * },\n * \"children\": [\n * // ...features and folders\n * ]\n * }\n * // ...features\n * ]\n * }\n * ```\n *\n * ### GroundOverlay\n *\n * GroundOverlay elements are converted into\n * `Feature` objects with `Polygon` geometries,\n * a property like:\n *\n * ```json\n * {\n * \"@geometry-type\": \"groundoverlay\"\n * }\n * ```\n *\n * And the ground overlay's image URL in the `href`\n * property. Ground overlays will need to be displayed\n * with a separate method to other features, depending\n * on which map framework you're using.\n */\nfunction kmlWithFolders(node) {\n const styleMap = buildStyleMap(node);\n const tree = { type: \"root\", children: [] };\n function traverse(node, pointer) {\n if (isElement(node)) {\n switch (node.tagName) {\n case \"GroundOverlay\": {\n const placemark = getGroundOverlay(node, styleMap);\n if (placemark) {\n pointer.children.push(placemark);\n }\n break;\n }\n case \"Placemark\": {\n const placemark = getPlacemark(node, styleMap);\n if (placemark) {\n pointer.children.push(placemark);\n }\n break;\n }\n case \"Folder\": {\n const folder = getFolder(node);\n pointer.children.push(folder);\n pointer = folder;\n break;\n }\n }\n }\n if (node.childNodes) {\n for (let i = 0; i < node.childNodes.length; i++) {\n traverse(node.childNodes[i], pointer);\n }\n }\n }\n traverse(node, tree);\n return tree;\n}\n/**\n * Convert KML to GeoJSON incrementally, returning\n * a [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)\n * that yields output feature by feature.\n */\nfunction* kmlGen(node) {\n const styleMap = buildStyleMap(node);\n for (const placemark of $(node, \"Placemark\")) {\n const feature = getPlacemark(placemark, styleMap);\n if (feature)\n yield feature;\n }\n for (const groundOverlay of $(node, \"GroundOverlay\")) {\n const feature = getGroundOverlay(groundOverlay, styleMap);\n if (feature)\n yield feature;\n }\n}\n/**\n * Convert a KML document to GeoJSON. The first argument, `doc`, must be a KML\n * document as an XML DOM - not as a string. You can get this using jQuery's default\n * `.ajax` function or using a bare XMLHttpRequest with the `.response` property\n * holding an XML DOM.\n *\n * The output is a JavaScript object of GeoJSON data. You can convert it to a string\n * with [JSON.stringify](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)\n * or use it directly in libraries.\n */\nfunction kml(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(kmlGen(node)),\n };\n}\n\nexport { gpx, gpxGen, kml, kmlGen, kmlWithFolders, tcx, tcxGen };\n//# sourceMappingURL=togeojson.es.mjs.map\n","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>} 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","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nimport { LIcon, LMarker } from '@vue-leaflet/vue-leaflet'\n import { toRefs } from 'vue'\n\n import { TCoordinates } from '@/types/workouts'\n\n interface Props {\n markerCoordinates: TCoordinates\n isStart: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CustomMarker',\n props: {\n markerCoordinates: null,\n isStart: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n markerCoordinates: TCoordinates\n isStart: boolean\n }\n\n \n\n const { isStart, markerCoordinates } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(markerCoordinates).latitude)\n ? (_openBlock(), _createBlock(_unref(LMarker), {\n key: 0,\n \"lat-lng\": [_unref(markerCoordinates).latitude, _unref(markerCoordinates).longitude]\n }, {\n default: _withCtx(() => [\n _createVNode(_unref(LIcon), {\n \"icon-url\": `/img/workouts/${_unref(isStart) ? 'start' : 'finish'}.svg`,\n iconSize: [15, 15]\n }, null, 8, [\"icon-url\"])\n ]),\n _: 1\n }, 8, [\"lat-lng\"]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./CustomMarker.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./CustomMarker.vue?vue&type=script&lang=ts&setup=true\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, normalizeClass as _normalizeClass, createBlock as _createBlock, resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6b490f5d\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-map\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"leaflet-container\"\n}\nconst _hoisted_3 = { key: 1 }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-refresh\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_5 = {\n key: 1,\n class: \"no-map\"\n}\n\nimport { gpx } from '@tmcw/togeojson'\n import {\n LControl,\n LControlLayers,\n LGeoJson,\n LLayerGroup,\n LMap,\n LMarker,\n LTileLayer,\n } from '@vue-leaflet/vue-leaflet'\n import { ComputedRef, computed, ref, toRefs, withDefaults } from 'vue'\n import 'leaflet/dist/leaflet.css'\n\n import CustomMarker from '@/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue'\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 interface Props {\n workoutData: IWorkoutData\n markerCoordinates?: TCoordinates\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n workoutData: null,\n markerCoordinates: { default: () => ({} as TCoordinates) }\n },\n setup(__props: any) {\n\nconst props = __props as { workoutData: IWorkoutData, markerCoordinates: TCoordinates }\n\n \n\n const store = useStore()\n\n const { workoutData, markerCoordinates } = toRefs(props)\n const workoutMap = ref null }\n }>(null)\n const bounds = computed(() => getBounds())\n const appConfig: ComputedRef = 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 const startMarkerCoordinates = computed(() =>\n props.workoutData && props.workoutData.chartData.length > 0\n ? {\n latitude: props.workoutData.chartData[0].latitude,\n longitude: props.workoutData.chartData[0].longitude,\n }\n : {}\n )\n const endMarkerCoordinates = computed(() =>\n props.workoutData && props.workoutData.chartData.length > 0\n ? {\n latitude:\n props.workoutData.chartData[props.workoutData.chartData.length - 1]\n .latitude,\n longitude:\n props.workoutData.chartData[props.workoutData.chartData.length - 1]\n .longitude,\n }\n : {}\n )\n const isFullscreen = ref(false)\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[] {\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 function getBounds() {\n return 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 function resetZoom() {\n workoutMap.value?.leafletObject.fitBounds(getBounds())\n }\n function toggleFullscreen() {\n isFullscreen.value = !isFullscreen.value\n if (!isFullscreen.value) {\n setTimeout(() => {\n resetZoom()\n }, 100)\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_VFullscreen = _resolveComponent(\"VFullscreen\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(workoutData).loading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_unref(workoutData).workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_VFullscreen, {\n key: 0,\n modelValue: isFullscreen.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((isFullscreen).value = $event))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"leaflet-container\", { 'fullscreen-map': isFullscreen.value }])\n }, [\n (_unref(geoJson).jsonData && _unref(center) && _unref(bounds).length === 2)\n ? (_openBlock(), _createBlock(_unref(LMap), {\n key: 0,\n zoom: 13,\n maxZoom: 19,\n center: _unref(center),\n bounds: _unref(bounds),\n ref_key: \"workoutMap\",\n ref: workoutMap,\n onReady: _cache[0] || (_cache[0] = ($event: any) => (fitBounds(_unref(bounds))))\n }, {\n default: _withCtx(() => [\n _createVNode(_unref(LControlLayers)),\n _createVNode(_unref(LControl), {\n position: \"topleft\",\n class: \"map-control\",\n onClick: resetZoom\n }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }),\n _createVNode(_unref(LControl), {\n position: \"topleft\",\n class: \"map-control\",\n onClick: toggleFullscreen\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa-${isFullscreen.value ? 'compress' : 'arrows-alt'}`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _: 1\n }),\n _createVNode(_unref(LTileLayer), {\n url: `${_unref(getApiUrl)()}workouts/map_tile/{s}/{z}/{x}/{y}.png`,\n attribution: _unref(appConfig).map_attribution,\n bounds: _unref(bounds)\n }, null, 8, [\"url\", \"attribution\", \"bounds\"]),\n _createVNode(_unref(LGeoJson), {\n geojson: _unref(geoJson).jsonData\n }, null, 8, [\"geojson\"]),\n (_unref(markerCoordinates).latitude)\n ? (_openBlock(), _createBlock(_unref(LMarker), {\n key: 0,\n \"lat-lng\": [\n _unref(markerCoordinates).latitude,\n _unref(markerCoordinates).longitude,\n ]\n }, null, 8, [\"lat-lng\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_unref(LLayerGroup), {\n name: _ctx.$t('workouts.START_AND_FINISH'),\n \"layer-type\": \"overlay\"\n }, {\n default: _withCtx(() => [\n (_unref(startMarkerCoordinates).latitude)\n ? (_openBlock(), _createBlock(CustomMarker, {\n key: 0,\n markerCoordinates: _unref(startMarkerCoordinates),\n isStart: true\n }, null, 8, [\"markerCoordinates\"]))\n : _createCommentVNode(\"\", true),\n (_unref(endMarkerCoordinates).latitude)\n ? (_openBlock(), _createBlock(CustomMarker, {\n key: 1,\n markerCoordinates: _unref(endMarkerCoordinates),\n isStart: false\n }, null, 8, [\"markerCoordinates\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"name\"])\n ]),\n _: 1\n }, 8, [\"center\", \"bounds\"]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ]),\n _: 1\n }, 8, [\"modelValue\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('workouts.NO_MAP')), 1))\n ]))\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=6b490f5d&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6b490f5d\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, withCtx as _withCtx, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9fc0bab8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workout-detail\" }\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n watch,\n withDefaults,\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/index.vue'\n import { WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } 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 interface Props {\n authUser: IAuthUserProfile\n displaySegment: boolean\n sports: ISport[]\n workoutData: IWorkoutData\n markerCoordinates?: TCoordinates\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n authUser: null,\n displaySegment: { type: Boolean },\n sports: null,\n workoutData: null,\n markerCoordinates: { default: () => ({} as TCoordinates) }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, displaySegment: boolean, sports: ISport[], workoutData: IWorkoutData, markerCoordinates: TCoordinates }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { authUser, markerCoordinates, workoutData } = toRefs(props)\n const workout: ComputedRef = computed(\n () => props.workoutData.workout\n )\n const segmentId: Ref = ref(\n route.params.workoutId ? +route.params.segmentId : null\n )\n const segment: ComputedRef = computed(() =>\n workout.value.segments.length > 0 && segmentId.value\n ? workout.value.segments[+segmentId.value - 1]\n : null\n )\n const displayModal: Ref = ref(false)\n const sport = computed(() =>\n props.sports\n ? props.sports.find(\n (sport) => sport.id === props.workoutData.workout.sport_id\n )\n : {}\n )\n const workoutObject = computed(() =>\n getWorkoutObject(workout.value, segment.value)\n )\n\n function getWorkoutObjectUrl(\n workout: IWorkout,\n displaySegment: boolean,\n segmentId: number | null\n ): Record {\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 props.authUser.date_format\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 weatherStart: segment ? null : workout.weather_start,\n with_gpx: workout.with_gpx,\n workoutId: workout.id,\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 watch(\n () => route.params.segmentId,\n async (newSegmentId) => {\n if (newSegmentId) {\n segmentId.value = +newSegmentId\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t('workouts.WORKOUT_DELETION_CONFIRMATION'),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (deleteWorkout(_unref(workoutObject).workoutId))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createVNode(WorkoutCardTitle, {\n sport: _unref(sport),\n workoutObject: _unref(workoutObject),\n onDisplayModal: _cache[2] || (_cache[2] = ($event: any) => (updateDisplayModal(true)))\n }, null, 8, [\"sport\", \"workoutObject\"])\n ]),\n content: _withCtx(() => [\n _createVNode(WorkoutMap, {\n workoutData: _unref(workoutData),\n markerCoordinates: _unref(markerCoordinates)\n }, null, 8, [\"workoutData\", \"markerCoordinates\"]),\n _createVNode(WorkoutData, {\n workoutObject: _unref(workoutObject),\n useImperialUnits: _unref(authUser).imperial_units,\n displayHARecord: _unref(authUser).display_ascent\n }, null, 8, [\"workoutObject\", \"useImperialUnits\", \"displayHARecord\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=9fc0bab8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9fc0bab8\"]])\n\nexport default __exports__","import { Chart, LegendItem } from 'chart.js'\n\nconst getOrCreateLegendList = (id: string): HTMLUListElement => {\n const legendContainer = document.getElementById(id)\n if (legendContainer) {\n let listContainer = legendContainer.querySelector('ul')\n if (!listContainer) {\n listContainer = document.createElement('ul')\n legendContainer.appendChild(listContainer)\n }\n return listContainer\n }\n throw new Error('No legend container')\n}\n\nexport const htmlLegendPlugin = {\n id: 'htmlLegend',\n afterUpdate(\n chart: Chart,\n args: Record,\n options: Record\n ): void {\n const ul = getOrCreateLegendList(options.containerID)\n while (ul.firstChild) {\n ul.firstChild.remove()\n }\n\n const legendItems = chart.options.plugins?.legend?.labels?.generateLabels\n ? chart.options.plugins?.legend?.labels?.generateLabels(chart)\n : []\n\n legendItems.forEach((item: LegendItem) => {\n const li = document.createElement('li')\n li.onclick = () => {\n if (item.datasetIndex !== undefined) {\n chart.setDatasetVisibility(\n item.datasetIndex,\n !chart.isDatasetVisible(item.datasetIndex)\n )\n chart.update()\n }\n }\n\n const checkBox = document.createElement('input')\n if (checkBox) {\n checkBox.type = 'checkbox'\n checkBox.id = item.text\n checkBox.checked = !item.hidden\n }\n\n const text = document.createTextNode(item.text)\n\n const boxSpan = document.createElement('span')\n if (boxSpan) {\n boxSpan.style.background = String(item.fillStyle)\n boxSpan.style.borderColor = String(item.strokeStyle)\n }\n\n li.appendChild(checkBox)\n li.appendChild(text)\n li.appendChild(boxSpan)\n ul.appendChild(li)\n })\n },\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, unref as _unref, mergeProps as _mergeProps, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-dcea1168\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-chart\" }\nconst _hoisted_2 = { class: \"chart-radio\" }\nconst _hoisted_3 = [\"checked\"]\nconst _hoisted_4 = [\"checked\"]\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"chart-legend\" }, null, -1))\nconst _hoisted_6 = { class: \"chart-info\" }\nconst _hoisted_7 = { class: \"no-data-cleaning\" }\nconst _hoisted_8 = { class: \"elevation-start\" }\nconst _hoisted_9 = [\"checked\"]\n\nimport { ChartData, ChartOptions } from 'chart.js'\n import { ComputedRef, computed, ref } from 'vue'\n import { LineChart, useLineChart } from 'vue-chart-3'\n import { useI18n } from 'vue-i18n'\n\n import { htmlLegendPlugin } from '@/components/Workout/WorkoutDetail/WorkoutChart/legend'\n import { TUnit } from '@/types/units'\n import { IAuthUserProfile } from '@/types/user'\n import {\n IWorkoutChartData,\n IWorkoutData,\n TCoordinates,\n } from '@/types/workouts'\n import { units } from '@/utils/units'\n import { getDatasets } from '@/utils/workouts'\n\n interface Props {\n authUser: IAuthUserProfile\n workoutData: IWorkoutData\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n authUser: null,\n workoutData: null\n },\n emits: ['getCoordinates'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n workoutData: IWorkoutData\n }\n\n \n\n \n\n const { t } = useI18n()\n\n const displayDistance = ref(true)\n const beginElevationAtZero = ref(true)\n const datasets: ComputedRef = computed(() =>\n getDatasets(props.workoutData.chartData, t, props.authUser.imperial_units)\n )\n const fromKmUnit = getUnitTo('km')\n const fromMUnit = getUnitTo('m')\n const chartData: ComputedRef> = 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 = computed(\n () => datasets.value.coordinates\n )\n const options = computed>(() => ({\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') + ` (${fromKmUnit})`\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') + ` (${fromKmUnit}/h)`,\n },\n },\n yElevation: {\n beginAtZero: beginElevationAtZero.value,\n grid: {\n drawOnChartArea: false,\n },\n position: 'right',\n title: {\n display: true,\n text: t('workouts.ELEVATION') + ` (${fromMUnit})`,\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 + ` ${fromMUnit}`\n : label + ` ${fromKmUnit}/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')}: ${\n tooltipItems[0].label\n } ${fromKmUnit}`\n : `${t('workouts.DURATION')}: ${formatDuration(\n tooltipItems[0].label.replace(',', '')\n )}`\n },\n },\n },\n legend: {\n display: false,\n },\n htmlLegend: {\n containerID: 'chart-legend',\n },\n },\n }))\n const { lineChartProps } = useLineChart({\n chartData,\n options,\n plugins: [htmlLegendPlugin],\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 function getUnitTo(unitFrom: TUnit): TUnit {\n return props.authUser.imperial_units\n ? units[unitFrom].defaultTarget\n : unitFrom\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.ANALYSIS')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"distance\",\n checked: displayDistance.value,\n onClick: updateDisplayDistance\n }, null, 8, _hoisted_3),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"duration\",\n checked: !displayDistance.value,\n onClick: updateDisplayDistance\n }, null, 8, _hoisted_4),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DURATION')), 1)\n ])\n ]),\n _hoisted_5,\n _createVNode(_unref(LineChart), _mergeProps(_unref(lineChartProps), {\n class: \"line-chart\",\n onMouseleave: emitEmptyCoordinates\n }), null, 16),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.NO_DATA_CLEANING')), 1),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n checked: beginElevationAtZero.value,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (beginElevationAtZero.value = !beginElevationAtZero.value))\n }, null, 8, _hoisted_9),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.START_ELEVATION_AT_ZERO')), 1)\n ])\n ])\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=dcea1168&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-dcea1168\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-028ad527\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-note\" }\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n notes?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutNotes',\n props: {\n notes: { default: () => null }\n },\n setup(__props: any) {\n\nconst props = __props as { notes: string | null }\n\n \n\n const { notes } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.NOTES')), 1)\n ]),\n content: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(notes) && _unref(notes) !== '' ? _unref(notes) : _ctx.$t('workouts.NO_NOTES')), 1)\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./WorkoutNotes.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutNotes.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutNotes.vue?vue&type=style&index=0&id=028ad527&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-028ad527\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6b8a27cd\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-segments\" }\n\nimport { toRefs } from 'vue'\n\n import { IWorkoutSegment } from '@/types/workouts'\n\n interface Props {\n segments: IWorkoutSegment[]\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutSegments',\n props: {\n segments: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n segments: IWorkoutSegment[]\n useImperialUnits: boolean\n }\n\n \n\n const { segments, useImperialUnits } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.SEGMENT', 2)), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"ul\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(segments), (segment, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: segment.segment_id\n }, [\n _createVNode(_component_router_link, {\n to: {\n name: 'WorkoutSegment',\n params: {\n workoutId: segment.workout_id,\n segmentId: index + 1,\n },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.SEGMENT', 1)) + \" \" + _toDisplayString(index + 1), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n _createTextVNode(\" (\" + _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \": \", 1),\n _createVNode(_component_Distance, {\n distance: segment.distance,\n unitFrom: \"km\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createTextVNode(\", \" + _toDisplayString(_ctx.$t('workouts.DURATION')) + \": \" + _toDisplayString(segment.duration) + \") \", 1)\n ]))\n }), 128))\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./WorkoutSegments.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutSegments.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutSegments.vue?vue&type=style&index=0&id=6b8a27cd&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6b8a27cd\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-53c4e53a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workout-container\"\n}\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\nconst _hoisted_6 = { key: 1 }\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\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 WorkoutDetail from '@/components/Workout/WorkoutDetail/index.vue'\n import WorkoutChart from '@/components/Workout/WorkoutDetail/WorkoutChart/index.vue'\n import WorkoutNotes from '@/components/Workout/WorkoutDetail/WorkoutNotes.vue'\n import WorkoutSegments from '@/components/Workout/WorkoutDetail/WorkoutSegments.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData, IWorkoutPayload, TCoordinates } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n displaySegment: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Workout',\n props: {\n displaySegment: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n displaySegment: boolean\n }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { displaySegment } = toRefs(props)\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const markerCoordinates: Ref = ref({\n latitude: null,\n longitude: null,\n })\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 onUnmounted(() => {\n store.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\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\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_unref(workoutData).workout.id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(WorkoutDetail, {\n workoutData: _unref(workoutData),\n sports: _unref(sports),\n authUser: _unref(authUser),\n markerCoordinates: markerCoordinates.value,\n displaySegment: _unref(displaySegment)\n }, null, 8, [\"workoutData\", \"sports\", \"authUser\", \"markerCoordinates\", \"displaySegment\"]),\n (\n _unref(workoutData).workout.with_gpx && _unref(workoutData).chartData.length > 0\n )\n ? (_openBlock(), _createBlock(WorkoutChart, {\n key: 0,\n workoutData: _unref(workoutData),\n authUser: _unref(authUser),\n displaySegment: _unref(displaySegment),\n onGetCoordinates: updateCoordinates\n }, null, 8, [\"workoutData\", \"authUser\", \"displaySegment\"]))\n : _createCommentVNode(\"\", true),\n (!_unref(displaySegment) && _unref(workoutData).workout.segments.length > 1)\n ? (_openBlock(), _createBlock(WorkoutSegments, {\n key: 1,\n segments: _unref(workoutData).workout.segments,\n useImperialUnits: _unref(authUser).imperial_units\n }, null, 8, [\"segments\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n (!_unref(displaySegment))\n ? (_openBlock(), _createBlock(WorkoutNotes, {\n key: 2,\n notes: _unref(workoutData).workout.notes\n }, null, 8, [\"notes\"]))\n : _createCommentVNode(\"\", true),\n _hoisted_5\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n (!_unref(workoutData).loading)\n ? (_openBlock(), _createBlock(NotFound, {\n key: 0,\n target: \"WORKOUT\"\n }))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./Workout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Workout.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Workout.vue?vue&type=style&index=0&id=53c4e53a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-53c4e53a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6c38593a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workouts-filters\" }\nconst _hoisted_2 = { class: \"box\" }\nconst _hoisted_3 = { class: \"form\" }\nconst _hoisted_4 = { class: \"form-items-group\" }\nconst _hoisted_5 = { class: \"form-item\" }\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = { class: \"form-item\" }\nconst _hoisted_8 = [\"value\"]\nconst _hoisted_9 = { class: \"form-items-group\" }\nconst _hoisted_10 = { class: \"form-item\" }\nconst _hoisted_11 = [\"value\"]\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"option\", { value: \"\" }, null, -1))\nconst _hoisted_13 = [\"value\"]\nconst _hoisted_14 = { class: \"form-items-group\" }\nconst _hoisted_15 = { class: \"form-item\" }\nconst _hoisted_16 = { class: \"form-inputs-group\" }\nconst _hoisted_17 = [\"value\"]\nconst _hoisted_18 = [\"value\"]\nconst _hoisted_19 = { class: \"form-items-group\" }\nconst _hoisted_20 = { class: \"form-item\" }\nconst _hoisted_21 = { class: \"form-inputs-group\" }\nconst _hoisted_22 = [\"value\"]\nconst _hoisted_23 = [\"value\"]\nconst _hoisted_24 = { class: \"form-items-group\" }\nconst _hoisted_25 = { class: \"form-item\" }\nconst _hoisted_26 = { class: \"form-inputs-group\" }\nconst _hoisted_27 = [\"value\"]\nconst _hoisted_28 = [\"value\"]\nconst _hoisted_29 = { class: \"form-items-group\" }\nconst _hoisted_30 = { class: \"form-item\" }\nconst _hoisted_31 = { class: \"form-inputs-group\" }\nconst _hoisted_32 = [\"value\"]\nconst _hoisted_33 = [\"value\"]\nconst _hoisted_34 = { class: \"form-button\" }\n\nimport { ComputedRef, computed, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { translateSports } from '@/utils/sports'\n import { units } from '@/utils/units'\n\n interface Props {\n authUser: IAuthUserProfile\n sports: ISport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsFilters',\n props: {\n authUser: null,\n sports: null\n },\n emits: ['filter'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n sports: ISport[]\n }\n\n \n\n \n\n const { t } = useI18n()\n const route = useRoute()\n const router = useRouter()\n\n const { authUser } = toRefs(props)\n\n const toUnit = authUser.value.imperial_units\n ? units['km'].defaultTarget\n : 'km'\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.sports, t)\n )\n let params: LocationQuery = Object.assign({}, route.query)\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')\n if ('page' in params) {\n params['page'] = '1'\n }\n router.push({ path: '/workouts', query: params })\n }\n function onClearFilter() {\n emit('filter')\n router.push({ path: '/workouts', query: {} })\n }\n\n watch(\n () => route.query,\n (newQuery) => {\n params = Object.assign({}, newQuery)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.FROM')) + \": \", 1),\n _createElementVNode(\"input\", {\n name: \"from\",\n type: \"date\",\n value: _ctx.$route.query.from,\n onChange: handleFilterChange\n }, null, 40, _hoisted_6)\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.TO')) + \": \", 1),\n _createElementVNode(\"input\", {\n name: \"to\",\n type: \"date\",\n value: _ctx.$route.query.to,\n onChange: handleFilterChange\n }, null, 40, _hoisted_8)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.SPORT', 1)) + \":\", 1),\n _createElementVNode(\"select\", {\n name: \"sport_id\",\n value: _ctx.$route.query.sport_id,\n onChange: handleFilterChange\n }, [\n _hoisted_12,\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports).filter((s) =>\n _unref(authUser).sports_list.includes(s.id)\n ), (sport) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: sport.id,\n key: sport.id\n }, _toDisplayString(sport.translatedLabel), 9, _hoisted_13))\n }), 128))\n ], 40, _hoisted_11)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"): \", 1),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"input\", {\n name: \"distance_from\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: _ctx.$route.query.distance_from,\n onChange: handleFilterChange\n }, null, 40, _hoisted_17),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n name: \"distance_to\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: _ctx.$route.query.distance_to,\n onChange: handleFilterChange\n }, null, 40, _hoisted_18)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"div\", _hoisted_20, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DURATION')) + \": \", 1),\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"input\", {\n name: \"duration_from\",\n value: _ctx.$route.query.duration_from,\n onChange: handleFilterChange,\n pattern: \"^([0-9]*[0-9]):([0-5][0-9])$\",\n placeholder: \"hh:mm\",\n type: \"text\"\n }, null, 40, _hoisted_22),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n name: \"duration_to\",\n value: _ctx.$route.query.duration_to,\n onChange: handleFilterChange,\n pattern: \"^([0-9]*[0-9]):([0-5][0-9])$\",\n placeholder: \"hh:mm\",\n type: \"text\"\n }, null, 40, _hoisted_23)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_24, [\n _createElementVNode(\"div\", _hoisted_25, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.AVE_SPEED')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"/h): \", 1),\n _createElementVNode(\"div\", _hoisted_26, [\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"ave_speed_from\",\n value: _ctx.$route.query.ave_speed_from,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_27),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"ave_speed_to\",\n value: _ctx.$route.query.ave_speed_to,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_28)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_29, [\n _createElementVNode(\"div\", _hoisted_30, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"/h): \", 1),\n _createElementVNode(\"div\", _hoisted_31, [\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"max_speed_from\",\n value: _ctx.$route.query.max_speed_from,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_32),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"max_speed_to\",\n value: _ctx.$route.query.max_speed_to,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_33)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_34, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: onFilter\n }, _toDisplayString(_ctx.$t('buttons.FILTER')), 1),\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: onClearFilter\n }, _toDisplayString(_ctx.$t('buttons.CLEAR_FILTER')), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./WorkoutsFilters.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsFilters.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsFilters.vue?vue&type=style&index=0&id=6c38593a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6c38593a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createBlock as _createBlock, withCtx as _withCtx, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0f8ea7b0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workouts-list\" }\nconst _hoisted_2 = { class: \"total\" }\nconst _hoisted_3 = { class: \"total-label\" }\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = {\n key: 0,\n class: \"workouts-table responsive-table\"\n}\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", { class: \"sport-col\" }, null, -1))\nconst _hoisted_7 = { class: \"sport-col\" }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = [\"onMouseover\"]\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"fa fa-map-o\",\n \"aria-hidden\": \"true\"\n}\nconst _hoisted_12 = { class: \"title\" }\nconst _hoisted_13 = { class: \"workout-date\" }\nconst _hoisted_14 = { class: \"cell-heading\" }\nconst _hoisted_15 = { class: \"text-right\" }\nconst _hoisted_16 = { class: \"cell-heading\" }\nconst _hoisted_17 = { class: \"text-right\" }\nconst _hoisted_18 = { class: \"cell-heading\" }\nconst _hoisted_19 = { class: \"text-right\" }\nconst _hoisted_20 = { class: \"cell-heading\" }\nconst _hoisted_21 = { class: \"text-right\" }\nconst _hoisted_22 = { class: \"cell-heading\" }\nconst _hoisted_23 = { class: \"text-right\" }\nconst _hoisted_24 = { class: \"cell-heading\" }\nconst _hoisted_25 = { class: \"text-right\" }\nconst _hoisted_26 = { class: \"cell-heading\" }\nconst _hoisted_27 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n watch,\n capitalize,\n onBeforeMount,\n } from 'vue'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import FilterSelects from '@/components/Common/FilterSelects.vue'\n import Pagination from '@/components/Common/Pagination.vue'\n import StaticMap from '@/components/Common/StaticMap.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { ROOT_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { IPagination } from '@/types/api'\n import { ITranslatedSport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkout, TWorkoutsPayload } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { getQuery, sortList, workoutsPayloadKeys } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n import { getSportColor, getSportLabel } from '@/utils/sports'\n import { convertDistance } from '@/utils/units'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n user: IAuthUserProfile\n sports: ITranslatedSport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsList',\n props: {\n user: null,\n sports: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n sports: ITranslatedSport[]\n }\n\n \n\n const store = useStore()\n const route = useRoute()\n const router = useRouter()\n\n const { user, sports } = toRefs(props)\n const orderByList: string[] = [\n 'ave_speed',\n 'distance',\n 'duration',\n 'workout_date',\n ]\n const workouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.USER_WORKOUTS]\n )\n const pagination: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUTS_PAGINATION]\n )\n const currentLanguage: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n let query: TWorkoutsPayload = getWorkoutsQuery(route.query)\n const hoverWorkoutId: Ref = ref(null)\n\n onBeforeMount(() => {\n loadWorkouts(query)\n })\n\n function loadWorkouts(payload: TWorkoutsPayload) {\n store.dispatch(\n WORKOUTS_STORE.ACTIONS.GET_USER_WORKOUTS,\n user.value.imperial_units ? getConvertedPayload(payload) : payload\n )\n }\n function reloadWorkouts(queryParam: string, queryValue: string) {\n const newQuery: LocationQuery = Object.assign({}, route.query)\n newQuery[queryParam] = queryValue\n if (queryParam === 'per_page') {\n newQuery['page'] = '1'\n }\n query = getWorkoutsQuery(newQuery)\n router.push({ path: '/workouts', query })\n }\n\n function getWorkoutsQuery(newQuery: LocationQuery): TWorkoutsPayload {\n const workoutQuery = getQuery(\n newQuery,\n orderByList,\n defaultOrder.order_by,\n {\n defaultSort: defaultOrder.order,\n }\n )\n Object.keys(newQuery)\n .filter((k) => workoutsPayloadKeys.includes(k))\n .map((k) => {\n if (typeof newQuery[k] === 'string') {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n workoutQuery[k] = newQuery[k]\n }\n })\n return workoutQuery\n }\n\n function getConvertedPayload(payload: TWorkoutsPayload): TWorkoutsPayload {\n const convertedPayload: TWorkoutsPayload = {\n ...payload,\n }\n Object.entries(convertedPayload).map((entry) => {\n if (entry[0].match('speed|distance') && entry[1]) {\n convertedPayload[entry[0]] = convertDistance(+entry[1], 'mi', 'km')\n }\n })\n return convertedPayload\n }\n\n function onHover(workoutId: string | null) {\n hoverWorkoutId.value = workoutId\n }\n\n watch(\n () => route.query,\n async (newQuery) => {\n query = getWorkoutsQuery(newQuery)\n loadWorkouts(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"box\", { 'empty-table': _unref(workouts).length === 0 }])\n }, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('common.TOTAL').toLowerCase()) + \": \", 1),\n (_unref(pagination).total !== null)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, _toDisplayString(_unref(pagination).total) + \" \" + _toDisplayString(_ctx.$t('workouts.WORKOUT', _unref(pagination).total)), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(FilterSelects, {\n sort: _unref(sortList),\n order_by: orderByList,\n query: _unref(query),\n message: \"workouts\",\n onUpdateSelect: reloadWorkouts\n }, null, 8, [\"sort\", \"query\"]),\n (_unref(workouts).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createVNode(Pagination, {\n class: \"top-pagination\",\n pagination: _unref(pagination),\n path: \"/workouts\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]),\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", {\n class: _normalizeClass({ smaller: 'de' === _unref(currentLanguage) })\n }, [\n _createElementVNode(\"tr\", null, [\n _hoisted_6,\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 1))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DATE'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DISTANCE'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DURATION'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.AVE_SPEED'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.MAX_SPEED'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.ASCENT'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DESCENT'))), 1)\n ])\n ], 2),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: workout.id\n }, [\n _createElementVNode(\"td\", _hoisted_7, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('workouts.SPORT', 1)), 1),\n (_unref(sports).length > 0)\n ? (_openBlock(), _createBlock(_component_SportImage, {\n key: 0,\n title: \n _unref(sports).find((s) => s.id === workout.sport_id)\n .translatedLabel\n ,\n \"sport-label\": _unref(getSportLabel)(workout, _unref(sports)),\n color: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"title\", \"sport-label\", \"color\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"td\", {\n class: \"workout-title\",\n onMouseover: ($event: any) => (onHover(workout.id)),\n onMouseleave: _cache[0] || (_cache[0] = ($event: any) => (onHover(null)))\n }, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 1))), 1),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: { name: 'Workout', params: { workoutId: workout.id } }\n }, {\n default: _withCtx(() => [\n (workout.with_gpx)\n ? (_openBlock(), _createElementBlock(\"i\", _hoisted_11))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(workout.title), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n (workout.with_gpx && hoverWorkoutId.value === workout.id)\n ? (_openBlock(), _createBlock(StaticMap, {\n key: 0,\n workout: workout,\n \"display-hover\": true\n }, null, 8, [\"workout\"]))\n : _createCommentVNode(\"\", true)\n ], 40, _hoisted_9),\n _createElementVNode(\"td\", _hoisted_13, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('workouts.DATE')), 1),\n _createTextVNode(\" \" + _toDisplayString(_unref(formatDate)(\n workout.workout_date,\n _unref(user).timezone,\n _unref(user).date_format\n )), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_15, [\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1),\n _createVNode(_component_Distance, {\n distance: workout.distance,\n unitFrom: \"km\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_17, [\n _createElementVNode(\"span\", _hoisted_18, _toDisplayString(_ctx.$t('workouts.DURATION')), 1),\n _createTextVNode(\" \" + _toDisplayString(workout.moving), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_19, [\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('workouts.AVE_SPEED')), 1),\n _createVNode(_component_Distance, {\n distance: workout.ave_speed,\n unitFrom: \"km\",\n speed: true,\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_21, [\n _createElementVNode(\"span\", _hoisted_22, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')), 1),\n _createVNode(_component_Distance, {\n distance: workout.max_speed,\n unitFrom: \"km\",\n speed: true,\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_23, [\n _createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('workouts.ASCENT')), 1),\n (workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: workout.ascent,\n unitFrom: \"m\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"td\", _hoisted_25, [\n _createElementVNode(\"span\", _hoisted_26, _toDisplayString(_ctx.$t('workouts.DESCENT')), 1),\n (workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: workout.descent,\n unitFrom: \"m\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n }), 128))\n ])\n ]),\n _createVNode(Pagination, {\n pagination: _unref(pagination),\n path: \"/workouts\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"])\n ]))\n : _createCommentVNode(\"\", true)\n ], 2),\n (_unref(workouts).length === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true),\n _hoisted_27\n ]))\n}\n}\n\n})","import script from \"./WorkoutsList.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsList.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsList.vue?vue&type=style&index=0&id=0f8ea7b0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0f8ea7b0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-77e54012\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"workouts\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container workouts-container\" }\nconst _hoisted_3 = { class: \"display-filters\" }\nconst _hoisted_4 = { class: \"list-container\" }\n\nimport { ComputedRef, computed, 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 { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsView',\n setup(__props) {\n\n const { t } = useI18n()\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(sports.value, t)\n )\n const hiddenFilters = ref(true)\n\n function toggleFilters() {\n hiddenFilters.value = !hiddenFilters.value\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"filters-container\", { hidden: hiddenFilters.value }])\n }, [\n _createVNode(WorkoutsFilters, {\n sports: _unref(translatedSports),\n authUser: _unref(authUser),\n onFilter: toggleFilters\n }, null, 8, [\"sports\", \"authUser\"])\n ], 2),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", { onClick: toggleFilters }, [\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa-caret-${hiddenFilters.value ? 'down' : 'up'}`),\n \"aria-hidden\": \"true\"\n }, null, 2),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`workouts.${hiddenFilters.value ? 'DISPLAY' : 'HIDE'}_FILTERS`)), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(WorkoutsList, {\n user: _unref(authUser),\n sports: _unref(translatedSports)\n }, null, 8, [\"user\", \"sports\"])\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutsView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsView.vue?vue&type=style&index=0&id=77e54012&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-77e54012\"]])\n\nexport default __exports__"],"names":["_hoisted_1","id","_hoisted_2","_hoisted_3","class","_hoisted_4","key","_hoisted_5","_hoisted_6","for","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_defineComponent","__name","props","authUser","sports","isCreation","type","Boolean","default","loading","workout","setup","__props","t","useI18n","store","useStore","router","useRouter","toRefs","translatedSports","computed","translateSports","value","sport_id","appConfig","getters","ROOT_STORE","fileSizeLimit","max_single_file_size","getReadableFileSize","gpx_limit_import","zipSizeLimit","max_zip_file_size","errorMessages","workoutForm","reactive","title","notes","workoutDate","workoutTime","workoutDurationHour","workoutDurationMinutes","workoutDurationSeconds","workoutDistance","withGpx","ref","with_gpx","gpxFile","formErrors","updateNotes","updateWithGpx","updateFile","event","target","files","formatWorkoutForm","workoutDateTime","formatWorkoutDate","getDateWithTZ","workout_date","timezone","duration","split","imperial_units","convertDistance","distance","parseFloat","toFixed","workout_time","formatPayload","payload","updateWorkout","dispatch","WORKOUTS_STORE","workoutId","data","errorMessage","commit","file","onCancel","push","name","params","go","invalidateForm","onMounted","onUnmounted","watch","async","newWorkout","previousWorkout","_ctx","_cache","_component_CustomTextArea","_resolveComponent","_component_ErrorMessage","_component_Loader","_component_Card","_openBlock","_createElementBlock","_normalizeClass","_unref","_createVNode","_withCtx","_createTextVNode","_toDisplayString","$t","content","_createElementVNode","errors","onSubmit","_withModifiers","checked","disabled","onClick","_createCommentVNode","_withDirectives","required","onInvalid","$event","_Fragment","_renderList","sport","translatedLabel","_vModelSelect","accept","onInput","_vModelText","placeholder","minlength","maxlength","pattern","min","step","input","onUpdateValue","_createBlock","message","_","__exports__","SPORTS_STORE","AUTH_USER_STORE","workoutData","WorkoutEdition","route","useRoute","onBeforeMount","newWorkoutId","_withScopeId","n","_pushScopeId","_popScopeId","workoutObject","emits","emit","downloadGpx","authApi","responseType","then","response","gpxFileUrl","window","URL","createObjectURL","Blob","gpxLink","document","createElement","href","setAttribute","body","appendChild","click","_component_SportImage","_component_router_link","inactive","previousUrl","$router","label","color","segmentId","to","nextUrl","recordType","records","find","record","record_type","directions","convertDegreeToDirection","angle","Math","floor","weather","useImperialUnits","getWindDirectionTitle","windBearing","_component_Distance","wind","unitFrom","digits","displayUnit","style","_normalizeStyle","transform","weatherStart","weatherEnd","src","icon","alt","Number","temperature","humidity","WeatherWind","displayHARecord","withPause","pauses","moving","WorkoutRecord","strong","aveSpeed","speed","maxSpeed","maxAlt","minAlt","ascent","descent","WorkoutWeather","$","element","tagName","Array","from","getElementsByTagName","nodeVal","node","normalize","textContent","get1","callback","result","length","get","properties","val1","val","$num","isNaN","num1","getMulti","propertyNames","property","isElement","nodeType","getLineStyle","lineStyle","Object","assign","stroke","opacity","width","getExtensions","values","child","childNodes","abbreviateName","nodeName","concat","parseNumeric","includes","num","coordPair$1","ll","getAttribute","time","coordinates","extendedValues","extractProperties","extensions","getElementsByTagNameNS","parentNode","replace","links","map","link","getPoints$1","pointname","pts","line","times","i","c","plural","fill","getRoute","_gpxType","geometry","getTrack","segments","track","extractedLines","segment","multi","coordinateProperties","entries","getPoint","pair","gpxGen","feature","waypoint","point","gpx","features","PI","debounce","fn","timeout","args","context","this","clearTimeout","setTimeout","apply","capitalizeFirstLetter","string","charAt","toUpperCase","slice","propsBinder","methods","leafletElement","setMethodName","newVal","oldVal","remapEvents","contextAttrs","attrName","startsWith","eventName","toLocaleLowerCase","resetWebpackIcon","Icon","modules","Promise","all","Default","prototype","_getIconUrl","mergeOptions","iconRetinaUrl","iconUrl","shadowUrl","provideLeafletWrapper","methodName","wrapped","console","warn","wrapper","updateLeafletWrapper","leafletMethod","WINDOW_OR_GLOBAL","self","g","global","undefined","GLOBAL_LEAFLET_OPT","options","props$1","pane","String","attribution","custom","layerType","visible","setup$1","leafletRef","addLayer","removeLayer","componentOptions","componentMethods","addThisLayer","leafletObject","removeThisLayer","setAttribution","old","attributionControl","$parent","removeAttribution","addAttribution","setName","setLayerType","setVisible","isVisible","bindPopup","bindTooltip","unbindTooltip","tooltip","getTooltip","unbindPopup","popup","getPopup","updateVisibleProp","render","ready","slots","h","display","props$2","interactive","bubblingMouseEvents","props$3","weight","lineCap","lineJoin","dashArray","dashOffset","fillColor","fillOpacity","fillRule","className","props$4","latLng","radius","props$6","position","setup$6","setPosition","remove","render$1","script$2","disableClickPropagation","disableScrollPropagation","root","useGlobalLeaflet","registerControl","Control","DomEvent","L","LControl","extend","onAdd","$slots","props$8","collapsed","autoZIndex","hideSingleBase","sortLayers","sortFunction","Function","setup$8","controlOptions","layer","addBaseLayer","addOverlay","script$4","registerLayerControl","control","layers","props$b","setup$b","layerOptions","layerMethods","props$d","geojson","setup$d","layerGroupMethods","setGeojson","clearLayers","addData","getGeoJSONData","toGeoJSON","getBounds","script$8","geoJSON","listeners","attrs","on","props$e","zIndex","tileSize","noWrap","minZoom","maxZoom","setup$e","props$f","iconSize","iconAnchor","popupAnchor","tooltipAnchor","shadowRetinaUrl","shadowSize","shadowAnchor","bgPos","script$a","canSetParentHtml","setParentHtml","setIcon","onDomEvent","offDomEvent","divIcon","iconObject","createIcon","el","recreationNeeded","htmlSwapNeeded","elHtml","innerHTML","html","scheduleCreateIcon","scheduleHtmlSwap","setIconUrl","setIconRetinaUrl","setIconSize","setIconAnchor","setPopupAnchor","setTooltipAnchor","setShadowUrl","setShadowRetinaUrl","setShadowAnchor","setBgPos","setClassName","setHtml","lDivIcon","lIcon","off","observer","MutationObserver","observe","attributes","childList","characterData","subtree","script$c","layerGroup","script$d","center","bounds","maxBounds","zoom","paddingBottomRight","paddingTopLeft","padding","worldCopyJump","crs","maxBoundsViscosity","inertia","inertiaDeceleration","inertiaMaxSpeed","easeLinearity","zoomAnimation","zoomAnimationThreshold","fadeAnimation","markerZoomAnimation","noBlockingAnimations","blueprint","layersToAdd","layersInControl","eventHandlers","moveEndHandler","getZoom","getCenter","overlayAddHandler","e","l","overlayRemoveHandler","CRS","latLngBounds","beforeMapMount","error","optionsCrs","EPSG3857","layerControl","exist","_leaflet_id","filter","lControlLayer","forEach","lControl","addControl","setZoom","animate","setPaddingBottomRight","setPaddingTopLeft","setPadding","setCrs","prevBounds","fitBounds","setBounds","newBounds","isValid","oldBounds","lastSetBounds","boundsChanged","equals","fitBoundsOptions","setCenter","newCenter","oldCenter","lastSetCenter","lat","lng","panTo","height","props$h","draggable","zIndexOffset","setup$g","setDraggable","dragging","enable","disable","latLngSync","latlng","setLatLng","oldLatLng","getLatLng","script$e","getElement","newIcon","marker","props$i","latLngs","smoothFactor","noClip","props$j","props$k","props$n","tms","subdomains","detectRetina","url","setup$m","gridLayerOptions","gridLayerMethods","script$j","tileLayer","markerCoordinates","isStart","latitude","LMarker","longitude","LIcon","workoutMap","geoJson","getGeoJson","startMarkerCoordinates","chartData","endMarkerCoordinates","isFullscreen","gpxContent","jsonData","DOMParser","parseFromString","resetZoom","toggleFullscreen","_component_VFullscreen","modelValue","LMap","ref_key","onReady","LControlLayers","LTileLayer","getApiUrl","map_attribution","LGeoJson","LLayerGroup","CustomMarker","displaySegment","displayModal","getWorkoutObject","getWorkoutObjectUrl","previous_workout","next_workout","urls","date_format","ave_speed","max_alt","max_speed","min_alt","segment_id","weather_end","weather_start","updateDisplayModal","deleteWorkout","newSegmentId","_component_Modal","onConfirmAction","onCancelAction","WorkoutCardTitle","onDisplayModal","WorkoutMap","WorkoutData","display_ascent","getOrCreateLegendList","legendContainer","getElementById","listContainer","querySelector","Error","htmlLegendPlugin","afterUpdate","chart","ul","containerID","firstChild","legendItems","plugins","legend","labels","generateLabels","item","li","onclick","datasetIndex","setDatasetVisibility","isDatasetVisible","update","checkBox","text","hidden","createTextNode","boxSpan","background","fillStyle","borderColor","strokeStyle","displayDistance","beginElevationAtZero","datasets","getDatasets","fromKmUnit","getUnitTo","fromMUnit","distance_labels","duration_labels","JSON","parse","stringify","elevation","responsive","maintainAspectRatio","animation","layout","top","scales","grid","drawOnChartArea","ticks","count","formatDuration","ySpeed","yElevation","beginAtZero","elements","pointStyle","pointRadius","datalabels","interaction","intersect","mode","callbacks","dataset","formattedValue","yAxisID","tooltipItems","emitCoordinates","dataIndex","htmlLegend","lineChartProps","useLineChart","updateDisplayDistance","Date","toISOString","substr","emitEmptyCoordinates","units","defaultTarget","LineChart","_mergeProps","onMouseleave","index","workout_id","updateCoordinates","WorkoutDetail","WorkoutChart","onGetCoordinates","WorkoutSegments","WorkoutNotes","NotFound","toUnit","query","handleFilterChange","onFilter","path","onClearFilter","newQuery","$route","onChange","s","sports_list","distance_from","distance_to","duration_from","duration_to","ave_speed_from","ave_speed_to","max_speed_from","max_speed_to","user","orderByList","workouts","pagination","currentLanguage","getWorkoutsQuery","hoverWorkoutId","loadWorkouts","getConvertedPayload","reloadWorkouts","queryParam","queryValue","workoutQuery","getQuery","defaultOrder","defaultSort","keys","k","workoutsPayloadKeys","convertedPayload","entry","match","onHover","toLowerCase","total","FilterSelects","sort","sortList","order_by","onUpdateSelect","Pagination","smaller","capitalize","getSportLabel","getSportColor","onMouseover","StaticMap","formatDate","NoWorkouts","hiddenFilters","toggleFilters","username","WorkoutsFilters","WorkoutsList"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/workouts.a514f12a.js","mappings":"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","sources":["webpack://fittrackee_client/./src/components/Workout/WorkoutEdition.vue?1df7","webpack://fittrackee_client/./src/components/Workout/WorkoutEdition.vue","webpack://fittrackee_client/./src/views/workouts/AddWorkout.vue?212d","webpack://fittrackee_client/./src/views/workouts/AddWorkout.vue","webpack://fittrackee_client/./src/views/workouts/EditWorkout.vue?ba9e","webpack://fittrackee_client/./src/views/workouts/EditWorkout.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutCardTitle.vue?4e0b","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutCardTitle.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutRecord.vue?0a89","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutRecord.vue","webpack://fittrackee_client/./src/utils/weather.ts","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WeatherWind.vue?bd35","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WeatherWind.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutWeather.vue?84e1","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutWeather.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutData.vue?ef29","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutData.vue","webpack://fittrackee_client/./node_modules/@tmcw/togeojson/dist/togeojson.es.mjs","webpack://fittrackee_client/./node_modules/@vue-leaflet/vue-leaflet/dist/vue-leaflet.esm.js","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue?3193","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/index.vue?a62d","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/index.vue?8ebb","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/legend.ts","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/index.vue?65aa","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutNotes.vue?a827","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutNotes.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutSegments.vue?037e","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutSegments.vue","webpack://fittrackee_client/./src/views/workouts/Workout.vue?3305","webpack://fittrackee_client/./src/views/workouts/Workout.vue","webpack://fittrackee_client/./src/components/Workouts/WorkoutsFilters.vue?c3bc","webpack://fittrackee_client/./src/components/Workouts/WorkoutsFilters.vue","webpack://fittrackee_client/./src/components/Workouts/WorkoutsList.vue?72e6","webpack://fittrackee_client/./src/components/Workouts/WorkoutsList.vue","webpack://fittrackee_client/./src/views/workouts/WorkoutsView.vue?ee31","webpack://fittrackee_client/./src/views/workouts/WorkoutsView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, vModelSelect as _vModelSelect, withDirectives as _withDirectives, vModelText as _vModelText, resolveComponent as _resolveComponent, createVNode as _createVNode, createBlock as _createBlock, withModifiers as _withModifiers, normalizeClass as _normalizeClass, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-886f93f6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-form\" }\nconst _hoisted_2 = [\"onSubmit\"]\nconst _hoisted_3 = { class: \"form-items\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"form-item-radio\"\n}\nconst _hoisted_5 = [\"checked\", \"disabled\"]\nconst _hoisted_6 = { for: \"withGpx\" }\nconst _hoisted_7 = [\"checked\", \"disabled\"]\nconst _hoisted_8 = { for: \"withoutGpx\" }\nconst _hoisted_9 = { class: \"form-item\" }\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = [\"value\"]\nconst _hoisted_12 = {\n key: 1,\n class: \"form-item\"\n}\nconst _hoisted_13 = { for: \"gpxFile\" }\nconst _hoisted_14 = [\"disabled\"]\nconst _hoisted_15 = { class: \"files-help info-box\" }\nconst _hoisted_16 = {\n key: 2,\n class: \"form-item\"\n}\nconst _hoisted_17 = { for: \"title\" }\nconst _hoisted_18 = [\"required\", \"disabled\"]\nconst _hoisted_19 = { key: 3 }\nconst _hoisted_20 = { class: \"workout-date-duration\" }\nconst _hoisted_21 = { class: \"form-item\" }\nconst _hoisted_22 = { class: \"workout-date-time\" }\nconst _hoisted_23 = [\"disabled\"]\nconst _hoisted_24 = [\"disabled\"]\nconst _hoisted_25 = { class: \"form-item\" }\nconst _hoisted_26 = [\"disabled\"]\nconst _hoisted_27 = [\"disabled\"]\nconst _hoisted_28 = [\"disabled\"]\nconst _hoisted_29 = { class: \"form-item\" }\nconst _hoisted_30 = [\"disabled\"]\nconst _hoisted_31 = { class: \"form-item\" }\nconst _hoisted_32 = { key: 1 }\nconst _hoisted_33 = {\n key: 2,\n class: \"form-buttons\"\n}\nconst _hoisted_34 = [\"disabled\"]\nconst _hoisted_35 = [\"onClick\"]\n\nimport {\n ComputedRef,\n computed,\n reactive,\n ref,\n toRefs,\n watch,\n onMounted,\n onUnmounted,\n withDefaults,\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 { IAuthUserProfile } 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 import { convertDistance } from '@/utils/units'\n\n interface Props {\n authUser: IAuthUserProfile\n sports: ISport[]\n isCreation?: boolean\n loading?: boolean\n workout?: IWorkout\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutEdition',\n props: {\n authUser: null,\n sports: null,\n isCreation: { type: Boolean, default: false },\n loading: { type: Boolean, default: false },\n workout: { default: () => ({} as IWorkout) }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, sports: ISport[], isCreation: boolean, loading: boolean, workout: IWorkout }\n\n \n\n const { t } = useI18n()\n const store = useStore()\n const router = useRouter()\n\n const { authUser, workout, isCreation, loading } = toRefs(props)\n const translatedSports: ComputedRef = computed(() =>\n translateSports(\n props.sports,\n t,\n 'is_active_for_user',\n workout.value.id ? [workout.value.sport_id] : []\n )\n )\n const appConfig: ComputedRef = 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 = 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 const withGpx = ref(\n props.workout.id ? props.workout.with_gpx : props.isCreation\n )\n let gpxFile: File | null = null\n const formErrors = ref(false)\n\n onMounted(() => {\n if (props.workout.id) {\n formatWorkoutForm(props.workout)\n }\n })\n\n function updateNotes(value: string) {\n workoutForm.notes = value\n }\n function updateWithGpx() {\n withGpx.value = !withGpx.value\n formErrors.value = false\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 = `${\n authUser.value.imperial_units\n ? convertDistance(workout.distance, 'km', 'mi', 2)\n : parseFloat(workout.distance.toFixed(2))\n }`\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 = authUser.value.imperial_units\n ? convertDistance(+workoutForm.workoutDistance, 'mi', 'km', 3)\n : +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.id) {\n if (props.workout.with_gpx) {\n payload.title = workoutForm.title\n } else {\n formatPayload(payload)\n }\n store.dispatch(WORKOUTS_STORE.ACTIONS.EDIT_WORKOUT, {\n workoutId: props.workout.id,\n data: payload,\n })\n } else {\n if (withGpx.value) {\n if (!gpxFile) {\n const errorMessage = 'workouts.NO_FILE_PROVIDED'\n store.commit(ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES, errorMessage)\n return\n }\n payload.file = gpxFile\n store.dispatch(WORKOUTS_STORE.ACTIONS.ADD_WORKOUT, payload)\n } else {\n formatPayload(payload)\n store.dispatch(WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX, payload)\n }\n }\n }\n function onCancel() {\n if (props.workout.id) {\n router.push({\n name: 'Workout',\n params: { workoutId: props.workout.id },\n })\n } else {\n router.go(-1)\n }\n }\n function invalidateForm() {\n formErrors.value = true\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\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\nreturn (_ctx: any,_cache: any) => {\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Loader = _resolveComponent(\"Loader\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n id: \"workout-edition\",\n class: _normalizeClass([\"center-card with-margin\", { 'center-form': _unref(workout) && _unref(workout).with_gpx }])\n }, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(`workouts.${_unref(isCreation) ? 'ADD' : 'EDIT'}_WORKOUT`)), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _withModifiers(updateWorkout, [\"prevent\"])\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(isCreation))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"input\", {\n id: \"withGpx\",\n type: \"radio\",\n checked: withGpx.value,\n disabled: _unref(loading),\n onClick: updateWithGpx\n }, null, 8, _hoisted_5),\n _createElementVNode(\"label\", _hoisted_6, _toDisplayString(_ctx.$t('workouts.WITH_GPX')), 1)\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"input\", {\n id: \"withoutGpx\",\n type: \"radio\",\n checked: !withGpx.value,\n disabled: _unref(loading),\n onClick: updateWithGpx\n }, null, 8, _hoisted_7),\n _createElementVNode(\"label\", _hoisted_8, _toDisplayString(_ctx.$t('workouts.WITHOUT_GPX')), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.SPORT', 1)) + \": \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"sport\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((workoutForm.sport_id) = $event))\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: sport.id,\n key: sport.id\n }, _toDisplayString(sport.translatedLabel), 9, _hoisted_11))\n }), 128))\n ], 40, _hoisted_10), [\n [_vModelSelect, workoutForm.sport_id]\n ])\n ]),\n (_unref(isCreation) && withGpx.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n _createElementVNode(\"label\", _hoisted_13, _toDisplayString(_ctx.$t('workouts.GPX_FILE')) + \" \" + _toDisplayString(_ctx.$t('workouts.ZIP_ARCHIVE_DESCRIPTION')) + \": \", 1),\n _createElementVNode(\"input\", {\n id: \"gpxFile\",\n name: \"gpxFile\",\n type: \"file\",\n accept: \".gpx, .zip\",\n disabled: _unref(loading),\n required: \"\",\n onInvalid: invalidateForm,\n onInput: updateFile\n }, null, 40, _hoisted_14),\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.$t('workouts.GPX_FILE')) + \":\", 1),\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(fileSizeLimit)), 1)\n ])\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.$t('workouts.ZIP_ARCHIVE')) + \":\", 1),\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.NO_FOLDER')), 1),\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_FILES')) + \": \" + _toDisplayString(_unref(gpx_limit_import)), 1),\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(zipSizeLimit)), 1)\n ])\n ])\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_16, [\n _createElementVNode(\"label\", _hoisted_17, _toDisplayString(_ctx.$t('workouts.TITLE')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"title\",\n name: \"title\",\n type: \"text\",\n required: !_unref(isCreation),\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((workoutForm.title) = $event))\n }, null, 40, _hoisted_18), [\n [_vModelText, workoutForm.title]\n ])\n ])),\n (!withGpx.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_19, [\n _createElementVNode(\"div\", _hoisted_20, [\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.WORKOUT_DATE')) + \":\", 1),\n _createElementVNode(\"div\", _hoisted_22, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-date\",\n name: \"workout-date\",\n type: \"date\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((workoutForm.workoutDate) = $event))\n }, null, 40, _hoisted_23), [\n [_vModelText, workoutForm.workoutDate]\n ]),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-time\",\n name: \"workout-time\",\n class: \"workout-time\",\n type: \"time\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((workoutForm.workoutTime) = $event))\n }, null, 40, _hoisted_24), [\n [_vModelText, workoutForm.workoutTime]\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_25, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DURATION')) + \":\", 1),\n _createElementVNode(\"div\", null, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-duration-hour\",\n name: \"workout-duration-hour\",\n class: \"workout-duration\",\n type: \"text\",\n placeholder: \"HH\",\n minlength: \"1\",\n maxlength: \"2\",\n pattern: \"^([0-1]?[0-9]|2[0-3])$\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((workoutForm.workoutDurationHour) = $event))\n }, null, 40, _hoisted_26), [\n [_vModelText, workoutForm.workoutDurationHour]\n ]),\n _createTextVNode(\" : \"),\n _withDirectives(_createElementVNode(\"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 minlength: \"2\",\n maxlength: \"2\",\n placeholder: \"MM\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = ($event: any) => ((workoutForm.workoutDurationMinutes) = $event))\n }, null, 40, _hoisted_27), [\n [_vModelText, workoutForm.workoutDurationMinutes]\n ]),\n _createTextVNode(\" : \"),\n _withDirectives(_createElementVNode(\"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 minlength: \"2\",\n maxlength: \"2\",\n placeholder: \"SS\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = ($event: any) => ((workoutForm.workoutDurationSeconds) = $event))\n }, null, 40, _hoisted_28), [\n [_vModelText, workoutForm.workoutDurationSeconds]\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_29, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \" (\" + _toDisplayString(_unref(authUser).imperial_units ? 'mi' : 'km') + \"): \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n name: \"workout-distance\",\n type: \"number\",\n min: \"0\",\n step: \"0.001\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => ((workoutForm.workoutDistance) = $event))\n }, null, 40, _hoisted_30), [\n [_vModelText, workoutForm.workoutDistance]\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_31, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.NOTES')) + \": \", 1),\n _createVNode(_component_CustomTextArea, {\n name: \"notes\",\n input: workoutForm.notes,\n disabled: _unref(loading),\n onUpdateValue: updateNotes\n }, null, 8, [\"input\", \"disabled\"])\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(loading))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [\n _createVNode(_component_Loader)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_33, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n type: \"submit\",\n disabled: _unref(loading)\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_34),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(onCancel, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_35)\n ]))\n ], 42, _hoisted_2)\n ])\n ]),\n _: 1\n })\n ], 2))\n}\n}\n\n})","import script from \"./WorkoutEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutEdition.vue?vue&type=style&index=0&id=886f93f6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-886f93f6\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"add-workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { ComputedRef, computed } from 'vue'\n\n import WorkoutEdition from '@/components/Workout/WorkoutEdition.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AddWorkout',\n setup(__props) {\n\n const store = useStore()\n\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(WorkoutEdition, {\n authUser: _unref(authUser),\n sports: _unref(sports),\n isCreation: true,\n loading: _unref(workoutData).loading\n }, null, 8, [\"authUser\", \"sports\", \"loading\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./AddWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AddWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"edit-workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { computed, watch, onBeforeMount, ComputedRef } from 'vue'\n import { useRoute } from 'vue-router'\n\n import WorkoutEdition from '@/components/Workout/WorkoutEdition.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'EditWorkout',\n setup(__props) {\n\n const route = useRoute()\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n\n onBeforeMount(() => {\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, {\n workoutId: route.params.workoutId,\n })\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\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(workoutData).workout.id)\n ? (_openBlock(), _createBlock(WorkoutEdition, {\n key: 0,\n authUser: _unref(authUser),\n sports: _unref(sports),\n workout: _unref(workoutData).workout,\n loading: _unref(workoutData).loading\n }, null, 8, [\"authUser\", \"sports\", \"workout\", \"loading\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./EditWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./EditWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, withModifiers as _withModifiers, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4d9f9a8a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-card-title\" }\nconst _hoisted_2 = [\"title\"]\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = [\n _hoisted_3\n]\nconst _hoisted_5 = { class: \"workout-card-title\" }\nconst _hoisted_6 = { class: \"workout-title-date\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"workout-title\"\n}\nconst _hoisted_8 = {\n key: 1,\n class: \"workout-title\"\n}\nconst _hoisted_9 = { class: \"workout-segment\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-map-marker\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { class: \"workout-date\" }\nconst _hoisted_12 = { class: \"workout-link\" }\nconst _hoisted_13 = [\"title\"]\nconst _hoisted_14 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_15 = [\n _hoisted_14\n]\n\nimport { toRefs } from 'vue'\n\n import authApi from '@/api/authApi'\n import { ISport } from '@/types/sports'\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n sport: ISport\n workoutObject: IWorkoutObject\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutCardTitle',\n props: {\n sport: null,\n workoutObject: null\n },\n emits: ['displayModal'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n sport: ISport\n workoutObject: IWorkoutObject\n }\n\n \n\n \n\n const { sport, workoutObject } = toRefs(props)\n\n async function downloadGpx(workoutId: string) {\n await authApi\n .get(`workouts/${workoutId}/gpx/download`, {\n responseType: 'blob',\n })\n .then((response) => {\n const gpxFileUrl = window.URL.createObjectURL(\n new Blob([response.data], { type: 'application/gpx+xml' })\n )\n const gpxLink = document.createElement('a')\n gpxLink.href = gpxFileUrl\n gpxLink.setAttribute('download', `${workoutId}.gpx`)\n document.body.appendChild(gpxLink)\n gpxLink.click()\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-previous workout-arrow\", { inactive: !_unref(workoutObject).previousUrl }]),\n title: \n _unref(workoutObject).previousUrl\n ? _ctx.$t(`workouts.PREVIOUS_${_unref(workoutObject).type}`)\n : _ctx.$t(`workouts.NO_PREVIOUS_${_unref(workoutObject).type}`)\n ,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _unref(workoutObject).previousUrl\n ? _ctx.$router.push(_unref(workoutObject).previousUrl)\n : null\n ))\n }, _hoisted_4, 10, _hoisted_2),\n _createElementVNode(\"div\", _hoisted_5, [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(sport).label,\n color: _unref(sport).color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createElementVNode(\"div\", _hoisted_6, [\n (_unref(workoutObject).type === 'WORKOUT')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(workoutObject).title), 1),\n _createElementVNode(\"i\", {\n class: \"fa fa-edit\",\n \"aria-hidden\": \"true\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (\n _ctx.$router.push({\n name: 'EditWorkout',\n params: { workoutId: _unref(workoutObject).workoutId },\n })\n ))\n }),\n (_unref(workoutObject).with_gpx)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-download\",\n \"aria-hidden\": \"true\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (downloadGpx(_unref(workoutObject).workoutId)), [\"prevent\"]))\n }))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"i\", {\n class: \"fa fa-trash\",\n \"aria-hidden\": \"true\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (emit('displayModal', true)))\n })\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_unref(workoutObject).title) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_9, [\n _createTextVNode(\" — \"),\n _hoisted_10,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.SEGMENT')) + \" \" + _toDisplayString(_unref(workoutObject).segmentId + 1), 1)\n ])\n ])),\n _createElementVNode(\"div\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_unref(workoutObject).workoutDate) + \" - \" + _toDisplayString(_unref(workoutObject).workoutTime) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_12, [\n (_unref(workoutObject).type === 'SEGMENT')\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n to: {\n name: 'Workout',\n params: { workoutId: _unref(workoutObject).workoutId },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" > \" + _toDisplayString(_ctx.$t('workouts.BACK_TO_WORKOUT')), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-next workout-arrow\", { inactive: !_unref(workoutObject).nextUrl }]),\n title: \n _unref(workoutObject).nextUrl\n ? _ctx.$t(`workouts.NEXT_${_unref(workoutObject).type}`)\n : _ctx.$t(`workouts.NO_NEXT_${_unref(workoutObject).type}`)\n ,\n onClick: _cache[4] || (_cache[4] = ($event: any) => (\n _unref(workoutObject).nextUrl ? _ctx.$router.push(_unref(workoutObject).nextUrl) : null\n ))\n }, _hoisted_15, 10, _hoisted_13)\n ]))\n}\n}\n\n})","import script from \"./WorkoutCardTitle.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutCardTitle.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutCardTitle.vue?vue&type=style&index=0&id=4d9f9a8a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4d9f9a8a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1a5282f6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n class: \"workout-record\"\n}\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"sup\", null, [\n /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy\",\n \"aria-hidden\": \"true\"\n })\n], -1))\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nimport { toRefs } from 'vue'\n\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n recordType: string\n workoutObject: IWorkoutObject\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutRecord',\n props: {\n recordType: null,\n workoutObject: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n recordType: string\n workoutObject: IWorkoutObject\n }\n\n \n\n const { recordType, workoutObject } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (\n _unref(workoutObject).records &&\n _unref(workoutObject).records.find((record) => record.record_type === _unref(recordType))\n )\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_1, _hoisted_3))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutRecord.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutRecord.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutRecord.vue?vue&type=style&index=0&id=1a5282f6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1a5282f6\"]])\n\nexport default __exports__","const directions = [\n 'N',\n 'NNE',\n 'NE',\n 'ENE',\n 'E',\n 'ESE',\n 'SE',\n 'SSE',\n 'S',\n 'SSW',\n 'SW',\n 'WSW',\n 'W',\n 'WNW',\n 'NW',\n 'NNW',\n]\n\nexport const convertDegreeToDirection = (angle: number): string => {\n const value = Math.floor(angle / 22.5 + 0.5)\n return directions[value % 16]\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-46a7c31c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"wind\" }\nconst _hoisted_2 = { class: \"wind-bearing\" }\nconst _hoisted_3 = [\"title\"]\n\nimport { toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { IWeather } from '@/types/workouts'\n import { convertDegreeToDirection } from '@/utils/weather'\n\n interface Props {\n weather: IWeather\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WeatherWind',\n props: {\n weather: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n weather: IWeather\n useImperialUnits: boolean\n }\n\n \n\n const { useImperialUnits, weather } = toRefs(props)\n const { t } = useI18n()\n\n function getWindDirectionTitle(windBearing: number): string {\n return t(\n `workouts.WEATHER.WIND_DIRECTIONS.${convertDegreeToDirection(\n windBearing\n )}`\n )\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Distance, {\n distance: _unref(weather).wind,\n unitFrom: \"m\",\n digits: 1,\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createTextVNode(\" \" + _toDisplayString(_unref(useImperialUnits) ? 'ft' : 'm') + \"/s \", 1),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(weather).windBearing)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-long-arrow-down\",\n style: _normalizeStyle({\n transform: `rotate(${_unref(weather).windBearing}deg)`,\n }),\n \"aria-hidden\": \"true\",\n title: getWindDirectionTitle(_unref(weather).windBearing)\n }, null, 12, _hoisted_3))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./WeatherWind.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WeatherWind.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WeatherWind.vue?vue&type=style&index=0&id=46a7c31c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-46a7c31c\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-76e9ab62\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"workout-weather\"\n}\nconst _hoisted_2 = { class: \"weather-table\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, null, -1))\nconst _hoisted_4 = { class: \"weather-th\" }\nconst _hoisted_5 = [\"src\", \"alt\", \"title\"]\nconst _hoisted_6 = { class: \"weather-th\" }\nconst _hoisted_7 = [\"src\", \"alt\", \"title\"]\nconst _hoisted_8 = [\"alt\", \"title\"]\nconst _hoisted_9 = [\"alt\", \"title\"]\nconst _hoisted_10 = [\"alt\", \"title\"]\n\nimport { toRefs } from 'vue'\n\n import WeatherWind from '@/components/Workout/WorkoutDetail/WeatherWind.vue'\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutWeather',\n props: {\n workoutObject: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n }\n\n \n\n const { useImperialUnits, workoutObject } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(workoutObject).weatherStart && _unref(workoutObject).weatherEnd)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"table\", _hoisted_2, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_3,\n _createElementVNode(\"th\", null, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.START')) + \" \", 1),\n _createElementVNode(\"img\", {\n class: \"weather-img\",\n src: `/img/weather/${_unref(workoutObject).weatherStart.icon}.svg`,\n alt: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherStart.icon}`\n )\n ,\n title: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherStart.icon}`\n )\n \n }, null, 8, _hoisted_5)\n ])\n ]),\n _createElementVNode(\"th\", null, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.END')) + \" \", 1),\n _createElementVNode(\"img\", {\n class: \"weather-img\",\n src: `/img/weather/${_unref(workoutObject).weatherEnd.icon}.svg`,\n alt: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherEnd.icon}`\n )\n ,\n title: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherEnd.icon}`\n )\n \n }, null, 8, _hoisted_7)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/temperature.svg\",\n alt: _ctx.$t(`workouts.WEATHER.TEMPERATURE`),\n title: _ctx.$t(`workouts.WEATHER.TEMPERATURE`)\n }, null, 8, _hoisted_8)\n ]),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherStart.temperature).toFixed(1)) + \"°C \", 1),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherEnd.temperature).toFixed(1)) + \"°C \", 1)\n ]),\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/pour-rain.svg\",\n alt: _ctx.$t(`workouts.WEATHER.HUMIDITY`),\n title: _ctx.$t(`workouts.WEATHER.HUMIDITY`)\n }, null, 8, _hoisted_9)\n ]),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherStart.humidity * 100).toFixed(1)) + \"% \", 1),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherEnd.humidity * 100).toFixed(1)) + \"% \", 1)\n ]),\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/breeze.svg\",\n alt: _ctx.$t(`workouts.WEATHER.WIND`),\n title: _ctx.$t(`workouts.WEATHER.WIND`)\n }, null, 8, _hoisted_10)\n ]),\n _createElementVNode(\"td\", null, [\n _createVNode(WeatherWind, {\n weather: _unref(workoutObject).weatherStart,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"weather\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createVNode(WeatherWind, {\n weather: _unref(workoutObject).weatherEnd,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"weather\", \"useImperialUnits\"])\n ])\n ])\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutWeather.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutWeather.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutWeather.vue?vue&type=style&index=0&id=76e9ab62&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-76e9ab62\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, unref as _unref, createVNode as _createVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74c5993b\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-info\" }\nconst _hoisted_2 = { class: \"workout-data\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-clock-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { class: \"label\" }\nconst _hoisted_5 = { class: \"value\" }\nconst _hoisted_6 = { key: 0 }\nconst _hoisted_7 = { class: \"value\" }\nconst _hoisted_8 = { class: \"value\" }\nconst _hoisted_9 = { class: \"workout-data\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-road\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { class: \"label\" }\nconst _hoisted_12 = { class: \"workout-data\" }\nconst _hoisted_13 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-tachometer\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_14 = { class: \"label\" }\nconst _hoisted_15 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_16 = { class: \"label\" }\nconst _hoisted_17 = {\n key: 0,\n class: \"workout-data\"\n}\nconst _hoisted_18 = [\"alt\"]\nconst _hoisted_19 = { class: \"label\" }\nconst _hoisted_20 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_21 = { class: \"label\" }\nconst _hoisted_22 = {\n key: 1,\n class: \"workout-data\"\n}\nconst _hoisted_23 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-location-arrow\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_24 = { class: \"label\" }\nconst _hoisted_25 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_26 = { class: \"label\" }\n\nimport { computed, toRefs } 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 interface Props {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n displayHARecord: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutData',\n props: {\n workoutObject: null,\n useImperialUnits: { type: Boolean },\n displayHARecord: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n displayHARecord: boolean\n }\n\n \n\n const { displayHARecord, workoutObject, useImperialUnits } = toRefs(props)\n const withPause = computed(\n () =>\n props.workoutObject.pauses !== '0:00:00' &&\n props.workoutObject.pauses !== null\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('workouts.DURATION')), 1),\n _createTextVNode(\": \"),\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_unref(workoutObject).moving), 1),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"LD\"\n }, null, 8, [\"workoutObject\"]),\n (_unref(withPause))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createTextVNode(\" (\" + _toDisplayString(_ctx.$t('workouts.PAUSES')) + \": \", 1),\n _createElementVNode(\"span\", _hoisted_7, _toDisplayString(_unref(workoutObject).pauses), 1),\n _createTextVNode(\" - \" + _toDisplayString(_ctx.$t('workouts.TOTAL_DURATION')) + \": \", 1),\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_unref(workoutObject).duration) + \")\", 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).distance,\n digits: 3,\n unitFrom: \"km\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"FD\"\n }, null, 8, [\"workoutObject\"])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _hoisted_13,\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('workouts.AVERAGE_SPEED')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).aveSpeed,\n unitFrom: \"km\",\n speed: true,\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"AS\"\n }, null, 8, [\"workoutObject\"]),\n _hoisted_15,\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).maxSpeed,\n unitFrom: \"km\",\n speed: true,\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"MS\"\n }, null, 8, [\"workoutObject\"])\n ]),\n (_unref(workoutObject).maxAlt !== null && _unref(workoutObject).minAlt !== null)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createElementVNode(\"img\", {\n class: \"mountains\",\n src: \"/img/workouts/mountains.svg\",\n alt: _ctx.$t('workouts.ELEVATION')\n }, null, 8, _hoisted_18),\n _createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('workouts.MIN_ALTITUDE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).minAlt,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _hoisted_20,\n _createElementVNode(\"span\", _hoisted_21, _toDisplayString(_ctx.$t('workouts.MAX_ALTITUDE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).maxAlt,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(workoutObject).ascent !== null && _unref(workoutObject).descent !== null)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_22, [\n _hoisted_23,\n _createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('workouts.ASCENT')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).ascent,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n (_unref(displayHARecord))\n ? (_openBlock(), _createBlock(WorkoutRecord, {\n key: 0,\n workoutObject: _unref(workoutObject),\n recordType: \"HA\"\n }, null, 8, [\"workoutObject\"]))\n : _createCommentVNode(\"\", true),\n _hoisted_25,\n _createElementVNode(\"span\", _hoisted_26, _toDisplayString(_ctx.$t('workouts.DESCENT')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).descent,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(WorkoutWeather, {\n workoutObject: _unref(workoutObject),\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"workoutObject\", \"useImperialUnits\"])\n ]))\n}\n}\n\n})","import script from \"./WorkoutData.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutData.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutData.vue?vue&type=style&index=0&id=74c5993b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74c5993b\"]])\n\nexport default __exports__","function $(element, tagName) {\n return Array.from(element.getElementsByTagName(tagName));\n}\nfunction normalizeId(id) {\n return id[0] === \"#\" ? id : `#${id}`;\n}\nfunction $ns(element, tagName, ns) {\n return Array.from(element.getElementsByTagNameNS(ns, tagName));\n}\n/**\n * get the content of a text node, if any\n */\nfunction nodeVal(node) {\n node?.normalize();\n return (node && node.textContent) || \"\";\n}\n/**\n * Get one Y child of X, if any, otherwise null\n */\nfunction get1(node, tagName, callback) {\n const n = node.getElementsByTagName(tagName);\n const result = n.length ? n[0] : null;\n if (result && callback)\n callback(result);\n return result;\n}\nfunction get(node, tagName, callback) {\n const properties = {};\n if (!node)\n return properties;\n const n = node.getElementsByTagName(tagName);\n const result = n.length ? n[0] : null;\n if (result && callback) {\n return callback(result, properties);\n }\n return properties;\n}\nfunction val1(node, tagName, callback) {\n const val = nodeVal(get1(node, tagName));\n if (val && callback)\n return callback(val) || {};\n return {};\n}\nfunction $num(node, tagName, callback) {\n const val = parseFloat(nodeVal(get1(node, tagName)));\n if (isNaN(val))\n return undefined;\n if (val && callback)\n return callback(val) || {};\n return {};\n}\nfunction num1(node, tagName, callback) {\n const val = parseFloat(nodeVal(get1(node, tagName)));\n if (isNaN(val))\n return undefined;\n if (val && callback)\n callback(val);\n return val;\n}\nfunction getMulti(node, propertyNames) {\n const properties = {};\n for (const property of propertyNames) {\n val1(node, property, (val) => {\n properties[property] = val;\n });\n }\n return properties;\n}\nfunction isElement(node) {\n return node?.nodeType === 1;\n}\n\nfunction getLineStyle(node) {\n return get(node, \"line\", (lineStyle) => {\n const val = Object.assign({}, val1(lineStyle, \"color\", (color) => {\n return { stroke: `#${color}` };\n }), $num(lineStyle, \"opacity\", (opacity) => {\n return { \"stroke-opacity\": opacity };\n }), $num(lineStyle, \"width\", (width) => {\n // GPX width is in mm, convert to px with 96 px per inch\n return { \"stroke-width\": (width * 96) / 25.4 };\n }));\n return val;\n });\n}\n\nfunction getExtensions(node) {\n let values = [];\n if (node === null)\n return values;\n for (const child of Array.from(node.childNodes)) {\n if (!isElement(child))\n continue;\n const name = abbreviateName(child.nodeName);\n if (name === \"gpxtpx:TrackPointExtension\") {\n // loop again for nested garmin extensions (eg. \"gpxtpx:hr\")\n values = values.concat(getExtensions(child));\n }\n else {\n // push custom extension (eg. \"power\")\n const val = nodeVal(child);\n values.push([name, parseNumeric(val)]);\n }\n }\n return values;\n}\nfunction abbreviateName(name) {\n return [\"heart\", \"gpxtpx:hr\", \"hr\"].includes(name) ? \"heart\" : name;\n}\nfunction parseNumeric(val) {\n const num = parseFloat(val);\n return isNaN(num) ? val : num;\n}\n\nfunction coordPair$1(node) {\n const ll = [\n parseFloat(node.getAttribute(\"lon\") || \"\"),\n parseFloat(node.getAttribute(\"lat\") || \"\"),\n ];\n if (isNaN(ll[0]) || isNaN(ll[1])) {\n return null;\n }\n num1(node, \"ele\", (val) => {\n ll.push(val);\n });\n const time = get1(node, \"time\");\n return {\n coordinates: ll,\n time: time ? nodeVal(time) : null,\n extendedValues: getExtensions(get1(node, \"extensions\")),\n };\n}\n\nfunction extractProperties(node) {\n const properties = getMulti(node, [\n \"name\",\n \"cmt\",\n \"desc\",\n \"type\",\n \"time\",\n \"keywords\",\n ]);\n const extensions = Array.from(node.getElementsByTagNameNS(\"http://www.garmin.com/xmlschemas/GpxExtensions/v3\", \"*\"));\n for (const child of extensions) {\n if (child.parentNode?.parentNode === node) {\n properties[child.tagName.replace(\":\", \"_\")] = nodeVal(child);\n }\n }\n const links = $(node, \"link\");\n if (links.length) {\n properties.links = links.map((link) => Object.assign({ href: link.getAttribute(\"href\") }, getMulti(link, [\"text\", \"type\"])));\n }\n return properties;\n}\n\n/**\n * Extract points from a trkseg or rte element.\n */\nfunction getPoints$1(node, pointname) {\n const pts = $(node, pointname);\n const line = [];\n const times = [];\n const extendedValues = {};\n for (let i = 0; i < pts.length; i++) {\n const c = coordPair$1(pts[i]);\n if (!c) {\n continue;\n }\n line.push(c.coordinates);\n if (c.time)\n times.push(c.time);\n for (const [name, val] of c.extendedValues) {\n const plural = name === \"heart\" ? name : name.replace(\"gpxtpx:\", \"\") + \"s\";\n if (!extendedValues[plural]) {\n extendedValues[plural] = Array(pts.length).fill(null);\n }\n extendedValues[plural][i] = val;\n }\n }\n if (line.length < 2)\n return; // Invalid line in GeoJSON\n return {\n line: line,\n times: times,\n extendedValues: extendedValues,\n };\n}\n/**\n * Extract a LineString geometry from a rte\n * element.\n */\nfunction getRoute(node) {\n const line = getPoints$1(node, \"rtept\");\n if (!line)\n return;\n return {\n type: \"Feature\",\n properties: Object.assign({ _gpxType: \"rte\" }, extractProperties(node), getLineStyle(get1(node, \"extensions\"))),\n geometry: {\n type: \"LineString\",\n coordinates: line.line,\n },\n };\n}\nfunction getTrack(node) {\n const segments = $(node, \"trkseg\");\n const track = [];\n const times = [];\n const extractedLines = [];\n for (const segment of segments) {\n const line = getPoints$1(segment, \"trkpt\");\n if (line) {\n extractedLines.push(line);\n if (line.times && line.times.length)\n times.push(line.times);\n }\n }\n if (extractedLines.length === 0)\n return null;\n const multi = extractedLines.length > 1;\n const properties = Object.assign({ _gpxType: \"trk\" }, extractProperties(node), getLineStyle(get1(node, \"extensions\")), times.length\n ? {\n coordinateProperties: {\n times: multi ? times : times[0],\n },\n }\n : {});\n for (const line of extractedLines) {\n track.push(line.line);\n if (!properties.coordinateProperties) {\n properties.coordinateProperties = {};\n }\n const props = properties.coordinateProperties;\n const entries = Object.entries(line.extendedValues);\n for (let i = 0; i < entries.length; i++) {\n const [name, val] = entries[i];\n if (multi) {\n if (!props[name]) {\n props[name] = extractedLines.map((line) => new Array(line.line.length).fill(null));\n }\n props[name][i] = val;\n }\n else {\n props[name] = val;\n }\n }\n }\n return {\n type: \"Feature\",\n properties: properties,\n geometry: multi\n ? {\n type: \"MultiLineString\",\n coordinates: track,\n }\n : {\n type: \"LineString\",\n coordinates: track[0],\n },\n };\n}\n/**\n * Extract a point, if possible, from a given node,\n * which is usually a wpt or trkpt\n */\nfunction getPoint(node) {\n const properties = Object.assign(extractProperties(node), getMulti(node, [\"sym\"]));\n const pair = coordPair$1(node);\n if (!pair)\n return null;\n return {\n type: \"Feature\",\n properties,\n geometry: {\n type: \"Point\",\n coordinates: pair.coordinates,\n },\n };\n}\n/**\n * Convert GPX to GeoJSON incrementally, returning\n * a [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)\n * that yields output feature by feature.\n */\nfunction* gpxGen(node) {\n for (const track of $(node, \"trk\")) {\n const feature = getTrack(track);\n if (feature)\n yield feature;\n }\n for (const route of $(node, \"rte\")) {\n const feature = getRoute(route);\n if (feature)\n yield feature;\n }\n for (const waypoint of $(node, \"wpt\")) {\n const point = getPoint(waypoint);\n if (point)\n yield point;\n }\n}\n/**\n *\n * Convert a GPX document to GeoJSON. The first argument, `doc`, must be a GPX\n * document as an XML DOM - not as a string. You can get this using jQuery's default\n * `.ajax` function or using a bare XMLHttpRequest with the `.response` property\n * holding an XML DOM.\n *\n * The output is a JavaScript object of GeoJSON data, same as `.kml` outputs, with the\n * addition of a `_gpxType` property on each `LineString` feature that indicates whether\n * the feature was encoded as a route (`rte`) or track (`trk`) in the GPX document.\n */\nfunction gpx(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(gpxGen(node)),\n };\n}\n\nconst EXTENSIONS_NS = \"http://www.garmin.com/xmlschemas/ActivityExtension/v2\";\nconst TRACKPOINT_ATTRIBUTES = [\n [\"heartRate\", \"heartRates\"],\n [\"Cadence\", \"cadences\"],\n // Extended Trackpoint attributes\n [\"Speed\", \"speeds\"],\n [\"Watts\", \"watts\"],\n];\nconst LAP_ATTRIBUTES = [\n [\"TotalTimeSeconds\", \"totalTimeSeconds\"],\n [\"DistanceMeters\", \"distanceMeters\"],\n [\"MaximumSpeed\", \"maxSpeed\"],\n [\"AverageHeartRateBpm\", \"avgHeartRate\"],\n [\"MaximumHeartRateBpm\", \"maxHeartRate\"],\n // Extended Lap attributes\n [\"AvgSpeed\", \"avgSpeed\"],\n [\"AvgWatts\", \"avgWatts\"],\n [\"MaxWatts\", \"maxWatts\"],\n];\nfunction getProperties(node, attributeNames) {\n const properties = [];\n for (const [tag, alias] of attributeNames) {\n let elem = get1(node, tag);\n if (!elem) {\n const elements = node.getElementsByTagNameNS(EXTENSIONS_NS, tag);\n if (elements.length) {\n elem = elements[0];\n }\n }\n const val = parseFloat(nodeVal(elem));\n if (!isNaN(val)) {\n properties.push([alias, val]);\n }\n }\n return properties;\n}\nfunction coordPair(node) {\n const ll = [num1(node, \"LongitudeDegrees\"), num1(node, \"LatitudeDegrees\")];\n if (ll[0] === undefined ||\n isNaN(ll[0]) ||\n ll[1] === undefined ||\n isNaN(ll[1])) {\n return null;\n }\n const heartRate = get1(node, \"HeartRateBpm\");\n const time = nodeVal(get1(node, \"Time\"));\n get1(node, \"AltitudeMeters\", (alt) => {\n const a = parseFloat(nodeVal(alt));\n if (!isNaN(a)) {\n ll.push(a);\n }\n });\n return {\n coordinates: ll,\n time: time || null,\n heartRate: heartRate ? parseFloat(nodeVal(heartRate)) : null,\n extensions: getProperties(node, TRACKPOINT_ATTRIBUTES),\n };\n}\nfunction getPoints(node) {\n const pts = $(node, \"Trackpoint\");\n const line = [];\n const times = [];\n const heartRates = [];\n if (pts.length < 2)\n return null; // Invalid line in GeoJSON\n const extendedProperties = {};\n const result = { extendedProperties };\n for (let i = 0; i < pts.length; i++) {\n const c = coordPair(pts[i]);\n if (c === null)\n continue;\n line.push(c.coordinates);\n const { time, heartRate, extensions } = c;\n if (time)\n times.push(time);\n if (heartRate)\n heartRates.push(heartRate);\n for (const [alias, value] of extensions) {\n if (!extendedProperties[alias]) {\n extendedProperties[alias] = Array(pts.length).fill(null);\n }\n extendedProperties[alias][i] = value;\n }\n }\n if (line.length < 2)\n return null;\n return Object.assign(result, {\n line: line,\n times: times,\n heartRates: heartRates,\n });\n}\nfunction getLap(node) {\n const segments = $(node, \"Track\");\n const track = [];\n const times = [];\n const heartRates = [];\n const allExtendedProperties = [];\n let line;\n const properties = Object.assign(Object.fromEntries(getProperties(node, LAP_ATTRIBUTES)), get(node, \"Name\", (nameElement) => {\n return { name: nodeVal(nameElement) };\n }));\n for (const segment of segments) {\n line = getPoints(segment);\n if (line) {\n track.push(line.line);\n if (line.times.length)\n times.push(line.times);\n if (line.heartRates.length)\n heartRates.push(line.heartRates);\n allExtendedProperties.push(line.extendedProperties);\n }\n }\n for (let i = 0; i < allExtendedProperties.length; i++) {\n const extendedProperties = allExtendedProperties[i];\n for (const property in extendedProperties) {\n if (segments.length === 1) {\n if (line) {\n properties[property] = line.extendedProperties[property];\n }\n }\n else {\n if (!properties[property]) {\n properties[property] = track.map((track) => Array(track.length).fill(null));\n }\n properties[property][i] = extendedProperties[property];\n }\n }\n }\n if (track.length === 0)\n return null;\n if (times.length || heartRates.length) {\n properties.coordinateProperties = Object.assign(times.length\n ? {\n times: track.length === 1 ? times[0] : times,\n }\n : {}, heartRates.length\n ? {\n heart: track.length === 1 ? heartRates[0] : heartRates,\n }\n : {});\n }\n return {\n type: \"Feature\",\n properties: properties,\n geometry: track.length === 1\n ? {\n type: \"LineString\",\n coordinates: track[0],\n }\n : {\n type: \"MultiLineString\",\n coordinates: track,\n },\n };\n}\n/**\n * Incrementally convert a TCX document to GeoJSON. The\n * first argument, `doc`, must be a TCX\n * document as an XML DOM - not as a string.\n */\nfunction* tcxGen(node) {\n for (const lap of $(node, \"Lap\")) {\n const feature = getLap(lap);\n if (feature)\n yield feature;\n }\n for (const course of $(node, \"Courses\")) {\n const feature = getLap(course);\n if (feature)\n yield feature;\n }\n}\n/**\n * Convert a TCX document to GeoJSON. The first argument, `doc`, must be a TCX\n * document as an XML DOM - not as a string.\n */\nfunction tcx(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(tcxGen(node)),\n };\n}\n\nfunction fixColor(v, prefix) {\n const properties = {};\n const colorProp = prefix == \"stroke\" || prefix === \"fill\" ? prefix : prefix + \"-color\";\n if (v[0] === \"#\") {\n v = v.substring(1);\n }\n if (v.length === 6 || v.length === 3) {\n properties[colorProp] = \"#\" + v;\n }\n else if (v.length === 8) {\n properties[prefix + \"-opacity\"] = parseInt(v.substring(0, 2), 16) / 255;\n properties[colorProp] =\n \"#\" + v.substring(6, 8) + v.substring(4, 6) + v.substring(2, 4);\n }\n return properties;\n}\n\nfunction numericProperty(node, source, target) {\n const properties = {};\n num1(node, source, (val) => {\n properties[target] = val;\n });\n return properties;\n}\nfunction getColor(node, output) {\n return get(node, \"color\", (elem) => fixColor(nodeVal(elem), output));\n}\nfunction extractIconHref(node) {\n return get(node, \"Icon\", (icon, properties) => {\n val1(icon, \"href\", (href) => {\n properties.icon = href;\n });\n return properties;\n });\n}\nfunction extractIcon(node) {\n return get(node, \"IconStyle\", (iconStyle) => {\n return Object.assign(getColor(iconStyle, \"icon\"), numericProperty(iconStyle, \"scale\", \"icon-scale\"), numericProperty(iconStyle, \"heading\", \"icon-heading\"), get(iconStyle, \"hotSpot\", (hotspot) => {\n const left = parseFloat(hotspot.getAttribute(\"x\") || \"\");\n const top = parseFloat(hotspot.getAttribute(\"y\") || \"\");\n const xunits = hotspot.getAttribute(\"xunits\") || \"\";\n const yunits = hotspot.getAttribute(\"yunits\") || \"\";\n if (!isNaN(left) && !isNaN(top))\n return {\n \"icon-offset\": [left, top],\n \"icon-offset-units\": [xunits, yunits],\n };\n return {};\n }), extractIconHref(iconStyle));\n });\n}\nfunction extractLabel(node) {\n return get(node, \"LabelStyle\", (labelStyle) => {\n return Object.assign(getColor(labelStyle, \"label\"), numericProperty(labelStyle, \"scale\", \"label-scale\"));\n });\n}\nfunction extractLine(node) {\n return get(node, \"LineStyle\", (lineStyle) => {\n return Object.assign(getColor(lineStyle, \"stroke\"), numericProperty(lineStyle, \"width\", \"stroke-width\"));\n });\n}\nfunction extractPoly(node) {\n return get(node, \"PolyStyle\", (polyStyle, properties) => {\n return Object.assign(properties, get(polyStyle, \"color\", (elem) => fixColor(nodeVal(elem), \"fill\")), val1(polyStyle, \"fill\", (fill) => {\n if (fill === \"0\")\n return { \"fill-opacity\": 0 };\n }), val1(polyStyle, \"outline\", (outline) => {\n if (outline === \"0\")\n return { \"stroke-opacity\": 0 };\n }));\n });\n}\nfunction extractStyle(node) {\n return Object.assign({}, extractPoly(node), extractLine(node), extractLabel(node), extractIcon(node));\n}\n\nfunction extractExtendedData(node) {\n return get(node, \"ExtendedData\", (extendedData, properties) => {\n for (const data of $(extendedData, \"Data\")) {\n properties[data.getAttribute(\"name\") || \"\"] = nodeVal(get1(data, \"value\"));\n }\n for (const simpleData of $(extendedData, \"SimpleData\")) {\n properties[simpleData.getAttribute(\"name\") || \"\"] = nodeVal(simpleData);\n }\n return properties;\n });\n}\nfunction getMaybeHTMLDescription(node) {\n const descriptionNode = get1(node, \"description\");\n for (const c of Array.from(descriptionNode?.childNodes || [])) {\n if (c.nodeType === 4) {\n return {\n description: {\n \"@type\": \"html\",\n value: nodeVal(c),\n },\n };\n }\n }\n return {};\n}\nfunction extractTimeSpan(node) {\n return get(node, \"TimeSpan\", (timeSpan) => {\n return {\n timespan: {\n begin: nodeVal(get1(timeSpan, \"begin\")),\n end: nodeVal(get1(timeSpan, \"end\")),\n },\n };\n });\n}\nfunction extractTimeStamp(node) {\n return get(node, \"TimeStamp\", (timeStamp) => {\n return { timestamp: nodeVal(get1(timeStamp, \"when\")) };\n });\n}\nfunction extractCascadedStyle(node, styleMap) {\n return val1(node, \"styleUrl\", (styleUrl) => {\n styleUrl = normalizeId(styleUrl);\n if (styleMap[styleUrl]) {\n return Object.assign({ styleUrl }, styleMap[styleUrl]);\n }\n // For backward-compatibility. Should we still include\n // styleUrl even if it's not resolved?\n return { styleUrl };\n });\n}\n\nconst removeSpace = /\\s*/g;\nconst trimSpace = /^\\s*|\\s*$/g;\nconst splitSpace = /\\s+/;\n/**\n * Get one coordinate from a coordinate array, if any\n */\nfunction coord1(value) {\n return value\n .replace(removeSpace, \"\")\n .split(\",\")\n .map(parseFloat)\n .filter((num) => !isNaN(num))\n .slice(0, 3);\n}\n/**\n * Get all coordinates from a coordinate array as [[],[]]\n */\nfunction coord(value) {\n return value\n .replace(trimSpace, \"\")\n .split(splitSpace)\n .map(coord1)\n .filter((coord) => {\n return coord.length >= 2;\n });\n}\nfunction gxCoords(node) {\n let elems = $(node, \"coord\");\n if (elems.length === 0) {\n elems = $ns(node, \"coord\", \"*\");\n }\n const coordinates = elems.map((elem) => {\n return nodeVal(elem).split(\" \").map(parseFloat);\n });\n if (coordinates.length === 0) {\n return null;\n }\n return {\n geometry: coordinates.length > 2\n ? {\n type: \"LineString\",\n coordinates,\n }\n : {\n type: \"Point\",\n coordinates: coordinates[0],\n },\n times: $(node, \"when\").map((elem) => nodeVal(elem)),\n };\n}\nfunction fixRing(ring) {\n if (ring.length === 0)\n return ring;\n const first = ring[0];\n const last = ring[ring.length - 1];\n let equal = true;\n for (let i = 0; i < Math.max(first.length, last.length); i++) {\n if (first[i] !== last[i]) {\n equal = false;\n break;\n }\n }\n if (!equal) {\n return ring.concat([ring[0]]);\n }\n return ring;\n}\nfunction getCoordinates(node) {\n return nodeVal(get1(node, \"coordinates\"));\n}\nfunction getGeometry(node) {\n let geometries = [];\n let coordTimes = [];\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = node.childNodes.item(i);\n if (isElement(child)) {\n switch (child.tagName) {\n case \"MultiGeometry\":\n case \"MultiTrack\":\n case \"gx:MultiTrack\": {\n const childGeometries = getGeometry(child);\n geometries = geometries.concat(childGeometries.geometries);\n coordTimes = coordTimes.concat(childGeometries.coordTimes);\n break;\n }\n case \"Point\": {\n const coordinates = coord1(getCoordinates(child));\n if (coordinates.length >= 2) {\n geometries.push({\n type: \"Point\",\n coordinates,\n });\n }\n break;\n }\n case \"LineString\": {\n const coordinates = coord(getCoordinates(child));\n if (coordinates.length >= 2) {\n geometries.push({\n type: \"LineString\",\n coordinates,\n });\n }\n break;\n }\n case \"Polygon\": {\n const coords = [];\n for (const linearRing of $(child, \"LinearRing\")) {\n const ring = fixRing(coord(getCoordinates(linearRing)));\n if (ring.length >= 4) {\n coords.push(ring);\n }\n }\n if (coords.length) {\n geometries.push({\n type: \"Polygon\",\n coordinates: coords,\n });\n }\n break;\n }\n case \"Track\":\n case \"gx:Track\": {\n const gx = gxCoords(child);\n if (!gx)\n break;\n const { times, geometry } = gx;\n geometries.push(geometry);\n if (times.length)\n coordTimes.push(times);\n break;\n }\n }\n }\n }\n return {\n geometries,\n coordTimes,\n };\n}\n\nfunction geometryListToGeometry(geometries) {\n return geometries.length === 0\n ? null\n : geometries.length === 1\n ? geometries[0]\n : {\n type: \"GeometryCollection\",\n geometries,\n };\n}\nfunction getPlacemark(node, styleMap) {\n const { coordTimes, geometries } = getGeometry(node);\n const feature = {\n type: \"Feature\",\n geometry: geometryListToGeometry(geometries),\n properties: Object.assign(getMulti(node, [\n \"name\",\n \"address\",\n \"visibility\",\n \"open\",\n \"phoneNumber\",\n \"description\",\n ]), getMaybeHTMLDescription(node), extractCascadedStyle(node, styleMap), extractStyle(node), extractExtendedData(node), extractTimeSpan(node), extractTimeStamp(node), coordTimes.length\n ? {\n coordinateProperties: {\n times: coordTimes.length === 1 ? coordTimes[0] : coordTimes,\n },\n }\n : {}),\n };\n if (feature.properties?.visibility !== undefined) {\n feature.properties.visibility = feature.properties.visibility !== \"0\";\n }\n const id = node.getAttribute(\"id\");\n if (id !== null && id !== \"\")\n feature.id = id;\n return feature;\n}\n\nfunction getGroundOverlayBox(node) {\n const latLonQuad = get1(node, \"gx:LatLonQuad\");\n if (latLonQuad) {\n const ring = fixRing(coord(getCoordinates(node)));\n return {\n type: \"Polygon\",\n coordinates: [ring],\n };\n }\n return getLatLonBox(node);\n}\nconst DEGREES_TO_RADIANS = Math.PI / 180;\nfunction rotateBox(bbox, coordinates, rotation) {\n const center = [(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2];\n return [\n coordinates[0].map((coordinate) => {\n const dy = coordinate[1] - center[1];\n const dx = coordinate[0] - center[0];\n const distance = Math.sqrt(Math.pow(dy, 2) + Math.pow(dx, 2));\n const angle = Math.atan2(dy, dx) - rotation * DEGREES_TO_RADIANS;\n return [\n center[0] + Math.cos(angle) * distance,\n center[1] + Math.sin(angle) * distance,\n ];\n }),\n ];\n}\nfunction getLatLonBox(node) {\n const latLonBox = get1(node, \"LatLonBox\");\n if (latLonBox) {\n const north = num1(latLonBox, \"north\");\n const west = num1(latLonBox, \"west\");\n const east = num1(latLonBox, \"east\");\n const south = num1(latLonBox, \"south\");\n const rotation = num1(latLonBox, \"rotation\");\n if (typeof north === \"number\" &&\n typeof south === \"number\" &&\n typeof west === \"number\" &&\n typeof east === \"number\") {\n const bbox = [west, south, east, north];\n let coordinates = [\n [\n [west, north],\n [east, north],\n [east, south],\n [west, south],\n [west, north], // top left (again)\n ],\n ];\n if (typeof rotation === \"number\") {\n coordinates = rotateBox(bbox, coordinates, rotation);\n }\n return {\n type: \"Polygon\",\n coordinates,\n };\n }\n }\n return null;\n}\nfunction getGroundOverlay(node, styleMap) {\n const geometry = getGroundOverlayBox(node);\n const feature = {\n type: \"Feature\",\n geometry,\n properties: Object.assign(\n /**\n * Related to\n * https://gist.github.com/tmcw/037a1cb6660d74a392e9da7446540f46\n */\n { \"@geometry-type\": \"groundoverlay\" }, getMulti(node, [\n \"name\",\n \"address\",\n \"visibility\",\n \"open\",\n \"phoneNumber\",\n \"description\",\n ]), getMaybeHTMLDescription(node), extractCascadedStyle(node, styleMap), extractStyle(node), extractIconHref(node), extractExtendedData(node), extractTimeSpan(node), extractTimeStamp(node)),\n };\n if (feature.properties?.visibility !== undefined) {\n feature.properties.visibility = feature.properties.visibility !== \"0\";\n }\n const id = node.getAttribute(\"id\");\n if (id !== null && id !== \"\")\n feature.id = id;\n return feature;\n}\n\nfunction getStyleId(style) {\n let id = style.getAttribute(\"id\");\n const parentNode = style.parentNode;\n if (!id &&\n isElement(parentNode) &&\n parentNode.localName === \"CascadingStyle\") {\n id = parentNode.getAttribute(\"kml:id\") || parentNode.getAttribute(\"id\");\n }\n return normalizeId(id || \"\");\n}\nfunction buildStyleMap(node) {\n const styleMap = {};\n for (const style of $(node, \"Style\")) {\n styleMap[getStyleId(style)] = extractStyle(style);\n }\n for (const map of $(node, \"StyleMap\")) {\n const id = normalizeId(map.getAttribute(\"id\") || \"\");\n val1(map, \"styleUrl\", (styleUrl) => {\n styleUrl = normalizeId(styleUrl);\n if (styleMap[styleUrl]) {\n styleMap[id] = styleMap[styleUrl];\n }\n });\n }\n return styleMap;\n}\nconst FOLDER_PROPS = [\n \"name\",\n \"visibility\",\n \"open\",\n \"address\",\n \"description\",\n \"phoneNumber\",\n \"visibility\",\n];\nfunction getFolder(node) {\n const meta = {};\n for (const child of Array.from(node.childNodes)) {\n if (isElement(child) && FOLDER_PROPS.includes(child.tagName)) {\n meta[child.tagName] = nodeVal(child);\n }\n }\n return {\n type: \"folder\",\n meta,\n children: [],\n };\n}\n/**\n * Yield a nested tree with KML folder structure\n *\n * This generates a tree with the given structure:\n *\n * ```js\n * {\n * \"type\": \"root\",\n * \"children\": [\n * {\n * \"type\": \"folder\",\n * \"meta\": {\n * \"name\": \"Test\"\n * },\n * \"children\": [\n * // ...features and folders\n * ]\n * }\n * // ...features\n * ]\n * }\n * ```\n *\n * ### GroundOverlay\n *\n * GroundOverlay elements are converted into\n * `Feature` objects with `Polygon` geometries,\n * a property like:\n *\n * ```json\n * {\n * \"@geometry-type\": \"groundoverlay\"\n * }\n * ```\n *\n * And the ground overlay's image URL in the `href`\n * property. Ground overlays will need to be displayed\n * with a separate method to other features, depending\n * on which map framework you're using.\n */\nfunction kmlWithFolders(node) {\n const styleMap = buildStyleMap(node);\n const tree = { type: \"root\", children: [] };\n function traverse(node, pointer) {\n if (isElement(node)) {\n switch (node.tagName) {\n case \"GroundOverlay\": {\n const placemark = getGroundOverlay(node, styleMap);\n if (placemark) {\n pointer.children.push(placemark);\n }\n break;\n }\n case \"Placemark\": {\n const placemark = getPlacemark(node, styleMap);\n if (placemark) {\n pointer.children.push(placemark);\n }\n break;\n }\n case \"Folder\": {\n const folder = getFolder(node);\n pointer.children.push(folder);\n pointer = folder;\n break;\n }\n }\n }\n if (node.childNodes) {\n for (let i = 0; i < node.childNodes.length; i++) {\n traverse(node.childNodes[i], pointer);\n }\n }\n }\n traverse(node, tree);\n return tree;\n}\n/**\n * Convert KML to GeoJSON incrementally, returning\n * a [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)\n * that yields output feature by feature.\n */\nfunction* kmlGen(node) {\n const styleMap = buildStyleMap(node);\n for (const placemark of $(node, \"Placemark\")) {\n const feature = getPlacemark(placemark, styleMap);\n if (feature)\n yield feature;\n }\n for (const groundOverlay of $(node, \"GroundOverlay\")) {\n const feature = getGroundOverlay(groundOverlay, styleMap);\n if (feature)\n yield feature;\n }\n}\n/**\n * Convert a KML document to GeoJSON. The first argument, `doc`, must be a KML\n * document as an XML DOM - not as a string. You can get this using jQuery's default\n * `.ajax` function or using a bare XMLHttpRequest with the `.response` property\n * holding an XML DOM.\n *\n * The output is a JavaScript object of GeoJSON data. You can convert it to a string\n * with [JSON.stringify](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)\n * or use it directly in libraries.\n */\nfunction kml(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(kmlGen(node)),\n };\n}\n\nexport { gpx, gpxGen, kml, kmlGen, kmlWithFolders, tcx, tcxGen };\n//# sourceMappingURL=togeojson.es.mjs.map\n","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>} 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","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nimport { LIcon, LMarker } from '@vue-leaflet/vue-leaflet'\n import { toRefs } from 'vue'\n\n import { TCoordinates } from '@/types/workouts'\n\n interface Props {\n markerCoordinates: TCoordinates\n isStart: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CustomMarker',\n props: {\n markerCoordinates: null,\n isStart: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n markerCoordinates: TCoordinates\n isStart: boolean\n }\n\n \n\n const { isStart, markerCoordinates } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(markerCoordinates).latitude)\n ? (_openBlock(), _createBlock(_unref(LMarker), {\n key: 0,\n \"lat-lng\": [_unref(markerCoordinates).latitude, _unref(markerCoordinates).longitude]\n }, {\n default: _withCtx(() => [\n _createVNode(_unref(LIcon), {\n \"icon-url\": `/img/workouts/${_unref(isStart) ? 'start' : 'finish'}.svg`,\n iconSize: [15, 15]\n }, null, 8, [\"icon-url\"])\n ]),\n _: 1\n }, 8, [\"lat-lng\"]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./CustomMarker.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./CustomMarker.vue?vue&type=script&lang=ts&setup=true\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, normalizeClass as _normalizeClass, createBlock as _createBlock, resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6b490f5d\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-map\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"leaflet-container\"\n}\nconst _hoisted_3 = { key: 1 }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-refresh\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_5 = {\n key: 1,\n class: \"no-map\"\n}\n\nimport { gpx } from '@tmcw/togeojson'\n import {\n LControl,\n LControlLayers,\n LGeoJson,\n LLayerGroup,\n LMap,\n LMarker,\n LTileLayer,\n } from '@vue-leaflet/vue-leaflet'\n import { ComputedRef, computed, ref, toRefs, withDefaults } from 'vue'\n import 'leaflet/dist/leaflet.css'\n\n import CustomMarker from '@/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue'\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 interface Props {\n workoutData: IWorkoutData\n markerCoordinates?: TCoordinates\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n workoutData: null,\n markerCoordinates: { default: () => ({} as TCoordinates) }\n },\n setup(__props: any) {\n\nconst props = __props as { workoutData: IWorkoutData, markerCoordinates: TCoordinates }\n\n \n\n const store = useStore()\n\n const { workoutData, markerCoordinates } = toRefs(props)\n const workoutMap = ref null }\n }>(null)\n const bounds = computed(() => getBounds())\n const appConfig: ComputedRef = 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 const startMarkerCoordinates = computed(() =>\n props.workoutData && props.workoutData.chartData.length > 0\n ? {\n latitude: props.workoutData.chartData[0].latitude,\n longitude: props.workoutData.chartData[0].longitude,\n }\n : {}\n )\n const endMarkerCoordinates = computed(() =>\n props.workoutData && props.workoutData.chartData.length > 0\n ? {\n latitude:\n props.workoutData.chartData[props.workoutData.chartData.length - 1]\n .latitude,\n longitude:\n props.workoutData.chartData[props.workoutData.chartData.length - 1]\n .longitude,\n }\n : {}\n )\n const isFullscreen = ref(false)\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[] {\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 function getBounds() {\n return 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 function resetZoom() {\n workoutMap.value?.leafletObject.fitBounds(getBounds())\n }\n function toggleFullscreen() {\n isFullscreen.value = !isFullscreen.value\n if (!isFullscreen.value) {\n setTimeout(() => {\n resetZoom()\n }, 100)\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_VFullscreen = _resolveComponent(\"VFullscreen\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(workoutData).loading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_unref(workoutData).workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_VFullscreen, {\n key: 0,\n modelValue: isFullscreen.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((isFullscreen).value = $event))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"leaflet-container\", { 'fullscreen-map': isFullscreen.value }])\n }, [\n (_unref(geoJson).jsonData && _unref(center) && _unref(bounds).length === 2)\n ? (_openBlock(), _createBlock(_unref(LMap), {\n key: 0,\n zoom: 13,\n maxZoom: 19,\n center: _unref(center),\n bounds: _unref(bounds),\n ref_key: \"workoutMap\",\n ref: workoutMap,\n onReady: _cache[0] || (_cache[0] = ($event: any) => (fitBounds(_unref(bounds))))\n }, {\n default: _withCtx(() => [\n _createVNode(_unref(LControlLayers)),\n _createVNode(_unref(LControl), {\n position: \"topleft\",\n class: \"map-control\",\n onClick: resetZoom\n }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }),\n _createVNode(_unref(LControl), {\n position: \"topleft\",\n class: \"map-control\",\n onClick: toggleFullscreen\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa-${isFullscreen.value ? 'compress' : 'arrows-alt'}`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _: 1\n }),\n _createVNode(_unref(LTileLayer), {\n url: `${_unref(getApiUrl)()}workouts/map_tile/{s}/{z}/{x}/{y}.png`,\n attribution: _unref(appConfig).map_attribution,\n bounds: _unref(bounds)\n }, null, 8, [\"url\", \"attribution\", \"bounds\"]),\n _createVNode(_unref(LGeoJson), {\n geojson: _unref(geoJson).jsonData\n }, null, 8, [\"geojson\"]),\n (_unref(markerCoordinates).latitude)\n ? (_openBlock(), _createBlock(_unref(LMarker), {\n key: 0,\n \"lat-lng\": [\n _unref(markerCoordinates).latitude,\n _unref(markerCoordinates).longitude,\n ]\n }, null, 8, [\"lat-lng\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_unref(LLayerGroup), {\n name: _ctx.$t('workouts.START_AND_FINISH'),\n \"layer-type\": \"overlay\"\n }, {\n default: _withCtx(() => [\n (_unref(startMarkerCoordinates).latitude)\n ? (_openBlock(), _createBlock(CustomMarker, {\n key: 0,\n markerCoordinates: _unref(startMarkerCoordinates),\n isStart: true\n }, null, 8, [\"markerCoordinates\"]))\n : _createCommentVNode(\"\", true),\n (_unref(endMarkerCoordinates).latitude)\n ? (_openBlock(), _createBlock(CustomMarker, {\n key: 1,\n markerCoordinates: _unref(endMarkerCoordinates),\n isStart: false\n }, null, 8, [\"markerCoordinates\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"name\"])\n ]),\n _: 1\n }, 8, [\"center\", \"bounds\"]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ]),\n _: 1\n }, 8, [\"modelValue\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('workouts.NO_MAP')), 1))\n ]))\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=6b490f5d&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6b490f5d\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, withCtx as _withCtx, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9fc0bab8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workout-detail\" }\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n watch,\n withDefaults,\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/index.vue'\n import { WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } 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 interface Props {\n authUser: IAuthUserProfile\n displaySegment: boolean\n sports: ISport[]\n workoutData: IWorkoutData\n markerCoordinates?: TCoordinates\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n authUser: null,\n displaySegment: { type: Boolean },\n sports: null,\n workoutData: null,\n markerCoordinates: { default: () => ({} as TCoordinates) }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, displaySegment: boolean, sports: ISport[], workoutData: IWorkoutData, markerCoordinates: TCoordinates }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { authUser, markerCoordinates, workoutData } = toRefs(props)\n const workout: ComputedRef = computed(\n () => props.workoutData.workout\n )\n const segmentId: Ref = ref(\n route.params.workoutId ? +route.params.segmentId : null\n )\n const segment: ComputedRef = computed(() =>\n workout.value.segments.length > 0 && segmentId.value\n ? workout.value.segments[+segmentId.value - 1]\n : null\n )\n const displayModal: Ref = ref(false)\n const sport = computed(() =>\n props.sports\n ? props.sports.find(\n (sport) => sport.id === props.workoutData.workout.sport_id\n )\n : {}\n )\n const workoutObject = computed(() =>\n getWorkoutObject(workout.value, segment.value)\n )\n\n function getWorkoutObjectUrl(\n workout: IWorkout,\n displaySegment: boolean,\n segmentId: number | null\n ): Record {\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 props.authUser.date_format\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 weatherStart: segment ? null : workout.weather_start,\n with_gpx: workout.with_gpx,\n workoutId: workout.id,\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 watch(\n () => route.params.segmentId,\n async (newSegmentId) => {\n if (newSegmentId) {\n segmentId.value = +newSegmentId\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t('workouts.WORKOUT_DELETION_CONFIRMATION'),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (deleteWorkout(_unref(workoutObject).workoutId))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createVNode(WorkoutCardTitle, {\n sport: _unref(sport),\n workoutObject: _unref(workoutObject),\n onDisplayModal: _cache[2] || (_cache[2] = ($event: any) => (updateDisplayModal(true)))\n }, null, 8, [\"sport\", \"workoutObject\"])\n ]),\n content: _withCtx(() => [\n _createVNode(WorkoutMap, {\n workoutData: _unref(workoutData),\n markerCoordinates: _unref(markerCoordinates)\n }, null, 8, [\"workoutData\", \"markerCoordinates\"]),\n _createVNode(WorkoutData, {\n workoutObject: _unref(workoutObject),\n useImperialUnits: _unref(authUser).imperial_units,\n displayHARecord: _unref(authUser).display_ascent\n }, null, 8, [\"workoutObject\", \"useImperialUnits\", \"displayHARecord\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=9fc0bab8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9fc0bab8\"]])\n\nexport default __exports__","import { Chart, LegendItem } from 'chart.js'\n\nconst getOrCreateLegendList = (id: string): HTMLUListElement => {\n const legendContainer = document.getElementById(id)\n if (legendContainer) {\n let listContainer = legendContainer.querySelector('ul')\n if (!listContainer) {\n listContainer = document.createElement('ul')\n legendContainer.appendChild(listContainer)\n }\n return listContainer\n }\n throw new Error('No legend container')\n}\n\nexport const htmlLegendPlugin = {\n id: 'htmlLegend',\n afterUpdate(\n chart: Chart,\n args: Record,\n options: Record\n ): void {\n const ul = getOrCreateLegendList(options.containerID)\n while (ul.firstChild) {\n ul.firstChild.remove()\n }\n\n const legendItems = chart.options.plugins?.legend?.labels?.generateLabels\n ? chart.options.plugins?.legend?.labels?.generateLabels(chart)\n : []\n\n legendItems.forEach((item: LegendItem) => {\n const li = document.createElement('li')\n li.onclick = () => {\n if (item.datasetIndex !== undefined) {\n chart.setDatasetVisibility(\n item.datasetIndex,\n !chart.isDatasetVisible(item.datasetIndex)\n )\n chart.update()\n }\n }\n\n const checkBox = document.createElement('input')\n if (checkBox) {\n checkBox.type = 'checkbox'\n checkBox.id = item.text\n checkBox.checked = !item.hidden\n }\n\n const text = document.createTextNode(item.text)\n\n const boxSpan = document.createElement('span')\n if (boxSpan) {\n boxSpan.style.background = String(item.fillStyle)\n boxSpan.style.borderColor = String(item.strokeStyle)\n }\n\n li.appendChild(checkBox)\n li.appendChild(text)\n li.appendChild(boxSpan)\n ul.appendChild(li)\n })\n },\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, unref as _unref, mergeProps as _mergeProps, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-dcea1168\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-chart\" }\nconst _hoisted_2 = { class: \"chart-radio\" }\nconst _hoisted_3 = [\"checked\"]\nconst _hoisted_4 = [\"checked\"]\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"chart-legend\" }, null, -1))\nconst _hoisted_6 = { class: \"chart-info\" }\nconst _hoisted_7 = { class: \"no-data-cleaning\" }\nconst _hoisted_8 = { class: \"elevation-start\" }\nconst _hoisted_9 = [\"checked\"]\n\nimport { ChartData, ChartOptions } from 'chart.js'\n import { ComputedRef, computed, ref } from 'vue'\n import { LineChart, useLineChart } from 'vue-chart-3'\n import { useI18n } from 'vue-i18n'\n\n import { htmlLegendPlugin } from '@/components/Workout/WorkoutDetail/WorkoutChart/legend'\n import { TUnit } from '@/types/units'\n import { IAuthUserProfile } from '@/types/user'\n import {\n IWorkoutChartData,\n IWorkoutData,\n TCoordinates,\n } from '@/types/workouts'\n import { units } from '@/utils/units'\n import { getDatasets } from '@/utils/workouts'\n\n interface Props {\n authUser: IAuthUserProfile\n workoutData: IWorkoutData\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n authUser: null,\n workoutData: null\n },\n emits: ['getCoordinates'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n workoutData: IWorkoutData\n }\n\n \n\n \n\n const { t } = useI18n()\n\n const displayDistance = ref(true)\n const beginElevationAtZero = ref(true)\n const datasets: ComputedRef = computed(() =>\n getDatasets(props.workoutData.chartData, t, props.authUser.imperial_units)\n )\n const fromKmUnit = getUnitTo('km')\n const fromMUnit = getUnitTo('m')\n const chartData: ComputedRef> = 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 = computed(\n () => datasets.value.coordinates\n )\n const options = computed>(() => ({\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') + ` (${fromKmUnit})`\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') + ` (${fromKmUnit}/h)`,\n },\n },\n yElevation: {\n beginAtZero: beginElevationAtZero.value,\n grid: {\n drawOnChartArea: false,\n },\n position: 'right',\n title: {\n display: true,\n text: t('workouts.ELEVATION') + ` (${fromMUnit})`,\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 + ` ${fromMUnit}`\n : label + ` ${fromKmUnit}/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')}: ${\n tooltipItems[0].label\n } ${fromKmUnit}`\n : `${t('workouts.DURATION')}: ${formatDuration(\n tooltipItems[0].label.replace(',', '')\n )}`\n },\n },\n },\n legend: {\n display: false,\n },\n htmlLegend: {\n containerID: 'chart-legend',\n },\n },\n }))\n const { lineChartProps } = useLineChart({\n chartData,\n options,\n plugins: [htmlLegendPlugin],\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 function getUnitTo(unitFrom: TUnit): TUnit {\n return props.authUser.imperial_units\n ? units[unitFrom].defaultTarget\n : unitFrom\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.ANALYSIS')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"distance\",\n checked: displayDistance.value,\n onClick: updateDisplayDistance\n }, null, 8, _hoisted_3),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"duration\",\n checked: !displayDistance.value,\n onClick: updateDisplayDistance\n }, null, 8, _hoisted_4),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DURATION')), 1)\n ])\n ]),\n _hoisted_5,\n _createVNode(_unref(LineChart), _mergeProps(_unref(lineChartProps), {\n class: \"line-chart\",\n onMouseleave: emitEmptyCoordinates\n }), null, 16),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.NO_DATA_CLEANING')), 1),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n checked: beginElevationAtZero.value,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (beginElevationAtZero.value = !beginElevationAtZero.value))\n }, null, 8, _hoisted_9),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.START_ELEVATION_AT_ZERO')), 1)\n ])\n ])\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=dcea1168&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-dcea1168\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-028ad527\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-note\" }\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n notes?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutNotes',\n props: {\n notes: { default: () => null }\n },\n setup(__props: any) {\n\nconst props = __props as { notes: string | null }\n\n \n\n const { notes } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.NOTES')), 1)\n ]),\n content: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(notes) && _unref(notes) !== '' ? _unref(notes) : _ctx.$t('workouts.NO_NOTES')), 1)\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./WorkoutNotes.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutNotes.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutNotes.vue?vue&type=style&index=0&id=028ad527&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-028ad527\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6b8a27cd\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-segments\" }\n\nimport { toRefs } from 'vue'\n\n import { IWorkoutSegment } from '@/types/workouts'\n\n interface Props {\n segments: IWorkoutSegment[]\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutSegments',\n props: {\n segments: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n segments: IWorkoutSegment[]\n useImperialUnits: boolean\n }\n\n \n\n const { segments, useImperialUnits } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.SEGMENT', 2)), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"ul\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(segments), (segment, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: segment.segment_id\n }, [\n _createVNode(_component_router_link, {\n to: {\n name: 'WorkoutSegment',\n params: {\n workoutId: segment.workout_id,\n segmentId: index + 1,\n },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.SEGMENT', 1)) + \" \" + _toDisplayString(index + 1), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n _createTextVNode(\" (\" + _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \": \", 1),\n _createVNode(_component_Distance, {\n distance: segment.distance,\n unitFrom: \"km\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createTextVNode(\", \" + _toDisplayString(_ctx.$t('workouts.DURATION')) + \": \" + _toDisplayString(segment.duration) + \") \", 1)\n ]))\n }), 128))\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./WorkoutSegments.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutSegments.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutSegments.vue?vue&type=style&index=0&id=6b8a27cd&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6b8a27cd\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-53c4e53a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workout-container\"\n}\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\nconst _hoisted_6 = { key: 1 }\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\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 WorkoutDetail from '@/components/Workout/WorkoutDetail/index.vue'\n import WorkoutChart from '@/components/Workout/WorkoutDetail/WorkoutChart/index.vue'\n import WorkoutNotes from '@/components/Workout/WorkoutDetail/WorkoutNotes.vue'\n import WorkoutSegments from '@/components/Workout/WorkoutDetail/WorkoutSegments.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData, IWorkoutPayload, TCoordinates } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n displaySegment: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Workout',\n props: {\n displaySegment: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n displaySegment: boolean\n }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { displaySegment } = toRefs(props)\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const markerCoordinates: Ref = ref({\n latitude: null,\n longitude: null,\n })\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 onUnmounted(() => {\n store.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\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\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_unref(workoutData).workout.id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(WorkoutDetail, {\n workoutData: _unref(workoutData),\n sports: _unref(sports),\n authUser: _unref(authUser),\n markerCoordinates: markerCoordinates.value,\n displaySegment: _unref(displaySegment)\n }, null, 8, [\"workoutData\", \"sports\", \"authUser\", \"markerCoordinates\", \"displaySegment\"]),\n (\n _unref(workoutData).workout.with_gpx && _unref(workoutData).chartData.length > 0\n )\n ? (_openBlock(), _createBlock(WorkoutChart, {\n key: 0,\n workoutData: _unref(workoutData),\n authUser: _unref(authUser),\n displaySegment: _unref(displaySegment),\n onGetCoordinates: updateCoordinates\n }, null, 8, [\"workoutData\", \"authUser\", \"displaySegment\"]))\n : _createCommentVNode(\"\", true),\n (!_unref(displaySegment) && _unref(workoutData).workout.segments.length > 1)\n ? (_openBlock(), _createBlock(WorkoutSegments, {\n key: 1,\n segments: _unref(workoutData).workout.segments,\n useImperialUnits: _unref(authUser).imperial_units\n }, null, 8, [\"segments\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n (!_unref(displaySegment))\n ? (_openBlock(), _createBlock(WorkoutNotes, {\n key: 2,\n notes: _unref(workoutData).workout.notes\n }, null, 8, [\"notes\"]))\n : _createCommentVNode(\"\", true),\n _hoisted_5\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n (!_unref(workoutData).loading)\n ? (_openBlock(), _createBlock(NotFound, {\n key: 0,\n target: \"WORKOUT\"\n }))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./Workout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Workout.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Workout.vue?vue&type=style&index=0&id=53c4e53a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-53c4e53a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6c38593a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workouts-filters\" }\nconst _hoisted_2 = { class: \"box\" }\nconst _hoisted_3 = { class: \"form\" }\nconst _hoisted_4 = { class: \"form-items-group\" }\nconst _hoisted_5 = { class: \"form-item\" }\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = { class: \"form-item\" }\nconst _hoisted_8 = [\"value\"]\nconst _hoisted_9 = { class: \"form-items-group\" }\nconst _hoisted_10 = { class: \"form-item\" }\nconst _hoisted_11 = [\"value\"]\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"option\", { value: \"\" }, null, -1))\nconst _hoisted_13 = [\"value\"]\nconst _hoisted_14 = { class: \"form-items-group\" }\nconst _hoisted_15 = { class: \"form-item\" }\nconst _hoisted_16 = { class: \"form-inputs-group\" }\nconst _hoisted_17 = [\"value\"]\nconst _hoisted_18 = [\"value\"]\nconst _hoisted_19 = { class: \"form-items-group\" }\nconst _hoisted_20 = { class: \"form-item\" }\nconst _hoisted_21 = { class: \"form-inputs-group\" }\nconst _hoisted_22 = [\"value\"]\nconst _hoisted_23 = [\"value\"]\nconst _hoisted_24 = { class: \"form-items-group\" }\nconst _hoisted_25 = { class: \"form-item\" }\nconst _hoisted_26 = { class: \"form-inputs-group\" }\nconst _hoisted_27 = [\"value\"]\nconst _hoisted_28 = [\"value\"]\nconst _hoisted_29 = { class: \"form-items-group\" }\nconst _hoisted_30 = { class: \"form-item\" }\nconst _hoisted_31 = { class: \"form-inputs-group\" }\nconst _hoisted_32 = [\"value\"]\nconst _hoisted_33 = [\"value\"]\nconst _hoisted_34 = { class: \"form-button\" }\n\nimport { ComputedRef, computed, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { translateSports } from '@/utils/sports'\n import { units } from '@/utils/units'\n\n interface Props {\n authUser: IAuthUserProfile\n sports: ISport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsFilters',\n props: {\n authUser: null,\n sports: null\n },\n emits: ['filter'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n sports: ISport[]\n }\n\n \n\n \n\n const { t } = useI18n()\n const route = useRoute()\n const router = useRouter()\n\n const { authUser } = toRefs(props)\n\n const toUnit = authUser.value.imperial_units\n ? units['km'].defaultTarget\n : 'km'\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.sports, t)\n )\n let params: LocationQuery = Object.assign({}, route.query)\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')\n if ('page' in params) {\n params['page'] = '1'\n }\n router.push({ path: '/workouts', query: params })\n }\n function onClearFilter() {\n emit('filter')\n router.push({ path: '/workouts', query: {} })\n }\n\n watch(\n () => route.query,\n (newQuery) => {\n params = Object.assign({}, newQuery)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.FROM')) + \": \", 1),\n _createElementVNode(\"input\", {\n name: \"from\",\n type: \"date\",\n value: _ctx.$route.query.from,\n onChange: handleFilterChange\n }, null, 40, _hoisted_6)\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.TO')) + \": \", 1),\n _createElementVNode(\"input\", {\n name: \"to\",\n type: \"date\",\n value: _ctx.$route.query.to,\n onChange: handleFilterChange\n }, null, 40, _hoisted_8)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.SPORT', 1)) + \":\", 1),\n _createElementVNode(\"select\", {\n name: \"sport_id\",\n value: _ctx.$route.query.sport_id,\n onChange: handleFilterChange\n }, [\n _hoisted_12,\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports).filter((s) =>\n _unref(authUser).sports_list.includes(s.id)\n ), (sport) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: sport.id,\n key: sport.id\n }, _toDisplayString(sport.translatedLabel), 9, _hoisted_13))\n }), 128))\n ], 40, _hoisted_11)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"): \", 1),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"input\", {\n name: \"distance_from\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: _ctx.$route.query.distance_from,\n onChange: handleFilterChange\n }, null, 40, _hoisted_17),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n name: \"distance_to\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: _ctx.$route.query.distance_to,\n onChange: handleFilterChange\n }, null, 40, _hoisted_18)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"div\", _hoisted_20, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DURATION')) + \": \", 1),\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"input\", {\n name: \"duration_from\",\n value: _ctx.$route.query.duration_from,\n onChange: handleFilterChange,\n pattern: \"^([0-9]*[0-9]):([0-5][0-9])$\",\n placeholder: \"hh:mm\",\n type: \"text\"\n }, null, 40, _hoisted_22),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n name: \"duration_to\",\n value: _ctx.$route.query.duration_to,\n onChange: handleFilterChange,\n pattern: \"^([0-9]*[0-9]):([0-5][0-9])$\",\n placeholder: \"hh:mm\",\n type: \"text\"\n }, null, 40, _hoisted_23)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_24, [\n _createElementVNode(\"div\", _hoisted_25, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.AVE_SPEED')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"/h): \", 1),\n _createElementVNode(\"div\", _hoisted_26, [\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"ave_speed_from\",\n value: _ctx.$route.query.ave_speed_from,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_27),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"ave_speed_to\",\n value: _ctx.$route.query.ave_speed_to,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_28)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_29, [\n _createElementVNode(\"div\", _hoisted_30, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"/h): \", 1),\n _createElementVNode(\"div\", _hoisted_31, [\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"max_speed_from\",\n value: _ctx.$route.query.max_speed_from,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_32),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"max_speed_to\",\n value: _ctx.$route.query.max_speed_to,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_33)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_34, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: onFilter\n }, _toDisplayString(_ctx.$t('buttons.FILTER')), 1),\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: onClearFilter\n }, _toDisplayString(_ctx.$t('buttons.CLEAR_FILTER')), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./WorkoutsFilters.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsFilters.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsFilters.vue?vue&type=style&index=0&id=6c38593a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6c38593a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createBlock as _createBlock, withCtx as _withCtx, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0f8ea7b0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workouts-list\" }\nconst _hoisted_2 = { class: \"total\" }\nconst _hoisted_3 = { class: \"total-label\" }\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = {\n key: 0,\n class: \"workouts-table responsive-table\"\n}\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", { class: \"sport-col\" }, null, -1))\nconst _hoisted_7 = { class: \"sport-col\" }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = [\"onMouseover\"]\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"fa fa-map-o\",\n \"aria-hidden\": \"true\"\n}\nconst _hoisted_12 = { class: \"title\" }\nconst _hoisted_13 = { class: \"workout-date\" }\nconst _hoisted_14 = { class: \"cell-heading\" }\nconst _hoisted_15 = { class: \"text-right\" }\nconst _hoisted_16 = { class: \"cell-heading\" }\nconst _hoisted_17 = { class: \"text-right\" }\nconst _hoisted_18 = { class: \"cell-heading\" }\nconst _hoisted_19 = { class: \"text-right\" }\nconst _hoisted_20 = { class: \"cell-heading\" }\nconst _hoisted_21 = { class: \"text-right\" }\nconst _hoisted_22 = { class: \"cell-heading\" }\nconst _hoisted_23 = { class: \"text-right\" }\nconst _hoisted_24 = { class: \"cell-heading\" }\nconst _hoisted_25 = { class: \"text-right\" }\nconst _hoisted_26 = { class: \"cell-heading\" }\nconst _hoisted_27 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n watch,\n capitalize,\n onBeforeMount,\n } from 'vue'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import FilterSelects from '@/components/Common/FilterSelects.vue'\n import Pagination from '@/components/Common/Pagination.vue'\n import StaticMap from '@/components/Common/StaticMap.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { ROOT_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { IPagination } from '@/types/api'\n import { ITranslatedSport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkout, TWorkoutsPayload } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { getQuery, sortList, workoutsPayloadKeys } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n import { getSportColor, getSportLabel } from '@/utils/sports'\n import { convertDistance } from '@/utils/units'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n user: IAuthUserProfile\n sports: ITranslatedSport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsList',\n props: {\n user: null,\n sports: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n sports: ITranslatedSport[]\n }\n\n \n\n const store = useStore()\n const route = useRoute()\n const router = useRouter()\n\n const { user, sports } = toRefs(props)\n const orderByList: string[] = [\n 'ave_speed',\n 'distance',\n 'duration',\n 'workout_date',\n ]\n const workouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.USER_WORKOUTS]\n )\n const pagination: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUTS_PAGINATION]\n )\n const currentLanguage: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n let query: TWorkoutsPayload = getWorkoutsQuery(route.query)\n const hoverWorkoutId: Ref = ref(null)\n\n onBeforeMount(() => {\n loadWorkouts(query)\n })\n\n function loadWorkouts(payload: TWorkoutsPayload) {\n store.dispatch(\n WORKOUTS_STORE.ACTIONS.GET_USER_WORKOUTS,\n user.value.imperial_units ? getConvertedPayload(payload) : payload\n )\n }\n function reloadWorkouts(queryParam: string, queryValue: string) {\n const newQuery: LocationQuery = Object.assign({}, route.query)\n newQuery[queryParam] = queryValue\n if (queryParam === 'per_page') {\n newQuery['page'] = '1'\n }\n query = getWorkoutsQuery(newQuery)\n router.push({ path: '/workouts', query })\n }\n\n function getWorkoutsQuery(newQuery: LocationQuery): TWorkoutsPayload {\n const workoutQuery = getQuery(\n newQuery,\n orderByList,\n defaultOrder.order_by,\n {\n defaultSort: defaultOrder.order,\n }\n )\n Object.keys(newQuery)\n .filter((k) => workoutsPayloadKeys.includes(k))\n .map((k) => {\n if (typeof newQuery[k] === 'string') {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n workoutQuery[k] = newQuery[k]\n }\n })\n return workoutQuery\n }\n\n function getConvertedPayload(payload: TWorkoutsPayload): TWorkoutsPayload {\n const convertedPayload: TWorkoutsPayload = {\n ...payload,\n }\n Object.entries(convertedPayload).map((entry) => {\n if (entry[0].match('speed|distance') && entry[1]) {\n convertedPayload[entry[0]] = convertDistance(+entry[1], 'mi', 'km')\n }\n })\n return convertedPayload\n }\n\n function onHover(workoutId: string | null) {\n hoverWorkoutId.value = workoutId\n }\n\n watch(\n () => route.query,\n async (newQuery) => {\n query = getWorkoutsQuery(newQuery)\n loadWorkouts(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"box\", { 'empty-table': _unref(workouts).length === 0 }])\n }, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('common.TOTAL').toLowerCase()) + \": \", 1),\n (_unref(pagination).total !== null)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, _toDisplayString(_unref(pagination).total) + \" \" + _toDisplayString(_ctx.$t('workouts.WORKOUT', _unref(pagination).total)), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(FilterSelects, {\n sort: _unref(sortList),\n order_by: orderByList,\n query: _unref(query),\n message: \"workouts\",\n onUpdateSelect: reloadWorkouts\n }, null, 8, [\"sort\", \"query\"]),\n (_unref(workouts).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createVNode(Pagination, {\n class: \"top-pagination\",\n pagination: _unref(pagination),\n path: \"/workouts\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]),\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", {\n class: _normalizeClass({ smaller: 'de' === _unref(currentLanguage) })\n }, [\n _createElementVNode(\"tr\", null, [\n _hoisted_6,\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 1))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DATE'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DISTANCE'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DURATION'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.AVE_SPEED'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.MAX_SPEED'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.ASCENT'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DESCENT'))), 1)\n ])\n ], 2),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: workout.id\n }, [\n _createElementVNode(\"td\", _hoisted_7, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('workouts.SPORT', 1)), 1),\n (_unref(sports).length > 0)\n ? (_openBlock(), _createBlock(_component_SportImage, {\n key: 0,\n title: \n _unref(sports).find((s) => s.id === workout.sport_id)\n .translatedLabel\n ,\n \"sport-label\": _unref(getSportLabel)(workout, _unref(sports)),\n color: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"title\", \"sport-label\", \"color\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"td\", {\n class: \"workout-title\",\n onMouseover: ($event: any) => (onHover(workout.id)),\n onMouseleave: _cache[0] || (_cache[0] = ($event: any) => (onHover(null)))\n }, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 1))), 1),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: { name: 'Workout', params: { workoutId: workout.id } }\n }, {\n default: _withCtx(() => [\n (workout.with_gpx)\n ? (_openBlock(), _createElementBlock(\"i\", _hoisted_11))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(workout.title), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n (workout.with_gpx && hoverWorkoutId.value === workout.id)\n ? (_openBlock(), _createBlock(StaticMap, {\n key: 0,\n workout: workout,\n \"display-hover\": true\n }, null, 8, [\"workout\"]))\n : _createCommentVNode(\"\", true)\n ], 40, _hoisted_9),\n _createElementVNode(\"td\", _hoisted_13, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('workouts.DATE')), 1),\n _createTextVNode(\" \" + _toDisplayString(_unref(formatDate)(\n workout.workout_date,\n _unref(user).timezone,\n _unref(user).date_format\n )), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_15, [\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1),\n _createVNode(_component_Distance, {\n distance: workout.distance,\n unitFrom: \"km\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_17, [\n _createElementVNode(\"span\", _hoisted_18, _toDisplayString(_ctx.$t('workouts.DURATION')), 1),\n _createTextVNode(\" \" + _toDisplayString(workout.moving), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_19, [\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('workouts.AVE_SPEED')), 1),\n _createVNode(_component_Distance, {\n distance: workout.ave_speed,\n unitFrom: \"km\",\n speed: true,\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_21, [\n _createElementVNode(\"span\", _hoisted_22, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')), 1),\n _createVNode(_component_Distance, {\n distance: workout.max_speed,\n unitFrom: \"km\",\n speed: true,\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_23, [\n _createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('workouts.ASCENT')), 1),\n (workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: workout.ascent,\n unitFrom: \"m\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"td\", _hoisted_25, [\n _createElementVNode(\"span\", _hoisted_26, _toDisplayString(_ctx.$t('workouts.DESCENT')), 1),\n (workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: workout.descent,\n unitFrom: \"m\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n }), 128))\n ])\n ]),\n _createVNode(Pagination, {\n pagination: _unref(pagination),\n path: \"/workouts\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"])\n ]))\n : _createCommentVNode(\"\", true)\n ], 2),\n (_unref(workouts).length === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true),\n _hoisted_27\n ]))\n}\n}\n\n})","import script from \"./WorkoutsList.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsList.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsList.vue?vue&type=style&index=0&id=0f8ea7b0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0f8ea7b0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-77e54012\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"workouts\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container workouts-container\" }\nconst _hoisted_3 = { class: \"display-filters\" }\nconst _hoisted_4 = { class: \"list-container\" }\n\nimport { ComputedRef, computed, 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 { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsView',\n setup(__props) {\n\n const { t } = useI18n()\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(sports.value, t)\n )\n const hiddenFilters = ref(true)\n\n function toggleFilters() {\n hiddenFilters.value = !hiddenFilters.value\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"filters-container\", { hidden: hiddenFilters.value }])\n }, [\n _createVNode(WorkoutsFilters, {\n sports: _unref(translatedSports),\n authUser: _unref(authUser),\n onFilter: toggleFilters\n }, null, 8, [\"sports\", \"authUser\"])\n ], 2),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", { onClick: toggleFilters }, [\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa-caret-${hiddenFilters.value ? 'down' : 'up'}`),\n \"aria-hidden\": \"true\"\n }, null, 2),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`workouts.${hiddenFilters.value ? 'DISPLAY' : 'HIDE'}_FILTERS`)), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(WorkoutsList, {\n user: _unref(authUser),\n sports: _unref(translatedSports)\n }, null, 8, [\"user\", \"sports\"])\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutsView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsView.vue?vue&type=style&index=0&id=77e54012&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-77e54012\"]])\n\nexport default __exports__"],"names":["_hoisted_1","id","_hoisted_2","_hoisted_3","class","_hoisted_4","key","_hoisted_5","_hoisted_6","for","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_defineComponent","__name","props","authUser","sports","isCreation","type","Boolean","default","loading","workout","setup","__props","t","useI18n","store","useStore","router","useRouter","toRefs","translatedSports","computed","translateSports","value","sport_id","appConfig","getters","ROOT_STORE","fileSizeLimit","max_single_file_size","getReadableFileSize","gpx_limit_import","zipSizeLimit","max_zip_file_size","errorMessages","workoutForm","reactive","title","notes","workoutDate","workoutTime","workoutDurationHour","workoutDurationMinutes","workoutDurationSeconds","workoutDistance","withGpx","ref","with_gpx","gpxFile","formErrors","updateNotes","updateWithGpx","updateFile","event","target","files","formatWorkoutForm","workoutDateTime","formatWorkoutDate","getDateWithTZ","workout_date","timezone","duration","split","imperial_units","convertDistance","distance","parseFloat","toFixed","workout_time","formatPayload","payload","updateWorkout","dispatch","WORKOUTS_STORE","workoutId","data","errorMessage","commit","file","onCancel","push","name","params","go","invalidateForm","onMounted","onUnmounted","watch","async","newWorkout","previousWorkout","_ctx","_cache","_component_CustomTextArea","_resolveComponent","_component_ErrorMessage","_component_Loader","_component_Card","_openBlock","_createElementBlock","_normalizeClass","_unref","_createVNode","_withCtx","_createTextVNode","_toDisplayString","$t","content","_createElementVNode","errors","onSubmit","_withModifiers","checked","disabled","onClick","_createCommentVNode","_withDirectives","required","onInvalid","$event","_Fragment","_renderList","sport","translatedLabel","_vModelSelect","accept","onInput","_vModelText","placeholder","minlength","maxlength","pattern","min","step","input","onUpdateValue","_createBlock","message","_","__exports__","SPORTS_STORE","AUTH_USER_STORE","workoutData","WorkoutEdition","route","useRoute","onBeforeMount","newWorkoutId","_withScopeId","n","_pushScopeId","_popScopeId","workoutObject","emits","emit","downloadGpx","authApi","responseType","then","response","gpxFileUrl","window","URL","createObjectURL","Blob","gpxLink","document","createElement","href","setAttribute","body","appendChild","click","_component_SportImage","_component_router_link","inactive","previousUrl","$router","label","color","segmentId","to","nextUrl","recordType","records","find","record","record_type","directions","convertDegreeToDirection","angle","Math","floor","weather","useImperialUnits","getWindDirectionTitle","windBearing","_component_Distance","wind","unitFrom","digits","displayUnit","style","_normalizeStyle","transform","weatherStart","weatherEnd","src","icon","alt","Number","temperature","humidity","WeatherWind","displayHARecord","withPause","pauses","moving","WorkoutRecord","strong","aveSpeed","speed","maxSpeed","maxAlt","minAlt","ascent","descent","WorkoutWeather","$","element","tagName","Array","from","getElementsByTagName","nodeVal","node","normalize","textContent","get1","callback","result","length","get","properties","val1","val","$num","isNaN","num1","getMulti","propertyNames","property","isElement","nodeType","getLineStyle","lineStyle","Object","assign","stroke","opacity","width","getExtensions","values","child","childNodes","abbreviateName","nodeName","concat","parseNumeric","includes","num","coordPair$1","ll","getAttribute","time","coordinates","extendedValues","extractProperties","extensions","getElementsByTagNameNS","parentNode","replace","links","map","link","getPoints$1","pointname","pts","line","times","i","c","plural","fill","getRoute","_gpxType","geometry","getTrack","segments","track","extractedLines","segment","multi","coordinateProperties","entries","getPoint","pair","gpxGen","feature","waypoint","point","gpx","features","PI","debounce","fn","timeout","args","context","this","clearTimeout","setTimeout","apply","capitalizeFirstLetter","string","charAt","toUpperCase","slice","propsBinder","methods","leafletElement","setMethodName","newVal","oldVal","remapEvents","contextAttrs","attrName","startsWith","eventName","toLocaleLowerCase","resetWebpackIcon","Icon","modules","Promise","all","Default","prototype","_getIconUrl","mergeOptions","iconRetinaUrl","iconUrl","shadowUrl","provideLeafletWrapper","methodName","wrapped","console","warn","wrapper","updateLeafletWrapper","leafletMethod","WINDOW_OR_GLOBAL","self","g","global","undefined","GLOBAL_LEAFLET_OPT","options","props$1","pane","String","attribution","custom","layerType","visible","setup$1","leafletRef","addLayer","removeLayer","componentOptions","componentMethods","addThisLayer","leafletObject","removeThisLayer","setAttribution","old","attributionControl","$parent","removeAttribution","addAttribution","setName","setLayerType","setVisible","isVisible","bindPopup","bindTooltip","unbindTooltip","tooltip","getTooltip","unbindPopup","popup","getPopup","updateVisibleProp","render","ready","slots","h","display","props$2","interactive","bubblingMouseEvents","props$3","weight","lineCap","lineJoin","dashArray","dashOffset","fillColor","fillOpacity","fillRule","className","props$4","latLng","radius","props$6","position","setup$6","setPosition","remove","render$1","script$2","disableClickPropagation","disableScrollPropagation","root","useGlobalLeaflet","registerControl","Control","DomEvent","L","LControl","extend","onAdd","$slots","props$8","collapsed","autoZIndex","hideSingleBase","sortLayers","sortFunction","Function","setup$8","controlOptions","layer","addBaseLayer","addOverlay","script$4","registerLayerControl","control","layers","props$b","setup$b","layerOptions","layerMethods","props$d","geojson","setup$d","layerGroupMethods","setGeojson","clearLayers","addData","getGeoJSONData","toGeoJSON","getBounds","script$8","geoJSON","listeners","attrs","on","props$e","zIndex","tileSize","noWrap","minZoom","maxZoom","setup$e","props$f","iconSize","iconAnchor","popupAnchor","tooltipAnchor","shadowRetinaUrl","shadowSize","shadowAnchor","bgPos","script$a","canSetParentHtml","setParentHtml","setIcon","onDomEvent","offDomEvent","divIcon","iconObject","createIcon","el","recreationNeeded","htmlSwapNeeded","elHtml","innerHTML","html","scheduleCreateIcon","scheduleHtmlSwap","setIconUrl","setIconRetinaUrl","setIconSize","setIconAnchor","setPopupAnchor","setTooltipAnchor","setShadowUrl","setShadowRetinaUrl","setShadowAnchor","setBgPos","setClassName","setHtml","lDivIcon","lIcon","off","observer","MutationObserver","observe","attributes","childList","characterData","subtree","script$c","layerGroup","script$d","center","bounds","maxBounds","zoom","paddingBottomRight","paddingTopLeft","padding","worldCopyJump","crs","maxBoundsViscosity","inertia","inertiaDeceleration","inertiaMaxSpeed","easeLinearity","zoomAnimation","zoomAnimationThreshold","fadeAnimation","markerZoomAnimation","noBlockingAnimations","blueprint","layersToAdd","layersInControl","eventHandlers","moveEndHandler","getZoom","getCenter","overlayAddHandler","e","l","overlayRemoveHandler","CRS","latLngBounds","beforeMapMount","error","optionsCrs","EPSG3857","layerControl","exist","_leaflet_id","filter","lControlLayer","forEach","lControl","addControl","setZoom","animate","setPaddingBottomRight","setPaddingTopLeft","setPadding","setCrs","prevBounds","fitBounds","setBounds","newBounds","isValid","oldBounds","lastSetBounds","boundsChanged","equals","fitBoundsOptions","setCenter","newCenter","oldCenter","lastSetCenter","lat","lng","panTo","height","props$h","draggable","zIndexOffset","setup$g","setDraggable","dragging","enable","disable","latLngSync","latlng","setLatLng","oldLatLng","getLatLng","script$e","getElement","newIcon","marker","props$i","latLngs","smoothFactor","noClip","props$j","props$k","props$n","tms","subdomains","detectRetina","url","setup$m","gridLayerOptions","gridLayerMethods","script$j","tileLayer","markerCoordinates","isStart","latitude","LMarker","longitude","LIcon","workoutMap","geoJson","getGeoJson","startMarkerCoordinates","chartData","endMarkerCoordinates","isFullscreen","gpxContent","jsonData","DOMParser","parseFromString","resetZoom","toggleFullscreen","_component_VFullscreen","modelValue","LMap","ref_key","onReady","LControlLayers","LTileLayer","getApiUrl","map_attribution","LGeoJson","LLayerGroup","CustomMarker","displaySegment","displayModal","getWorkoutObject","getWorkoutObjectUrl","previous_workout","next_workout","urls","date_format","ave_speed","max_alt","max_speed","min_alt","segment_id","weather_end","weather_start","updateDisplayModal","deleteWorkout","newSegmentId","_component_Modal","onConfirmAction","onCancelAction","WorkoutCardTitle","onDisplayModal","WorkoutMap","WorkoutData","display_ascent","getOrCreateLegendList","legendContainer","getElementById","listContainer","querySelector","Error","htmlLegendPlugin","afterUpdate","chart","ul","containerID","firstChild","legendItems","plugins","legend","labels","generateLabels","item","li","onclick","datasetIndex","setDatasetVisibility","isDatasetVisible","update","checkBox","text","hidden","createTextNode","boxSpan","background","fillStyle","borderColor","strokeStyle","displayDistance","beginElevationAtZero","datasets","getDatasets","fromKmUnit","getUnitTo","fromMUnit","distance_labels","duration_labels","JSON","parse","stringify","elevation","responsive","maintainAspectRatio","animation","layout","top","scales","grid","drawOnChartArea","ticks","count","formatDuration","ySpeed","yElevation","beginAtZero","elements","pointStyle","pointRadius","datalabels","interaction","intersect","mode","callbacks","dataset","formattedValue","yAxisID","tooltipItems","emitCoordinates","dataIndex","htmlLegend","lineChartProps","useLineChart","updateDisplayDistance","Date","toISOString","substr","emitEmptyCoordinates","units","defaultTarget","LineChart","_mergeProps","onMouseleave","index","workout_id","updateCoordinates","WorkoutDetail","WorkoutChart","onGetCoordinates","WorkoutSegments","WorkoutNotes","NotFound","toUnit","query","handleFilterChange","onFilter","path","onClearFilter","newQuery","$route","onChange","s","sports_list","distance_from","distance_to","duration_from","duration_to","ave_speed_from","ave_speed_to","max_speed_from","max_speed_to","user","orderByList","workouts","pagination","currentLanguage","getWorkoutsQuery","hoverWorkoutId","loadWorkouts","getConvertedPayload","reloadWorkouts","queryParam","queryValue","workoutQuery","getQuery","defaultOrder","defaultSort","keys","k","workoutsPayloadKeys","convertedPayload","entry","match","onHover","toLowerCase","total","FilterSelects","sort","sortList","order_by","onUpdateSelect","Pagination","smaller","capitalize","getSportLabel","getSportColor","onMouseover","StaticMap","formatDate","NoWorkouts","hiddenFilters","toggleFilters","username","WorkoutsFilters","WorkoutsList"],"sourceRoot":""} \ No newline at end of file From 7045a205a9755a382d4f99039e084ba562874848 Mon Sep 17 00:00:00 2001 From: Sam Date: Sat, 5 Nov 2022 08:34:04 +0100 Subject: [PATCH 07/10] update python dependencies --- poetry.lock | 275 +++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 141 insertions(+), 136 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2879e5a4..6208355d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -209,7 +209,7 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "38.0.1" +version = "38.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." category = "main" optional = false @@ -271,7 +271,7 @@ watch = ["watchdog", "watchdog-gevent"] [[package]] name = "exceptiongroup" -version = "1.0.0" +version = "1.0.1" description = "Backport of PEP 654 (exception groups)" category = "dev" optional = false @@ -427,7 +427,7 @@ python-versions = ">=3.6" [[package]] name = "greenlet" -version = "2.0.0" +version = "2.0.0.post0" description = "Lightweight in-process concurrent programming" category = "main" optional = false @@ -1126,7 +1126,7 @@ jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] [[package]] name = "selenium" -version = "4.5.0" +version = "4.6.0" description = "" category = "dev" optional = false @@ -1140,7 +1140,7 @@ urllib3 = {version = ">=1.26,<2.0", extras = ["socks"]} [[package]] name = "setuptools" -version = "65.5.0" +version = "65.5.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false @@ -1148,7 +1148,7 @@ python-versions = ">=3.7" [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mock", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] @@ -1324,7 +1324,7 @@ test = ["pytest"] [[package]] name = "SQLAlchemy" -version = "1.4.42" +version = "1.4.43" description = "Database Abstraction Library" category = "main" optional = false @@ -1576,7 +1576,7 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "dc4f7a92008a3e7709983439b02fb9a3c2e911a0251bc31958acf473971950f5" +content-hash = "0c1746a4d1fd543d241cd647dd5b497f2ab6d0ea5dbbaf462e400f0f2c85427f" [metadata.files] alabaster = [ @@ -1796,32 +1796,32 @@ coverage = [ {file = "coverage-6.5.0.tar.gz", hash = "sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84"}, ] cryptography = [ - {file = "cryptography-38.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:10d1f29d6292fc95acb597bacefd5b9e812099d75a6469004fd38ba5471a977f"}, - {file = "cryptography-38.0.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3fc26e22840b77326a764ceb5f02ca2d342305fba08f002a8c1f139540cdfaad"}, - {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3b72c360427889b40f36dc214630e688c2fe03e16c162ef0aa41da7ab1455153"}, - {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:194044c6b89a2f9f169df475cc167f6157eb9151cc69af8a2a163481d45cc407"}, - {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca9f6784ea96b55ff41708b92c3f6aeaebde4c560308e5fbbd3173fbc466e94e"}, - {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:16fa61e7481f4b77ef53991075de29fc5bacb582a1244046d2e8b4bb72ef66d0"}, - {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d4ef6cc305394ed669d4d9eebf10d3a101059bdcf2669c366ec1d14e4fb227bd"}, - {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3261725c0ef84e7592597606f6583385fed2a5ec3909f43bc475ade9729a41d6"}, - {file = "cryptography-38.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:0297ffc478bdd237f5ca3a7dc96fc0d315670bfa099c04dc3a4a2172008a405a"}, - {file = "cryptography-38.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:89ed49784ba88c221756ff4d4755dbc03b3c8d2c5103f6d6b4f83a0fb1e85294"}, - {file = "cryptography-38.0.1-cp36-abi3-win32.whl", hash = "sha256:ac7e48f7e7261207d750fa7e55eac2d45f720027d5703cd9007e9b37bbb59ac0"}, - {file = "cryptography-38.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:ad7353f6ddf285aeadfaf79e5a6829110106ff8189391704c1d8801aa0bae45a"}, - {file = "cryptography-38.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:896dd3a66959d3a5ddcfc140a53391f69ff1e8f25d93f0e2e7830c6de90ceb9d"}, - {file = "cryptography-38.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:d3971e2749a723e9084dd507584e2a2761f78ad2c638aa31e80bc7a15c9db4f9"}, - {file = "cryptography-38.0.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:79473cf8a5cbc471979bd9378c9f425384980fcf2ab6534b18ed7d0d9843987d"}, - {file = "cryptography-38.0.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:d9e69ae01f99abe6ad646947bba8941e896cb3aa805be2597a0400e0764b5818"}, - {file = "cryptography-38.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5067ee7f2bce36b11d0e334abcd1ccf8c541fc0bbdaf57cdd511fdee53e879b6"}, - {file = "cryptography-38.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:3e3a2599e640927089f932295a9a247fc40a5bdf69b0484532f530471a382750"}, - {file = "cryptography-38.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2e5856248a416767322c8668ef1845ad46ee62629266f84a8f007a317141013"}, - {file = "cryptography-38.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:64760ba5331e3f1794d0bcaabc0d0c39e8c60bf67d09c93dc0e54189dfd7cfe5"}, - {file = "cryptography-38.0.1-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b6c9b706316d7b5a137c35e14f4103e2115b088c412140fdbd5f87c73284df61"}, - {file = "cryptography-38.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0163a849b6f315bf52815e238bc2b2346604413fa7c1601eea84bcddb5fb9ac"}, - {file = "cryptography-38.0.1-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:d1a5bd52d684e49a36582193e0b89ff267704cd4025abefb9e26803adeb3e5fb"}, - {file = "cryptography-38.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:765fa194a0f3372d83005ab83ab35d7c5526c4e22951e46059b8ac678b44fa5a"}, - {file = "cryptography-38.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:52e7bee800ec869b4031093875279f1ff2ed12c1e2f74923e8f49c916afd1d3b"}, - {file = "cryptography-38.0.1.tar.gz", hash = "sha256:1db3d807a14931fa317f96435695d9ec386be7b84b618cc61cfa5d08b0ae33d7"}, + {file = "cryptography-38.0.3-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:984fe150f350a3c91e84de405fe49e688aa6092b3525f407a18b9646f6612320"}, + {file = "cryptography-38.0.3-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:ed7b00096790213e09eb11c97cc6e2b757f15f3d2f85833cd2d3ec3fe37c1722"}, + {file = "cryptography-38.0.3-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:bbf203f1a814007ce24bd4d51362991d5cb90ba0c177a9c08825f2cc304d871f"}, + {file = "cryptography-38.0.3-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:554bec92ee7d1e9d10ded2f7e92a5d70c1f74ba9524947c0ba0c850c7b011828"}, + {file = "cryptography-38.0.3-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1b52c9e5f8aa2b802d48bd693190341fae201ea51c7a167d69fc48b60e8a959"}, + {file = "cryptography-38.0.3-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:728f2694fa743a996d7784a6194da430f197d5c58e2f4e278612b359f455e4a2"}, + {file = "cryptography-38.0.3-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dfb4f4dd568de1b6af9f4cda334adf7d72cf5bc052516e1b2608b683375dd95c"}, + {file = "cryptography-38.0.3-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5419a127426084933076132d317911e3c6eb77568a1ce23c3ac1e12d111e61e0"}, + {file = "cryptography-38.0.3-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:9b24bcff7853ed18a63cfb0c2b008936a9554af24af2fb146e16d8e1aed75748"}, + {file = "cryptography-38.0.3-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:25c1d1f19729fb09d42e06b4bf9895212292cb27bb50229f5aa64d039ab29146"}, + {file = "cryptography-38.0.3-cp36-abi3-win32.whl", hash = "sha256:7f836217000342d448e1c9a342e9163149e45d5b5eca76a30e84503a5a96cab0"}, + {file = "cryptography-38.0.3-cp36-abi3-win_amd64.whl", hash = "sha256:c46837ea467ed1efea562bbeb543994c2d1f6e800785bd5a2c98bc096f5cb220"}, + {file = "cryptography-38.0.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06fc3cc7b6f6cca87bd56ec80a580c88f1da5306f505876a71c8cfa7050257dd"}, + {file = "cryptography-38.0.3-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:65535bc550b70bd6271984d9863a37741352b4aad6fb1b3344a54e6950249b55"}, + {file = "cryptography-38.0.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:5e89468fbd2fcd733b5899333bc54d0d06c80e04cd23d8c6f3e0542358c6060b"}, + {file = "cryptography-38.0.3-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6ab9516b85bebe7aa83f309bacc5f44a61eeb90d0b4ec125d2d003ce41932d36"}, + {file = "cryptography-38.0.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:068147f32fa662c81aebab95c74679b401b12b57494872886eb5c1139250ec5d"}, + {file = "cryptography-38.0.3-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:402852a0aea73833d982cabb6d0c3bb582c15483d29fb7085ef2c42bfa7e38d7"}, + {file = "cryptography-38.0.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b1b35d9d3a65542ed2e9d90115dfd16bbc027b3f07ee3304fc83580f26e43249"}, + {file = "cryptography-38.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6addc3b6d593cd980989261dc1cce38263c76954d758c3c94de51f1e010c9a50"}, + {file = "cryptography-38.0.3-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:be243c7e2bfcf6cc4cb350c0d5cdf15ca6383bbcb2a8ef51d3c9411a9d4386f0"}, + {file = "cryptography-38.0.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78cf5eefac2b52c10398a42765bfa981ce2372cbc0457e6bf9658f41ec3c41d8"}, + {file = "cryptography-38.0.3-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:4e269dcd9b102c5a3d72be3c45d8ce20377b8076a43cbed6f660a1afe365e436"}, + {file = "cryptography-38.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8d41a46251bf0634e21fac50ffd643216ccecfaf3701a063257fe0b2be1b6548"}, + {file = "cryptography-38.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:785e4056b5a8b28f05a533fab69febf5004458e20dad7e2e13a3120d8ecec75a"}, + {file = "cryptography-38.0.3.tar.gz", hash = "sha256:bfbe6ee19615b07a98b1d2287d6a6073f734735b49ee45b11324d85efc4d5cbd"}, ] Deprecated = [ {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"}, @@ -1836,8 +1836,8 @@ dramatiq = [ {file = "dramatiq-1.13.0.tar.gz", hash = "sha256:b4fe0ca6b55b06bebf82cd14c88044fb267505a57d4aa47378194efa0cef5f47"}, ] exceptiongroup = [ - {file = "exceptiongroup-1.0.0-py3-none-any.whl", hash = "sha256:2ac84b496be68464a2da60da518af3785fff8b7ec0d090a581604bc870bdee41"}, - {file = "exceptiongroup-1.0.0.tar.gz", hash = "sha256:affbabf13fb6e98988c38d9c5650e701569fe3c1de3233cfb61c5f33774690ad"}, + {file = "exceptiongroup-1.0.1-py3-none-any.whl", hash = "sha256:4d6c0aa6dd825810941c792f53d7b8d71da26f5e5f84f20f9508e8f2d33b140a"}, + {file = "exceptiongroup-1.0.1.tar.gz", hash = "sha256:73866f7f842ede6cb1daa42c4af078e2035e5f7607f0e2c762cc51bb31bbe7b2"}, ] flake8 = [ {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, @@ -1883,61 +1883,66 @@ gpxpy = [ {file = "gpxpy-1.5.0.tar.gz", hash = "sha256:e6993a8945eae07a833cd304b88bbc6c3c132d63b2bf4a9b0a5d9097616b8708"}, ] greenlet = [ - {file = "greenlet-2.0.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:4be4dedbd2fa9b7c35627f322d6d3139cb125bc18d5ef2f40237990850ea446f"}, - {file = "greenlet-2.0.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:75c022803de010294366f3608d4bba3e346693b1b7427b79d57e3d924ed03838"}, - {file = "greenlet-2.0.0-cp27-cp27m-win32.whl", hash = "sha256:4a1953465b7651073cffde74ed7d121e602ef9a9740d09ee137b01879ac15a2f"}, - {file = "greenlet-2.0.0-cp27-cp27m-win_amd64.whl", hash = "sha256:a65205e6778142528978b4acca76888e7e7f0be261e395664e49a5c21baa2141"}, - {file = "greenlet-2.0.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d71feebf5c8041c80dfda76427e14e3ca00bca042481bd3e9612a9d57b2cbbf7"}, - {file = "greenlet-2.0.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:f7edbd2957f72aea357241fe42ffc712a8e9b8c2c42f24e2ef5d97b255f66172"}, - {file = "greenlet-2.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79687c48e7f564be40c46b3afea6d141b8d66ffc2bc6147e026d491c6827954a"}, - {file = "greenlet-2.0.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a245898ec5e9ca0bc87a63e4e222cc633dc4d1f1a0769c34a625ad67edb9f9de"}, - {file = "greenlet-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adcf45221f253b3a681c99da46fa6ac33596fa94c2f30c54368f7ee1c4563a39"}, - {file = "greenlet-2.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3dc294afebf2acfd029373dbf3d01d36fd8d6888a03f5a006e2d690f66b153d9"}, - {file = "greenlet-2.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1cfeae4dda32eb5c64df05d347c4496abfa57ad16a90082798a2bba143c6c854"}, - {file = "greenlet-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:d58d4b4dc82e2d21ebb7dd7d3a6d370693b2236a1407fe3988dc1d4ea07575f9"}, - {file = "greenlet-2.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0d7efab8418c1fb3ea00c4abb89e7b0179a952d0d53ad5fcff798ca7440f8e8"}, - {file = "greenlet-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:f8a10e14238407be3978fa6d190eb3724f9d766655fefc0134fd5482f1fb0108"}, - {file = "greenlet-2.0.0-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:98b848a0b75e76b446dc71fdbac712d9078d96bb1c1607f049562dde1f8801e1"}, - {file = "greenlet-2.0.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:8e8dbad9b4f4c3e37898914cfccb7c4f00dbe3146333cfe52a1a3103cc2ff97c"}, - {file = "greenlet-2.0.0-cp35-cp35m-win32.whl", hash = "sha256:069a8a557541a04518dc3beb9a78637e4e6b286814849a2ecfac529eaa78562b"}, - {file = "greenlet-2.0.0-cp35-cp35m-win_amd64.whl", hash = "sha256:cc211c2ff5d3b2ba8d557a71e3b4f0f0a2020067515143a9516ea43884271192"}, - {file = "greenlet-2.0.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:d4e7642366e638f45d70c5111590a56fbd0ffb7f474af20c6c67c01270bcf5cf"}, - {file = "greenlet-2.0.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:e7a0dca752b4e3395890ab4085c3ec3838d73714261914c01b53ed7ea23b5867"}, - {file = "greenlet-2.0.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8c67ecda450ad4eac7837057f5deb96effa836dacaf04747710ccf8eeb73092"}, - {file = "greenlet-2.0.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3cc1abaf47cfcfdc9ac0bdff173cebab22cd54e9e3490135a4a9302d0ff3b163"}, - {file = "greenlet-2.0.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efdbbbf7b6c8d5be52977afa65b9bb7b658bab570543280e76c0fabc647175ed"}, - {file = "greenlet-2.0.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:7acaa51355d5b9549d474dc71be6846ee9a8f2cb82f4936e5efa7a50bbeb94ad"}, - {file = "greenlet-2.0.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:2be628bca0395610da08921f9376dd14317f37256d41078f5c618358467681e1"}, - {file = "greenlet-2.0.0-cp36-cp36m-win32.whl", hash = "sha256:eca9c0473de053dcc92156dd62c38c3578628b536c7f0cd66e655e211c14ac32"}, - {file = "greenlet-2.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:9a4a9fea68fd98814999d91ea585e49ed68d7e199a70bef13a857439f60a4609"}, - {file = "greenlet-2.0.0-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:6b28420ae290bfbf5d827f976abccc2f74f0a3f5e4fb69b66acf98f1cbe95e7e"}, - {file = "greenlet-2.0.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:2b8e1c939b363292ecc93999fb1ad53ffc5d0aac8e933e4362b62365241edda5"}, - {file = "greenlet-2.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c5ddadfe40e903c6217ed2b95a79f49e942bb98527547cc339fc7e43a424aad"}, - {file = "greenlet-2.0.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e5ead803b11b60b347e08e0f37234d9a595f44a6420026e47bcaf94190c3cd6"}, - {file = "greenlet-2.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b89b78ffb516c2921aa180c2794082666e26680eef05996b91f46127da24d964"}, - {file = "greenlet-2.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:939963d0137ec92540d95b68b7f795e8dbadce0a1fca53e3e7ef8ddc18ee47cb"}, - {file = "greenlet-2.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c1e93ef863810fba75faf418f0861dbf59bfe01a7b5d0a91d39603df58d3d3fa"}, - {file = "greenlet-2.0.0-cp37-cp37m-win32.whl", hash = "sha256:6fd342126d825b76bf5b49717a7c682e31ed1114906cdec7f5a0c2ff1bc737a7"}, - {file = "greenlet-2.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:5392ddb893e7fba237b988f846c4a80576557cc08664d56dc1a69c5c02bdc80c"}, - {file = "greenlet-2.0.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b4fd73b62c1038e7ee938b1de328eaa918f76aa69c812beda3aff8a165494201"}, - {file = "greenlet-2.0.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:0ba0f2e5c4a8f141952411e356dba05d6fe0c38325ee0e4f2d0c6f4c2c3263d5"}, - {file = "greenlet-2.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8bacecee0c9348ab7c95df810e12585e9e8c331dfc1e22da4ed0bd635a5f483"}, - {file = "greenlet-2.0.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:341053e0a96d512315c27c34fad4672c4573caf9eb98310c39e7747645c88d8b"}, - {file = "greenlet-2.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49fcdd8ae391ffabb3b672397b58a9737aaff6b8cae0836e8db8ff386fcea802"}, - {file = "greenlet-2.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c3aa7d3bc545162a6676445709b24a2a375284dc5e2f2432d58b80827c2bd91c"}, - {file = "greenlet-2.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9d8dca31a39dd9f25641559b8cdf9066168c682dfcfbe0f797f03e4c9718a63a"}, - {file = "greenlet-2.0.0-cp38-cp38-win32.whl", hash = "sha256:aa2b371c3633e694d043d6cec7376cb0031c6f67029f37eef40bda105fd58753"}, - {file = "greenlet-2.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:0fa2a66fdf0d09929e79f786ad61529d4e752f452466f7ddaa5d03caf77a603d"}, - {file = "greenlet-2.0.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:e7ec3f2465ba9b7d25895307abe1c1c101a257c54b9ea1522bbcbe8ca8793735"}, - {file = "greenlet-2.0.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:99e9851e40150504474915605649edcde259a4cd9bce2fcdeb4cf33ad0b5c293"}, - {file = "greenlet-2.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20bf68672ae14ef2e2e6d3ac1f308834db1d0b920b3b0674eef48b2dce0498dd"}, - {file = "greenlet-2.0.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30198bccd774f9b6b1ba7564a0d02a79dd1fe926cfeb4107856fe16c9dfb441c"}, - {file = "greenlet-2.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d65d7d1ff64fb300127d2ffd27db909de4d21712a5dde59a3ad241fb65ee83d7"}, - {file = "greenlet-2.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2f5d396a5457458460b0c28f738fc8ab2738ee61b00c3f845c7047a333acd96c"}, - {file = "greenlet-2.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09f00f9938eb5ae1fe203558b56081feb0ca34a2895f8374cd01129ddf4d111c"}, - {file = "greenlet-2.0.0-cp39-cp39-win32.whl", hash = "sha256:089e123d80dbc6f61fff1ff0eae547b02c343d50968832716a7b0a33bea5f792"}, - {file = "greenlet-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:bc283f99a4815ef70cad537110e3e03abcef56ab7d005ba9a8c6ec33054ce9c0"}, - {file = "greenlet-2.0.0.tar.gz", hash = "sha256:6c66f0da8049ee3c126b762768179820d4c0ae0ca46ae489039e4da2fae39a52"}, + {file = "greenlet-2.0.0.post0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:b75e5644cc353328cd57ec8dafaaf5f81b2c3ecf7c4b278b907e99ad53ba7839"}, + {file = "greenlet-2.0.0.post0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:35827f98fd0d768862b8f15777e6dbb03fe6ac6e7bd1bee3f3ded4536f350347"}, + {file = "greenlet-2.0.0.post0-cp27-cp27m-win32.whl", hash = "sha256:b31de27313abbb567c528ed123380fcf18a5dfd03134570dfd12227e21ac1184"}, + {file = "greenlet-2.0.0.post0-cp27-cp27m-win_amd64.whl", hash = "sha256:b8cfc8fc944bd7b704691bc28225a2635e377e92dc413459845868d3f7724982"}, + {file = "greenlet-2.0.0.post0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:029ca674b3a7e8427db8f5c65d5ed4e24a7417af2a415a5958598aefd71980c4"}, + {file = "greenlet-2.0.0.post0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:13d492a807a5c7334b5931e9b6d9b181991ccc6a40555a7b177f189feff59b4b"}, + {file = "greenlet-2.0.0.post0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30ce47525f9a1515566429ac7de6b1ae76d32c3ccede256e3517a1a6419cf659"}, + {file = "greenlet-2.0.0.post0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9453135e48cd631e3e9f06d9da9100d17c9f662e4a6d8b552c29be6c834a6b9"}, + {file = "greenlet-2.0.0.post0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2055c52260808d87622293b57df1c68aeb12ddd8a0cfc0223fb57a5f629e202"}, + {file = "greenlet-2.0.0.post0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:118e708dd7bc88beaeeaa5a8601a7743b8835b7bbaf7c8f23ffa78f8bc8faf28"}, + {file = "greenlet-2.0.0.post0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0fee3240093b745efc857392f09379514ad84db4ca324514594bbdf6380016c8"}, + {file = "greenlet-2.0.0.post0-cp310-cp310-win_amd64.whl", hash = "sha256:3407b843b05da71fef0f1dd666059c08ad0e0f4afc3b9c93c998a2e53fac95e5"}, + {file = "greenlet-2.0.0.post0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0a5c03e2a68ec2ff1cba74ceaed899ec8cd353285f4f985c30c8cfbef9d3a3be"}, + {file = "greenlet-2.0.0.post0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e22485256bb1c60bbcc6f8509b1a11042358a2462d5ecdb9a82dc472d2fdd60"}, + {file = "greenlet-2.0.0.post0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7e9e0d4c5c618b0442396715ffe6c2f84a60d593dad7e0184388aed36d568a65"}, + {file = "greenlet-2.0.0.post0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:697cfbfc19815c40213badcfe5f076418e0f9100cd25a66f513f32c1026b8bf4"}, + {file = "greenlet-2.0.0.post0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4e144ab0de56b4d2a2cf0d2fb9d568b59fce49aab3e129badf17c12b0252047d"}, + {file = "greenlet-2.0.0.post0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c4310f0e42154995d92810f27b44ab7116a4a696feb0ff141ae2de59196efd7"}, + {file = "greenlet-2.0.0.post0-cp311-cp311-win_amd64.whl", hash = "sha256:8b7e5191b974fb66fcbac1818ba494d3512da9cf6eaef7acd952f9862eaaa20c"}, + {file = "greenlet-2.0.0.post0-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:3c3327da2bdab61078e42e695307465c425671a5a9251e6c29ee130d51943f28"}, + {file = "greenlet-2.0.0.post0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:b043782c8f6cccc8fae3a16db397eca1d36a41b0706cbf6f514aea1e1a260bab"}, + {file = "greenlet-2.0.0.post0-cp35-cp35m-win32.whl", hash = "sha256:6fc73fc8dd81d9efa842a55033b6b4cb233b134a0270e127c6874d053ef2049b"}, + {file = "greenlet-2.0.0.post0-cp35-cp35m-win_amd64.whl", hash = "sha256:4cfa629de5b2dea27c81b334c4536463e9a49ac0877e2008a276d58d4c72868a"}, + {file = "greenlet-2.0.0.post0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:08dc04f49ed1ea5e6772bb5e8cf2a77d1b1744566f4eca471a55b35af1278b31"}, + {file = "greenlet-2.0.0.post0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:3a22e5988f9d66b3e9ae9583bf9d8ef792b09f23afeb78707e6a4f47ab57cc5e"}, + {file = "greenlet-2.0.0.post0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6393ec3cecda53b20241e88bc33d87cbd8126cc10870fc69fa16ca2e20a5ac1b"}, + {file = "greenlet-2.0.0.post0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd0198006278291d9469309d655093df1f5e5107c0261e242b5f390baee32199"}, + {file = "greenlet-2.0.0.post0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ca723dfc2789c1fb991809822811896b198ecf0909dbccea4a07170d18c3e1b"}, + {file = "greenlet-2.0.0.post0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:e56a5a9f303e3ac011ba445a6d84f05d08666bf8db094afafcec5228622c30f5"}, + {file = "greenlet-2.0.0.post0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:4bbe2d074292e3646704371eb640ee52c386d633ed72ff223dadcd3fe8ecd8f9"}, + {file = "greenlet-2.0.0.post0-cp36-cp36m-win32.whl", hash = "sha256:335dcf676d5e4122e4006c16ae11eda2467af5461b949c265ce120b6b959ffe2"}, + {file = "greenlet-2.0.0.post0-cp36-cp36m-win_amd64.whl", hash = "sha256:8c80e9c41a83d8c90399af8c7dcdeae0c03c48b40b9d0ab84457533d5d7882bf"}, + {file = "greenlet-2.0.0.post0-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:e93ae35f0fd3caf75e58c76a1cab71e6ece169aaa1b281782ef9efde0a6b83f2"}, + {file = "greenlet-2.0.0.post0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:1cac9e9895aeff26434325404558783ee54f4ff3aec8daa56b8706796f7b01a0"}, + {file = "greenlet-2.0.0.post0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bab49783858cf724fff6868395cbeb81d1188cba23616b53e79de0beda29f42"}, + {file = "greenlet-2.0.0.post0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:56565ac9ab4ff3dd473bfe959e0bf2a5062aabb89b7c94cabb417beb162c9fff"}, + {file = "greenlet-2.0.0.post0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02bdb1e373b275bd705c43b249426e776c4f8a8ff2afaf8ec5ea0dde487d8a14"}, + {file = "greenlet-2.0.0.post0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:eb36b6570646227a63eda03916f1cc6f3744ee96d28f7a0a5629c59267a8055f"}, + {file = "greenlet-2.0.0.post0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:22eca421e3f2f3c18f4f54c0ff525aa9d397c6f116fce9ebd37b420174dbc027"}, + {file = "greenlet-2.0.0.post0-cp37-cp37m-win32.whl", hash = "sha256:f8c425a130e04d5404edaf6f5906e5ab12f3aa1168a1828aba6dfadac5910469"}, + {file = "greenlet-2.0.0.post0-cp37-cp37m-win_amd64.whl", hash = "sha256:81fdcf7c0c2df46a99ca421a552c4370117851c5e4dbd6cb53d569b896d62322"}, + {file = "greenlet-2.0.0.post0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:538c9e8f65a32413ace426f8117ef019021adf8175f7c491fed65f5fe2083e0c"}, + {file = "greenlet-2.0.0.post0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:a339e510a079dc8372e39ce1c7629414db51966235c9670c58d529def79243a2"}, + {file = "greenlet-2.0.0.post0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f2f110b9cc325f6543e0e3f4ab8008c272a59052f9464047c29d4be4511ce05"}, + {file = "greenlet-2.0.0.post0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2fbdec204ca40b3d0c0992a19c1ba627441c17983ac4ffc45baec7f5f53e20ca"}, + {file = "greenlet-2.0.0.post0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46156ae88ee71c37b6c4f7af63fff5d3ab8f45ef72e1a660bcf6386c1647f106"}, + {file = "greenlet-2.0.0.post0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a1a6745c5dce202aa3f29a1736c53cf2179e9c3b280dc62cea9cb8c69977c83"}, + {file = "greenlet-2.0.0.post0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:08f44e938d142271b954405afb6570e0be48a9f556b6bf4d42d2e3ae6a251fad"}, + {file = "greenlet-2.0.0.post0-cp38-cp38-win32.whl", hash = "sha256:d0e210e17a6181a3fd3f8dce957043a4e74177ffa9f295514984b2b633940dce"}, + {file = "greenlet-2.0.0.post0-cp38-cp38-win_amd64.whl", hash = "sha256:00ebdaf0fa51c284fd2172837d751731a15971e0c20d1a9163cfbdf620ce8b49"}, + {file = "greenlet-2.0.0.post0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:c416106b3b8e905b6ab0e84ec90047a6401021aa023f9aa93978e57cd8f8189f"}, + {file = "greenlet-2.0.0.post0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:8b26932be686f3582df039d79fe96f7ca13d63b39468162f816f9ff29584b9a4"}, + {file = "greenlet-2.0.0.post0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:602a69c24f1a9755dd1760b3b31bdfc495c4613260c876a01b7e6d5eb9bcae1b"}, + {file = "greenlet-2.0.0.post0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:666d2a0b269a68cd4fe0976544ab97970c5334d35d0e47ae9be1723f734d8204"}, + {file = "greenlet-2.0.0.post0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ea67f303cec384b148774667c7e3cf02311e7026fc02bdcdcd206dfe4ea4fc9"}, + {file = "greenlet-2.0.0.post0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2146d15429b4eeb412428737594acb5660a5bc0fdd1488d8a2a74a5ee32391fa"}, + {file = "greenlet-2.0.0.post0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:21ee1ae26d072b195edea764218623f6c15eba4ae06816908f33c82e0af018d3"}, + {file = "greenlet-2.0.0.post0-cp39-cp39-win32.whl", hash = "sha256:e1781bda1e787d3ad33788cc3be47f6e47a9581676d02670c15ee36c9460adfe"}, + {file = "greenlet-2.0.0.post0-cp39-cp39-win_amd64.whl", hash = "sha256:6442bbfb047dc1e47658954b72e1589f2bc4e12e67d51bbad0059a626180daa1"}, + {file = "greenlet-2.0.0.post0.tar.gz", hash = "sha256:ad9abc3e4d2370cecb524421cc5c8a664006aa11d5c1cb3c9250e3bf65ab546e"}, ] gunicorn = [ {file = "gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e"}, @@ -2380,11 +2385,11 @@ rich = [ {file = "rich-12.6.0.tar.gz", hash = "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0"}, ] selenium = [ - {file = "selenium-4.5.0-py3-none-any.whl", hash = "sha256:a733dd77d3171b846893f4d51b18967d809313f547a10974e26579f9ce797462"}, + {file = "selenium-4.6.0-py3-none-any.whl", hash = "sha256:3f1999875ef487ae676a254e7293a68041f1f1ec76be81402d8a1cd5a481bf3b"}, ] setuptools = [ - {file = "setuptools-65.5.0-py3-none-any.whl", hash = "sha256:f62ea9da9ed6289bfe868cd6845968a2c854d1427f8548d52cae02a42b4f0356"}, - {file = "setuptools-65.5.0.tar.gz", hash = "sha256:512e5536220e38146176efb833d4a62aa726b7bbff82cfbc8ba9eaa3996e0b17"}, + {file = "setuptools-65.5.1-py3-none-any.whl", hash = "sha256:d0b9a8433464d5800cbe05094acf5c6d52a91bfac9b52bcfc4d41382be5d5d31"}, + {file = "setuptools-65.5.1.tar.gz", hash = "sha256:e197a19aa8ec9722928f2206f8de752def0e4c9fc6953527360d1c36d94ddb2f"}, ] shortuuid = [ {file = "shortuuid-1.0.9-py3-none-any.whl", hash = "sha256:b2bb9eb7773170e253bb7ba25971023acb473517a8b76803d9618668cb1dd46f"}, @@ -2447,47 +2452,47 @@ sphinxcontrib-serializinghtml = [ {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, ] SQLAlchemy = [ - {file = "SQLAlchemy-1.4.42-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:28e881266a172a4d3c5929182fde6bb6fba22ac93f137d5380cc78a11a9dd124"}, - {file = "SQLAlchemy-1.4.42-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ca9389a00f639383c93ed00333ed763812f80b5ae9e772ea32f627043f8c9c88"}, - {file = "SQLAlchemy-1.4.42-cp27-cp27m-win32.whl", hash = "sha256:1d0c23ecf7b3bc81e29459c34a3f4c68ca538de01254e24718a7926810dc39a6"}, - {file = "SQLAlchemy-1.4.42-cp27-cp27m-win_amd64.whl", hash = "sha256:6c9d004eb78c71dd4d3ce625b80c96a827d2e67af9c0d32b1c1e75992a7916cc"}, - {file = "SQLAlchemy-1.4.42-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9e3a65ce9ed250b2f096f7b559fe3ee92e6605fab3099b661f0397a9ac7c8d95"}, - {file = "SQLAlchemy-1.4.42-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:2e56dfed0cc3e57b2f5c35719d64f4682ef26836b81067ee6cfad062290fd9e2"}, - {file = "SQLAlchemy-1.4.42-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b42c59ffd2d625b28cdb2ae4cde8488543d428cba17ff672a543062f7caee525"}, - {file = "SQLAlchemy-1.4.42-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:22459fc1718785d8a86171bbe7f01b5c9d7297301ac150f508d06e62a2b4e8d2"}, - {file = "SQLAlchemy-1.4.42-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df76e9c60879fdc785a34a82bf1e8691716ffac32e7790d31a98d7dec6e81545"}, - {file = "SQLAlchemy-1.4.42-cp310-cp310-win32.whl", hash = "sha256:e7e740453f0149437c101ea4fdc7eea2689938c5760d7dcc436c863a12f1f565"}, - {file = "SQLAlchemy-1.4.42-cp310-cp310-win_amd64.whl", hash = "sha256:effc89e606165ca55f04f3f24b86d3e1c605e534bf1a96e4e077ce1b027d0b71"}, - {file = "SQLAlchemy-1.4.42-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:97ff50cd85bb907c2a14afb50157d0d5486a4b4639976b4a3346f34b6d1b5272"}, - {file = "SQLAlchemy-1.4.42-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12c6949bae10f1012ab5c0ea52ab8db99adcb8c7b717938252137cdf694c775"}, - {file = "SQLAlchemy-1.4.42-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11b2ec26c5d2eefbc3e6dca4ec3d3d95028be62320b96d687b6e740424f83b7d"}, - {file = "SQLAlchemy-1.4.42-cp311-cp311-win32.whl", hash = "sha256:6045b3089195bc008aee5c273ec3ba9a93f6a55bc1b288841bd4cfac729b6516"}, - {file = "SQLAlchemy-1.4.42-cp311-cp311-win_amd64.whl", hash = "sha256:0501f74dd2745ec38f44c3a3900fb38b9db1ce21586b691482a19134062bf049"}, - {file = "SQLAlchemy-1.4.42-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:6e39e97102f8e26c6c8550cb368c724028c575ec8bc71afbbf8faaffe2b2092a"}, - {file = "SQLAlchemy-1.4.42-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15d878929c30e41fb3d757a5853b680a561974a0168cd33a750be4ab93181628"}, - {file = "SQLAlchemy-1.4.42-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fa5b7eb2051e857bf83bade0641628efe5a88de189390725d3e6033a1fff4257"}, - {file = "SQLAlchemy-1.4.42-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e1c5f8182b4f89628d782a183d44db51b5af84abd6ce17ebb9804355c88a7b5"}, - {file = "SQLAlchemy-1.4.42-cp36-cp36m-win32.whl", hash = "sha256:a7dd5b7b34a8ba8d181402d824b87c5cee8963cb2e23aa03dbfe8b1f1e417cde"}, - {file = "SQLAlchemy-1.4.42-cp36-cp36m-win_amd64.whl", hash = "sha256:5ede1495174e69e273fad68ad45b6d25c135c1ce67723e40f6cf536cb515e20b"}, - {file = "SQLAlchemy-1.4.42-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:9256563506e040daddccaa948d055e006e971771768df3bb01feeb4386c242b0"}, - {file = "SQLAlchemy-1.4.42-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4948b6c5f4e56693bbeff52f574279e4ff972ea3353f45967a14c30fb7ae2beb"}, - {file = "SQLAlchemy-1.4.42-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1811a0b19a08af7750c0b69e38dec3d46e47c4ec1d74b6184d69f12e1c99a5e0"}, - {file = "SQLAlchemy-1.4.42-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b01d9cd2f9096f688c71a3d0f33f3cd0af8549014e66a7a7dee6fc214a7277d"}, - {file = "SQLAlchemy-1.4.42-cp37-cp37m-win32.whl", hash = "sha256:bd448b262544b47a2766c34c0364de830f7fb0772d9959c1c42ad61d91ab6565"}, - {file = "SQLAlchemy-1.4.42-cp37-cp37m-win_amd64.whl", hash = "sha256:04f2598c70ea4a29b12d429a80fad3a5202d56dce19dd4916cc46a965a5ca2e9"}, - {file = "SQLAlchemy-1.4.42-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:3ab7c158f98de6cb4f1faab2d12973b330c2878d0c6b689a8ca424c02d66e1b3"}, - {file = "SQLAlchemy-1.4.42-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ee377eb5c878f7cefd633ab23c09e99d97c449dd999df639600f49b74725b80"}, - {file = "SQLAlchemy-1.4.42-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:934472bb7d8666727746a75670a1f8d91a9cae8c464bba79da30a0f6faccd9e1"}, - {file = "SQLAlchemy-1.4.42-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb94a3d1ba77ff2ef11912192c066f01e68416f554c194d769391638c8ad09a"}, - {file = "SQLAlchemy-1.4.42-cp38-cp38-win32.whl", hash = "sha256:f0f574465b78f29f533976c06b913e54ab4980b9931b69aa9d306afff13a9471"}, - {file = "SQLAlchemy-1.4.42-cp38-cp38-win_amd64.whl", hash = "sha256:a85723c00a636eed863adb11f1e8aaa36ad1c10089537823b4540948a8429798"}, - {file = "SQLAlchemy-1.4.42-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:5ce6929417d5dce5ad1d3f147db81735a4a0573b8fb36e3f95500a06eaddd93e"}, - {file = "SQLAlchemy-1.4.42-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723e3b9374c1ce1b53564c863d1a6b2f1dc4e97b1c178d9b643b191d8b1be738"}, - {file = "SQLAlchemy-1.4.42-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:876eb185911c8b95342b50a8c4435e1c625944b698a5b4a978ad2ffe74502908"}, - {file = "SQLAlchemy-1.4.42-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fd49af453e590884d9cdad3586415922a8e9bb669d874ee1dc55d2bc425aacd"}, - {file = "SQLAlchemy-1.4.42-cp39-cp39-win32.whl", hash = "sha256:e4ef8cb3c5b326f839bfeb6af5f406ba02ad69a78c7aac0fbeeba994ad9bb48a"}, - {file = "SQLAlchemy-1.4.42-cp39-cp39-win_amd64.whl", hash = "sha256:5f966b64c852592469a7eb759615bbd351571340b8b344f1d3fa2478b5a4c934"}, - {file = "SQLAlchemy-1.4.42.tar.gz", hash = "sha256:177e41914c476ed1e1b77fd05966ea88c094053e17a85303c4ce007f88eff363"}, + {file = "SQLAlchemy-1.4.43-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:491d94879f9ec0dea7e1cb053cd9cc65a28d2467960cf99f7b3c286590406060"}, + {file = "SQLAlchemy-1.4.43-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eeb55a555eef1a9607c1635bbdddd0b8a2bb9713bcb5bc8da1e8fae8ee46d1d8"}, + {file = "SQLAlchemy-1.4.43-cp27-cp27m-win32.whl", hash = "sha256:7d6293010aa0af8bd3b0c9993259f8979db2422d6abf85a31d70ec69cb2ee4dc"}, + {file = "SQLAlchemy-1.4.43-cp27-cp27m-win_amd64.whl", hash = "sha256:27479b5a1e110e64c56b18ffbf8cf99e101572a3d1a43943ea02158f1304108e"}, + {file = "SQLAlchemy-1.4.43-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:13ce4f3a068ec4ef7598d2a77f42adc3d90c76981f5a7c198756b25c4f4a22ea"}, + {file = "SQLAlchemy-1.4.43-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:aa12e27cb465b4b006ffb777624fc6023363e01cfed2d3f89d33fb6da80f6de2"}, + {file = "SQLAlchemy-1.4.43-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d16aca30fad4753aeb4ebde564bbd4a248b9673e4f879b940f4e806a17be87f"}, + {file = "SQLAlchemy-1.4.43-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cde363fb5412ab178f1cc1e596e9cfc396464da8a4fe8e733cc6d6b4e2c23aa9"}, + {file = "SQLAlchemy-1.4.43-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4abda3e693d24169221ffc7aa0444ccef3dc43dfeab6ad8665d3836751cd6af7"}, + {file = "SQLAlchemy-1.4.43-cp310-cp310-win32.whl", hash = "sha256:fa46d86a17cccd48c6762df1a60aecf5aaa2e0c0973efacf146c637694b62ffd"}, + {file = "SQLAlchemy-1.4.43-cp310-cp310-win_amd64.whl", hash = "sha256:962c7c80c54a42836c47cb0d8a53016986c8584e8d98e90e2ea723a4ed0ba85b"}, + {file = "SQLAlchemy-1.4.43-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f6e036714a586f757a3e12ff0798ce9a90aa04a60cff392d8bcacc5ecf79c95e"}, + {file = "SQLAlchemy-1.4.43-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d05d7365c2d1df03a69d90157a3e9b3e7b62088cca8ee6686aed2598659a6e14"}, + {file = "SQLAlchemy-1.4.43-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59bd0ae166253f7fed8c3f4f6265d2637f25d2f6614d00df34d7ee0d95d29c91"}, + {file = "SQLAlchemy-1.4.43-cp311-cp311-win32.whl", hash = "sha256:0c8a174f23bc021aac97bcb27fbe2ae3d4652d3d23e5768bc2ec3d44e386c7eb"}, + {file = "SQLAlchemy-1.4.43-cp311-cp311-win_amd64.whl", hash = "sha256:5d5937e1bf7921e4d1acdfad72dd98d9e7f9ea5c52aeb12b3b05b534b527692d"}, + {file = "SQLAlchemy-1.4.43-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:ed1c950aba723b7a5b702b88f05d883607c587de918d7d8c2014fe7f55cf67e0"}, + {file = "SQLAlchemy-1.4.43-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5438f6c768b7e928f0463777b545965648ba0d55877afd14a4e96d2a99702e7"}, + {file = "SQLAlchemy-1.4.43-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:41df873cdae1d56fde97a1b4f6ffa118f40e4b2d6a6aa8c25c50eea31ecbeb08"}, + {file = "SQLAlchemy-1.4.43-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a22f46440e61d90100e0f378faac40335fb5bbf278472df0d83dc15b653b9896"}, + {file = "SQLAlchemy-1.4.43-cp36-cp36m-win32.whl", hash = "sha256:529e2cc8af75811114e5ab2eb116fd71b6e252c6bdb32adbfcd5e0c5f6d5ab06"}, + {file = "SQLAlchemy-1.4.43-cp36-cp36m-win_amd64.whl", hash = "sha256:c1ced2fae7a1177a36cf94d0a5567452d195d3b4d7d932dd61f123fb15ddf87b"}, + {file = "SQLAlchemy-1.4.43-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:736d4e706adb3c95a0a7e660073a5213dfae78ff2df6addf8ff2918c83fbeebe"}, + {file = "SQLAlchemy-1.4.43-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23a4569d3db1ce44370d05c5ad79be4f37915fcc97387aef9da232b95db7b695"}, + {file = "SQLAlchemy-1.4.43-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:42bff29eaecbb284f614f4bb265bb0c268625f5b93ce6268f8017811e0afbdde"}, + {file = "SQLAlchemy-1.4.43-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee9613b0460dce970414cfc990ca40afe518bc139e697243fcdf890285fb30ac"}, + {file = "SQLAlchemy-1.4.43-cp37-cp37m-win32.whl", hash = "sha256:dc1e005d490c101d27657481a05765851ab795cc8aedeb8d9425595088b20736"}, + {file = "SQLAlchemy-1.4.43-cp37-cp37m-win_amd64.whl", hash = "sha256:c9a6e878e63286392b262d86d21fe16e6eec12b95ccb0a92c392f2b1e0acca03"}, + {file = "SQLAlchemy-1.4.43-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:c6de20de7c19b965c007c9da240268dde1451865099ca10f0f593c347041b845"}, + {file = "SQLAlchemy-1.4.43-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fef01240d32ada9007387afd8e0b2230f99efdc4b57ca6f1d1192fca4fcf6a5"}, + {file = "SQLAlchemy-1.4.43-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b6fd58e25e6cdd2a131d7e97f9713f8f2142360cd40c75af8aa5b83d535f811c"}, + {file = "SQLAlchemy-1.4.43-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35dc0a5e934c41e282e019c889069b01ff4cd356b2ea452c9985e1542734cfb1"}, + {file = "SQLAlchemy-1.4.43-cp38-cp38-win32.whl", hash = "sha256:fb9a44e7124f72b79023ab04e1c8fcd8f392939ef0d7a75beae8634e15605d30"}, + {file = "SQLAlchemy-1.4.43-cp38-cp38-win_amd64.whl", hash = "sha256:4a791e7a1e5ac33f70a3598f8f34fdd3b60c68593bbb038baf58bc50e02d7468"}, + {file = "SQLAlchemy-1.4.43-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:c9b59863e2b1f1e1ebf9ee517f86cdfa82d7049c8d81ad71ab58d442b137bbe9"}, + {file = "SQLAlchemy-1.4.43-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd80300d81d92661e2488a4bf4383f0c5dc6e7b05fa46d2823e231af4e30539a"}, + {file = "SQLAlchemy-1.4.43-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c3dde668edea70dc8d55a74d933d5446e5a97786cdd1c67c8e4971c73bd087ad"}, + {file = "SQLAlchemy-1.4.43-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b462c070769f0ef06ea5fe65206b970bcf2b59cb3fda2bec2f4729e1be89c13"}, + {file = "SQLAlchemy-1.4.43-cp39-cp39-win32.whl", hash = "sha256:c1f5bfffc3227d05d90c557b10604962f655b4a83c9f3ad507a81ac8d6847679"}, + {file = "SQLAlchemy-1.4.43-cp39-cp39-win_amd64.whl", hash = "sha256:a7fa3e57a7b0476fbcba72b231150503d53dbcbdd23f4a86be5152912a923b6e"}, + {file = "SQLAlchemy-1.4.43.tar.gz", hash = "sha256:c628697aad7a141da8fc3fd81b4874a711cc84af172e1b1e7bbfadf760446496"}, ] staticmap = [ {file = "staticmap-0.5.5.tar.gz", hash = "sha256:007c507b4d42e00eaba179649753f2f8d69d4ece3028736e18d9e86493044387"}, diff --git a/pyproject.toml b/pyproject.toml index c2d7deec..a6aba638 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,7 +42,7 @@ python-forecastio = "^1.4" pytz = "^2022.6" shortuuid = "^1.0.9" staticmap = "^0.5.4" -sqlalchemy = "=1.4.42" +sqlalchemy = "=1.4.43" pyopenssl = "^22.1" ua-parser = "^0.16.1" werkzeug = "2.1" # removal of parse_rule in 2.2 breaks sphinxcontrib-httpdomain autoflask From 1fcbf6d58c784681a988db47ca53f73df9f15431 Mon Sep 17 00:00:00 2001 From: Sam Date: Sat, 5 Nov 2022 08:44:42 +0100 Subject: [PATCH 08/10] update js dependencies --- fittrackee_client/package.json | 2 +- fittrackee_client/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/fittrackee_client/package.json b/fittrackee_client/package.json index 292c6093..025e76db 100644 --- a/fittrackee_client/package.json +++ b/fittrackee_client/package.json @@ -57,7 +57,7 @@ "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-vue": "^9.7.0", "prettier": "^2.7.1", - "sass": "^1.55.0", + "sass": "^1.56.0", "sass-loader": "^13.1.0", "typescript": "^4.8.4", "vue-cli-plugin-i18n": "~2.3.1" diff --git a/fittrackee_client/yarn.lock b/fittrackee_client/yarn.lock index 1e4a196c..bc048183 100644 --- a/fittrackee_client/yarn.lock +++ b/fittrackee_client/yarn.lock @@ -6719,10 +6719,10 @@ sass-loader@^13.1.0: klona "^2.0.4" neo-async "^2.6.2" -sass@^1.55.0: - version "1.55.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.55.0.tgz#0c4d3c293cfe8f8a2e8d3b666e1cf1bff8065d1c" - integrity sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A== +sass@^1.56.0: + version "1.56.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.56.0.tgz#134032075a3223c8d49cb5c35e091e5ba1de8e0a" + integrity sha512-WFJ9XrpkcnqZcYuLRJh5qiV6ibQOR4AezleeEjTjMsCocYW59dEG19U3fwTTXxzi2Ed3yjPBp727hbbj53pHFw== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From e921d12b0c6134eff60b725aa2884317e939465b Mon Sep 17 00:00:00 2001 From: Sam Date: Sat, 5 Nov 2022 08:44:58 +0100 Subject: [PATCH 09/10] build client dist files --- fittrackee/dist/index.html | 2 +- fittrackee/dist/service-worker.js | 2 +- fittrackee/dist/service-worker.js.map | 2 +- .../dist/static/js/{admin.9bc68088.js => admin.c8949458.js} | 2 +- .../js/{admin.9bc68088.js.map => admin.c8949458.js.map} | 2 +- .../dist/static/js/{app.3ce255f9.js => app.948d4b2d.js} | 4 ++-- .../static/js/{app.3ce255f9.js.map => app.948d4b2d.js.map} | 2 +- .../static/js/{profile.430ae7df.js => profile.ff8ee2f9.js} | 2 +- .../js/{profile.430ae7df.js.map => profile.ff8ee2f9.js.map} | 2 +- .../dist/static/js/{reset.3194c9f0.js => reset.f6540a23.js} | 2 +- .../js/{reset.3194c9f0.js.map => reset.f6540a23.js.map} | 2 +- .../js/{statistics.04a17f2e.js => statistics.faaccb1e.js} | 2 +- ...{statistics.04a17f2e.js.map => statistics.faaccb1e.js.map} | 2 +- .../static/js/{workouts.a514f12a.js => workouts.f1d6cc45.js} | 2 +- .../js/{workouts.a514f12a.js.map => workouts.f1d6cc45.js.map} | 2 +- 15 files changed, 16 insertions(+), 16 deletions(-) rename fittrackee/dist/static/js/{admin.9bc68088.js => admin.c8949458.js} (96%) rename fittrackee/dist/static/js/{admin.9bc68088.js.map => admin.c8949458.js.map} (98%) rename fittrackee/dist/static/js/{app.3ce255f9.js => app.948d4b2d.js} (99%) rename fittrackee/dist/static/js/{app.3ce255f9.js.map => app.948d4b2d.js.map} (99%) rename fittrackee/dist/static/js/{profile.430ae7df.js => profile.ff8ee2f9.js} (98%) rename fittrackee/dist/static/js/{profile.430ae7df.js.map => profile.ff8ee2f9.js.map} (99%) rename fittrackee/dist/static/js/{reset.3194c9f0.js => reset.f6540a23.js} (99%) rename fittrackee/dist/static/js/{reset.3194c9f0.js.map => reset.f6540a23.js.map} (99%) rename fittrackee/dist/static/js/{statistics.04a17f2e.js => statistics.faaccb1e.js} (98%) rename fittrackee/dist/static/js/{statistics.04a17f2e.js.map => statistics.faaccb1e.js.map} (99%) rename fittrackee/dist/static/js/{workouts.a514f12a.js => workouts.f1d6cc45.js} (99%) rename fittrackee/dist/static/js/{workouts.a514f12a.js.map => workouts.f1d6cc45.js.map} (99%) diff --git a/fittrackee/dist/index.html b/fittrackee/dist/index.html index 5f0e2003..5b67e0b8 100644 --- a/fittrackee/dist/index.html +++ b/fittrackee/dist/index.html @@ -1 +1 @@ -FitTrackee
\ No newline at end of file +FitTrackee
\ No newline at end of file diff --git a/fittrackee/dist/service-worker.js b/fittrackee/dist/service-worker.js index 3bc542c9..4f026804 100644 --- a/fittrackee/dist/service-worker.js +++ b/fittrackee/dist/service-worker.js @@ -1,2 +1,2 @@ -if(!self.define){let s,i={};const e=(e,t)=>(e=new URL(e+".js",t).href,i[e]||new Promise((i=>{if("document"in self){const s=document.createElement("script");s.src=e,s.onload=i,document.head.appendChild(s)}else s=e,importScripts(e),i()})).then((()=>{let s=i[e];if(!s)throw new Error(`Module ${e} didn’t register its module`);return s})));self.define=(t,r)=>{const a=s||("document"in self?document.currentScript.src:"")||location.href;if(i[a])return;let n={};const l=s=>e(s,a),c={module:{uri:a},exports:n,require:l};i[a]=Promise.all(t.map((s=>c[s]||l(s)))).then((s=>(r(...s),n)))}}define(["./workbox-db5fc017"],(function(s){"use strict";s.setCacheNameDetails({prefix:"fittrackee_client"}),self.addEventListener("message",(s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()})),s.precacheAndRoute([{url:"/img/bike.svg",revision:"ab4faed007625b209af72b9b8dce84db"},{url:"/img/weather/breeze.svg",revision:"428c6ccb838f8e91dc4826c5b650a98b"},{url:"/img/weather/clear-day.svg",revision:"f3e8628de2e5089f508f03944f8be951"},{url:"/img/weather/clear-night.svg",revision:"6a0d6579a93e89fdf1a2a95b398e0935"},{url:"/img/weather/cloudy.svg",revision:"c52fe62c9d9fea2cdf5ae2813b3df366"},{url:"/img/weather/fog.svg",revision:"9f4d74289594eb83f9c175d13167a0eb"},{url:"/img/weather/partly-cloudy-day.svg",revision:"f730c2e4f4c014e8b49c9d4a0a141b90"},{url:"/img/weather/partly-cloudy-night.svg",revision:"0d9270901c4dffbc05f3998d835171c8"},{url:"/img/weather/pour-rain.svg",revision:"91eb3159ba8781d258d8c384a8ef987c"},{url:"/img/weather/rain.svg",revision:"c52ca88ce0ddf4de0fc29167e578b2be"},{url:"/img/weather/sleet.svg",revision:"97d61d89332f912c1ec27bcbe077b7bd"},{url:"/img/weather/snow.svg",revision:"9e88c89c0d6d14174e9665e98932dd80"},{url:"/img/weather/temperature.svg",revision:"d42b62d0b57d5d326506277d87b70435"},{url:"/img/weather/wind.svg",revision:"d75fbe559220d7b2b9577a98a91f38d0"},{url:"/img/workouts/finish.svg",revision:"375196b7ade7c07c3b64ac4cb8b850a8"},{url:"/img/workouts/mountains.svg",revision:"0b94f1d4a050a86ca5ac89ab3ed60f9c"},{url:"/img/workouts/start.svg",revision:"97f6a197b6c2869e0cb2ff0e7697af86"},{url:"/index.html",revision:"83ac98b5c391ddb9e0927f2ab9b60f8a"},{url:"/manifest.json",revision:"c61028ca6e9f81bf958e6b66238e2d7c"},{url:"/robots.txt",revision:"b6216d61c03e6ce0c9aea6ca7808f7ca"},{url:"/static/css/admin.73df498d.css",revision:null},{url:"/static/css/app.564b9516.css",revision:null},{url:"/static/css/fork-awesome.min.css",revision:"82c1118c918377daaa71a320ab8eea42"},{url:"/static/css/leaflet.css",revision:"5c761a156eea82263d8bacf1718fe04d"},{url:"/static/css/profile.203e78e2.css",revision:null},{url:"/static/css/reset.e2527ec6.css",revision:null},{url:"/static/css/statistics.40e24e75.css",revision:null},{url:"/static/css/workouts.41709693.css",revision:null},{url:"/static/fonts/forkawesome-webfont.eot",revision:"e719f9244c69e28e7d00e725ca1e280e"},{url:"/static/fonts/forkawesome-webfont.svg",revision:"d58987a18774d859d98af95281c1dee5"},{url:"/static/fonts/forkawesome-webfont.ttf",revision:"fe45770c6c277da3921355d971045ea5"},{url:"/static/fonts/forkawesome-webfont.woff",revision:"92cd4d8328b2ae614386a01ff935a9f3"},{url:"/static/fonts/forkawesome-webfont.woff2",revision:"12ee76445f0383c58529169d700b6650"},{url:"/static/fonts/pt-sans-v9-latin-700.01a58da9.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.51b1613b.woff2",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.5ff2a2d7.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.6514157e.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.10011d51.woff2",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.6206408d.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.8293436e.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.fe36f54f.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.b5b74f16.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.c43bc0a2.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.c5a514ae.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.e7867499.woff2",revision:null},{url:"/static/img/map.5b26d82b.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-700.b8a7047e.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-italic.0b285c83.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-regular.59a385b4.svg",revision:null},{url:"/static/js/243.e551248f.js",revision:null},{url:"/static/js/431.e5102e07.js",revision:null},{url:"/static/js/633.81a8ddc8.js",revision:null},{url:"/static/js/858.3f2a93f2.js",revision:null},{url:"/static/js/93.02cf293c.js",revision:null},{url:"/static/js/admin.9bc68088.js",revision:null},{url:"/static/js/app.3ce255f9.js",revision:null},{url:"/static/js/chunk-vendors.50f5c7a2.js",revision:null},{url:"/static/js/profile.430ae7df.js",revision:null},{url:"/static/js/reset.3194c9f0.js",revision:null},{url:"/static/js/statistics.04a17f2e.js",revision:null},{url:"/static/js/workouts.a514f12a.js",revision:null}],{})})); +if(!self.define){let s,i={};const e=(e,t)=>(e=new URL(e+".js",t).href,i[e]||new Promise((i=>{if("document"in self){const s=document.createElement("script");s.src=e,s.onload=i,document.head.appendChild(s)}else s=e,importScripts(e),i()})).then((()=>{let s=i[e];if(!s)throw new Error(`Module ${e} didn’t register its module`);return s})));self.define=(t,r)=>{const a=s||("document"in self?document.currentScript.src:"")||location.href;if(i[a])return;let n={};const l=s=>e(s,a),c={module:{uri:a},exports:n,require:l};i[a]=Promise.all(t.map((s=>c[s]||l(s)))).then((s=>(r(...s),n)))}}define(["./workbox-db5fc017"],(function(s){"use strict";s.setCacheNameDetails({prefix:"fittrackee_client"}),self.addEventListener("message",(s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()})),s.precacheAndRoute([{url:"/img/bike.svg",revision:"ab4faed007625b209af72b9b8dce84db"},{url:"/img/weather/breeze.svg",revision:"428c6ccb838f8e91dc4826c5b650a98b"},{url:"/img/weather/clear-day.svg",revision:"f3e8628de2e5089f508f03944f8be951"},{url:"/img/weather/clear-night.svg",revision:"6a0d6579a93e89fdf1a2a95b398e0935"},{url:"/img/weather/cloudy.svg",revision:"c52fe62c9d9fea2cdf5ae2813b3df366"},{url:"/img/weather/fog.svg",revision:"9f4d74289594eb83f9c175d13167a0eb"},{url:"/img/weather/partly-cloudy-day.svg",revision:"f730c2e4f4c014e8b49c9d4a0a141b90"},{url:"/img/weather/partly-cloudy-night.svg",revision:"0d9270901c4dffbc05f3998d835171c8"},{url:"/img/weather/pour-rain.svg",revision:"91eb3159ba8781d258d8c384a8ef987c"},{url:"/img/weather/rain.svg",revision:"c52ca88ce0ddf4de0fc29167e578b2be"},{url:"/img/weather/sleet.svg",revision:"97d61d89332f912c1ec27bcbe077b7bd"},{url:"/img/weather/snow.svg",revision:"9e88c89c0d6d14174e9665e98932dd80"},{url:"/img/weather/temperature.svg",revision:"d42b62d0b57d5d326506277d87b70435"},{url:"/img/weather/wind.svg",revision:"d75fbe559220d7b2b9577a98a91f38d0"},{url:"/img/workouts/finish.svg",revision:"375196b7ade7c07c3b64ac4cb8b850a8"},{url:"/img/workouts/mountains.svg",revision:"0b94f1d4a050a86ca5ac89ab3ed60f9c"},{url:"/img/workouts/start.svg",revision:"97f6a197b6c2869e0cb2ff0e7697af86"},{url:"/index.html",revision:"6d62a7d391fad1f1475e4c68b5b0d1d5"},{url:"/manifest.json",revision:"c61028ca6e9f81bf958e6b66238e2d7c"},{url:"/robots.txt",revision:"b6216d61c03e6ce0c9aea6ca7808f7ca"},{url:"/static/css/admin.73df498d.css",revision:null},{url:"/static/css/app.564b9516.css",revision:null},{url:"/static/css/fork-awesome.min.css",revision:"82c1118c918377daaa71a320ab8eea42"},{url:"/static/css/leaflet.css",revision:"5c761a156eea82263d8bacf1718fe04d"},{url:"/static/css/profile.203e78e2.css",revision:null},{url:"/static/css/reset.e2527ec6.css",revision:null},{url:"/static/css/statistics.40e24e75.css",revision:null},{url:"/static/css/workouts.41709693.css",revision:null},{url:"/static/fonts/forkawesome-webfont.eot",revision:"e719f9244c69e28e7d00e725ca1e280e"},{url:"/static/fonts/forkawesome-webfont.svg",revision:"d58987a18774d859d98af95281c1dee5"},{url:"/static/fonts/forkawesome-webfont.ttf",revision:"fe45770c6c277da3921355d971045ea5"},{url:"/static/fonts/forkawesome-webfont.woff",revision:"92cd4d8328b2ae614386a01ff935a9f3"},{url:"/static/fonts/forkawesome-webfont.woff2",revision:"12ee76445f0383c58529169d700b6650"},{url:"/static/fonts/pt-sans-v9-latin-700.01a58da9.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.51b1613b.woff2",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.5ff2a2d7.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.6514157e.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.10011d51.woff2",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.6206408d.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.8293436e.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.fe36f54f.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.b5b74f16.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.c43bc0a2.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.c5a514ae.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.e7867499.woff2",revision:null},{url:"/static/img/map.5b26d82b.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-700.b8a7047e.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-italic.0b285c83.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-regular.59a385b4.svg",revision:null},{url:"/static/js/243.e551248f.js",revision:null},{url:"/static/js/431.e5102e07.js",revision:null},{url:"/static/js/633.81a8ddc8.js",revision:null},{url:"/static/js/858.3f2a93f2.js",revision:null},{url:"/static/js/93.02cf293c.js",revision:null},{url:"/static/js/admin.c8949458.js",revision:null},{url:"/static/js/app.948d4b2d.js",revision:null},{url:"/static/js/chunk-vendors.50f5c7a2.js",revision:null},{url:"/static/js/profile.ff8ee2f9.js",revision:null},{url:"/static/js/reset.f6540a23.js",revision:null},{url:"/static/js/statistics.faaccb1e.js",revision:null},{url:"/static/js/workouts.f1d6cc45.js",revision:null}],{})})); //# sourceMappingURL=service-worker.js.map diff --git a/fittrackee/dist/service-worker.js.map b/fittrackee/dist/service-worker.js.map index 50eb1a96..b37ca264 100644 --- a/fittrackee/dist/service-worker.js.map +++ b/fittrackee/dist/service-worker.js.map @@ -1 +1 @@ -{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/2d7e18c19c28313ab0dcc91110a5f633/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"fittrackee_client\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/img/bike.svg\",\n \"revision\": \"ab4faed007625b209af72b9b8dce84db\"\n },\n {\n \"url\": \"/img/weather/breeze.svg\",\n \"revision\": \"428c6ccb838f8e91dc4826c5b650a98b\"\n },\n {\n \"url\": \"/img/weather/clear-day.svg\",\n \"revision\": \"f3e8628de2e5089f508f03944f8be951\"\n },\n {\n \"url\": \"/img/weather/clear-night.svg\",\n \"revision\": \"6a0d6579a93e89fdf1a2a95b398e0935\"\n },\n {\n \"url\": \"/img/weather/cloudy.svg\",\n \"revision\": \"c52fe62c9d9fea2cdf5ae2813b3df366\"\n },\n {\n \"url\": \"/img/weather/fog.svg\",\n \"revision\": \"9f4d74289594eb83f9c175d13167a0eb\"\n },\n {\n \"url\": \"/img/weather/partly-cloudy-day.svg\",\n \"revision\": \"f730c2e4f4c014e8b49c9d4a0a141b90\"\n },\n {\n \"url\": \"/img/weather/partly-cloudy-night.svg\",\n \"revision\": \"0d9270901c4dffbc05f3998d835171c8\"\n },\n {\n \"url\": \"/img/weather/pour-rain.svg\",\n \"revision\": \"91eb3159ba8781d258d8c384a8ef987c\"\n },\n {\n \"url\": \"/img/weather/rain.svg\",\n \"revision\": \"c52ca88ce0ddf4de0fc29167e578b2be\"\n },\n {\n \"url\": \"/img/weather/sleet.svg\",\n \"revision\": \"97d61d89332f912c1ec27bcbe077b7bd\"\n },\n {\n \"url\": \"/img/weather/snow.svg\",\n \"revision\": \"9e88c89c0d6d14174e9665e98932dd80\"\n },\n {\n \"url\": \"/img/weather/temperature.svg\",\n \"revision\": \"d42b62d0b57d5d326506277d87b70435\"\n },\n {\n \"url\": \"/img/weather/wind.svg\",\n \"revision\": \"d75fbe559220d7b2b9577a98a91f38d0\"\n },\n {\n \"url\": \"/img/workouts/finish.svg\",\n \"revision\": \"375196b7ade7c07c3b64ac4cb8b850a8\"\n },\n {\n \"url\": \"/img/workouts/mountains.svg\",\n \"revision\": \"0b94f1d4a050a86ca5ac89ab3ed60f9c\"\n },\n {\n \"url\": \"/img/workouts/start.svg\",\n \"revision\": \"97f6a197b6c2869e0cb2ff0e7697af86\"\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"83ac98b5c391ddb9e0927f2ab9b60f8a\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"c61028ca6e9f81bf958e6b66238e2d7c\"\n },\n {\n \"url\": \"/robots.txt\",\n \"revision\": \"b6216d61c03e6ce0c9aea6ca7808f7ca\"\n },\n {\n \"url\": \"/static/css/admin.73df498d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/app.564b9516.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/fork-awesome.min.css\",\n \"revision\": \"82c1118c918377daaa71a320ab8eea42\"\n },\n {\n \"url\": \"/static/css/leaflet.css\",\n \"revision\": \"5c761a156eea82263d8bacf1718fe04d\"\n },\n {\n \"url\": \"/static/css/profile.203e78e2.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/reset.e2527ec6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/statistics.40e24e75.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/workouts.41709693.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.eot\",\n \"revision\": \"e719f9244c69e28e7d00e725ca1e280e\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.svg\",\n \"revision\": \"d58987a18774d859d98af95281c1dee5\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.ttf\",\n \"revision\": \"fe45770c6c277da3921355d971045ea5\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.woff\",\n \"revision\": \"92cd4d8328b2ae614386a01ff935a9f3\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.woff2\",\n \"revision\": \"12ee76445f0383c58529169d700b6650\"\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.01a58da9.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.51b1613b.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.5ff2a2d7.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.6514157e.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.10011d51.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.6206408d.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.8293436e.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.fe36f54f.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.b5b74f16.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.c43bc0a2.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.c5a514ae.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.e7867499.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/map.5b26d82b.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-700.b8a7047e.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-italic.0b285c83.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-regular.59a385b4.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/243.e551248f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/431.e5102e07.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/633.81a8ddc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/858.3f2a93f2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/93.02cf293c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/admin.9bc68088.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/app.3ce255f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/chunk-vendors.50f5c7a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/profile.430ae7df.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/reset.3194c9f0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/statistics.04a17f2e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/workouts.a514f12a.js\",\n \"revision\": null\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"0nBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,sBAG1CC,KAAKC,iBAAiB,WAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,aACP,IAWFC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,gBACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,sCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,MAEd,CACED,IAAO,oDACPC,SAAY,MAEd,CACED,IAAO,mDACPC,SAAY,MAEd,CACED,IAAO,kDACPC,SAAY,MAEd,CACED,IAAO,uDACPC,SAAY,MAEd,CACED,IAAO,qDACPC,SAAY,MAEd,CACED,IAAO,qDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,uDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,wDACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,gDACPC,SAAY,MAEd,CACED,IAAO,mDACPC,SAAY,MAEd,CACED,IAAO,oDACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,4BACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,uCACPC,SAAY,MAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,OAEb,CAAA"} \ No newline at end of file +{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/3c896925405f76f060fe53d72939edef/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"fittrackee_client\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/img/bike.svg\",\n \"revision\": \"ab4faed007625b209af72b9b8dce84db\"\n },\n {\n \"url\": \"/img/weather/breeze.svg\",\n \"revision\": \"428c6ccb838f8e91dc4826c5b650a98b\"\n },\n {\n \"url\": \"/img/weather/clear-day.svg\",\n \"revision\": \"f3e8628de2e5089f508f03944f8be951\"\n },\n {\n \"url\": \"/img/weather/clear-night.svg\",\n \"revision\": \"6a0d6579a93e89fdf1a2a95b398e0935\"\n },\n {\n \"url\": \"/img/weather/cloudy.svg\",\n \"revision\": \"c52fe62c9d9fea2cdf5ae2813b3df366\"\n },\n {\n \"url\": \"/img/weather/fog.svg\",\n \"revision\": \"9f4d74289594eb83f9c175d13167a0eb\"\n },\n {\n \"url\": \"/img/weather/partly-cloudy-day.svg\",\n \"revision\": \"f730c2e4f4c014e8b49c9d4a0a141b90\"\n },\n {\n \"url\": \"/img/weather/partly-cloudy-night.svg\",\n \"revision\": \"0d9270901c4dffbc05f3998d835171c8\"\n },\n {\n \"url\": \"/img/weather/pour-rain.svg\",\n \"revision\": \"91eb3159ba8781d258d8c384a8ef987c\"\n },\n {\n \"url\": \"/img/weather/rain.svg\",\n \"revision\": \"c52ca88ce0ddf4de0fc29167e578b2be\"\n },\n {\n \"url\": \"/img/weather/sleet.svg\",\n \"revision\": \"97d61d89332f912c1ec27bcbe077b7bd\"\n },\n {\n \"url\": \"/img/weather/snow.svg\",\n \"revision\": \"9e88c89c0d6d14174e9665e98932dd80\"\n },\n {\n \"url\": \"/img/weather/temperature.svg\",\n \"revision\": \"d42b62d0b57d5d326506277d87b70435\"\n },\n {\n \"url\": \"/img/weather/wind.svg\",\n \"revision\": \"d75fbe559220d7b2b9577a98a91f38d0\"\n },\n {\n \"url\": \"/img/workouts/finish.svg\",\n \"revision\": \"375196b7ade7c07c3b64ac4cb8b850a8\"\n },\n {\n \"url\": \"/img/workouts/mountains.svg\",\n \"revision\": \"0b94f1d4a050a86ca5ac89ab3ed60f9c\"\n },\n {\n \"url\": \"/img/workouts/start.svg\",\n \"revision\": \"97f6a197b6c2869e0cb2ff0e7697af86\"\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"6d62a7d391fad1f1475e4c68b5b0d1d5\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"c61028ca6e9f81bf958e6b66238e2d7c\"\n },\n {\n \"url\": \"/robots.txt\",\n \"revision\": \"b6216d61c03e6ce0c9aea6ca7808f7ca\"\n },\n {\n \"url\": \"/static/css/admin.73df498d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/app.564b9516.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/fork-awesome.min.css\",\n \"revision\": \"82c1118c918377daaa71a320ab8eea42\"\n },\n {\n \"url\": \"/static/css/leaflet.css\",\n \"revision\": \"5c761a156eea82263d8bacf1718fe04d\"\n },\n {\n \"url\": \"/static/css/profile.203e78e2.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/reset.e2527ec6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/statistics.40e24e75.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/workouts.41709693.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.eot\",\n \"revision\": \"e719f9244c69e28e7d00e725ca1e280e\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.svg\",\n \"revision\": \"d58987a18774d859d98af95281c1dee5\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.ttf\",\n \"revision\": \"fe45770c6c277da3921355d971045ea5\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.woff\",\n \"revision\": \"92cd4d8328b2ae614386a01ff935a9f3\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.woff2\",\n \"revision\": \"12ee76445f0383c58529169d700b6650\"\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.01a58da9.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.51b1613b.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.5ff2a2d7.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.6514157e.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.10011d51.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.6206408d.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.8293436e.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.fe36f54f.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.b5b74f16.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.c43bc0a2.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.c5a514ae.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.e7867499.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/map.5b26d82b.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-700.b8a7047e.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-italic.0b285c83.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-regular.59a385b4.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/243.e551248f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/431.e5102e07.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/633.81a8ddc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/858.3f2a93f2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/93.02cf293c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/admin.c8949458.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/app.948d4b2d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/chunk-vendors.50f5c7a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/profile.ff8ee2f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/reset.f6540a23.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/statistics.faaccb1e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/workouts.f1d6cc45.js\",\n \"revision\": null\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"0nBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,sBAG1CC,KAAKC,iBAAiB,WAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,aACP,IAWFC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,gBACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,sCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,MAEd,CACED,IAAO,oDACPC,SAAY,MAEd,CACED,IAAO,mDACPC,SAAY,MAEd,CACED,IAAO,kDACPC,SAAY,MAEd,CACED,IAAO,uDACPC,SAAY,MAEd,CACED,IAAO,qDACPC,SAAY,MAEd,CACED,IAAO,qDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,uDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,wDACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,gDACPC,SAAY,MAEd,CACED,IAAO,mDACPC,SAAY,MAEd,CACED,IAAO,oDACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,4BACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,uCACPC,SAAY,MAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,OAEb,CAAA"} \ No newline at end of file diff --git a/fittrackee/dist/static/js/admin.9bc68088.js b/fittrackee/dist/static/js/admin.c8949458.js similarity index 96% rename from fittrackee/dist/static/js/admin.9bc68088.js rename to fittrackee/dist/static/js/admin.c8949458.js index 259f4776..90cc43c9 100644 --- a/fittrackee/dist/static/js/admin.9bc68088.js +++ b/fittrackee/dist/static/js/admin.c8949458.js @@ -1,2 +1,2 @@ "use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[328],{6e3:function(t,e,i){i.r(e),i.d(e,{default:function(){return _}});var a=i(6252),n=i(2262),s=i(8273),c=i(5801),r=i(9917);const S=t=>((0,a.dD)("data-v-64629971"),t=t(),(0,a.Cn)(),t),l={id:"admin",class:"view"},p={key:0,class:"container"},u=S((()=>(0,a._)("div",{id:"bottom"},null,-1)));var T=(0,a.aZ)({__name:"AdminView",setup(t){const e=(0,r.o)(),i=(0,a.Fl)((()=>e.getters[c.SY.GETTERS.APP_CONFIG])),S=(0,a.Fl)((()=>e.getters[c.SY.GETTERS.APP_STATS])),T=(0,a.Fl)((()=>e.getters[c.YN.GETTERS.IS_ADMIN])),d=(0,a.Fl)((()=>e.getters[c.YN.GETTERS.USER_LOADING]));return(0,a.wF)((()=>e.dispatch(c.SY.ACTIONS.GET_APPLICATION_STATS))),(t,e)=>{const c=(0,a.up)("router-view");return(0,a.wg)(),(0,a.iD)("div",l,[(0,n.SU)(d)?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("div",p,[(0,n.SU)(T)?((0,a.wg)(),(0,a.j4)(c,{key:0,appConfig:(0,n.SU)(i),appStatistics:(0,n.SU)(S)},null,8,["appConfig","appStatistics"])):((0,a.wg)(),(0,a.j4)(s.Z,{key:1})),u]))])}}}),d=i(3744);const o=(0,d.Z)(T,[["__scopeId","data-v-64629971"]]);var _=o}}]); -//# sourceMappingURL=admin.9bc68088.js.map \ No newline at end of file +//# sourceMappingURL=admin.c8949458.js.map \ No newline at end of file diff --git a/fittrackee/dist/static/js/admin.9bc68088.js.map b/fittrackee/dist/static/js/admin.c8949458.js.map similarity index 98% rename from fittrackee/dist/static/js/admin.9bc68088.js.map rename to fittrackee/dist/static/js/admin.c8949458.js.map index d2599353..37ec87c8 100644 --- a/fittrackee/dist/static/js/admin.9bc68088.js.map +++ b/fittrackee/dist/static/js/admin.c8949458.js.map @@ -1 +1 @@ -{"version":3,"file":"static/js/admin.9bc68088.js","mappings":"mOAGA,MAAMA,EAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzEG,EAAa,CACjBC,GAAI,QACJC,MAAO,QAEHC,EAAa,CACjBC,IAAK,EACLF,MAAO,aAEHG,EAA2BT,GAAa,KAAmBU,EAAAA,EAAAA,GAAoB,MAAO,CAAEL,GAAI,UAAY,MAAO,KAUrH,OAA4BM,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,YACRC,MAAMC,GAEN,MAAMC,GAAQC,EAAAA,EAAAA,KAERC,GAAqCC,EAAAA,EAAAA,KACzC,IAAMH,EAAMI,QAAQC,EAAAA,GAAAA,QAAAA,cAEhBC,GAA6CH,EAAAA,EAAAA,KACjD,IAAMH,EAAMI,QAAQC,EAAAA,GAAAA,QAAAA,aAEhBE,GAAuCJ,EAAAA,EAAAA,KAC3C,IAAMH,EAAMI,QAAQI,EAAAA,GAAAA,QAAAA,YAEhBC,GAAoCN,EAAAA,EAAAA,KACxC,IAAMH,EAAMI,QAAQI,EAAAA,GAAAA,QAAAA,gBAKxB,OAFEE,EAAAA,EAAAA,KAAc,IAAMV,EAAMW,SAASN,EAAAA,GAAAA,QAAAA,yBAE9B,CAACO,EAAUC,KAChB,MAAMC,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO5B,EAAY,EACzD6B,EAAAA,EAAAA,IAAOT,IAWLU,EAAAA,EAAAA,IAAoB,IAAI,KAVvBH,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOzB,EAAY,EACnD0B,EAAAA,EAAAA,IAAOX,KACHS,EAAAA,EAAAA,OAAcI,EAAAA,EAAAA,IAAaN,EAAwB,CAClDrB,IAAK,EACLS,WAAWgB,EAAAA,EAAAA,IAAOhB,GAClBI,eAAeY,EAAAA,EAAAA,IAAOZ,IACrB,KAAM,EAAG,CAAC,YAAa,qBACzBU,EAAAA,EAAAA,OAAcI,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CAAE5B,IAAK,KACjDC,MAGN,CAEJ,I,UCvDA,MAAM4B,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,O","sources":["webpack://fittrackee_client/./src/views/AdminView.vue?67de","webpack://fittrackee_client/./src/views/AdminView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-64629971\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin\",\n class: \"view\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"container\"\n}\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\n\nimport { computed, ComputedRef, onBeforeMount } from 'vue'\n\n import NotFound from '@/components/Common/NotFound.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig, IAppStatistics } from '@/types/application'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminView',\n setup(__props) {\n\n const store = useStore()\n\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const appStatistics: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_STATS]\n )\n const isAuthUserAmin: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_ADMIN]\n )\n const userLoading: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n\n onBeforeMount(() => store.dispatch(ROOT_STORE.ACTIONS.GET_APPLICATION_STATS))\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (!_unref(userLoading))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (_unref(isAuthUserAmin))\n ? (_openBlock(), _createBlock(_component_router_view, {\n key: 0,\n appConfig: _unref(appConfig),\n appStatistics: _unref(appStatistics)\n }, null, 8, [\"appConfig\", \"appStatistics\"]))\n : (_openBlock(), _createBlock(NotFound, { key: 1 })),\n _hoisted_3\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./AdminView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminView.vue?vue&type=style&index=0&id=64629971&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-64629971\"]])\n\nexport default __exports__"],"names":["_withScopeId","n","_pushScopeId","_popScopeId","_hoisted_1","id","class","_hoisted_2","key","_hoisted_3","_createElementVNode","_defineComponent","__name","setup","__props","store","useStore","appConfig","computed","getters","ROOT_STORE","appStatistics","isAuthUserAmin","AUTH_USER_STORE","userLoading","onBeforeMount","dispatch","_ctx","_cache","_component_router_view","_resolveComponent","_openBlock","_createElementBlock","_unref","_createCommentVNode","_createBlock","NotFound","__exports__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/admin.c8949458.js","mappings":"mOAGA,MAAMA,EAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzEG,EAAa,CACjBC,GAAI,QACJC,MAAO,QAEHC,EAAa,CACjBC,IAAK,EACLF,MAAO,aAEHG,EAA2BT,GAAa,KAAmBU,EAAAA,EAAAA,GAAoB,MAAO,CAAEL,GAAI,UAAY,MAAO,KAUrH,OAA4BM,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,YACRC,MAAMC,GAEN,MAAMC,GAAQC,EAAAA,EAAAA,KAERC,GAAqCC,EAAAA,EAAAA,KACzC,IAAMH,EAAMI,QAAQC,EAAAA,GAAAA,QAAAA,cAEhBC,GAA6CH,EAAAA,EAAAA,KACjD,IAAMH,EAAMI,QAAQC,EAAAA,GAAAA,QAAAA,aAEhBE,GAAuCJ,EAAAA,EAAAA,KAC3C,IAAMH,EAAMI,QAAQI,EAAAA,GAAAA,QAAAA,YAEhBC,GAAoCN,EAAAA,EAAAA,KACxC,IAAMH,EAAMI,QAAQI,EAAAA,GAAAA,QAAAA,gBAKxB,OAFEE,EAAAA,EAAAA,KAAc,IAAMV,EAAMW,SAASN,EAAAA,GAAAA,QAAAA,yBAE9B,CAACO,EAAUC,KAChB,MAAMC,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO5B,EAAY,EACzD6B,EAAAA,EAAAA,IAAOT,IAWLU,EAAAA,EAAAA,IAAoB,IAAI,KAVvBH,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOzB,EAAY,EACnD0B,EAAAA,EAAAA,IAAOX,KACHS,EAAAA,EAAAA,OAAcI,EAAAA,EAAAA,IAAaN,EAAwB,CAClDrB,IAAK,EACLS,WAAWgB,EAAAA,EAAAA,IAAOhB,GAClBI,eAAeY,EAAAA,EAAAA,IAAOZ,IACrB,KAAM,EAAG,CAAC,YAAa,qBACzBU,EAAAA,EAAAA,OAAcI,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CAAE5B,IAAK,KACjDC,MAGN,CAEJ,I,UCvDA,MAAM4B,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,O","sources":["webpack://fittrackee_client/./src/views/AdminView.vue?67de","webpack://fittrackee_client/./src/views/AdminView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-64629971\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin\",\n class: \"view\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"container\"\n}\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\n\nimport { computed, ComputedRef, onBeforeMount } from 'vue'\n\n import NotFound from '@/components/Common/NotFound.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig, IAppStatistics } from '@/types/application'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminView',\n setup(__props) {\n\n const store = useStore()\n\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const appStatistics: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_STATS]\n )\n const isAuthUserAmin: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_ADMIN]\n )\n const userLoading: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n\n onBeforeMount(() => store.dispatch(ROOT_STORE.ACTIONS.GET_APPLICATION_STATS))\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (!_unref(userLoading))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (_unref(isAuthUserAmin))\n ? (_openBlock(), _createBlock(_component_router_view, {\n key: 0,\n appConfig: _unref(appConfig),\n appStatistics: _unref(appStatistics)\n }, null, 8, [\"appConfig\", \"appStatistics\"]))\n : (_openBlock(), _createBlock(NotFound, { key: 1 })),\n _hoisted_3\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./AdminView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminView.vue?vue&type=style&index=0&id=64629971&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-64629971\"]])\n\nexport default __exports__"],"names":["_withScopeId","n","_pushScopeId","_popScopeId","_hoisted_1","id","class","_hoisted_2","key","_hoisted_3","_createElementVNode","_defineComponent","__name","setup","__props","store","useStore","appConfig","computed","getters","ROOT_STORE","appStatistics","isAuthUserAmin","AUTH_USER_STORE","userLoading","onBeforeMount","dispatch","_ctx","_cache","_component_router_view","_resolveComponent","_openBlock","_createElementBlock","_unref","_createCommentVNode","_createBlock","NotFound","__exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/fittrackee/dist/static/js/app.3ce255f9.js b/fittrackee/dist/static/js/app.948d4b2d.js similarity index 99% rename from fittrackee/dist/static/js/app.3ce255f9.js rename to fittrackee/dist/static/js/app.948d4b2d.js index 07b2da70..3c9110ec 100644 --- a/fittrackee/dist/static/js/app.3ce255f9.js +++ b/fittrackee/dist/static/js/app.948d4b2d.js @@ -1,2 +1,2 @@ -(function(){var e={5167:function(e,t,n){"use strict";var r=n(9669),a=n.n(r),o=n(8566),s=n(2894),i=n(5801),l=n(2024);const c=a().create({baseURL:(0,l.k)()});c.interceptors.request.use((e=>{const t=new AbortController;e.signal=t.signal;const n=(0,o.a)(e);o.j.set(n,t);const r=s.Z.getters[i.YN.GETTERS.AUTH_TOKEN];if(r){const t=`Bearer ${r}`;e.headers&&e.headers.Authorization!==t&&(e.headers.Authorization=`Bearer ${r}`)}return e}),(e=>Promise.reject(e))),c.interceptors.response.use((e=>((0,o.a)(e.config),e)),(e=>("canceled"!==e.message&&(0,o.a)(e.response.config),Promise.reject(e)))),t["Z"]=c},8566:function(e,t,n){"use strict";n.d(t,{a:function(){return o},j:function(){return r}});const r=new Map,a=e=>{const{method:t,url:n,params:r={},data:a={}}=e;return[t,n,JSON.stringify(r),JSON.stringify(a)].join("")},o=e=>{const t=a(e);if(r.has(t)){const e=r.get(t)||{};e?.abort(),r.delete(t)}return t}},2540:function(e,t,n){"use strict";var r=n(9150);const a=["nb"];function o(){const e=n(4612),t={};return e.keys().forEach((n=>{const r=n.match(/([A-Za-z0-9-_]+)\./i);if(r&&r.length>1&&!a.includes(r[1])){const a=r[1];t[a]=e(n).default}})),t}t["Z"]=(0,r.o)({legacy:!1,locale:"en",fallbackLocale:"en",globalInjection:!0,messages:o()})},9923:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Kontaktiere den Administrator"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee ist ein selbst-gehosteter Outdoor-Aktivitäts-Tracker."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["unter ",n(r(0))," Lizenz "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Quellkode"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Aktion"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Aktiviere Konto"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Aktiv"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Hinzufügen/Entfernen von Administratorrechten, Lösche Nutzerkonto."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Anwendung"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Kontakt-E-Mail des Administrators"])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Max. Anzahl aktiver Nutzer"])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["Wenn 0, gibt es keine Registrierungslimitierung.."])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Max. Dateianzahl im zip Archiv"])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["keine Kontakt-E-Mail"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. Größe der hochgeladenen Dateien (in Mb)"])},TITLE:e=>{const{normalize:t}=e;return t(["Anwendungskonfiguration"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. Größe des zip Archives (in Mb)"])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Zurück zu Admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Möchtest du wirklich das ",n(r(0))," Konto löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Möchtest du wirklich das ",n(r(0))," Passwort zurücksetzen?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Aktuelle E-Mail"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Lösche Nutzer"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["E-Mail-Versand ist deaktiviert."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Aktivieren/Deaktivieren von Sportarten."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["Neue E-Mail"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Das wasswort wurde zurückgesetzt."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Registrierung ist derzeit deaktiviert."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Registrierung ist derzeit aktiviert."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Aktiv"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["Trainings existieren"])},IMAGE:e=>{const{normalize:t}=e;return t(["Bild"])},LABEL:e=>{const{normalize:t}=e;return t(["Titel"])}},TITLE:e=>{const{normalize:t}=e;return t(["Sportarten Administration"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Aktualisiere Anwemdungskonfiguration (maximale Anzahl an registrierten Nutzern, maximale Dateigröße)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Aktualisiere E-Mail"])},USER:e=>{const{normalize:t}=e;return t(["Nutzer"])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Die E-Mail Adresse wurde aktualisiert."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Administratorrechte hinzufügen"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Administratorrechte entfernen"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["Adminstatus"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["Registrierungsdatum"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["Accountstatus"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nutzername"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["Trainingsanzahl"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["E-Mail: Eine gültige E-Mail muss angegeben werden."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Fehler bei der GPX-Verarbeitung."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Fehler beim Einlesen der GPX-Datei"])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Fehler beim Abrufen der Konfiguration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Fehler beim Aktualisieren der Konfiguration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Fehler. Die Registrierung ist deaktiviert."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["Dateierweiterung ist nicht erlaubt."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["Die Datei ist größer als erlaubt."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Ungültige Anmeldedaten."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Die bereitgestellten Daten sind ungültig."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte erneut anmelden."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte erneut anmelden."])},"Network Error":e=>{const{normalize:t}=e;return t(["Netzwerkfehler."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["Die neue E-Mail muss sich von der aktuellen E-Mail unterscheiden"])},"no file part":e=>{const{normalize:t}=e;return t(["Keine Datei angegeben."])},"no selected file":e=>{const{normalize:t}=e;return t(["Keine Datei ausgewählt."])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Passwort: Passwort und Passwortbestätigung stimmen nicht überein."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Gebe ein gültiges Authentifizierungstoken an."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Es tut mir leid, der Benutzername ist schon vergeben."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Sportart existiert nicht."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Die Signatur ist abgelaufen. Bitte melde dich erneut an."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Registrierung erfolgreich."])},"user does not exist":e=>{const{normalize:t}=e;return t(["Der Nutzer existiert nicht."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["Um den Administrator zu kontaktieren, muss eine gültige E-Mail-Adresse angegeben werden"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["Du kannst Dein Konto nicht löschen, da kein anderer Nutzer hat Administratorrechte besitzt."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["Du hast keine Berechtigung."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["Vorhergehende"])},NEXT:e=>{const{normalize:t}=e;return t(["Nächste"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Bestätigungs-E-Mail erneut senden"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Autorisieren"])},BACK:e=>{const{normalize:t}=e;return t(["Zurück"])},CANCEL:e=>{const{normalize:t}=e;return t(["Abbrechen"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Filter löschen"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Mein Konto löschen"])},DISABLE:e=>{const{normalize:t}=e;return t(["Deaktivieren"])},EDIT:e=>{const{normalize:t}=e;return t(["Bearbeiten"])},ENABLE:e=>{const{normalize:t}=e;return t(["Aktivieren"])},FILTER:e=>{const{normalize:t}=e;return t(["Filter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Anmelden"])},NO:e=>{const{normalize:t}=e;return t(["Nein"])},REGISTER:e=>{const{normalize:t}=e;return t(["Registrieren"])},RESET:e=>{const{normalize:t}=e;return t(["Zurücksetzen"])},SUBMIT:e=>{const{normalize:t}=e;return t(["Speichern"])},YES:e=>{const{normalize:t}=e;return t(["Ja"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["Über"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bestätigung"])},CONTACT:e=>{const{normalize:t}=e;return t(["Kontakt"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["Tag"]),t(["Tage"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Angezeigt"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["Dokumentation (en)"])},HERE:e=>{const{normalize:t}=e;return t(["hier"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Versteckt"])},HOME:e=>{const{normalize:t}=e;return t(["Startseite"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["sortiert nach"])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["sortieren"])},ASC:e=>{const{normalize:t}=e;return t(["aufsteigend"])},DESC:e=>{const{normalize:t}=e;return t(["absteigend"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["pro Seite"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Insgesamt"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Dashboard"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["Dieser Monat"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["Bei der Anwendung scheinen einige Probleme aufgetreten zu sein.
Bitte versuche es später noch einmal oder kontaktiere den Administrator."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Seite nicht gefunden"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Training nicht gefunden"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Etwas lief schief"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Eine neue OAuth2-Anwendung hinzufügen"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["ID"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Geheimnis"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Anwendungsbeschreibung"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Erstellt am"])},NAME:e=>{const{normalize:t}=e;return t(["Anwendungsname"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["Weiterleitungs-URL"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Geltungsbereich"])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf auth-Endpunkte"])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf auth-Endpunkte"])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf users-Endpunkte"])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf users-Endpunkte"])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf workouts-Endpunkte"])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf workouts-Endpunkte"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf die Anwendungskonfiguration"])}},URL:e=>{const{normalize:t}=e;return t(["Anwendungs-URL"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Anwendung erfolgreich erstellt. Stelle sicher, dass du das Geheimnis kopierst, du kannst es nicht erneut anzeigen."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist sicher, dass du diese App löschen willst?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Die Anwendung ",n(r(0))," fragt an:"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["OAuth2-Anwendungen"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t([n(r(0))," den Zugriff auf deinen Account erlauben?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["in Zwischenablage kopieren"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Anwendung löschen"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Anwendung hinzufügen"])},NO_APP:e=>{const{normalize:t}=e;return t(["Anwendung wurde nicht gefunden!"])},NO_APPS:e=>{const{normalize:t}=e;return t(["keine Anwendungen"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["keine Beschreibung"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Alle Tokens zurückrufen"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist du sicher, dass du alle Tokens zurückrufen möchtest?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["Alle vorhandenen und vergebenen Tokens wurde zurückgerufen."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Pendeln)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Virtuell)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Wandern"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["Mountainbiken"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["Mountainbiken (elektrisch)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Rudern"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Laufen"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Skifahren (Alpin)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Skifahren (Langlauf)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Schneeschuhe"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Gehen"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistik"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["Woche"])},month:e=>{const{normalize:t}=e;return t(["Monat"])},year:e=>{const{normalize:t}=e;return t(["Jahr"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Hast du keine Anweisungen erhalten?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Prüfe deine E-Mail. Eine neue Bestätigungs-E-Mail wurde an die angegebene Adresse geschickt."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Hast du bereits ein Konto?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Möchtest du dein Konto wirklich löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Aktuelles Passwort"])},EMAIL:e=>{const{normalize:t}=e;return t(["E-Mail"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Gebe eine gültige E-Mail-Adresse an."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Gebe ein Passwort ein"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Nach Benutzernamen filtern"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort verbergen"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte fordere ein neues Passworts an."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Sprache"])},LOG_IN:e=>{const{normalize:t}=e;return t(["Anmelden"])},LOGIN:e=>{const{normalize:t}=e;return t(["Anmeldung"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Abmelden"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["Neues Passwort"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["Keine Nutzer gefunden."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["Mindestens 8 Zeichen sind erforderlich."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Passwort vergessen?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Prüfe Deine E-Mail. Wenn Deine Adresse in der Datenbank enthalten ist, wirst du eine E-Mail mit einem Link erhalten um Dein Passwort zurückzusetzen."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["schwach"])},AVERAGE:e=>{const{normalize:t}=e;return t(["mittel"])},GOOD:e=>{const{normalize:t}=e;return t(["gut"])},STRONG:e=>{const{normalize:t}=e;return t(["start"])},LABEL:e=>{const{normalize:t}=e;return t(["Passwortstärke"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Vermeide vorhersehbare Buchstabenersetzungen wie ","@"," für a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Vermeide umgekehrte Schreibweisen gebräuchlicher Wörter."])},allUppercase:e=>{const{normalize:t}=e;return t(["Schreibe einige, aber nicht alle Buchstaben groß."])},capitalization:e=>{const{normalize:t}=e;return t(["Schreibe mehr als nur den ersten Buchstaben groß."])},dates:e=>{const{normalize:t}=e;return t(["Vermeide Daten und Jahreszahlen, die mit Dir in Verbindung gebracht werden."])},recentYears:e=>{const{normalize:t}=e;return t(["Vermeide Angabe von letzten Jahreszahlen."])},associatedYears:e=>{const{normalize:t}=e;return t(["Vermeide Jahreszahlen, die mit Dir in Verbindung gebracht werden."])},sequences:e=>{const{normalize:t}=e;return t(["Vermeide gebräuchliche Zeichenfolgen."])},repeated:e=>{const{normalize:t}=e;return t(["Vermeide wiederholungen von Wörtern und Zeichen."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Verwende längere Tastaturmuster und ändere mehrmals die Schreibrichtung."])},anotherWord:e=>{const{normalize:t}=e;return t(["Füge weitere weniger gebräuchliche Wörter hinzu."])},useWords:e=>{const{normalize:t}=e;return t(["Verwenden Sie mehrere Wörter, aber vermeide gebräuchliche Ausdrücke."])},noNeed:e=>{const{normalize:t}=e;return t(["Du kannst sichere Passwörter erstellen, ohne Symbole, Zahlen oder Großbuchstaben zu verwenden."])},pwned:e=>{const{normalize:t}=e;return t(["Wenn Sie dieses Passwort auch anderweitig verwenden, sollten Sie es ändern."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Dein Passwort wurde aktualisiert. Klicke ",n(r(0))," um dich anzumelden."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Kontoausgabe"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Anstiegs-bezogene Daten (Aufnahmen, gesamt)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Zurück zum Profil"])},BIO:e=>{const{normalize:t}=e;return t(["Biographie"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Geburtsdatum"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Datumsanzeigeformat"])},EDIT:e=>{const{normalize:t}=e;return t(["Profil bearbeiten"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen ändern"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen für Sportarten ändern"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Bitte ",n(r(0))," um Deine E-Mail Adresse nochmals zu ändern oder kontaktiere den Administrator"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["Vorname"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["Erster Tag der Woche"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Sprache"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Nachname"])},LOCATION:e=>{const{normalize:t}=e;return t(["Ort"])},MONDAY:e=>{const{normalize:t}=e;return t(["Montag"])},PICTURE:e=>{const{normalize:t}=e;return t(["Bild"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Bildausgabe"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Bild aktualisieren"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Bild entfernen"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Einstellungsausgabe"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Profil-Ausgabe"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Regirierungsdatum"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Sportarten-Einstellungsausgabe"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Sontag"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["Konto"])},APPS:e=>{const{normalize:t}=e;return t(["Anwendungen"])},PICTURE:e=>{const{normalize:t}=e;return t(["Bild"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen"])},PROFILE:e=>{const{normalize:t}=e;return t(["Profil"])},SPORTS:e=>{const{normalize:t}=e;return t(["Sportarten"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["Aktion"])},COLOR:e=>{const{normalize:t}=e;return t(["Farbe"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["vom Admin deaktiviert"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["aktiv"])},LABEL:e=>{const{normalize:t}=e;return t(["Titel"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["Geschwindigkeitsschwellenwert für Stopp"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich aktualisiert. Bitte prüfe Deine E-Mail um die neue E-Mail Adresse zu bestätigen."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich erstellt."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["Ein Aktivierungslink für Dein Konto wurde an die angegebene E-Mail Adresse geschickt."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich aktualisiert."])},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Einheiten für die Distanz"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Imperiales System (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Metrisches System (m, km)"])}},TIMEZONE:e=>{const{normalize:t}=e;return t(["Zeitzone"])}},REGISTER:e=>{const{normalize:t}=e;return t(["Registrieren"])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["E-Mail zur Kontobestätigung erneut senden"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Entschuldigung, die Registrierung ist deaktiviert."])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort anzeigen"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["Dieser Account ist inaktiv."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["Benutzerbild"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nutzername"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(["3 bis 30 Zeichen sind erforderlich, nur alphanumerische Zeichen und der Unterstrich _ sind erlaubt."])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Training hinzufügen"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["Analyse"])},ASCENT:e=>{const{normalize:t}=e;return t(["Aufstieg"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["Durchschn. Geschwindigkeit"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["Durchschnittsgeschwindigkeit"])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["zurück zum Training"])},DATE:e=>{const{normalize:t}=e;return t(["Datum"])},DESCENT:e=>{const{normalize:t}=e;return t(["Abstieg"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["zeige Filter"])},DISTANCE:e=>{const{normalize:t}=e;return t(["Entfernung"])},DURATION:e=>{const{normalize:t}=e;return t(["Dauer"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Training bearbeiten"])},ELEVATION:e=>{const{normalize:t}=e;return t(["Höhe"])},END:e=>{const{normalize:t}=e;return t(["Ende"])},FROM:e=>{const{normalize:t}=e;return t(["Von"])},GPX_FILE:e=>{const{normalize:t}=e;return t([".gpx Datei"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["verberge Filter"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Letzte Trainings"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Lade mehr Trainings"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["maximale Höhe"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["Maximale Dateianzahl"])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["Maximalgröße"])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["Max. Geschwindigkeit"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["minimale Höhe"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Nächstes Segment"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Nächstes Training"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["Daten aus gpx, ohne Bereinigung"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["Keine Datei angegeben"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["enthält keinen Ordner"])},NO_MAP:e=>{const{normalize:t}=e;return t(["Keine Karte"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Kein nächstes Segment"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Kein nächstes Training"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["Keine Anmerkungen"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Kein vorheriges Segment"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Kein vorheriges Training"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["Keine Aufzeichnungen."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["Keine Trainings."])},NOTES:e=>{const{normalize:t}=e;return t(["Anmerkungen"])},PAUSES:e=>{const{normalize:t}=e;return t(["Pausen"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Vorheriges Segment"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Vorheriges Training"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["Aufzeichnung"]),t(["Aufzeichnungen"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Durchschn. Geschwindigkeit"])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Weiteste Entfernung"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Höchster Anstieg"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Längste Dauer"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Max. Geschwindigkeit"])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["verbleibende Zeichen"])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["Segment"]),t(["Segmente"])])},SPEED:e=>{const{normalize:t}=e;return t(["Geschwindigkeit"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["Sportart"]),t(["Sportarten"])])},START:e=>{const{normalize:t}=e;return t(["Start"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Start und Ziel"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["Höhenachse bei Null starten"])},TITLE:e=>{const{normalize:t}=e;return t(["Titel"])},TO:e=>{const{normalize:t}=e;return t(["bis"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["Gesamtdauer"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Füge erstes Training hinzu!"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["Luftfeuchtigkeit"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["Temperatur"])},WIND:e=>{const{normalize:t}=e;return t(["Wind"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNO"])},NE:e=>{const{normalize:t}=e;return t(["NO"])},ENE:e=>{const{normalize:t}=e;return t(["ONO"])},E:e=>{const{normalize:t}=e;return t(["O"])},ESE:e=>{const{normalize:t}=e;return t(["OSO"])},SE:e=>{const{normalize:t}=e;return t(["SO"])},SSE:e=>{const{normalize:t}=e;return t(["SSO"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSW"])},SW:e=>{const{normalize:t}=e;return t(["SW"])},WSW:e=>{const{normalize:t}=e;return t(["WSW"])},W:e=>{const{normalize:t}=e;return t(["W"])},WNW:e=>{const{normalize:t}=e;return t(["WNW"])},NW:e=>{const{normalize:t}=e;return t(["NW"])},NNW:e=>{const{normalize:t}=e;return t(["NNW"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["klarer Tag"])},"clear-night":e=>{const{normalize:t}=e;return t(["klare Nacht"])},cloudy:e=>{const{normalize:t}=e;return t(["wolkig"])},fog:e=>{const{normalize:t}=e;return t(["Nebel"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["teilweise bewölkter Tag"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["teilweise bewölkte Nacht"])},rain:e=>{const{normalize:t}=e;return t(["Regen"])},sleet:e=>{const{normalize:t}=e;return t(["Schneeregen"])},snow:e=>{const{normalize:t}=e;return t(["Schnee"])},wind:e=>{const{normalize:t}=e;return t(["Wind"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["mit .gpx Datei"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["ohne .gpx Datei"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["Training"]),t(["Trainings"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["Trainingsdatum"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist du sicher, dass du dieses Training löschen möchtest?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t([".zip Datei"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["oder .zip Datei mit .gpx Dateien"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},8757:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Contact the administrator"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee is a self-hosted outdoor activity tracker."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["under ",n(r(0))," license "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Source code"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Action"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Activate account"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Active"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Add/remove admin rights, delete user account."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Application"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Administrator email for contact"])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Max. number of active users"])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["If 0, no limitation on registration."])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Max. files of zip archive"])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["no contact email"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. size of uploaded files (in Mb)"])},TITLE:e=>{const{normalize:t}=e;return t(["Application configuration"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. size of zip archive (in Mb)"])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Back to admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Are you sure you want to delete ",n(r(0))," account? All data will be deleted, this cannot be undone."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Are you sure you want to reset ",n(r(0))," password?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Current email"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Delete user"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["Email sending is disabled."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Enable/disable sports."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["New email"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["The password has been reset."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Registration is currently disabled."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Registration is currently enabled."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Reset password"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Active"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["workouts exist"])},IMAGE:e=>{const{normalize:t}=e;return t(["Image"])},LABEL:e=>{const{normalize:t}=e;return t(["Label"])}},TITLE:e=>{const{normalize:t}=e;return t(["Sports administration"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Update application configuration (maximum number of registered users, maximum files size)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Update email"])},USER:e=>{const{normalize:t,plural:n}=e;return n([t(["user"]),t(["users"])])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["The email address has been updated."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Add admin rights"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Remove admin rights"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["admin status"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["registration date"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["account status"])},USERNAME:e=>{const{normalize:t}=e;return t(["username"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["workout count"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Error. Please try again or contact the administrator."])},"at least one file in zip archive exceeds size limit, please check the archive":e=>{const{normalize:t}=e;return t(["At least one file in zip archive exceeds size limit, please check the archive."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["Email: valid email must be provided."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Error during gpx processing."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Error during gpx file parsing."])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Error on getting configuration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Error when updating configuration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Error, please try again or contact the administrator."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Error, registration is disabled."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["File extension not allowed."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["File size is greater than the allowed size."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Invalid credentials."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Provided data are invalid."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Invalid token, please log in again."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Invalid token, please log in again."])},"Network Error":e=>{const{normalize:t}=e;return t(["Network Error."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["The new email must be different than curent email"])},"no file part":e=>{const{normalize:t}=e;return t(["No file provided."])},"no selected file":e=>{const{normalize:t}=e;return t(["No selected file."])},"the number of files in the archive exceeds the limit":e=>{const{normalize:t}=e;return t(["The number of files in the archive exceeds the limit."])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Password: password and password confirmation don't match."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Provide a valid auth token."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Sorry, that username is already taken."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Sport does not exist."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Signature expired. Please log in again."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Successfully registered."])},"user does not exist":e=>{const{normalize:t}=e;return t(["User does not exist."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["A valid email must be provided for administrator contact"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["You can not delete your account, no other user has admin rights."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["You do not have permissions."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["previous"])},NEXT:e=>{const{normalize:t}=e;return t(["next"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Resend confirmation email"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Authorize"])},BACK:e=>{const{normalize:t}=e;return t(["Back"])},CANCEL:e=>{const{normalize:t}=e;return t(["Cancel"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Clear filters"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Delete my account"])},DISABLE:e=>{const{normalize:t}=e;return t(["Disable"])},EDIT:e=>{const{normalize:t}=e;return t(["Edit"])},ENABLE:e=>{const{normalize:t}=e;return t(["Enable"])},FILTER:e=>{const{normalize:t}=e;return t(["Filter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Log in"])},NO:e=>{const{normalize:t}=e;return t(["No"])},REGISTER:e=>{const{normalize:t}=e;return t(["Register"])},RESET:e=>{const{normalize:t}=e;return t(["Reset"])},SUBMIT:e=>{const{normalize:t}=e;return t(["Submit"])},YES:e=>{const{normalize:t}=e;return t(["Yes"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["about"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Confirmation"])},CONTACT:e=>{const{normalize:t}=e;return t(["contact"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["day"]),t(["days"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Displayed"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["documentation"])},HERE:e=>{const{normalize:t}=e;return t(["here"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Hidden"])},HOME:e=>{const{normalize:t}=e;return t(["Home"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["order by"])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["sort"])},ASC:e=>{const{normalize:t}=e;return t(["ascending"])},DESC:e=>{const{normalize:t}=e;return t(["descending"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["par page"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Total"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Dashboard"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["This month"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Error. Please try again or contact the administrator."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["The application seems to have encountered some issues.
Please try again later or contact the administrator."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Page not found"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Workout not found"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Something went wrong"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Add a new OAuth2 application"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["Id"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Secret"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Application description"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Issue at"])},NAME:e=>{const{normalize:t}=e;return t(["Application name"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["Redirect URL"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Scope"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to application configuration."])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to auth endpoints."])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to auth endpoints."])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to users endpoints."])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to users endpoints."])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to workouts endpoints."])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to workouts endpoints."])}},URL:e=>{const{normalize:t}=e;return t(["Application URL"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Application created successfully. Make sure to copy the secret now, it won't show up again."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete this app?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["The application ",n(r(0))," is requesting:"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["OAuth2 applications"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Authorize ",n(r(0))," to use your account?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["copy to the clipboard"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Delete application"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Add an application"])},NO_APP:e=>{const{normalize:t}=e;return t(["Application not found!"])},NO_APPS:e=>{const{normalize:t}=e;return t(["no applications"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["no description"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Revoke all tokens"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to revoke all tokens?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["All existing associated tokens have been revoked."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Transport)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Virtual)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Hiking"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["Mountain Biking"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["Mountain Biking (Electric)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Rowing"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Running"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Skiing (Alpine)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Skiing (Cross Country)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Snowshoes"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Walking"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistics"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["week"])},month:e=>{const{normalize:t}=e;return t(["month"])},year:e=>{const{normalize:t}=e;return t(["year"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Didn't received instructions?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Check your email. A new confirmation email has been sent to the address provided."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Already have an account?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete your account? All data will be deleted, this cannot be undone"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Current password"])},EMAIL:e=>{const{normalize:t}=e;return t(["Email"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Enter a valid email address."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Enter a password"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Filter on username"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["hide password"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Invalid token, please request a new password reset."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Language"])},LOG_IN:e=>{const{normalize:t}=e;return t(["log in"])},LOGIN:e=>{const{normalize:t}=e;return t(["Login"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Logout"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["New password"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["No users found."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Password"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["At least 8 characters required."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Forgot password?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Password reset"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Check your email. If your address is in our database, you'll received an email with a link to reset your password."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["weak"])},AVERAGE:e=>{const{normalize:t}=e;return t(["average"])},GOOD:e=>{const{normalize:t}=e;return t(["good"])},STRONG:e=>{const{normalize:t}=e;return t(["strong"])},LABEL:e=>{const{normalize:t}=e;return t(["password strength"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Avoid predictable letter substitutions like ","@"," for a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Avoid reversed spellings of common words."])},allUppercase:e=>{const{normalize:t}=e;return t(["Capitalize some, but not all letters."])},capitalization:e=>{const{normalize:t}=e;return t(["Capitalize more than the first letter."])},dates:e=>{const{normalize:t}=e;return t(["Avoid dates and years that are associated with you."])},recentYears:e=>{const{normalize:t}=e;return t(["Avoid recent years."])},associatedYears:e=>{const{normalize:t}=e;return t(["Avoid years that are associated with you."])},sequences:e=>{const{normalize:t}=e;return t(["Avoid common character sequences."])},repeated:e=>{const{normalize:t}=e;return t(["Avoid repeated words and characters."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Use longer keyboard patterns and change typing direction multiple times."])},anotherWord:e=>{const{normalize:t}=e;return t(["Add more words that are less common."])},useWords:e=>{const{normalize:t}=e;return t(["Use multiple words, but avoid common phrases."])},noNeed:e=>{const{normalize:t}=e;return t(["You can create strong passwords without using symbols, numbers, or uppercase letters."])},pwned:e=>{const{normalize:t}=e;return t(["If you use this password elsewhere, you should change it."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Your password have been updated. Click ",n(r(0))," to log in."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Account edition"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Ascent-related data (records, total)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Back to profile"])},BIO:e=>{const{normalize:t}=e;return t(["Bio"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Birth date"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Date display format"])},EDIT:e=>{const{normalize:t}=e;return t(["Edit profile"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Edit preferences"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Edit sports preferences"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Please ",n(r(0))," to change your email address again or contact the administrator"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["First name"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["First day of week"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Language"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Last name"])},LOCATION:e=>{const{normalize:t}=e;return t(["Location"])},MONDAY:e=>{const{normalize:t}=e;return t(["Monday"])},PICTURE:e=>{const{normalize:t}=e;return t(["Picture"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Picture edition"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Update picture"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Remove picture"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Preferences edition"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Profile edition"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Registration date"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Sports preferences edition"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Sunday"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["account"])},APPS:e=>{const{normalize:t}=e;return t(["apps"])},PICTURE:e=>{const{normalize:t}=e;return t(["picture"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["preferences"])},PROFILE:e=>{const{normalize:t}=e;return t(["profile"])},SPORTS:e=>{const{normalize:t}=e;return t(["sports"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["action"])},COLOR:e=>{const{normalize:t}=e;return t(["color"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["disabled by admin"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["active"])},LABEL:e=>{const{normalize:t}=e;return t(["label"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["stopped speed threshold"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Your account has been updated successfully. Please check your email to confirm your new email address."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Your account has been created successfully."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["A link to activate your account has been emailed to the address provided."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Your account has been updated successfully."])},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Units for distance"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Imperial system (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Metric system (m, km)"])}},TIMEZONE:e=>{const{normalize:t}=e;return t(["Timezone"])}},REGISTER:e=>{const{normalize:t}=e;return t(["Register"])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Resend account confirmation email"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Sorry, registration is disabled."])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Reset your password"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["show password"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["This user account is inactive."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["user picture"])},USERNAME:e=>{const{normalize:t}=e;return t(["Username"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(['3 to 30 characters required, only alphanumeric characters and the underscore character "_" allowed.'])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Add a workout"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["analysis"])},ASCENT:e=>{const{normalize:t}=e;return t(["ascent"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["ave. speed"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["average speed"])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["back to workout"])},DATE:e=>{const{normalize:t}=e;return t(["date"])},DESCENT:e=>{const{normalize:t}=e;return t(["descent"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["display filters"])},DISTANCE:e=>{const{normalize:t}=e;return t(["distance"])},DURATION:e=>{const{normalize:t}=e;return t(["duration"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Edit the workout"])},ELEVATION:e=>{const{normalize:t}=e;return t(["elevation"])},END:e=>{const{normalize:t}=e;return t(["end"])},FROM:e=>{const{normalize:t}=e;return t(["from"])},GPX_FILE:e=>{const{normalize:t}=e;return t([".gpx file"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["hide filters"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Latest workouts"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Load more workouts"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["max. altitude"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["max files"])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["max size"])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["max. speed"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["min. altitude"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["No next segment"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Next workout"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["data from gpx, without any cleaning"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["No file provided"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["no folder inside"])},NO_MAP:e=>{const{normalize:t}=e;return t(["No map"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["No next segment"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["No next workout"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["No notes"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["No previous segment"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["No previous workout"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["No records."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["No workouts."])},NOTES:e=>{const{normalize:t}=e;return t(["notes"])},PAUSES:e=>{const{normalize:t}=e;return t(["pauses"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Previous segment"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Previous workout"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["record"]),t(["records"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Ave. speed"])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Farthest distance"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Highest ascent"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Longest duration"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Max. speed"])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["remaining characters"])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["segment"]),t(["segments"])])},SPEED:e=>{const{normalize:t}=e;return t(["speed"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["sport"]),t(["sports"])])},START:e=>{const{normalize:t}=e;return t(["start"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Start and finish"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["start elevation axis at zero"])},TITLE:e=>{const{normalize:t}=e;return t(["title"])},TO:e=>{const{normalize:t}=e;return t(["to"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["total duration"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Upload one!"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["humidity"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["temperature"])},WIND:e=>{const{normalize:t}=e;return t(["wind"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNE"])},NE:e=>{const{normalize:t}=e;return t(["NE"])},ENE:e=>{const{normalize:t}=e;return t(["ENE"])},E:e=>{const{normalize:t}=e;return t(["E"])},ESE:e=>{const{normalize:t}=e;return t(["ESE"])},SE:e=>{const{normalize:t}=e;return t(["SE"])},SSE:e=>{const{normalize:t}=e;return t(["SSE"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSW"])},SW:e=>{const{normalize:t}=e;return t(["SW"])},WSW:e=>{const{normalize:t}=e;return t(["WSW"])},W:e=>{const{normalize:t}=e;return t(["W"])},WNW:e=>{const{normalize:t}=e;return t(["WNW"])},NW:e=>{const{normalize:t}=e;return t(["NW"])},NNW:e=>{const{normalize:t}=e;return t(["NNW"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["clear day"])},"clear-night":e=>{const{normalize:t}=e;return t(["clear night"])},cloudy:e=>{const{normalize:t}=e;return t(["cloudy"])},fog:e=>{const{normalize:t}=e;return t(["fog"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["partly cloudy day"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["partly cloudy night"])},rain:e=>{const{normalize:t}=e;return t(["rain"])},sleet:e=>{const{normalize:t}=e;return t(["sleet"])},snow:e=>{const{normalize:t}=e;return t(["snow"])},wind:e=>{const{normalize:t}=e;return t(["wind"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["with .gpx file"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["without .gpx file"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["workout"]),t(["workouts"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["workout date"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete this workout?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t([".zip file"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["or .zip file containing .gpx files"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},6625:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Contacter l'administrateur"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee est un tracker d'activités sportives (en extérieur)."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["sous licence ",n(r(0))," (en) "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Code source (en)"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Action"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Activer le compte"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Actif"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Ajouter/retirer des droits d'administration, supprimer des comptes utilisateurs."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Application"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Email de l'administrateur pour contact "])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Nombre maximum d'utilisateurs actifs "])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["Si égal à 0, pas limite d'inscription"])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Nombre max. de fichiers dans une archive zip "])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["non renseigné"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Taille max. des fichiers (en Mo) "])},TITLE:e=>{const{normalize:t}=e;return t(["Configuration de l'application"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Taille max. des archives zip (en Mo) "])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Revenir à l'admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Êtes-vous sûr de vouloir supprimer le compte de l'utilisateur ",n(r(0))," ? Toutes les données seront définitivement."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Êtes-vous sûr de vouloir réinitialiser le mot de passe de l'utilisateur ",n(r(0))," ?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Adresse email actuelle"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Supprimer l'utilisateur"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["L'envoi d'emails est désactivé."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Activer/désactiver des sports."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["Nouvelle adresse email"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Le mot de passe a été réinitialisé."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Les inscriptions sont actuellement désactivées."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Les inscriptions sont actuellement activées."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Réinit. le mot de passe"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Actif"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["des séances existent"])},IMAGE:e=>{const{normalize:t}=e;return t(["Image"])},LABEL:e=>{const{normalize:t}=e;return t(["Label"])}},TITLE:e=>{const{normalize:t}=e;return t(["Administration - Sports"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Configurer l'application (nombre maximum d'utilisateurs inscrits, taille maximale des fichers)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Changer l'email"])},USER:e=>{const{normalize:t,plural:n}=e;return n([t(["utilisateur"]),t(["utilisateurs"])])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["L'adresse email a été mise à jour."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Ajouter les droits d'admin"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Retirer les droits d'admin"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["status administrateur"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["date d'inscription"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["statut du compte"])},USERNAME:e=>{const{normalize:t}=e;return t(["nom d'utilisateur"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["nombre de séances"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Erreur. Veuillez réessayer ou contacter l'administrateur."])},"at least one file in zip archive exceeds size limit, please check the archive":e=>{const{normalize:t}=e;return t(["Au moins un fichier de l'archive zip dépasse la taille maximale, veuillez vérifier l'archive."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["Courriel : une adresse électronique valide doit être fournie."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Erreur lors du traitement du fichier gpx."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Erreur lors de l'analyse du fichier."])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Erreur lors de la récupération de la configuration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Erreur lors de la mise à jour de la configuration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Erreur, veuillez réessayer ou contacter l'administrateur."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Erreur, les inscriptions sont désactivées."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["Extension de fichier non autorisée."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["La taille du fichier est supérieure à la limite autorisée."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Identifiants invalides."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Données fournies incorrectes."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Jeton de connexion invalide, merci de vous reconnecter."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Jeton de connexion, merci de vous reconnecter."])},"no file part":e=>{const{normalize:t}=e;return t(["Pas de fichier fourni."])},"no selected file":e=>{const{normalize:t}=e;return t(["Pas de fichier sélectionné."])},"Network Error":e=>{const{normalize:t}=e;return t(["Erreur réseau."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["La nouvelle addresse électronique doit être differente de l'adresse actuelle"])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Mot de passe : les mots de passe saisis sont différents."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Merci de fournir un jeton de connexion valide."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Ce sport n'existe pas."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Signature expirée. Merci de vous reconnecter."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Désolé, ce nom d'utilisateur est déjà utilisé."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Inscription validée."])},"the number of files in the archive exceeds the limit":e=>{const{normalize:t}=e;return t(["Le nombre de fichiers de l'archive dépasse la limite."])},"user does not exist":e=>{const{normalize:t}=e;return t(["L'utilisateur n'existe pas."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["Une adresse électronique doit être fournie pour le contact de l'administrateur"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["Vous ne pouvez pas supprimer votre compte, aucun autre utilisateur n'a des droits d'administration."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["Vous n'avez pas les permissions nécessaires."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["précédent"])},NEXT:e=>{const{normalize:t}=e;return t(["suivant"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Renvoyer le message de confirmation"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Autoriser"])},BACK:e=>{const{normalize:t}=e;return t(["Retour"])},CANCEL:e=>{const{normalize:t}=e;return t(["Annuler"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Réinitialiser"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Supprimer mon compte"])},DISABLE:e=>{const{normalize:t}=e;return t(["Désactiver"])},EDIT:e=>{const{normalize:t}=e;return t(["Modifier"])},ENABLE:e=>{const{normalize:t}=e;return t(["Activer"])},FILTER:e=>{const{normalize:t}=e;return t(["Filtrer"])},LOGIN:e=>{const{normalize:t}=e;return t(["Se connecter"])},NO:e=>{const{normalize:t}=e;return t(["Non"])},REGISTER:e=>{const{normalize:t}=e;return t(["S'inscrire"])},RESET:e=>{const{normalize:t}=e;return t(["Réinit."])},SUBMIT:e=>{const{normalize:t}=e;return t(["Valider"])},YES:e=>{const{normalize:t}=e;return t(["Oui"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["à propos"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Confirmation"])},CONTACT:e=>{const{normalize:t}=e;return t(["contact"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["jour"]),t(["jours"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Affiché"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["documentation (en)"])},HERE:e=>{const{normalize:t}=e;return t(["ici"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Masqué"])},HOME:e=>{const{normalize:t}=e;return t(["Accueil"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["trier par "])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["tri"])},ASC:e=>{const{normalize:t}=e;return t(["ascendant"])},DESC:e=>{const{normalize:t}=e;return t(["descendant"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["par page"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Total"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Tableau de bord"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["Ce mois-ci"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Erreur. Veuillez réessayer ou contacter l'administrateur."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["L'application semble rencontrer quelques problèmes.
Veuillez réessayer plus tard ou contacter l'administrateur."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Page introuvable"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Séance introuvable"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Une erreur s'est produite"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Ajouter une nouvelle application OAuth2"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["Identifiant"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Secret"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Description de l'application"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Créée le"])},NAME:e=>{const{normalize:t}=e;return t(["Nom de l'application"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["URL de redirection"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Scope"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture à la configuration de l'application."])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes auth."])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes auth."])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes users."])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes users."])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes workouts."])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes workouts."])}},URL:e=>{const{normalize:t}=e;return t(["URL de l'application"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Application créée avec succès. Assurez-vous de copier le secret maintenant, il ne s'affichera plus."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr de vouloir supprimer cette application ?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["L'application ",n(r(0))," demande les accès suivants :"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["Applications OAuth2"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Autoriser ",n(r(0))," à utiliser votre compte ?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["copier dans le presse papier"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Supprimer l'application"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Ajouter une application"])},NO_APP:e=>{const{normalize:t}=e;return t(["Application introuvable !"])},NO_APPS:e=>{const{normalize:t}=e;return t(["pas de applications"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["pas de description"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Révoquer tous les jetons"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr de vouloir révoquer tous les jetons ?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["Tous les jetons associés existants ont été révoqués."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Transport)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Virtuel)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Randonnée"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["VTT"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["VTT (Électrique)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Aviron"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Course"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Ski (Alpin)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Ski (Randonnée)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Raquettes"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Marche"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistiques"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["semaine"])},month:e=>{const{normalize:t}=e;return t(["mois"])},year:e=>{const{normalize:t}=e;return t(["année"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Vous n'avez pas reçu les instructions ?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Vérifiez vos courriels. Un nouveau courriel de confirmation a été envoyé à l'adresse électronique fournie."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Vous avez déjà un compte ?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr·e de vouloir supprimer votre compte ? Toutes les données seront définitivement effacés"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Mot de passe actuel"])},EMAIL:e=>{const{normalize:t}=e;return t(["Courriel"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Saisissez une adresse électronique valide."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Saisissez un mot de passe"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Filtrer sur le nom d'utilisateur"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["masquer le mot de passe"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Jeton invalide, veuillez demander une nouvelle réinitialisation de mot de passe."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Langue"])},LOG_IN:e=>{const{normalize:t}=e;return t(["connecter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Se connecter"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Se déconnecter"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["Nouveau mot de passe"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["Aucun utilisateur trouvé."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Mot de passe"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["8 caractères minimum."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Mot de passe oublié ?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Réinitialisation du mot de passe"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Vérifiez vos courriels. Si vote adresse est dans notre base de données, vous recevrez un courriel avec un lien pour réinitialiser votre mot de passe."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["faible"])},AVERAGE:e=>{const{normalize:t}=e;return t(["moyenne"])},GOOD:e=>{const{normalize:t}=e;return t(["bonne"])},STRONG:e=>{const{normalize:t}=e;return t(["forte"])},LABEL:e=>{const{normalize:t}=e;return t(["robustesse du mot de passe"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Évitez les substitutions de lettres prévisibles comme ","@"," pour a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Évitez les orthographes inversées des mots courants."])},allUppercase:e=>{const{normalize:t}=e;return t(["Mettez quelques lettres en majuscules, mais pas toutes."])},capitalization:e=>{const{normalize:t}=e;return t(["Capitalisez mais pas seulement la première lettre."])},dates:e=>{const{normalize:t}=e;return t(["Évitez les dates et les années qui vous sont associées. (ex : date ou année de naissance)."])},recentYears:e=>{const{normalize:t}=e;return t(["Évitez les dernières années."])},associatedYears:e=>{const{normalize:t}=e;return t(["Évitez les années qui vous sont associées. (ex : date de naissance)."])},sequences:e=>{const{normalize:t}=e;return t(["Évitez les séquences de caractères courantes."])},repeated:e=>{const{normalize:t}=e;return t(["Évitez les mots et les caractères répétés."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Utilisez des motifs de clavier plus longs et changez de sens de frappe plusieurs fois."])},anotherWord:e=>{const{normalize:t}=e;return t(["Ajoutez des mots moins courants."])},useWords:e=>{const{normalize:t}=e;return t(["Utilisez plusieurs mots, mais évitez les phrases courantes."])},noNeed:e=>{const{normalize:t}=e;return t(["Vous pouvez créer des mots de passe forts sans utiliser de symboles, de chiffres ou de lettres majuscules."])},pwned:e=>{const{normalize:t}=e;return t(["Si vous utilisez ce mot de passe ailleurs, vous devriez le modifier."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Votre mot de passe a été mis à jour. Cliquez ",n(r(0))," pour vous connecter."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour du compte"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Données relatives au dénivelé positif (records, total)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Revenir au profil"])},BIO:e=>{const{normalize:t}=e;return t(["Bio"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Date de naissance"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Format d'affichage de la date"])},EDIT:e=>{const{normalize:t}=e;return t(["Modifier le profil"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Modifier les préférences"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Modifier les préférences des sports"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Veuillez vous ",n(r(0))," pour changer de nouveau votre adresse électronique ou contacter l'administrateur"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["Premier jour de la semaine"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["Prénom"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Langue"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Nom"])},LOCATION:e=>{const{normalize:t}=e;return t(["Lieu"])},MONDAY:e=>{const{normalize:t}=e;return t(["Lundi"])},PICTURE:e=>{const{normalize:t}=e;return t(["Image de profil"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour de l'image de profil"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Mettre à jour l'image"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Supprimer"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour des préférences"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour du profil"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Date d'inscription"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour des préférences des sports"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Dimanche"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["compte"])},APPS:e=>{const{normalize:t}=e;return t(["apps"])},PICTURE:e=>{const{normalize:t}=e;return t(["image"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["préférences"])},PROFILE:e=>{const{normalize:t}=e;return t(["profil"])},SPORTS:e=>{const{normalize:t}=e;return t(["sports"])}},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Unités pour les distances"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Système impérial (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Système métrique (m, km)"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["action"])},COLOR:e=>{const{normalize:t}=e;return t(["couleur"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["désactivé par l'administrateur"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["actif"])},LABEL:e=>{const{normalize:t}=e;return t(["label"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["seuil de vitesse arrêtée"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Votre compte a été modifié avec succès. Veuillez vérifier votre boîte de réception pour valider votre nouvelle adresse électronique."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Votre compte a été créé avec succès."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["Un lien pour activer votre compte a été envoyé à l'adresse électronique fournie."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Votre compte a été modifié avec succès."])},TIMEZONE:e=>{const{normalize:t}=e;return t(["Fuseau horaire"])}},REGISTER:e=>{const{normalize:t}=e;return t(["S'inscrire"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Désolé, les inscriptions sont désactivées."])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Envoyer à nouveau le courriel de confirmation de compte"])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Réinitialiser votre mot de passe"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["afficher le mot de passe"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["Le compte de cet utilisateur est inactif."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["photo de l'utilisateur"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nom d'utilisateur"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(["3 à 30 caractères requis, seuls les caractères alphanumériques et le caractère _ sont autorisés."])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Ajouter une séance"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["analyse"])},ASCENT:e=>{const{normalize:t}=e;return t(["dénivelé positif"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["vitesse moyenne"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["vitesse moy."])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["revenir à la séance"])},DATE:e=>{const{normalize:t}=e;return t(["date"])},DESCENT:e=>{const{normalize:t}=e;return t(["dénivelé négatif"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["afficher les filtres"])},DISTANCE:e=>{const{normalize:t}=e;return t(["distance"])},DURATION:e=>{const{normalize:t}=e;return t(["durée"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Modifier la séance"])},ELEVATION:e=>{const{normalize:t}=e;return t(["altitude"])},END:e=>{const{normalize:t}=e;return t(["fin"])},FROM:e=>{const{normalize:t}=e;return t(["à partir de"])},GPX_FILE:e=>{const{normalize:t}=e;return t(["fichier .gpx"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["masquer les filtres"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Séances récentes"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Charger les séances suivantes"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["altitude max"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["fichiers max. "])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["taille max. "])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["vitesse max"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["altitude min"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Segment suivant"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Séance suivante"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["données issues du fichier gpx, sans correction"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["Pas de fichier fourni"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["pas de répertoire"])},NO_MAP:e=>{const{normalize:t}=e;return t(["Pas de carte"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Pas de segment suivant"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Pas de séance suivante"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["Pas de notes"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Pas de segment précédent"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Pas de séance précédente"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["Pas de records."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["Pas de séances."])},NOTES:e=>{const{normalize:t}=e;return t(["notes"])},PAUSES:e=>{const{normalize:t}=e;return t(["pauses"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Segment précédent"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Séance précédente"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["record"]),t(["records"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Vitesse moy."])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Distance la + longue"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Dénivelé positif le + élevé"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Durée la + longue"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Vitesse max."])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["nombre de caractères restants "])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["segment"]),t(["segments"])])},SPEED:e=>{const{normalize:t}=e;return t(["vitesse"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["sport"]),t(["sports"])])},START:e=>{const{normalize:t}=e;return t(["début"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Départ et arrivée"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["démarrer l'axe de l'altitude à 0"])},TITLE:e=>{const{normalize:t}=e;return t(["titre"])},TO:e=>{const{normalize:t}=e;return t(["jusqu'au"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["durée totale"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Ajoutez votre première séance !"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["humidité"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["température"])},WIND:e=>{const{normalize:t}=e;return t(["vent"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNE"])},NE:e=>{const{normalize:t}=e;return t(["NE"])},ENE:e=>{const{normalize:t}=e;return t(["ENE"])},E:e=>{const{normalize:t}=e;return t(["E"])},ESE:e=>{const{normalize:t}=e;return t(["ESE"])},SE:e=>{const{normalize:t}=e;return t(["SE"])},SSE:e=>{const{normalize:t}=e;return t(["SSE"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSO"])},SW:e=>{const{normalize:t}=e;return t(["SO"])},WSW:e=>{const{normalize:t}=e;return t(["OSO"])},W:e=>{const{normalize:t}=e;return t(["O"])},WNW:e=>{const{normalize:t}=e;return t(["ONO"])},NW:e=>{const{normalize:t}=e;return t(["NO"])},NNW:e=>{const{normalize:t}=e;return t(["NNO"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["ensoleillé"])},"clear-night":e=>{const{normalize:t}=e;return t(["nuit claire"])},cloudy:e=>{const{normalize:t}=e;return t(["nuageux"])},fog:e=>{const{normalize:t}=e;return t(["brouillard"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["partiellement nuageux"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["nuit partiellement nuageuse"])},rain:e=>{const{normalize:t}=e;return t(["pluie"])},sleet:e=>{const{normalize:t}=e;return t(["neige fondue"])},snow:e=>{const{normalize:t}=e;return t(["neige"])},wind:e=>{const{normalize:t}=e;return t(["venteux"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["avec un fichier .gpx"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["sans fichier .gpx"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["séance"]),t(["séances"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["date de la séance"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Etes-vous sûr de vouloir supprimer cette séance ?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t(["archive .zip"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["ou une archive .zip contenant des fichiers .gpx"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},8891:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={},a={},o={},s={},i={},l={},c={},u={},d={},m={},_={},E={},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},4970:function(e,t,n){"use strict";var r=n(6775),a=n(6429),o=n(9963),s=n(2343),i=n(5205);(0,i.z)("/service-worker.js",{ready(){console.log("App is being served from cache by a service worker.\nFor more details, visit https://goo.gl/AFskqB")},registered(){console.log("Service worker has been registered.")},cached(){console.log("Content has been cached for offline use.")},updatefound(){console.log("New content is downloading.")},updated(){console.log("New content is available; please refresh.")},offline(){console.log("No internet connection found. App is running in offline mode.")},error(e){console.error("Error during service worker registration:",e)}});var l=n(6252),c=n(2262),u=n(3577);const d=e=>((0,l.dD)("data-v-2c73279e"),e=e(),(0,l.Cn)(),e),m={id:"footer"},_={class:"footer-items"},E={class:"footer-item"},S=d((()=>(0,l._)("strong",null,"FitTrackee",-1))),T=d((()=>(0,l._)("div",{class:"footer-item bullet"},"•",-1))),p={class:"footer-item"},A={key:0,class:"footer-item bullet"},O={key:1,class:"footer-item"},R=["href"],I=d((()=>(0,l._)("div",{class:"footer-item bullet"},"•",-1))),U={class:"footer-item"},g={href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer"};var N=(0,l.aZ)({__name:"Footer",props:{version:null,adminContact:null},setup(e){const t=e,{adminContact:n,version:r}=(0,c.BK)(t);return(e,t)=>{const a=(0,l.up)("router-link");return(0,l.wg)(),(0,l.iD)("div",m,[(0,l._)("div",_,[(0,l._)("div",E,[S,(0,l.Uk)(" v"+(0,u.zw)((0,c.SU)(r)),1)]),T,(0,l._)("div",p,[(0,l.Wm)(a,{to:"/about"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("common.ABOUT")),1)])),_:1})]),(0,c.SU)(n)?((0,l.wg)(),(0,l.iD)("div",A,"•")):(0,l.kq)("",!0),(0,c.SU)(n)?((0,l.wg)(),(0,l.iD)("div",O,[(0,l._)("a",{href:`mailto:${(0,c.SU)(n)}`},(0,u.zw)(e.$t("common.CONTACT")),9,R)])):(0,l.kq)("",!0),I,(0,l._)("div",U,[(0,l._)("a",g,(0,u.zw)(e.$t("common.DOCUMENTATION")),1)])])])}}}),h=n(3744);const z=(0,h.Z)(N,[["__scopeId","data-v-2c73279e"]]);var w=z,f=(n(7658),n(6595)),v=n(5801),C=n(9917),D=n(6287);const k=e=>((0,l.dD)("data-v-95c1cc02"),e=e(),(0,l.Cn)(),e),P={id:"nav"},L={class:"nav-container"},M={class:"nav-app-name"},b={class:"nav-items-close"},y=k((()=>(0,l._)("div",{class:"app-name"},"FitTrackee",-1))),G={key:0,class:"nav-items-group"},F=k((()=>(0,l._)("div",{class:"nav-item nav-separator"},null,-1))),W={class:"nav-items-user-menu"},K={key:0,class:"nav-items-group"},Y={class:"nav-item nav-profile-img"},x={key:1,class:"nav-items-group"},$=k((()=>(0,l._)("i",{class:"fa fa-language"},null,-1)));var B=(0,l.aZ)({__name:"NavBar",emits:["menuInteraction"],setup(e,{emit:t}){const n=(0,C.o)(),r=(0,l.Fl)((()=>n.getters[v.YN.GETTERS.AUTH_USER_PROFILE])),a=(0,l.Fl)((()=>n.getters[v.YN.GETTERS.IS_AUTHENTICATED])),o=(0,l.Fl)((()=>n.getters[v.SY.GETTERS.LANGUAGE])),s=(0,c.iH)(!1);function i(){s.value=!0,t("menuInteraction",!0)}function d(){s.value=!1,t("menuInteraction",!1)}function m(e){n.dispatch(v.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,e.value.toString())}function _(){n.dispatch(v.YN.ACTIONS.LOGOUT)}return(e,t)=>{const n=(0,l.up)("router-link"),E=(0,l.up)("Dropdown");return(0,l.wg)(),(0,l.iD)("div",P,[(0,l._)("div",L,[(0,l._)("div",M,[(0,l._)("div",{class:"nav-item app-name",onClick:t[0]||(t[0]=t=>e.$router.push("/"))}," FitTrackee ")]),(0,l._)("div",{class:(0,u.C_)(["nav-icon-open",{"menu-open":s.value}])},[(0,l._)("i",{class:"fa fa-bars hamburger-icon",onClick:t[1]||(t[1]=e=>i())})],2),(0,l._)("div",{class:(0,u.C_)(["nav-items",{"menu-open":s.value}])},[(0,l._)("div",b,[y,(0,l._)("i",{class:(0,u.C_)(["fa fa-close close-icon nav-item",{"menu-closed":!s.value}]),onClick:t[2]||(t[2]=e=>d())},null,2)]),(0,l._)("div",{class:"nav-items-app-menu",onClick:t[3]||(t[3]=e=>d())},[(0,c.SU)(a)?((0,l.wg)(),(0,l.iD)("div",G,[(0,l.Wm)(n,{class:"nav-item",to:"/"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("dashboard.DASHBOARD")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/workouts"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,u.kC)(e.$t("workouts.WORKOUT",2))),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/statistics"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("statistics.STATISTICS")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/workouts/add"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("workouts.ADD_WORKOUT")),1)])),_:1}),(0,c.SU)(a)&&(0,c.SU)(r).admin?((0,l.wg)(),(0,l.j4)(n,{key:0,class:"nav-item",to:"/admin"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("admin.ADMIN")),1)])),_:1})):(0,l.kq)("",!0),F])):(0,l.kq)("",!0)]),(0,l._)("div",W,[(0,c.SU)(a)?((0,l.wg)(),(0,l.iD)("div",K,[(0,l._)("div",Y,[(0,l.Wm)(f.Z,{user:(0,c.SU)(r)},null,8,["user"])]),(0,l.Wm)(n,{class:"nav-item",to:"/profile",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,c.SU)(r).username),1)])),_:1}),(0,l._)("div",{class:"nav-item nav-link",onClick:_},(0,u.zw)(e.$t("user.LOGOUT")),1)])):((0,l.wg)(),(0,l.iD)("div",x,[(0,l.Wm)(n,{class:"nav-item",to:"/login",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("user.LOGIN")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/register",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("user.REGISTER")),1)])),_:1})])),(0,c.SU)(D.mT)&&(0,c.SU)(o)?((0,l.wg)(),(0,l.j4)(E,{key:2,class:"nav-item",options:(0,c.SU)(D.mT),selected:(0,c.SU)(o),onSelected:m},{default:(0,l.w5)((()=>[$])),_:1},8,["options","selected"])):(0,l.kq)("",!0)])],2)])])}}});const Z=(0,h.Z)(B,[["__scopeId","data-v-95c1cc02"]]);var H=Z,q=n(7167);const V={id:"no-config"},j={class:"error-page"},X={class:"error-img"},J=["innerHTML"];var Q=(0,l.aZ)({__name:"NoConfig",setup(e){return(e,t)=>((0,l.wg)(),(0,l.iD)("div",V,[(0,l._)("div",j,[(0,l._)("div",X,[(0,l.Wm)(q.Z)]),(0,l._)("p",{class:"error-message",innerHTML:e.$t("error.APP_ERROR")},null,8,J)])]))}});const ee=(0,h.Z)(Q,[["__scopeId","data-v-47759238"]]);var te=ee;const ne=(0,l._)("div",{id:"top"},null,-1),re={key:0,class:"app-container"},ae={class:"app-loading"},oe={class:"container scroll"},se=(0,l._)("i",{class:"fa fa-chevron-up","aria-hidden":"true"},null,-1),ie=[se];var le=(0,l.aZ)({__name:"App",setup(e){const t=(0,C.o)(),n=(0,l.Fl)((()=>t.getters[v.SY.GETTERS.APP_CONFIG])),r=(0,l.Fl)((()=>t.getters[v.SY.GETTERS.APP_LOADING])),a=(0,c.iH)(!1),o=(0,c.iH)(!1);function s(e){a.value=e}function i(e){return e.getBoundingClientRect().top=0}function d(){window.onscroll=()=>{const e=document.querySelector("#bottom");o.value=null!==e&&i(e)}}function m(){window.scrollTo({top:0,behavior:"smooth"}),setTimeout((()=>{o.value=!1}),300)}function _(){let e="en";try{const t=navigator.language.split("-")[0];t in D.v1&&(e=t)}catch(n){e="en"}t.dispatch(v.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,e)}return(0,l.wF)((()=>{_(),t.dispatch(v.SY.ACTIONS.GET_APPLICATION_CONFIG)})),(0,l.bv)((()=>d())),(e,t)=>{const i=(0,l.up)("Loader"),d=(0,l.up)("router-view");return(0,l.wg)(),(0,l.iD)(l.HY,null,[ne,(0,l.Wm)(H,{onMenuInteraction:s}),(0,c.SU)(r)?((0,l.wg)(),(0,l.iD)("div",re,[(0,l._)("div",ae,[(0,l.Wm)(i)])])):((0,l.wg)(),(0,l.iD)("div",{key:1,class:(0,u.C_)(["app-container",{"hide-scroll":a.value}])},[(0,c.SU)(n)?((0,l.wg)(),(0,l.j4)(d,{key:0})):((0,l.wg)(),(0,l.j4)(te,{key:1}))],2)),(0,l._)("div",oe,[(0,l._)("div",{class:(0,u.C_)(["scroll-button",{"display-button":o.value}]),onClick:m},ie,2)]),(0,c.SU)(n)?((0,l.wg)(),(0,l.j4)(w,{key:2,version:(0,c.SU)(n)?(0,c.SU)(n).version:"",adminContact:(0,c.SU)(n).admin_contact},null,8,["version","adminContact"])):(0,l.kq)("",!0)],64)}}});const ce=le;var ue=ce,de=n(2540),me=n(5073),_e=n(2894);const Ee={class:"alert-message"},Se=["innerHTML"];var Te=(0,l.aZ)({__name:"AlertMessage",props:{message:null},setup(e){const t=e,{message:n}=(0,c.BK)(t);return(e,t)=>((0,l.wg)(),(0,l.iD)("div",Ee,[(0,l._)("div",{innerHTML:e.$t((0,c.SU)(n))},null,8,Se)]))}});const pe=(0,h.Z)(Te,[["__scopeId","data-v-69d7e4ff"]]);var Ae=pe,Oe=n(2531);const Re={class:"custom-textarea"},Ie=["id","name","maxLenght","disabled"],Ue={class:"remaining-chars"};var ge=(0,l.aZ)({__name:"CustomTextArea",props:{name:null,charLimit:{default:500},disabled:{type:Boolean,default:!1},input:{default:""}},emits:["updateValue"],setup(e,{emit:t}){const n=e,r=(0,c.iH)("");function a(e){t("updateValue",e.target.value)}return(0,l.YP)((()=>n.input),(e=>{r.value=null===e?"":e})),(t,n)=>((0,l.wg)(),(0,l.iD)("div",Re,[(0,l.wy)((0,l._)("textarea",{id:e.name,name:e.name,maxLenght:e.charLimit,disabled:e.disabled,"onUpdate:modelValue":n[0]||(n[0]=e=>r.value=e),onInput:a},null,40,Ie),[[o.nr,r.value]]),(0,l._)("div",Ue,(0,u.zw)(t.$t("workouts.REMAINING_CHARS"))+": "+(0,u.zw)(r.value.length)+"/"+(0,u.zw)(e.charLimit),1)]))}});const Ne=(0,h.Z)(ge,[["__scopeId","data-v-8cf5cc64"]]);var he=Ne,ze=n(3649),we=(0,l.aZ)({__name:"Distance",props:{distance:null,unitFrom:null,useImperialUnits:{type:Boolean},digits:{default:2},displayUnit:{type:Boolean,default:!0},speed:{type:Boolean,default:!1},strong:{type:Boolean,default:!1}},setup(e){const t=e,{digits:n,displayUnit:r,distance:a,speed:o,strong:s,unitFrom:i,useImperialUnits:d}=(0,c.BK)(t),m=(0,l.Fl)((()=>d.value?ze.Dl[i.value].defaultTarget:i.value)),_=(0,l.Fl)((()=>d.value?(0,ze.sC)(a.value,i.value,m.value,n.value):parseFloat(a.value.toFixed(n.value))));return(e,t)=>((0,l.wg)(),(0,l.iD)(l.HY,null,[(0,l._)("span",{class:(0,u.C_)(["distance",{strong:(0,c.SU)(s)}])},(0,u.zw)((0,c.SU)(_)),3),(0,l.Uk)(" "+(0,u.zw)(" ")+" "),(0,c.SU)(r)?((0,l.wg)(),(0,l.iD)("span",{key:0,class:(0,u.C_)(["unit",{strong:(0,c.SU)(s)}])},(0,u.zw)((0,c.SU)(m))+(0,u.zw)((0,c.SU)(o)?"/h":""),3)):(0,l.kq)("",!0)],64))}});const fe=(0,h.Z)(we,[["__scopeId","data-v-f46ff1d6"]]);var ve=fe,Ce=n(2201);const De={class:"dropdown-wrapper"},ke={key:0,class:"dropdown-list"},Pe=["onClick"];var Le=(0,l.aZ)({__name:"Dropdown",props:{options:null,selected:null},emits:{selected:e=>e},setup(e,{emit:t}){const n=e,r=(0,Ce.yj)(),a=(0,c.iH)(!1),o=n.options.map((e=>e));function s(){a.value=!a.value}function i(e){t("selected",e),a.value=!1}return(0,l.YP)((()=>r.path),(()=>a.value=!1)),(t,n)=>((0,l.wg)(),(0,l.iD)("div",De,[(0,l._)("div",{class:"dropdown-selected",onClick:s},[(0,l.WI)(t.$slots,"default")]),a.value?((0,l.wg)(),(0,l.iD)("ul",ke,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)((0,c.SU)(o),((t,n)=>((0,l.wg)(),(0,l.iD)("li",{class:(0,u.C_)(["dropdown-item",{selected:t.value===e.selected}]),key:n,onClick:e=>i(t)},(0,u.zw)(t.label),11,Pe)))),128))])):(0,l.kq)("",!0)]))}});const Me=(0,h.Z)(Le,[["__scopeId","data-v-2d3b4eac"]]);var be=Me;const ye={class:"error-message"},Ge={key:0},Fe={key:1};var We=(0,l.aZ)({__name:"ErrorMessage",props:{message:null},setup(e){const t=e,{message:n}=(0,c.BK)(t);return(e,t)=>((0,l.wg)(),(0,l.iD)("div",ye,[Array.isArray((0,c.SU)(n))?((0,l.wg)(),(0,l.iD)("ul",Ge,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)((0,c.SU)(n),((t,n)=>((0,l.wg)(),(0,l.iD)("li",{key:n},(0,u.zw)(e.$t(t)),1)))),128))])):((0,l.wg)(),(0,l.iD)("div",Fe,(0,u.zw)(e.$t((0,c.SU)(n))),1))]))}});const Ke=(0,h.Z)(We,[["__scopeId","data-v-2659a79a"]]);var Ye=Ke;const xe={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve"},$e=(0,l._)("desc",{id:"cyclingSportDescription"}," silhouette of a person riding a bicycle ",-1),Be=(0,l._)("g",null,[(0,l._)("path",{d:"M321.097,112.359c20.973,12.338,47.985,5.315,60.293-15.652c12.34-20.973,5.35-47.974-15.623-60.304\n\t\tc-21.009-12.332-47.99-5.317-60.314,15.65C293.129,73.036,300.103,100.027,321.097,112.359z"}),(0,l._)("path",{d:"M393.081,264.102c-2.414,0-4.8,0.194-7.169,0.362l-14.431-71.605l4.702-1.757c10.666-3.987,16.093-15.868,12.098-26.54\n\t\tc-3.994-10.681-15.946-16.084-26.531-12.09l-51.823,19.38l-2.321-18.864c6.3-13.193,5.541-29.78-4.767-41.482\n\t\tc-21.224-24.092-47.12-12.508-55.191-5.976l-106.884,86.555l0.016,0.024c-3.319,2.893-6.089,6.485-7.86,10.842\n\t\tc-2.191,5.396-2.596,11.067-1.564,16.384c-8.503,0.669-15.255,7.571-15.255,16.246c0,9.085,7.346,16.44,16.432,16.48l-6.797,15.906\n\t\tc-8.62-2.465-17.674-3.866-27.066-3.866C44.27,264.102,0,308.354,0,362.754c0,54.403,44.27,98.663,98.668,98.663\n\t\tc54.403,0,98.652-44.26,98.652-98.663c0-36.228-19.683-67.867-48.858-85.024l10.957-25.652h17.767l60.281,24.462l-32.201,52.773\n\t\tc-8.297,13.612-3.994,31.382,9.615,39.685c4.691,2.86,9.878,4.229,15,4.229c9.729,0,19.234-4.929,24.677-13.838l29.339-48.095\n\t\tl19.072,11.511c-5.447,12.227-8.54,25.726-8.54,39.95c0,54.403,44.254,98.663,98.652,98.663c54.402,0,98.656-44.26,98.656-98.663\n\t\tC491.737,308.354,447.483,264.102,393.081,264.102z M98.668,436.671c-40.756,0-73.923-33.161-73.923-73.917\n\t\tc0-40.756,33.167-73.909,73.923-73.909c5.944,0,11.649,0.896,17.188,2.224l-20.476,47.893\n\t\tc-11.758,1.619-20.843,11.598-20.843,23.792c0,13.323,10.808,24.132,24.13,24.132c8.767,0,16.367-4.745,20.589-11.76h52.065\n\t\tC165.395,409.988,135.188,436.671,98.668,436.671z M171.322,350.383h-52.065c-0.355-0.588-0.708-1.176-1.112-1.732l20.476-47.901\n\t\tC155.679,311.776,167.793,329.595,171.322,350.383z M296.781,290.175l7.666-12.564c4.416-7.233,5.431-16.038,2.774-24.084\n\t\tc-2.661-8.046-8.718-14.515-16.562-17.704l-52.725-21.395l32.443-26.281l1.804,14.691c0.756,6.267,4.366,11.841,9.761,15.12\n\t\tc3.271,1.981,6.979,2.988,10.698,2.988c2.435,0,4.88-0.435,7.218-1.306l48.15-18.001l13.627,67.691\n\t\tc-18.268,6.162-34.117,17.51-45.848,32.314L296.781,290.175z M375.396,337.633l-38.003-22.94\n\t\tc7.877-9.118,17.787-16.319,29.205-20.734L375.396,337.633z M393.081,436.671c-40.757,0-73.907-33.161-73.907-73.917\n\t\tc0-9.544,1.965-18.597,5.268-26.983l44.541,26.888c0,0.032-0.016,0.064-0.016,0.095c0,13.323,10.808,24.132,24.114,24.132\n\t\tc13.322,0,24.118-10.81,24.118-24.132c0-10.478-6.721-19.307-16.06-22.64l-10.277-51.043c0.756-0.024,1.463-0.226,2.22-0.226\n\t\tc40.757,0,73.911,33.153,73.911,73.909C466.992,403.51,433.838,436.671,393.081,436.671z"})],-1),Ze=[$e,Be];function He(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",xe,Ze)}var qe={name:"CyclingSport"};const Ve=(0,h.Z)(qe,[["render",He]]);var je=Ve;const Xe={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Je=(0,l._)("desc",{id:"cyclingTransportDescription"}," silhouette of a person riding a bicycle (for transportation) ",-1),Qe=(0,l._)("g",{id:"g147"},[(0,l._)("path",{d:"m 189.097,82.359 c 20.97701,12.331184 47.97442,5.308784 60.293,-15.652 12.32942,-20.979222 5.35418,-47.981117 -15.623,-60.304 -21.00482,-12.3391184 -47.99,-5.317 -60.314,15.65 -12.324,20.983 -5.34599,47.967183 15.644,60.306 z",id:"path143"}),(0,l._)("path",{d:"m 393.081,264.102 c -2.414,0 -4.8,0.194 -7.169,0.362 l -14.431,-71.605 4.702,-1.757 c 10.666,-3.987 16.093,-15.868 12.098,-26.54 -3.994,-10.681 -15.946,-16.084 -26.531,-12.09 l -63.05508,-1.53717 C 284.04753,137.09803 248.90259,106.55858 243.33317,101.62481 217.77732,75.090916 186.1698,85.012419 178.0988,91.544419 L 140.764,192.085 l 0.016,0.024 c -3.319,2.893 -6.089,6.485 -7.86,10.842 -2.191,5.396 -2.596,11.067 -1.564,16.384 -8.503,0.669 -15.255,7.571 -15.255,16.246 0,9.085 7.346,16.44 16.432,16.48 l -6.797,15.906 c -8.62,-2.465 -17.674,-3.866 -27.066,-3.866 C 44.27,264.102 0,308.354 0,362.754 c 0,54.403 44.27,98.663 98.668,98.663 54.403,0 98.652,-44.26 98.652,-98.663 0,-36.228 -19.683,-67.867 -48.858,-85.024 l 10.957,-25.652 h 17.767 l 60.281,24.462 -32.201,52.773 c -8.297,13.612 -3.994,31.382 9.615,39.685 4.691,2.86 9.878,4.229 15,4.229 9.729,0 19.234,-4.929 24.677,-13.838 l 29.339,-48.095 19.072,11.511 c -5.447,12.227 -8.54,25.726 -8.54,39.95 0,54.403 44.254,98.663 98.652,98.663 54.402,0 98.656,-44.26 98.656,-98.663 0,-54.401 -44.254,-98.653 -98.656,-98.653 z M 98.668,436.671 c -40.756,0 -73.923,-33.161 -73.923,-73.917 0,-40.756 33.167,-73.909 73.923,-73.909 5.944,0 11.649,0.896 17.188,2.224 L 95.38,338.962 c -11.758,1.619 -20.843,11.598 -20.843,23.792 0,13.323 10.808,24.132 24.13,24.132 8.767,0 16.367,-4.745 20.589,-11.76 h 52.065 c -5.926,34.862 -36.133,61.545 -72.653,61.545 z m 72.654,-86.288 h -52.065 c -0.355,-0.588 -0.708,-1.176 -1.112,-1.732 l 20.476,-47.901 c 17.058,11.026 29.172,28.845 32.701,49.633 z m 125.459,-60.208 7.666,-12.564 c 4.416,-7.233 5.431,-16.038 2.774,-24.084 -2.661,-8.046 -8.718,-14.515 -16.562,-17.704 l -73.83357,-31.7176 16.7558,-45.21274 c 10.36934,4.13303 41.82171,27.90767 45.77423,28.08592 3.271,1.981 8.57725,1.46711 12.29625,1.46711 2.435,0 18.50584,0.70472 20.84384,-0.16628 L 343.32113,188.03378 361.635,269.33 c -18.268,6.162 -34.117,17.51 -45.848,32.314 z m 78.615,47.458 -38.003,-22.94 c 7.877,-9.118 17.787,-16.319 29.205,-20.734 z m 17.685,99.038 c -40.757,0 -73.907,-33.161 -73.907,-73.917 0,-9.544 1.965,-18.597 5.268,-26.983 l 44.541,26.888 c 0,0.032 -0.016,0.064 -0.016,0.095 0,13.323 10.808,24.132 24.114,24.132 13.322,0 24.118,-10.81 24.118,-24.132 0,-10.478 -6.721,-19.307 -16.06,-22.64 l -10.277,-51.043 c 0.756,-0.024 1.463,-0.226 2.22,-0.226 40.757,0 73.911,33.153 73.911,73.909 -10e-4,40.756 -33.155,73.917 -73.912,73.917 z",id:"path145"})],-1),et=[Je,Qe];function tt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Xe,et)}var nt={name:"CyclingTransport"};const rt=(0,h.Z)(nt,[["render",tt]]);var at=rt;const ot={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},st=(0,l.uE)(' silhouette of a person riding a bicycle with virtual indicator ',4),it=[st];function lt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",ot,it)}var ct={name:"CyclingVirtual"};const ut=(0,h.Z)(ct,[["render",lt]]);var dt=ut;const mt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 463.507 463.507",style:{"enable-background":"new 0 0 463.507 463.507"},"xml:space":"preserve"},_t=(0,l._)("desc",{id:"hikingDescription"},"silhouette of a person hiking",-1),Et=(0,l._)("g",null,[(0,l._)("path",{d:"M246.413,78.492c21.688,0,39.255-17.573,39.255-39.251c0-21.67-17.567-39.24-39.255-39.24\n\t\tc-21.652,0-39.242,17.57-39.242,39.24C207.171,60.919,224.761,78.492,246.413,78.492z"}),(0,l._)("path",{d:"M386.604,202.858c0-11.185-9.066-20.251-20.253-20.251h-68.479l-38.62-54.832l0.127-0.933\n\t\tc1.378-10.474-1.474-21.067-7.911-29.444c-6.441-8.378-15.932-13.852-26.408-15.23c-11.596-1.511-22.592,2.224-30.852,9.225V45.779\n\t\tc0-7.847-6.362-14.217-14.225-14.217H140.59c-7.867,0-14.225,6.37-14.225,14.217v168.953c0,20.68,15.821,37.476,35.979,39.446\n\t\tl-3.043,7.073l-23.859,90.136l-53.73,72.188c-8.006,10.768-5.794,25.987,4.984,34.001c4.348,3.245,9.443,4.811,14.491,4.811\n\t\tc7.422,0,14.729-3.385,19.511-9.795l56.529-75.945c1.851-2.484,3.213-5.299,4.003-8.289l16.266-61.414l44.521,40.877l-6.076,88.603\n\t\tc-0.917,13.393,9.177,24.99,22.58,25.908c0.552,0.04,1.124,0.056,1.691,0.056c12.66,0,23.339-9.819,24.208-22.642l6.882-100.264\n\t\tc0.508-7.364-2.371-14.572-7.815-19.564l-45.994-42.219l13.992-90.613l19.331,27.435c3.801,5.387,9.972,8.592,16.552,8.592h70.882\n\t\tl1.339,232.294c0,4.478,3.626,8.101,8.101,8.101c4.479,0,8.101-3.624,8.101-8.101l-1.339-234.036\n\t\tC381.588,218.245,386.604,211.15,386.604,202.858z"})],-1),St=[_t,Et];function Tt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",mt,St)}var pt={name:"Hiking"};const At=(0,h.Z)(pt,[["render",Tt]]);var Ot=At;const Rt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 503.162 503.162",style:{"enable-background":"new 0 0 503.162 503.162"},"xml:space":"preserve"},It=(0,l._)("desc",{id:"mountainBikingDescription"}," silhouette of a person riding a mountain bike ",-1),Ut=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M149.951,67.997c15.711-7.143,22.739-25.675,15.596-41.416c-7.124-15.701-25.723-22.682-41.453-15.539\n\t\t\tc-15.721,7.134-22.702,25.752-15.578,41.444C115.679,68.216,134.23,75.14,149.951,67.997z"}),(0,l._)("path",{d:"M87.517,89.072l-32.828,87.755c-1.979,5.967-1.683,12.594,1.1,18.733c4.055,8.922,12.604,14.525,21.755,15.271\n\t\t\tl76.873,6.244l29.137,64.184c4.122,9.046,14.832,13.148,23.906,9.017c9.075-4.131,13.072-14.859,8.951-23.944l-36.424-80.201\n\t\t\tc0,0-3.605-13.76-21.343-14.133l-43.873-2.572l21.009-55.166l31.671,20.588c5.584,3.663,10.997,3.682,15.1,1.722l55.051-24.997\n\t\t\tc17.069-7.755,6.952-30.036-10.108-22.29l-47.506,21.707l-53.55-34.846c0,0-11.638-8.013-24.241-2.285\n\t\t\tC102.205,73.858,91.112,77.243,87.517,89.072z"}),(0,l._)("path",{d:"M423.687,182.488l-2.61,15.042c-2.123,12.154-13.35,25.092-25.092,28.888l-3.711,1.195\n\t\t\tc3.041-16.543,1.282-34.148-6.215-50.633c-19.498-42.974-70.094-61.87-112.943-42.419\n\t\t\tc-42.878,19.479-61.936,70.017-42.438,112.981c17.069,37.562,57.881,56.744,96.534,47.966l-0.784,1.415\n\t\t\tc-5.968,10.796-20.817,19.221-33.144,18.8l-17.892-0.622c-12.336-0.411-30.514,5.002-40.603,12.116l-22.376,15.759\n\t\t\tc-10.107,7.104-28.276,12.632-40.612,12.354l-12.001-0.277c12.718-22.845,14.889-51.159,3.242-76.806\n\t\t\tc-19.517-42.955-70.074-61.879-113.019-42.381c-42.792,19.44-61.87,70.007-42.372,112.933\n\t\t\tc16.667,36.711,56.084,55.788,93.914,48.444l-1.32,2.056c-6.675,10.385-22.08,18.398-34.406,17.92l-32.79-1.291\n\t\t\tc-12.326-0.497-24.021,8.97-26.096,21.143l-2.62,15.339c-0.564,3.271-0.354,6.11,0.401,8.501c-0.43,1.778-0.736,3.548-0.736,5.326\n\t\t\tv9.562c0,10.557,8.568,19.125,19.125,19.125h460.932c10.557,0,19.115-8.568,19.106-19.125l-0.125-167.507\n\t\t\tc0-2.782-0.593-5.221-1.616-7.286c1.396-3.806,2.057-7.841,1.598-11.839l-4.677-40.497c-1.415-12.249-9.763-29.146-18.637-37.724\n\t\t\tl-36.127-34.951C434.712,167.418,425.79,170.325,423.687,182.488z"})])],-1),gt=[It,Ut];function Nt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Rt,gt)}var ht={name:"MountainBiking"};const zt=(0,h.Z)(ht,[["render",Nt]]);var wt=zt;const ft={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 503.162 503.162",style:{"enable-background":"new 0 0 503.162 503.162"},"xml:space":"preserve"},vt=(0,l.uE)(' silhouette of a person riding an electric mountain bike ',18),Ct=[vt];function Dt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",ft,Ct)}var kt={name:"MountainBikingElectric"};const Pt=(0,h.Z)(kt,[["render",Dt]]);var Lt=Pt;const Mt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 534.51 534.51",style:{"enable-background":"new 0 0 534.51 534.51"},"xml:space":"preserve"},bt=(0,l._)("desc",{id:"rowingDescription"},"silhouette of a person rowing",-1),yt=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M70.517,393.857h132.622l-67.205,68.631c-3.28,3.385-3.204,8.797,0.172,12.076c1.597,1.568,3.72,2.43,5.958,2.43\n\t\t\tc2.305,0,4.533-0.947,6.12-2.572l78.881-80.555h221.315c12.45,0,30.676-6.006,40.296-13.914\n\t\t\tc8.788-7.229,19.049-16.217,26.345-24.299c10.375-9.811,22.214-23.639-4.255-22.834c-6.98,0.248-206.789,0.02-223.926,0\n\t\t\tl47.144-48.139l22.176-22.032l28.209,9.17c10.414,3.385,22.472-0.803,26.919-9.362c4.446-8.558,0.268-18.407-9.343-21.993\n\t\t\tl-17.404-6.512l54.698-54.774c12.507,6.617,28.362,4.867,38.899-5.671l46.541-46.607c13.11-13.015,13.11-33.957,0-46.923\n\t\t\tc-12.909-13.034-34.042-13.034-46.942,0l-46.512,46.598c-10.892,10.815-12.508,27.139-5.26,39.742l-57.853,59.077L253.744,183.09\n\t\t\tc-1.482-0.851-14.153-5.786-26.833-10.643c-14.898-5.719-30.371,0.583-34.53,13.971l-7.525,24.241l-35.324,118.451\n\t\t\tc-0.468,1.34-0.603,2.562-0.746,3.711H14.136c-12.45,0-17.662,8.836-11.618,19.727l23.237,21.592\n\t\t\tC39.123,385.068,58.066,393.857,70.517,393.857z M272.63,248.727c1.797-5.967,8.099-9.39,14.075-7.64l51.37,14.975l-33.038,33.737\n\t\t\tl-43.453,43.012h-14.2L272.63,248.727z"}),(0,l._)("circle",{cx:"248.953",cy:"109.842",r:"52.326"})])],-1),Gt=[bt,yt];function Ft(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Mt,Gt)}var Wt={name:"Rowing"};const Kt=(0,h.Z)(Wt,[["render",Ft]]);var Yt=Kt;const xt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve"},$t=(0,l._)("desc",{id:"runningDescription"},"silhouette of a running person",-1),Bt=(0,l._)("g",null,[(0,l._)("path",{d:"M282.74,80.771c22.318,0,40.401-18.08,40.401-40.389C323.141,18.084,305.058,0,282.74,0\n\t\tc-22.281,0-40.378,18.084-40.378,40.383C242.362,62.691,260.458,80.771,282.74,80.771z"}),(0,l._)("path",{d:"M400.207,188.547H331.47l-38.766-55.03l0.123-0.944c1.384-10.514-1.475-21.146-7.94-29.556\n\t\tc-6.461-8.409-16.007-13.903-26.52-15.287c-10.926-1.429-22.619,3.12-31.206,8.646c-1.441,0.928-84.97,54.921-84.97,54.921\n\t\tc-5.175,3.358-8.542,8.877-9.165,15.016c-0.634,6.13,1.574,12.222,5.976,16.541l58.982,58l-6.417,48.954l-18.707,65.584l-67.8-19.4\n\t\tc-12.911-3.676-26.44,3.796-30.159,16.747c-3.699,12.951,3.799,26.459,16.758,30.168l91.271,26.109\n\t\tc2.192,0.627,4.444,0.936,6.7,0.936c4.113,0,8.195-1.04,11.848-3.073c5.655-3.146,9.833-8.409,11.611-14.635l21.963-77.057\n\t\tl26.365,36.639l6.684,119.628c0.73,12.991,11.501,23.036,24.349,23.036c0.441,0,0.92-0.016,1.379-0.039\n\t\tc13.453-0.748,23.745-12.262,23-25.713l-7.083-126.736c-0.271-4.643-1.846-9.116-4.56-12.887l-32.24-44.811l11.959-91.279\n\t\tl19.409,27.555c3.794,5.407,10.005,8.624,16.613,8.624h79.28c11.226,0,20.326-9.101,20.326-20.329\n\t\tC420.533,197.647,411.432,188.547,400.207,188.547z M204.606,190.357l-19.026-18.717l23.476-15.206L204.606,190.357z"})],-1),Zt=[$t,Bt];function Ht(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",xt,Zt)}var qt={name:"Running"};const Vt=(0,h.Z)(qt,[["render",Ht]]);var jt=Vt;const Xt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 522.362 522.362",style:{"enable-background":"new 0 0 522.362 522.362"},"xml:space":"preserve"},Jt=(0,l._)("desc",{id:"alpineSkiingDescription"},"silhouette of a person skiing",-1),Qt=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M14.314,351.859L408.088,461.78c4.484,1.311,9.104,1.97,13.731,1.97l0,0c17.471,0,33.746-9.429,42.467-24.604\n\t\t\tc2.716-4.724,3.137-10.27,1.157-15.214c-1.912-4.762-5.767-8.31-10.576-9.744c-7.373-2.237-15.481,1.109-22.146,9.229\n\t\t\tc-3.548,4.303-9.496,6.244-15.07,4.714l-136.467-38.078c1.396-0.555,2.812-1.195,4.236-2.065l103.266-63.15\n\t\t\tc15.443-9.362,18.493-33.957,7.812-43.883l-64.758-60.233l39.972-21.688l69.682,9.744c5.23,0.736,9.744-2.037,10.079-6.187\n\t\t\tc0.344-4.141-3.624-8.1-8.855-8.826l-48.605-6.828l22.472-12.192c39.895-23.275,5.823-85.192-35.334-63.112l-87.554,61.19\n\t\t\tl-117.503-16.515l2.543-12.087c0.545-2.582-1.109-5.116-3.691-5.661c-2.572-0.593-5.116,1.1-5.661,3.701l-2.678,12.709\n\t\t\tl-18.331-2.582c-5.231-0.727-9.467,2.123-9.467,6.369s4.236,8.281,9.467,9.017l15.176,2.123l-2.544,12.087\n\t\t\tc-0.545,2.582,1.109,5.125,3.691,5.671c0.334,0.076,0.66,0.105,0.994,0.105c2.209,0,4.198-1.54,4.676-3.787l2.678-12.737\n\t\t\tl102.414,14.315l-5.308,3.72c-4.332,3.022-10.155,9.151-11.723,14.201c-3.844,12.45-1.473,26.717,10.452,37.705l68.802,62.175\n\t\t\tc0,0-50.978,31.776-74.998,46.397c-14.219,8.606-13.674,23.858-6.129,33.393L23.705,318.199\n\t\t\tc-10.012-2.792-20.569,2.554-23.113,11.695C-2,339.169,4.159,349.029,14.314,351.859z"}),(0,l._)("path",{d:"M450.842,72.003c-15.291,16.715-14.201,42.667,2.639,58.121c16.706,15.31,42.716,14.086,58.073-2.668\n\t\t\tc15.386-16.677,14.172-42.734-2.544-58.016C492.305,54.064,466.17,55.192,450.842,72.003z"})])],-1),en=[Jt,Qt];function tn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Xt,en)}var nn={name:"SkiingAlpine"};const rn=(0,h.Z)(nn,[["render",tn]]);var an=rn;const on={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 296 296",style:{"enable-background":"new 0 0 296 296"},"xml:space":"preserve"},sn=(0,l._)("desc",{id:"crossCountrySkiingDescription"}," silhouette of a person skiing (cross country) ",-1),ln=(0,l._)("g",null,[(0,l._)("path",{d:"M241.313,246.906h-39.564l0.456-1.273c5.62-18.374,3.479-37.58-6.027-54.278c-5.653-9.929-13.443-18.018-22.745-23.959\n\t\tl12.886-51.126c3.035-12.05-4.272-24.266-16.322-27.301c-2.634-0.664-5.278-0.826-7.833-0.559\n\t\tc-0.151-0.011-0.299-0.032-0.452-0.038c-26.03-1.077-51.443,8.485-70.33,25.993L41.586,82.855\n\t\tc-4.332-2.741-10.065-1.451-12.806,2.881s-1.451,10.065,2.88,12.806l47.625,30.136c-2.557,6.013-0.962,13.224,4.375,17.531\n\t\tc2.774,2.24,6.104,3.33,9.413,3.33c4.377-0.001,8.717-1.907,11.68-5.579l0.478-0.591c8.686-10.766,20.465-18.479,33.484-22.317\n\t\tl-11.095,44.046c-1.061,4.214-0.854,8.448,0.374,12.305c-12.908,17.917-28.398,33.68-46.198,46.979l-14.649,10.727\n\t\tc-3.938,2.943-6.001,7.798-6.005,11.798H8.25c-4.556,0-8.083,4.131-8.083,8.688v2.063c0,4.556,3.527,8.25,8.083,8.25h55.188\n\t\th161.375H280c9.113,0,16.167-7.387,16.167-16.5v-2.5H241.313z M153.974,192.398c0.741-0.153,1.471-0.231,2.188-0.457\n\t\tc5.742,3.406,10.53,8.313,13.945,14.311c5.378,9.447,6.59,20.402,3.41,30.797l-1.799,5.674c-0.447,1.461-0.656,3.184-0.657,4.184\n\t\th-69.909C121.581,231.906,139.297,213.274,153.974,192.398z M167,57.938c0-15.378,12.466-27.844,27.844-27.844\n\t\ts27.844,12.466,27.844,27.844s-12.466,27.844-27.844,27.844S167,73.315,167,57.938z"})],-1),cn=[sn,ln];function un(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",on,cn)}var dn={name:"SkiingCrossCountry"};const mn=(0,h.Z)(dn,[["render",un]]);var _n=mn;const En={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Sn=(0,l.uE)('silhouette of a person with snowshoes',6),Tn=[Sn];function pn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",En,Tn)}var An={name:"Snowshoes"};const On=(0,h.Z)(An,[["render",pn]]);var Rn=On;const In={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 535.876 535.876",style:{"enable-background":"new 0 0 535.876 535.876"},"xml:space":"preserve"},Un=(0,l._)("desc",{id:"trailDescription"},"silhouette of a person running (trail)",-1),gn=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M505.204,326.949c-5.805-10.892-15.176-10.862-20.923,0.067l-7.114,13.512c-5.757,10.92-20.416,19.775-32.752,19.775\n\t\t\th-16.753c-12.346,0-29.645,6.847-38.643,15.29l-32.35,30.342l-1.233-105.388c0.822-18.446-10.596-24.634-10.596-24.634\n\t\t\tl-56.543-25.972l33.67-67.645l38.527,22.912c0,0,15.472,9.715,26.727-9.324l37.026-63.093c1.625-3.519,2.094-7.564,1.052-11.609\n\t\t\tc-2.381-9.256-11.81-14.86-21.095-12.479c-4.083,1.042-7.459,3.49-9.754,6.713l-30.772,51.962l-62.777-37.102\n\t\t\tc-4.733-2.716-10.519-3.691-16.257-2.209l-78.345,20.12c-5.03,1.291-8.96,4.762-11.017,9.142l-38.097,76.165\n\t\t\tc-2.591,3.854-3.624,8.73-2.371,13.607c2.285,8.941,11.456,14.363,20.435,12.059c5.04-1.291,8.951-4.743,10.997-9.161\n\t\t\tl35.314-70.858l28.936-7.296l-76.203,149.921l-65.981,16.734c-1.759,0.393-3.48,1.023-5.163,1.836\n\t\t\tc-10.596,5.412-14.679,18.179-9.267,28.803c4.733,9.266,15.252,13.636,24.901,10.978l78.067-20.187\n\t\t\tc18.6-4.093,23.313-14.449,23.313-14.449l30.581-58.79l62.28,35.678l0.593,86.216c0.01,1.08,0.259,2.161,0.421,3.241l-11.6-4.188\n\t\t\tc-11.608-4.188-30.57-4.608-42.361-0.956l-26.135,8.128c-11.79,3.663-30.791,3.338-42.447-0.717l-19.221-6.694\n\t\t\tc-11.657-4.054-28.831-0.984-38.374,6.838L109.9,433.954c-9.544,7.822-26.67,10.72-38.25,6.483L40.84,429.135\n\t\t\tc-11.58-4.256-25.608,1.157-31.336,12.097l-7.21,13.789c-5.728,10.93-0.354,19.794,11.982,19.794H500.27\n\t\t\tc12.336,0,24.309-9.802,26.728-21.907l8.004-39.981c2.409-12.097-0.325-30.733-6.14-41.616L505.204,326.949z"}),(0,l._)("path",{d:"M326.395,126.625c17.806-4.562,28.563-22.721,23.983-40.526c-4.581-17.844-22.74-28.554-40.555-23.983\n\t\t\tc-17.796,4.581-28.535,22.711-23.964,40.535C290.439,120.476,308.599,131.205,326.395,126.625z"})])],-1),Nn=[Un,gn];function hn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",In,Nn)}var zn={name:"Trail"};const wn=(0,h.Z)(zn,[["render",hn]]);var fn=wn;const vn={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Cn=(0,l.uE)('silhouette of a walking person',3),Dn=[Cn];function kn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",vn,Dn)}var Pn={name:"Walking"};const Ln=(0,h.Z)(Pn,[["render",kn]]);var Mn=Ln;const bn=["title"];var yn=(0,l.aZ)({__name:"index",props:{sportLabel:null,color:null,title:{default:""}},setup(e){const t=e,{color:n,sportLabel:r,title:a}=(0,c.BK)(t),o=(0,l.f3)("sportColors");return(e,t)=>((0,l.wg)(),(0,l.iD)("div",{class:"sport-img",style:(0,u.j5)({fill:(0,c.SU)(n)?(0,c.SU)(n):(0,c.SU)(o)[(0,c.SU)(r)]}),title:(0,c.SU)(a)?(0,c.SU)(a):e.$t(`sports.${(0,c.SU)(r)}.LABEL`)},["Cycling (Sport)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(je,{key:0})):(0,l.kq)("",!0),"Cycling (Transport)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(at,{key:1})):(0,l.kq)("",!0),"Cycling (Virtual)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(dt,{key:2})):(0,l.kq)("",!0),"Hiking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Ot,{key:3})):(0,l.kq)("",!0),"Mountain Biking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(wt,{key:4})):(0,l.kq)("",!0),"Mountain Biking (Electric)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Lt,{key:5})):(0,l.kq)("",!0),"Rowing"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Yt,{key:6})):(0,l.kq)("",!0),"Running"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(jt,{key:7})):(0,l.kq)("",!0),"Skiing (Alpine)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(an,{key:8})):(0,l.kq)("",!0),"Skiing (Cross Country)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(_n,{key:9})):(0,l.kq)("",!0),"Snowshoes"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Rn,{key:10})):(0,l.kq)("",!0),"Trail"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(fn,{key:11})):(0,l.kq)("",!0),"Walking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Mn,{key:12})):(0,l.kq)("",!0)],12,bn))}});const Gn=yn;var Fn=Gn;const Wn={class:"loader"};function Kn(e,t){return(0,l.wg)(),(0,l.iD)("div",Wn)}const Yn={},xn=(0,h.Z)(Yn,[["render",Kn],["__scopeId","data-v-4c9921ee"]]);var $n=xn;const Bn={id:"modal"},Zn={class:"custom-modal"},Hn={key:0,class:"modal-message"},qn={key:1,class:"modal-message"},Vn={class:"modal-buttons"};var jn=(0,l.aZ)({__name:"Modal",props:{title:null,message:null,strongMessage:{default:()=>null}},emits:["cancelAction","confirmAction"],setup(e,{emit:t}){const n=e,r=(0,C.o)(),{title:a,message:o,strongMessage:s}=(0,c.BK)(n),i=(0,l.Fl)((()=>r.getters[v.SY.GETTERS.ERROR_MESSAGES]));return(0,l.Ah)((()=>r.commit(v.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(e,n)=>{const r=(0,l.up)("i18n-t"),d=(0,l.up)("ErrorMessage"),m=(0,l.up)("Card");return(0,l.wg)(),(0,l.iD)("div",Bn,[(0,l._)("div",Zn,[(0,l.Wm)(m,null,{title:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,c.SU)(a)),1)])),content:(0,l.w5)((()=>[(0,c.SU)(s)?((0,l.wg)(),(0,l.iD)("div",Hn,[(0,l.Wm)(r,{keypath:(0,c.SU)(o)},{default:(0,l.w5)((()=>[(0,l._)("span",null,(0,u.zw)((0,c.SU)(s)),1)])),_:1},8,["keypath"])])):((0,l.wg)(),(0,l.iD)("div",qn,(0,u.zw)((0,c.SU)(o)),1)),(0,c.SU)(i)?((0,l.wg)(),(0,l.j4)(d,{key:2,message:(0,c.SU)(i)},null,8,["message"])):(0,l.kq)("",!0),(0,l._)("div",Vn,[(0,c.SU)(i)?(0,l.kq)("",!0):((0,l.wg)(),(0,l.iD)("button",{key:0,class:"confirm",onClick:n[0]||(n[0]=e=>t("confirmAction"))},(0,u.zw)(e.$t("buttons.YES")),1)),(0,l._)("button",{class:"cancel",onClick:n[1]||(n[1]=e=>t("cancelAction"))},(0,u.zw)(e.$t("buttons."+((0,c.SU)(i)?"CANCEL":"NO"))),1)])])),_:1})])])}}});const Xn=(0,h.Z)(jn,[["__scopeId","data-v-e8fcfaba"]]);var Jn=Xn;const Qn=[{target:Ae,name:"AlertMessage"},{target:Oe.Z,name:"Card"},{target:he,name:"CustomTextArea"},{target:ve,name:"Distance"},{target:be,name:"Dropdown"},{target:Ye,name:"ErrorMessage"},{target:$n,name:"Loader"},{target:Jn,name:"Modal"},{target:Fn,name:"SportImage"}],er={mounted:(e,t)=>{e.clickOutsideEvent=function(n){e===n.target||e.contains(n.target)||t.value(n)},document.body.addEventListener("click",e.clickOutsideEvent),document.body.addEventListener("touchstart",e.clickOutsideEvent)},unmounted:function(e){e.clickOutsideEvent&&(document.body.removeEventListener("click",e.clickOutsideEvent),document.body.removeEventListener("touchstart",e.clickOutsideEvent),e.clickOutsideEvent=void 0)}};var tr=n(631);r.kL.register(r.ZL,r.jn,r.od,r.De,r.Dx,r.u,r.Gu,r.vn,r.uw,r.ST,r.f$,a.Z);const nr=(0,o.ri)(ue).provide("sportColors",tr.Zo).use(de.Z).use(_e.Z).use(me.Z).use(s.ZP,{name:"VFullscreen"}).directive("click-outside",er);Qn.forEach((e=>{nr.component(e.name,e.target)})),nr.mount("#app")},5073:function(e,t,n){"use strict";n.d(t,{Z:function(){return wl}});var r=n(2201),a=(n(7658),n(6252)),o=n(3577),s=n(9963),i=n(2262),l=n(5801),c=n(9917),u=n(8966);const d=e=>((0,a.dD)("data-v-24ec93e2"),e=e(),(0,a.Cn)(),e),m={id:"admin-app",class:"admin-card"},_=["onSubmit"],E={for:"admin_contact"},S=["value"],T=["disabled"],p={for:"max_users"},A=["disabled"],O={class:"user-limit-help"},R={class:"info-box"},I=d((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),U={for:"max_single_file_size"},g=["disabled"],N={for:"max_zip_file_size"},h=["disabled"],z={for:"gpx_limit_import"},w=["disabled"],f={key:1,class:"form-buttons"},v={class:"confirm",type:"submit"},C=["onClick"],D={key:2,class:"form-buttons"};var k=(0,a.aZ)({__name:"AdminApplication",props:{appConfig:null,edition:{type:Boolean,default:!1}},setup(e){const t=e,{edition:n}=(0,i.BK)(t),d=(0,c.o)(),k=(0,r.tv)(),P=(0,i.qj)({admin_contact:"",max_users:0,max_single_file_size:0,max_zip_file_size:0,gpx_limit_import:0}),L=(0,a.Fl)((()=>d.getters[l.SY.GETTERS.ERROR_MESSAGES]));function M(e){Object.keys(P).map((t=>{["max_single_file_size","max_zip_file_size"].includes(t)?P[t]=(0,u.j)(e[t]):P[t]=e[t]}))}function b(){M(t.appConfig),d.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),k.push("/admin/application")}function y(){const e=Object.assign({},P);e.max_single_file_size*=1048576,e.max_zip_file_size*=1048576,d.dispatch(l.SY.ACTIONS.UPDATE_APPLICATION_CONFIG,e)}return(0,a.wF)((()=>{t.appConfig&&M(t.appConfig)})),(e,t)=>{const r=(0,a.up)("ErrorMessage"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",m,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.TITLE")),1)])),content:(0,a.w5)((()=>[(0,a._)("form",{class:"admin-form",onSubmit:(0,s.iM)(y,["prevent"])},[(0,a._)("label",E,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.ADMIN_CONTACT"))+": ",1),(0,i.SU)(n)||P.admin_contact?(0,a.wy)(((0,a.wg)(),(0,a.iD)("input",{key:1,id:"admin_contact",name:"admin_contact",type:"email","onUpdate:modelValue":t[0]||(t[0]=e=>P.admin_contact=e),disabled:!(0,i.SU)(n)},null,8,T)),[[s.nr,P.admin_contact]]):((0,a.wg)(),(0,a.iD)("input",{key:0,class:"no-contact",value:e.$t("admin.APP_CONFIG.NO_CONTACT_EMAIL"),disabled:""},null,8,S))]),(0,a._)("label",p,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.MAX_USERS_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_users",name:"max_users",type:"number",min:"0","onUpdate:modelValue":t[1]||(t[1]=e=>P.max_users=e),disabled:!(0,i.SU)(n)},null,8,A),[[s.nr,P.max_users]])]),(0,a._)("div",O,[(0,a._)("span",R,[I,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.APP_CONFIG.MAX_USERS_HELP")),1)])]),(0,a._)("label",U,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.SINGLE_UPLOAD_MAX_SIZE_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_single_file_size",name:"max_single_file_size",type:"number",step:"0.1",min:"0","onUpdate:modelValue":t[2]||(t[2]=e=>P.max_single_file_size=e),disabled:!(0,i.SU)(n)},null,8,g),[[s.nr,P.max_single_file_size]])]),(0,a._)("label",N,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.ZIP_UPLOAD_MAX_SIZE_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_zip_file_size",name:"max_zip_file_size",type:"number",step:"0.1",min:"0","onUpdate:modelValue":t[3]||(t[3]=e=>P.max_zip_file_size=e),disabled:!(0,i.SU)(n)},null,8,h),[[s.nr,P.max_zip_file_size]])]),(0,a._)("label",z,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.MAX_FILES_IN_ZIP_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"gpx_limit_import",name:"gpx_limit_import",type:"number",min:"0","onUpdate:modelValue":t[4]||(t[4]=e=>P.gpx_limit_import=e),disabled:!(0,i.SU)(n)},null,8,w),[[s.nr,P.gpx_limit_import]])]),(0,i.SU)(L)?((0,a.wg)(),(0,a.j4)(r,{key:0,message:(0,i.SU)(L)},null,8,["message"])):(0,a.kq)("",!0),(0,i.SU)(n)?((0,a.wg)(),(0,a.iD)("div",f,[(0,a._)("button",v,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:(0,s.iM)(b,["prevent"])},(0,o.zw)(e.$t("buttons.CANCEL")),9,C)])):((0,a.wg)(),(0,a.iD)("div",D,[(0,a._)("button",{class:"confirm",onClick:t[5]||(t[5]=(0,s.iM)((t=>e.$router.push("/admin/application/edit")),["prevent"]))},(0,o.zw)(e.$t("buttons.EDIT")),1),(0,a._)("button",{class:"cancel",onClick:t[6]||(t[6]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)]))],40,_)])),_:1})])}}}),P=n(3744);const L=(0,P.Z)(k,[["__scopeId","data-v-24ec93e2"]]);var M=L;const b={class:"stat-card"},y={class:"stat-content box"},G={class:"stat-icon"},F={class:"stat-details"},W={class:"stat-huge"},K={class:"stat"};var Y=(0,a.aZ)({__name:"StatCard",props:{icon:null,text:null,value:null},setup(e){const t=e,{icon:n,text:r,value:s}=(0,i.BK)(t);return(e,t)=>((0,a.wg)(),(0,a.iD)("div",b,[(0,a._)("div",y,[(0,a._)("div",G,[(0,a._)("i",{class:(0,o.C_)(["fa",`fa-${(0,i.SU)(n)}`])},null,2)]),(0,a._)("div",F,[(0,a._)("div",W,(0,o.zw)((0,i.SU)(s)),1),(0,a._)("div",K,(0,o.zw)((0,i.SU)(r)),1)])])]))}});const x=Y;var $=x;const B={id:"user-stats"};var Z=(0,a.aZ)({__name:"AppStatsCards",props:{appStatistics:null},setup(e){const t=e,{appStatistics:n}=(0,i.BK)(t),r=(0,a.Fl)((()=>(0,u.Z)(n.value.uploads_dir_size,!1)));return(e,t)=>((0,a.wg)(),(0,a.iD)("div",B,[(0,a.Wm)($,{icon:"users",value:(0,i.SU)(n).users,text:e.$t("admin.USER",(0,i.SU)(n).users)},null,8,["value","text"]),(0,a.Wm)($,{icon:"tags",value:(0,i.SU)(n).sports,text:e.$t("workouts.SPORT",(0,i.SU)(n).sports)},null,8,["value","text"]),(0,a.Wm)($,{icon:"calendar",value:(0,i.SU)(n).workouts,text:e.$t("workouts.WORKOUT",(0,i.SU)(n).workouts)},null,8,["value","text"]),(0,a.Wm)($,{icon:"folder-open",value:(0,i.SU)(r).size,text:(0,i.SU)(r).suffix},null,8,["value","text"])]))}});const H=Z;var q=H,V=n(2531);const j=e=>((0,a.dD)("data-v-0dd66f89"),e=e(),(0,a.Cn)(),e),X={id:"admin-menu",class:"center-card"},J={class:"admin-menu description-list"},Q={class:"application-config-details"},ee=j((()=>(0,a._)("br",null,null,-1))),te={class:"registration-status"},ne={key:0,class:"email-sending-status"},re=j((()=>(0,a._)("i",{class:"fa fa-exclamation-triangle","aria-hidden":"true"},null,-1)));var ae=(0,a.aZ)({__name:"AdminMenu",props:{appConfig:null,appStatistics:{default:()=>({})}},setup(e){const t=e,{appConfig:n,appStatistics:r}=(0,i.BK)(t);return(e,t)=>{const s=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("div",X,[(0,a.Wm)(V.Z,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.ADMINISTRATION")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(q,{appStatistics:(0,i.SU)(r)},null,8,["appStatistics"]),(0,a._)("div",J,[(0,a._)("dl",null,[(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/application"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.APPLICATION")),1)])),_:1})]),(0,a._)("dd",Q,[(0,a.Uk)((0,o.zw)(e.$t("admin.UPDATE_APPLICATION_DESCRIPTION")),1),ee,(0,a._)("span",te,(0,o.zw)(e.$t("admin.REGISTRATION_"+((0,i.SU)(n).is_registration_enabled?"ENABLED":"DISABLED"))),1),(0,i.SU)(n).is_email_sending_enabled?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("span",ne,[re,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.EMAIL_SENDING_DISABLED")),1)]))]),(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/sports"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("workouts.SPORT",0))),1)])),_:1})]),(0,a._)("dd",null,(0,o.zw)(e.$t("admin.ENABLE_DISABLE_SPORTS")),1),(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/users"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("admin.USER",0))),1)])),_:1})]),(0,a._)("dd",null,(0,o.zw)(e.$t("admin.ADMIN_RIGHTS_DELETE_USER_ACCOUNT")),1)])])])),_:1})])}}});const oe=(0,P.Z)(ae,[["__scopeId","data-v-0dd66f89"]]);var se=oe,ie=n(9150),le=n(631);const ce=e=>((0,a.dD)("data-v-6d62af67"),e=e(),(0,a.Cn)(),e),ue={id:"admin-sports",class:"admin-card"},de={class:"responsive-table"},me=ce((()=>(0,a._)("th",null,"#",-1))),_e={class:"text-left"},Ee={class:"text-left sport-action"},Se=ce((()=>(0,a._)("th",null,null,-1))),Te={class:"text-center"},pe=ce((()=>(0,a._)("span",{class:"cell-heading"},"id",-1))),Ae={class:"cell-heading"},Oe={class:"sport-label"},Re={class:"cell-heading"},Ie={class:"text-center"},Ue={class:"cell-heading"},ge={class:"sport-action"},Ne={class:"cell-heading"},he={class:"action-button"},ze=["onClick"],we={key:0,class:"has-workouts"},fe=ce((()=>(0,a._)("i",{class:"fa fa-warning","aria-hidden":"true"},null,-1)));var ve=(0,a.aZ)({__name:"AdminSports",setup(e){const{t:t}=(0,ie.QT)(),n=(0,c.o)(),r=(0,a.Fl)((()=>(0,le.xH)(n.getters[l.O8.GETTERS.SPORTS],t))),u=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function d(e,t){n.dispatch(l.O8.ACTIONS.UPDATE_SPORTS,{id:e,isActive:t})}return(e,t)=>{const n=(0,a.up)("SportImage"),l=(0,a.up)("ErrorMessage"),c=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",ue,[(0,a.Wm)(c,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.SPORTS.TITLE")),1)])),content:(0,a.w5)((()=>[(0,a._)("button",{class:"top-button",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1),(0,a._)("div",de,[(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[me,(0,a._)("th",null,(0,o.zw)(e.$t("admin.SPORTS.TABLE.IMAGE")),1),(0,a._)("th",_e,(0,o.zw)(e.$t("admin.SPORTS.TABLE.LABEL")),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.SPORTS.TABLE.ACTIVE")),1),(0,a._)("th",Ee,(0,o.zw)(e.$t("admin.ACTION")),1),Se])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(r),(t=>((0,a.wg)(),(0,a.iD)("tr",{key:t.id},[(0,a._)("td",Te,[pe,(0,a.Uk)(" "+(0,o.zw)(t.id),1)]),(0,a._)("td",null,[(0,a._)("span",Ae,(0,o.zw)(e.$t("admin.SPORTS.TABLE.IMAGE")),1),(0,a.Wm)(n,{title:t.translatedLabel,"sport-label":t.label,color:t.color},null,8,["title","sport-label","color"])]),(0,a._)("td",Oe,[(0,a._)("span",Re,(0,o.zw)(e.$t("admin.SPORTS.TABLE.LABEL")),1),(0,a.Uk)(" "+(0,o.zw)(t.translatedLabel),1)]),(0,a._)("td",Ie,[(0,a._)("span",Ue,(0,o.zw)(e.$t("admin.SPORTS.TABLE.ACTIVE")),1),(0,a._)("i",{class:(0,o.C_)("fa fa"+(t.is_active?"-check":"")),"aria-hidden":"true"},null,2)]),(0,a._)("td",ge,[(0,a._)("span",Ne,(0,o.zw)(e.$t("admin.ACTION")),1),(0,a._)("div",he,[(0,a._)("button",{class:(0,o.C_)({danger:t.is_active}),onClick:e=>d(t.id,!t.is_active)},(0,o.zw)(e.$t(`buttons.${t.is_active?"DIS":"EN"}ABLE`)),11,ze),t.has_workouts?((0,a.wg)(),(0,a.iD)("span",we,[fe,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.SPORTS.TABLE.HAS_WORKOUTS")),1)])):(0,a.kq)("",!0)])])])))),128))])]),(0,i.SU)(u)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(u)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("button",{onClick:t[1]||(t[1]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)])])),_:1})])}}});const Ce=(0,P.Z)(ve,[["__scopeId","data-v-6d62af67"]]);var De=Ce,ke=n(8626),Pe=n(5020),Le=n(6595);const Me={class:"users-filters"},be={class:"search-username"},ye=["onKeyup","placeholder"];var Ge=(0,a.aZ)({__name:"UsersNameFilter",emits:["filterOnUsername"],setup(e,{emit:t}){const n=(0,r.yj)(),l=(0,i.iH)(n.query.q?n.query.q:"");function c(){""!==l.value&&t("filterOnUsername",l)}function u(){l.value="",t("filterOnUsername",l.value)}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Me,[(0,a._)("div",be,[(0,a.wy)((0,a._)("input",{id:"username",name:"username","onUpdate:modelValue":t[0]||(t[0]=e=>l.value=e),onKeyup:(0,s.D2)(c,["enter"]),placeholder:e.$t("user.FILTER_ON_USERNAME")},null,40,ye),[[s.nr,l.value,void 0,{trim:!0}]]),""!==l.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-times","aria-hidden":"true",onClick:u})):(0,a.kq)("",!0)]),(0,a._)("i",{class:(0,o.C_)(["fa fa-search",{"fa-disabled":""===l.value}]),"aria-hidden":"true",onClick:c},null,2)]))}});const Fe=(0,P.Z)(Ge,[["__scopeId","data-v-627a8e91"]]);var We=Fe,Ke=n(2766),Ye=n(6558);const xe=e=>((0,a.dD)("data-v-dc12ff78"),e=e(),(0,a.Cn)(),e),$e={id:"admin-users",class:"admin-card"},Be={key:0,class:"no-users"},Ze={key:1,class:"responsive-table"},He=xe((()=>(0,a._)("th",null,"#",-1))),qe={class:"left-text"},Ve={class:"left-text"},je={class:"left-text"},Xe={class:"cell-heading"},Je={class:"cell-heading"},Qe={class:"cell-heading"},et={class:"cell-heading"},tt={class:"text-center"},nt={class:"cell-heading"},rt={class:"text-center"},at={class:"cell-heading"},ot={class:"text-center"},st={class:"cell-heading"},it={class:"text-center"},lt={class:"cell-heading"},ct=["disabled","onClick"];var ut=(0,a.aZ)({__name:"AdminUsers",setup(e){const t=(0,c.o)(),n=(0,r.yj)(),u=(0,r.tv)(),d=["is_active","admin","created_at","username","workouts_count"],m="created_at";let _=(0,i.qj)((0,Ke.pm)(n.query,d,m));const E=(0,a.Fl)((()=>t.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),S=(0,a.Fl)((()=>t.getters[l.RT.GETTERS.USERS])),T=(0,a.Fl)((()=>t.getters[l.RT.GETTERS.USERS_PAGINATION])),p=(0,a.Fl)((()=>t.getters[l.SY.GETTERS.ERROR_MESSAGES]));function A(e){t.dispatch(l.RT.ACTIONS.GET_USERS,e)}function O(e){I("q",e.value)}function R(e,n){t.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,admin:n})}function I(e,t){_[e]=t,"per_page"===e&&(_.page=1),u.push({path:"/admin/users",query:_})}return(0,a.wF)((()=>A(_))),(0,a.Ah)((()=>{t.dispatch(l.RT.ACTIONS.EMPTY_USERS)})),(0,a.YP)((()=>n.query),(e=>{_=(0,Ke.pm)(e,d,m,{query:_}),A(_)})),(e,t)=>{const n=(0,a.up)("router-link"),r=(0,a.up)("ErrorMessage"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",$e,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("admin.USER",0))),1)])),content:(0,a.w5)((()=>[(0,a._)("button",{class:"top-button",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1),(0,a.Wm)(We,{onFilterOnUsername:O}),(0,a.Wm)(ke.Z,{sort:(0,i.SU)(Ke.fS),order_by:d,query:(0,i.SU)(_),message:"admin.USERS.SELECTS.ORDER_BY",onUpdateSelect:I},null,8,["sort","query"]),0===(0,i.SU)(S).length?((0,a.wg)(),(0,a.iD)("div",Be,(0,o.zw)(e.$t("user.NO_USERS_FOUND")),1)):((0,a.wg)(),(0,a.iD)("div",Ze,[(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[He,(0,a._)("th",qe,(0,o.zw)(e.$t("user.USERNAME")),1),(0,a._)("th",Ve,(0,o.zw)(e.$t("user.EMAIL")),1),(0,a._)("th",je,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE")),1),(0,a._)("th",null,(0,o.zw)((0,o.kC)(e.$t("workouts.WORKOUT",0))),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.ACTIVE")),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.ADMIN")),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.ACTION")),1)])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(t=>((0,a.wg)(),(0,a.iD)("tr",{key:t.username},[(0,a._)("td",null,[(0,a._)("span",Xe,(0,o.zw)(e.$t("user.PROFILE.PICTURE")),1),(0,a.Wm)(Le.Z,{user:t},null,8,["user"])]),(0,a._)("td",null,[(0,a._)("span",Je,(0,o.zw)(e.$t("user.USERNAME")),1),(0,a.Wm)(n,{to:`/admin/users/${t.username}`},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.username),1)])),_:2},1032,["to"])]),(0,a._)("td",null,[(0,a._)("span",Qe,(0,o.zw)(e.$t("user.EMAIL")),1),(0,a.Uk)(" "+(0,o.zw)(t.email),1)]),(0,a._)("td",null,[(0,a._)("span",et,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE")),1),(0,a.Uk)(" "+(0,o.zw)((0,i.SU)(Ye.p6)(t.created_at,(0,i.SU)(E).timezone,(0,i.SU)(E).date_format)),1)]),(0,a._)("td",tt,[(0,a._)("span",nt,(0,o.zw)((0,o.kC)(e.$t("workouts.WORKOUT",0))),1),(0,a.Uk)(" "+(0,o.zw)(t.nb_workouts),1)]),(0,a._)("td",rt,[(0,a._)("span",at,(0,o.zw)(e.$t("admin.ACTIVE")),1),(0,a._)("i",{class:(0,o.C_)(`fa fa${t.is_active?"-check":""}-square-o`),"aria-hidden":"true"},null,2)]),(0,a._)("td",ot,[(0,a._)("span",st,(0,o.zw)(e.$t("user.ADMIN")),1),(0,a._)("i",{class:(0,o.C_)(`fa fa${t.admin?"-check":""}-square-o`),"aria-hidden":"true"},null,2)]),(0,a._)("td",it,[(0,a._)("span",lt,(0,o.zw)(e.$t("admin.ACTION")),1),(0,a._)("button",{class:(0,o.C_)({danger:t.admin}),disabled:t.username===(0,i.SU)(E).username,onClick:e=>R(t.username,!t.admin)},(0,o.zw)(e.$t(`admin.USERS.TABLE.${t.admin?"REMOVE":"ADD"}_ADMIN_RIGHTS`)),11,ct)])])))),128))])]),(0,i.SU)(T).page?((0,a.wg)(),(0,a.j4)(Pe.Z,{key:0,path:"/admin/users",pagination:(0,i.SU)(T),query:(0,i.SU)(_)},null,8,["pagination","query"])):(0,a.kq)("",!0),(0,i.SU)(p)?((0,a.wg)(),(0,a.j4)(r,{key:1,message:(0,i.SU)(p)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("button",{onClick:t[1]||(t[1]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)]))])),_:1})])}}});const dt=(0,P.Z)(ut,[["__scopeId","data-v-dc12ff78"]]);var mt=dt,_t=n(2179);const Et={class:"profile-tabs custom-checkboxes-group"},St={class:"profile-tabs-checkboxes custom-checkboxes"},Tt=["id","name","checked","disabled","onInput"];var pt=(0,a.aZ)({__name:"UserProfileTabs",props:{tabs:null,selectedTab:null,edition:{type:Boolean},disabled:{type:Boolean,default:!1}},setup(e){const t=e,{tabs:n,selectedTab:r,disabled:s}=(0,i.BK)(t);function l(e){switch(e){case"ACCOUNT":case"PICTURE":return`/profile/edit/${e.toLocaleLowerCase()}`;case"APPS":case"PREFERENCES":case"SPORTS":return`/profile${t.edition?"/edit":""}/${e.toLocaleLowerCase()}`;default:case"PROFILE":return"/profile"+(t.edition?"/edit":"")}}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Et,[(0,a._)("div",St,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(n),(t=>((0,a.wg)(),(0,a.iD)("div",{class:"profile-tab custom-checkbox",key:t},[(0,a._)("label",null,[(0,a._)("input",{type:"radio",id:t,name:t,checked:(0,i.SU)(r).split("/")[0]===t,disabled:(0,i.SU)(s),onInput:n=>e.$router.push(l(t))},null,40,Tt),(0,a._)("span",null,(0,o.zw)(e.$t(`user.PROFILE.TABS.${t}`)),1)])])))),128))])]))}});const At=pt;var Ot=At;const Rt={id:"user-profile"},It={class:"box"};var Ut=(0,a.aZ)({__name:"index",props:{user:null,tab:null},setup(e){const t=e,{user:n,tab:r}=(0,i.BK)(t),o=["PROFILE","PREFERENCES","SPORTS","APPS"];return(e,t)=>{const s=(0,a.up)("router-view");return(0,a.wg)(),(0,a.iD)("div",Rt,[(0,a.Wm)(_t.Z,{user:(0,i.SU)(n)},null,8,["user"]),(0,a._)("div",It,[(0,a.Wm)(Ot,{tabs:o,selectedTab:(0,i.SU)(r),edition:!1},null,8,["selectedTab"]),(0,a.Wm)(s,{user:(0,i.SU)(n)},null,8,["user"])])])}}});const gt=(0,P.Z)(Ut,[["__scopeId","data-v-9729cba4"]]);var Nt=gt,ht=n(1585),zt=n(6287);const wt={id:"user-preferences",class:"description-list"},ft={class:"profile-buttons"};var vt=(0,a.aZ)({__name:"UserPreferences",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LANGUAGE])),s=(0,a.Fl)((()=>t.user.language?zt.zK[t.user.language]:zt.zK.en)),u=(0,a.Fl)((()=>t.user.weekm?"MONDAY":"SUNDAY")),d=(0,a.Fl)((()=>t.user.timezone?t.user.timezone:"Europe/Paris")),m=(0,a.Fl)((()=>t.user.date_format?t.user.date_format:"MM/dd/yyyy")),_=(0,a.Fl)((()=>t.user.display_ascent?"DISPLAYED":"HIDDEN"));return(t,n)=>((0,a.wg)(),(0,a.iD)("div",wt,[(0,a._)("dl",null,[(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.LANGUAGE"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(s)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.TIMEZONE"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(d)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.DATE_FORMAT"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(Ye.mh)((0,i.SU)(m),(0,i.SU)(r))),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.FIRST_DAY_OF_WEEK"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t(`user.PROFILE.${(0,i.SU)(u)}`)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.UNITS.LABEL"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t("user.PROFILE.UNITS."+(e.user.imperial_units?"IMPERIAL":"METRIC"))),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.ASCENT_DATA"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t(`common.${(0,i.SU)(_)}`)),1)]),(0,a._)("div",ft,[(0,a._)("button",{onClick:n[0]||(n[0]=e=>t.$router.push("/profile/edit/preferences"))},(0,o.zw)(t.$t("user.PROFILE.EDIT_PREFERENCES")),1),(0,a._)("button",{onClick:n[1]||(n[1]=e=>t.$router.push("/"))},(0,o.zw)(t.$t("common.HOME")),1)])]))}});const Ct=vt;var Dt=Ct;const kt={id:"user-profile-edition",class:"center-card"};var Pt=(0,a.aZ)({__name:"index",props:{user:null,tab:null},setup(e){const t=e,n=(0,c.o)(),{user:r,tab:s}=(0,i.BK)(t),u=["PROFILE","ACCOUNT","PICTURE","PREFERENCES","SPORTS"],d=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING]));return(e,t)=>{const n=(0,a.up)("router-view"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",kt,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t(`user.PROFILE.${(0,i.SU)(s)}_EDITION`)),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(Ot,{tabs:u,selectedTab:(0,i.SU)(s),edition:!0,disabled:(0,i.SU)(d)},null,8,["selectedTab","disabled"]),(0,a.Wm)(n,{user:(0,i.SU)(r)},null,8,["user"])])),_:1})])}}});const Lt=Pt;var Mt=Lt,bt=n(8403);const yt={id:"user-infos-edition"},Gt={class:"profile-form form-box"},Ft={key:1,class:"info-box success-message"},Wt=["onSubmit"],Kt={class:"form-items",for:"email"},Yt=["disabled"],xt={class:"form-items",for:"password-field"},$t={class:"form-items",for:"new-password-field"},Bt={class:"form-buttons"},Zt={class:"confirm",type:"submit"};var Ht=(0,a.aZ)({__name:"UserAccountEdition",props:{user:null},setup(e){const t=e,{user:n}=(0,i.BK)(t),r=(0,c.o)(),u=(0,i.qj)({email:"",password:"",new_password:""}),d=(0,a.Fl)((()=>r.getters[l.YN.GETTERS.USER_LOADING])),m=(0,a.Fl)((()=>r.getters[l.SY.GETTERS.APP_CONFIG])),_=(0,a.Fl)((()=>r.getters[l.YN.GETTERS.IS_SUCCESS])),E=(0,i.iH)(!1),S=(0,a.Fl)((()=>r.getters[l.SY.GETTERS.ERROR_MESSAGES])),T=(0,i.iH)(!1),p=(0,i.iH)(!1);function A(){T.value=!0}function O(e){u.email=e.email}function R(e){u.password=e}function I(e){u.new_password=e}function U(){const e={email:u.email,password:u.password};u.new_password&&(e.new_password=u.new_password),E.value=u.email!==n.value.email,r.dispatch(l.YN.ACTIONS.UPDATE_USER_ACCOUNT,e)}function g(e){p.value=e}function N(e){r.dispatch(l.YN.ACTIONS.DELETE_ACCOUNT,{username:e})}return(0,a.bv)((()=>{t.user&&O(t.user)})),(0,a.Ah)((()=>{r.commit(l.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),r.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(0,a.YP)((()=>_.value),(async e=>{e&&(R(""),I(""),O(n.value),T.value=!1)})),(0,a.YP)((()=>n.value.email),(async()=>{O(n.value)})),(e,t)=>{const r=(0,a.up)("Modal"),l=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",yt,[p.value?((0,a.wg)(),(0,a.j4)(r,{key:0,title:e.$t("common.CONFIRMATION"),message:e.$t("user.CONFIRM_ACCOUNT_DELETION"),onConfirmAction:t[0]||(t[0]=e=>N((0,i.SU)(n).username)),onCancelAction:t[1]||(t[1]=e=>g(!1))},null,8,["title","message"])):(0,a.kq)("",!0),(0,a._)("div",Gt,[(0,i.SU)(S)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(S)},null,8,["message"])):(0,a.kq)("",!0),(0,i.SU)(_)?((0,a.wg)(),(0,a.iD)("div",Ft,(0,o.zw)(e.$t(`user.PROFILE.SUCCESSFUL_${E.value&&(0,i.SU)(m).is_email_sending_enabled?"EMAIL_":""}UPDATE`)),1)):(0,a.kq)("",!0),(0,a._)("form",{class:(0,o.C_)({errors:T.value}),onSubmit:(0,s.iM)(U,["prevent"])},[(0,a._)("label",Kt,[(0,a.Uk)((0,o.zw)(e.$t("user.EMAIL"))+"* ",1),(0,a.wy)((0,a._)("input",{id:"email","onUpdate:modelValue":t[2]||(t[2]=e=>u.email=e),disabled:(0,i.SU)(d),required:!0,onInvalid:A},null,40,Yt),[[s.nr,u.email]])]),(0,a._)("label",xt,[(0,a.Uk)((0,o.zw)(e.$t("user.CURRENT_PASSWORD"))+"* ",1),(0,a.Wm)(bt.Z,{id:"password-field",disabled:(0,i.SU)(d),password:u.password,required:!0,onUpdatePassword:R,onPasswordError:A},null,8,["disabled","password"])]),(0,a._)("label",$t,[(0,a.Uk)((0,o.zw)(e.$t("user.NEW_PASSWORD"))+" ",1),(0,a.Wm)(bt.Z,{id:"new-password-field",disabled:(0,i.SU)(d),checkStrength:!0,password:u.new_password,isSuccess:!1,onUpdatePassword:I,onPasswordError:A},null,8,["disabled","password"])]),(0,a._)("div",Bt,[(0,a._)("button",Zt,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[3]||(t[3]=(0,s.iM)((t=>e.$router.push("/profile")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1),(0,a._)("button",{class:"danger",onClick:t[4]||(t[4]=(0,s.iM)((e=>g(!0)),["prevent"]))},(0,o.zw)(e.$t("buttons.DELETE_MY_ACCOUNT")),1)])],42,Wt)])])}}});const qt=(0,P.Z)(Ht,[["__scopeId","data-v-37b8c4c8"]]);var Vt=qt,jt=n(4850);const Xt={id:"user-infos-edition"},Jt={class:"profile-form form-box"},Qt=["onSubmit"],en={class:"form-items",for:"registrationDate"},tn=["value"],nn={class:"form-items",for:"first_name"},rn=["disabled"],an={class:"form-items",for:"last_name"},on={class:"form-items",for:"birth_date"},sn=["disabled"],ln={class:"form-items",for:"location"},cn=["disabled"],un={class:"form-items"},dn={class:"form-buttons"},mn={class:"confirm",type:"submit"};var _n=(0,a.aZ)({__name:"UserInfosEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({first_name:"",last_name:"",birth_date:"",location:"",bio:""}),u=(0,a.Fl)((()=>t.user.created_at?(0,Ye.p6)(t.user.created_at,t.user.timezone,t.user.date_format):"")),d=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function _(e){r.first_name=e.first_name?e.first_name:"",r.last_name=e.last_name?e.last_name:"",r.birth_date=e.birth_date?(0,jt.Z)(new Date(e.birth_date),"yyyy-MM-dd"):"",r.location=e.location?e.location:"",r.bio=e.bio?e.bio:""}function E(e){r.bio=e}function S(){n.dispatch(l.YN.ACTIONS.UPDATE_USER_PROFILE,r)}return(0,a.bv)((()=>{t.user&&_(t.user)})),(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage"),l=(0,a.up)("CustomTextArea");return(0,a.wg)(),(0,a.iD)("div",Xt,[(0,a._)("div",Jt,[(0,i.SU)(m)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(m)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("form",{onSubmit:(0,s.iM)(S,["prevent"])},[(0,a._)("label",en,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE"))+" ",1),(0,a._)("input",{id:"registrationDate",value:(0,i.SU)(u),disabled:""},null,8,tn)]),(0,a._)("label",nn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.FIRST_NAME"))+" ",1),(0,a.wy)((0,a._)("input",{id:"first_name","onUpdate:modelValue":t[0]||(t[0]=e=>r.first_name=e),disabled:(0,i.SU)(d)},null,8,rn),[[s.nr,r.first_name]])]),(0,a._)("label",an,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LAST_NAME"))+" ",1),(0,a.wy)((0,a._)("input",{id:"last_name","onUpdate:modelValue":t[1]||(t[1]=e=>r.last_name=e)},null,512),[[s.nr,r.last_name]])]),(0,a._)("label",on,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.BIRTH_DATE"))+" ",1),(0,a.wy)((0,a._)("input",{id:"birth_date",type:"date",class:"birth-date","onUpdate:modelValue":t[2]||(t[2]=e=>r.birth_date=e),disabled:(0,i.SU)(d)},null,8,sn),[[s.nr,r.birth_date]])]),(0,a._)("label",ln,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LOCATION"))+" ",1),(0,a.wy)((0,a._)("input",{id:"location","onUpdate:modelValue":t[3]||(t[3]=e=>r.location=e),disabled:(0,i.SU)(d)},null,8,cn),[[s.nr,r.location]])]),(0,a._)("label",un,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.BIO"))+" ",1),(0,a.Wm)(l,{name:"bio",charLimit:200,input:r.bio,disabled:(0,i.SU)(d),onUpdateValue:E},null,8,["input","disabled"])]),(0,a._)("div",dn,[(0,a._)("button",mn,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[4]||(t[4]=(0,s.iM)((t=>e.$router.push("/profile")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,Qt)])])}}});const En=(0,P.Z)(_n,[["__scopeId","data-v-5e5a4552"]]);var Sn=En;const Tn=e=>((0,a.dD)("data-v-687e9604"),e=e(),(0,a.Cn)(),e),pn={id:"user-picture-edition"},An={class:"user-picture-form"},On=["onSubmit"],Rn={class:"picture-help"},In={class:"info-box"},Un=Tn((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),gn={class:"picture-buttons"},Nn=["disabled"];var hn=(0,a.aZ)({__name:"UserPictureEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),{user:r}=(0,i.BK)(t),d=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.APP_CONFIG])),_=m.value.max_single_file_size?(0,u.Z)(m.value.max_single_file_size):"",E=(0,i.iH)(null);function S(){n.dispatch(l.YN.ACTIONS.DELETE_PICTURE)}function T(e){e.target.files&&(E.value=e.target.files[0])}function p(){E.value&&n.dispatch(l.YN.ACTIONS.UPDATE_USER_PICTURE,{picture:E.value})}return(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",pn,[(0,a._)("div",An,[(0,i.SU)(d)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(d)},null,8,["message"])):(0,a.kq)("",!0),(0,a.Wm)(Le.Z,{user:(0,i.SU)(r)},null,8,["user"]),(0,a._)("form",{onSubmit:(0,s.iM)(p,["prevent"])},[(0,a._)("input",{type:"file",name:"picture",accept:".png,.jpg,.gif",onInput:T},null,32),(0,a._)("div",Rn,[(0,a._)("span",In,[Un,(0,a.Uk)(" "+(0,o.zw)(e.$t("workouts.MAX_SIZE"))+": "+(0,o.zw)((0,i.SU)(_)),1)])]),(0,a._)("div",gn,[(0,a._)("button",{type:"submit",disabled:!E.value},(0,o.zw)(e.$t("user.PROFILE.PICTURE_UPDATE")),9,Nn),(0,i.SU)(r).picture?((0,a.wg)(),(0,a.iD)("button",{key:0,class:"danger",onClick:S},(0,o.zw)(e.$t("user.PROFILE.PICTURE_REMOVE")),1)):(0,a.kq)("",!0),(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=t=>e.$router.push("/profile"))},(0,o.zw)(e.$t("user.PROFILE.BACK_TO_PROFILE")),1)])],40,On)])])}}});const zn=(0,P.Z)(hn,[["__scopeId","data-v-687e9604"]]);var wn=zn;const fn=["Africa/Abidjan","Africa/Accra","Africa/Algiers","Africa/Bissau","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/El_Aaiun","Africa/Johannesburg","Africa/Juba","Africa/Khartoum","Africa/Lagos","Africa/Maputo","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Sao_Tome","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Araguaina","America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Asuncion","America/Atikokan","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Cayenne","America/Chicago","America/Chihuahua","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Fortaleza","America/Fort_Nelson","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Inuvik","America/Iqaluit","America/Jamaica","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/La_Paz","America/Lima","America/Los_Angeles","America/Maceio","America/Managua","America/Manaus","America/Martinique","America/Matamoros","America/Mazatlan","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Sitka","America/St_Johns","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Atyrau","Asia/Baghdad","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Chita","Asia/Choibalsan","Asia/Colombo","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Kathmandu","Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Riyadh","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ulaanbaatar","Asia/Urumqi","Asia/Ust-Nera","Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faroe","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/Stanley","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/Perth","Australia/Sydney","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belgrade","Europe/Berlin","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Helsinki","Europe/Istanbul","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Oslo","Europe/Paris","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/Saratov","Europe/Simferopol","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zaporozhye","Europe/Zurich","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Reunion","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Chuuk","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Pohnpei","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Wake","Pacific/Wallis"],vn={id:"tz-dropdown"},Cn=["value","disabled","onKeydown"],Dn=["onClick","onMouseover","autofocus"];var kn=(0,a.aZ)({__name:"TimezoneDropdown",props:{input:null,disabled:{type:Boolean,default:!1}},emits:["updateTimezone"],setup(e,{emit:t}){const n=e,{input:r,disabled:l}=(0,i.BK)(n),c=(0,i.iH)(n.input),u=(0,i.iH)(!1),d=(0,i.iH)(null),m=(0,i.iH)(0);function _(e){return e.toLowerCase().match(c.value.toLowerCase())}function E(e){m.value=e}function S(e){c.value=e,u.value=!1,t("updateTimezone",e)}function T(e){e.preventDefault(),d.value?.firstElementChild?.innerHTML&&S(d.value?.firstElementChild?.innerHTML)}function p(e){e.preventDefault(),u.value=!0,c.value=e.target.value.trim()}return(0,a.YP)((()=>n.input),(e=>{c.value=e})),(e,t)=>((0,a.wg)(),(0,a.iD)("div",vn,[(0,a._)("input",{class:"tz-dropdown-input",id:"timezone",name:"timezone",value:c.value,disabled:(0,i.SU)(l),required:"",onKeydown:[t[0]||(t[0]=(0,s.D2)((e=>S((0,i.SU)(r))),["esc"])),(0,s.D2)(T,["enter"])],onInput:p},null,40,Cn),u.value?((0,a.wg)(),(0,a.iD)("ul",{key:0,class:"tz-dropdown-list",ref_key:"tzList",ref:d},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(fn).filter((e=>_(e))),((e,t)=>((0,a.wg)(),(0,a.iD)("li",{key:e,class:(0,o.C_)(["tz-dropdown-item",{focus:t===m.value}]),onClick:t=>S(e),onMouseover:e=>E(t),autofocus:t===m.value},(0,o.zw)(e),43,Dn)))),128))],512)):(0,a.kq)("",!0)]))}});const Pn=(0,P.Z)(kn,[["__scopeId","data-v-47ea2903"]]);var Ln=Pn;const Mn={id:"user-preferences-edition"},bn={class:"profile-form form-box"},yn=["onSubmit"],Gn={class:"form-items"},Fn=["disabled"],Wn=["value"],Kn={class:"form-items"},Yn={class:"form-items"},xn=["disabled"],$n=["value"],Bn={class:"form-items form-checkboxes"},Zn={class:"checkboxes-label"},Hn={class:"checkboxes"},qn=["id","name","checked","disabled","onInput"],Vn={class:"checkbox-label"},jn={class:"form-items form-checkboxes"},Xn={class:"checkboxes-label"},Jn={class:"checkboxes"},Qn=["id","name","checked","disabled","onInput"],er={class:"checkbox-label"},tr={class:"form-items form-checkboxes"},nr={class:"checkboxes-label"},rr={class:"checkboxes"},ar=["id","name","checked","disabled","onInput"],or={class:"checkbox-label"},sr={class:"form-buttons"},ir={class:"confirm",type:"submit"};var lr=(0,a.aZ)({__name:"UserPreferencesEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({display_ascent:!0,imperial_units:!1,language:"",timezone:"Europe/Paris",date_format:"dd/MM/yyyy",weekm:!1}),u=[{label:"SUNDAY",value:!1},{label:"MONDAY",value:!0}],d=[{label:"METRIC",value:!1},{label:"IMPERIAL",value:!0}],m=[{label:"DISPLAYED",value:!0},{label:"HIDDEN",value:!1}],_=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),E=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),S=(0,a.Fl)((()=>(0,Ye.d2)((new Date).toUTCString(),t.user.timezone,r.language)));function T(e){r.display_ascent=e.display_ascent,r.imperial_units=!!e.imperial_units&&e.imperial_units,r.language=e.language?e.language:"en",r.timezone=e.timezone?e.timezone:"Europe/Paris",r.date_format=e.date_format?e.date_format:"dd/MM/yyyy",r.weekm=!!e.weekm&&e.weekm}function p(){n.dispatch(l.YN.ACTIONS.UPDATE_USER_PREFERENCES,r)}function A(e){r.timezone=e}function O(e){r.display_ascent=e}function R(e){r.imperial_units=e}function I(e){r.weekm=e}return(0,a.bv)((()=>{t.user&&T(t.user)})),(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",Mn,[(0,a._)("div",bn,[(0,i.SU)(E)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(E)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("form",{onSubmit:(0,s.iM)(p,["prevent"])},[(0,a._)("label",Gn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LANGUAGE"))+" ",1),(0,a.wy)((0,a._)("select",{id:"language","onUpdate:modelValue":t[0]||(t[0]=e=>r.language=e),disabled:(0,i.SU)(_)},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(zt.mT),(e=>((0,a.wg)(),(0,a.iD)("option",{value:e.value,key:e.value},(0,o.zw)(e.label),9,Wn)))),128))],8,Fn),[[s.bM,r.language]])]),(0,a._)("label",Kn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.TIMEZONE"))+" ",1),(0,a.Wm)(Ln,{input:r.timezone,disabled:(0,i.SU)(_),onUpdateTimezone:A},null,8,["input","disabled"])]),(0,a._)("label",Yn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.DATE_FORMAT"))+" ",1),(0,a.wy)((0,a._)("select",{id:"date_format","onUpdate:modelValue":t[1]||(t[1]=e=>r.date_format=e),disabled:(0,i.SU)(_)},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(e=>((0,a.wg)(),(0,a.iD)("option",{value:e.value,key:e.value},(0,o.zw)(e.label),9,$n)))),128))],8,xn),[[s.bM,r.date_format]])]),(0,a._)("div",Bn,[(0,a._)("span",Zn,(0,o.zw)(e.$t("user.PROFILE.FIRST_DAY_OF_WEEK")),1),(0,a._)("div",Hn,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(u,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.weekm,disabled:(0,i.SU)(_),onInput:e=>I(t.value)},null,40,qn),(0,a._)("span",Vn,(0,o.zw)(e.$t(`user.PROFILE.${t.label}`)),1)]))),64))])]),(0,a._)("div",jn,[(0,a._)("span",Xn,(0,o.zw)(e.$t("user.PROFILE.UNITS.LABEL")),1),(0,a._)("div",Jn,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(d,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.imperial_units,disabled:(0,i.SU)(_),onInput:e=>R(t.value)},null,40,Qn),(0,a._)("span",er,(0,o.zw)(e.$t(`user.PROFILE.UNITS.${t.label}`)),1)]))),64))])]),(0,a._)("div",tr,[(0,a._)("span",nr,(0,o.zw)(e.$t("user.PROFILE.ASCENT_DATA")),1),(0,a._)("div",rr,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(m,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.display_ascent,disabled:(0,i.SU)(_),onInput:e=>O(t.value)},null,40,ar),(0,a._)("span",or,(0,o.zw)(e.$t(`common.${t.label}`)),1)]))),64))])]),(0,a._)("div",sr,[(0,a._)("button",ir,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[2]||(t[2]=(0,s.iM)((t=>e.$router.push("/profile/preferences")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,yn)])])}}});const cr=(0,P.Z)(lr,[["__scopeId","data-v-065d5e6c"]]);var ur=cr;const dr=["profile:read","profile:write","users:read","users:write","workouts:read","workouts:write"],mr=["application:write"],_r={id:"new-oauth2-app"},Er={id:"new-oauth2-title"},Sr={id:"apps-form"},Tr=["onSubmit"],pr={class:"form-items"},Ar={class:"form-item"},Or={for:"app-name"},Rr={class:"form-item"},Ir={for:"app-description"},Ur={class:"form-item"},gr={for:"app-url"},Nr={class:"form-item"},hr={for:"app-redirect-uri"},zr={class:"form-item-scope"},wr={class:"form-item-scope-label"},fr={class:"scope-label"},vr=["name","checked","onChange"],Cr=["innerHTML"],Dr={class:"form-buttons"},kr=["disabled"];var Pr=(0,a.aZ)({__name:"AddUserApp",props:{authUser:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({client_name:"",client_uri:"",client_description:"",redirect_uri:""}),u=(0,i.qj)([]),d=(0,a.Fl)((()=>S(t.authUser,mr,dr)));function m(){const e={client_name:r.client_name,client_description:r.client_description,client_uri:r.client_uri,redirect_uris:[r.redirect_uri],scope:u.sort().join(" ")};n.dispatch(l.Km.ACTIONS.CREATE_CLIENT,e)}function _(e){r.client_description=e}function E(e){const t=u.indexOf(e);t>-1?u.splice(t,1):u.push(e)}function S(e,t,n){const r=[...n];return e.admin&&r.push(...t),r.sort()}return(e,t)=>{const n=(0,a.up)("CustomTextArea");return(0,a.wg)(),(0,a.iD)("div",_r,[(0,a._)("h1",Er,(0,o.zw)(e.$t("oauth2.ADD_A_NEW_APP")),1),(0,a._)("div",Sr,[(0,a._)("form",{onSubmit:(0,s.iM)(m,["prevent"])},[(0,a._)("div",pr,[(0,a._)("div",Ar,[(0,a._)("label",Or,(0,o.zw)(e.$t("oauth2.APP.NAME"))+"*",1),(0,a.wy)((0,a._)("input",{id:"app-name",type:"text",required:"","onUpdate:modelValue":t[0]||(t[0]=e=>r.client_name=e)},null,512),[[s.nr,r.client_name]])]),(0,a._)("div",Rr,[(0,a._)("label",Ir,(0,o.zw)(e.$t("oauth2.APP.DESCRIPTION")),1),(0,a.Wm)(n,{name:"app-description",charLimit:200,input:r.description,onUpdateValue:_},null,8,["input"])]),(0,a._)("div",Ur,[(0,a._)("label",gr,(0,o.zw)(e.$t("oauth2.APP.URL"))+"*",1),(0,a.wy)((0,a._)("input",{id:"app-url",type:"text",required:"","onUpdate:modelValue":t[1]||(t[1]=e=>r.client_uri=e)},null,512),[[s.nr,r.client_uri]])]),(0,a._)("div",Nr,[(0,a._)("label",hr,(0,o.zw)(e.$t("oauth2.APP.REDIRECT_URL"))+"* ",1),(0,a.wy)((0,a._)("input",{id:"app-redirect-uri",type:"text",required:"","onUpdate:modelValue":t[2]||(t[2]=e=>r.redirect_uri=e)},null,512),[[s.nr,r.redirect_uri]])]),(0,a._)("div",zr,[(0,a._)("div",wr,(0,o.zw)(e.$t("oauth2.APP.SCOPE.LABEL"))+"* ",1),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(d),(t=>((0,a.wg)(),(0,a.iD)("div",{class:"form-item-scope-checkboxes",key:t},[(0,a._)("label",fr,[(0,a._)("input",{type:"checkbox",name:t,checked:u.includes(t),onChange:e=>E(t)},null,40,vr),(0,a._)("code",null,(0,o.zw)(t),1)]),(0,a._)("p",{class:"scope-description",innerHTML:e.$t(`oauth2.APP.SCOPE.${t}_DESCRIPTION`)},null,8,Cr)])))),128))])]),(0,a._)("div",Dr,[(0,a._)("button",{class:"confirm",type:"submit",disabled:0===u.length},(0,o.zw)(e.$t("buttons.SUBMIT")),9,kr),(0,a._)("button",{class:"cancel",onClick:t[3]||(t[3]=(0,s.iM)((()=>e.$router.push("/profile/apps")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,Tr)])])}}});const Lr=(0,P.Z)(Pr,[["__scopeId","data-v-0657ee77"]]);var Mr=Lr;const br={id:"authorize-oauth2-app"},yr={key:0},Gr={id:"authorize-oauth2-title"},Fr={class:"oauth2-access description-list"},Wr={class:"client-scope"},Kr=["innerHTML"],Yr={class:"authorize-oauth2-buttons"},xr={key:1},$r={class:"no-app"};var Br=(0,a.aZ)({__name:"AuthorizeUserApp",setup(e){const t=(0,r.yj)(),n=(0,c.o)(),s=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENT])),u=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function d(){t.query.client_id&&"string"===typeof t.query.client_id&&n.dispatch(l.Km.ACTIONS.GET_CLIENT_BY_CLIENT_ID,t.query.client_id)}function m(){n.dispatch(l.Km.ACTIONS.AUTHORIZE_CLIENT,{client_id:`${t.query.client_id}`,redirect_uri:`${t.query.redirect_uri}`,response_type:`${t.query.response_type}`,scope:`${t.query.scope}`,state:`${t.query.state?t.query.state:""}`,code_challenge:`${t.query.code_challenge?t.query.code_challenge:""}`,code_challenge_method:`${t.query.code_challenge_method?t.query.code_challenge_method:""}`})}return(0,a.wF)((()=>d())),(e,t)=>{const n=(0,a.up)("router-link"),r=(0,a.up)("i18n-t"),l=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",br,[(0,i.SU)(s).client_id?((0,a.wg)(),(0,a.iD)("div",yr,[(0,a._)("h1",Gr,[(0,a.Wm)(r,{keypath:"oauth2.AUTHORIZE_APP"},{default:(0,a.w5)((()=>[(0,a.Wm)(n,{to:{name:"UserApp",params:{id:(0,i.SU)(s).id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(s).name),1)])),_:1},8,["to"])])),_:1})]),(0,i.SU)(u)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(u)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("div",Fr,[(0,a._)("p",null,(0,o.zw)(e.$t("oauth2.APP_REQUESTING_ACCESS")),1),(0,a._)("dl",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(s).scope.split(" "),(t=>((0,a.wg)(),(0,a.iD)(a.HY,{key:t},[(0,a._)("dt",Wr,[(0,a._)("code",null,(0,o.zw)(t),1)]),(0,a._)("dd",{innerHTML:e.$t(`oauth2.APP.SCOPE.${t}_DESCRIPTION`)},null,8,Kr)],64)))),128))]),(0,a._)("div",Yr,[(0,a._)("button",{class:"danger",onClick:m},(0,o.zw)(e.$t("buttons.AUTHORIZE")),1),(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])])])):((0,a.wg)(),(0,a.iD)("div",xr,[(0,a._)("p",$r,(0,o.zw)(e.$t("oauth2.NO_APP")),1),(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)]))])}}});const Zr=(0,P.Z)(Br,[["__scopeId","data-v-3b2fe9ed"]]);var Hr=Zr;const qr={id:"oauth2-apps"};var Vr=(0,a.aZ)({__name:"index",props:{user:null},setup(e){const t=e,n=(0,c.o)(),{user:r}=(0,i.BK)(t);return(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),n.commit(l.Km.MUTATIONS.SET_CLIENTS,[])})),(e,t)=>{const n=(0,a.up)("router-view");return(0,a.wg)(),(0,a.iD)("div",qr,[(0,a.Wm)(n,{authUser:(0,i.SU)(r)},null,8,["authUser"])])}}});const jr=Vr;var Xr=jr;const Jr={id:"oauth2-app",class:"description-list"},Qr={key:1},ea={key:0,class:"info-box success-message"},ta=["title"],na={key:0},ra={key:1,class:"app-secret"},aa=["title"],oa={class:"client-scopes"},sa={class:"app-buttons"},ia={key:2},la={class:"no-app"};var ca=(0,a.aZ)({__name:"UserApp",props:{authUser:null,afterCreation:{type:Boolean,default:!1}},setup(e){const t=e,n=(0,r.yj)(),s=(0,c.o)(),{afterCreation:u,authUser:d}=(0,i.BK)(t),m=(0,a.Fl)((()=>s.getters[l.Km.GETTERS.CLIENT])),_=(0,a.Fl)((()=>s.getters[l.Km.GETTERS.REVOCATION_SUCCESSFUL])),E=(0,i.iH)(!1),S=(0,i.iH)(null),T=(0,i.iH)(!1),p=(0,i.iH)(!1),A=(0,i.iH)(!1);function O(){!u.value&&n.params.id&&"string"===typeof n.params.id&&s.dispatch(l.Km.ACTIONS.GET_CLIENT_BY_ID,+n.params.id)}function R(e){S.value=e?"oauth2.APP_DELETION_CONFIRMATION":"oauth2.TOKENS_REVOCATION_CONFIRMATION",I(!0)}function I(e){E.value=e,e||(S.value=null)}function U(e){"oauth2.APP_DELETION_CONFIRMATION"===S.value?s.dispatch(l.Km.ACTIONS.DELETE_CLIENT,e):s.dispatch(l.Km.ACTIONS.REVOKE_ALL_TOKENS,e)}function g(){navigator.clipboard.writeText(m.value.client_id),T.value=!0,p.value=!1,setTimeout((()=>{T.value=!1}),3e3)}function N(){m.value.client_secret&&(navigator.clipboard.writeText(m.value.client_secret),p.value=!0,T.value=!1,setTimeout((()=>{p.value=!1}),3e3))}return(0,a.wF)((()=>{O(),navigator.clipboard&&(A.value=!0)})),(0,a.Ah)((()=>{s.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),s.commit(l.Km.MUTATIONS.EMPTY_CLIENT),s.commit(l.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!1)})),(0,a.YP)((()=>_.value),(e=>{e&&I(!1)})),(e,t)=>{const n=(0,a.up)("Modal");return(0,a.wg)(),(0,a.iD)("div",Jr,[E.value?((0,a.wg)(),(0,a.j4)(n,{key:0,title:e.$t("common.CONFIRMATION"),message:e.$t(S.value),onConfirmAction:t[0]||(t[0]=e=>U((0,i.SU)(m).id)),onCancelAction:t[1]||(t[1]=e=>I(!1))},null,8,["title","message"])):(0,a.kq)("",!0),(0,i.SU)(m)&&(0,i.SU)(m).client_id?((0,a.wg)(),(0,a.iD)("div",Qr,[(0,i.SU)(u)||(0,i.SU)(_)?((0,a.wg)(),(0,a.iD)("div",ea,(0,o.zw)(e.$t((0,i.SU)(u)?"oauth2.APP_CREATED_SUCCESSFULLY":"oauth2.TOKENS_REVOKED")),1)):(0,a.kq)("",!0),(0,a._)("dl",null,[(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.CLIENT_ID"))+":",1),(0,a._)("dd",null,[(0,a.Uk)((0,o.zw)((0,i.SU)(m).client_id)+" ",1),(0,i.SU)(u)&&A.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:(0,o.C_)("fa fa-"+(T.value?"check":"copy")),"aria-hidden":"true",title:e.$t("oauth2.COPY_TO_CLIPBOARD"),onClick:g},null,10,ta)):(0,a.kq)("",!0)]),(0,i.SU)(u)&&(0,i.SU)(m).client_secret?((0,a.wg)(),(0,a.iD)("dt",na,(0,o.zw)(e.$t("oauth2.APP.CLIENT_SECRET"))+": ",1)):(0,a.kq)("",!0),(0,i.SU)(u)&&(0,i.SU)(m).client_secret?((0,a.wg)(),(0,a.iD)("dd",ra,[(0,a.Uk)((0,o.zw)((0,i.SU)(m).client_secret)+" ",1),A.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:(0,o.C_)("fa fa-"+(p.value?"check":"copy")),"aria-hidden":"true",title:e.$t("oauth2.COPY_TO_CLIPBOARD"),onClick:N},null,10,aa)):(0,a.kq)("",!0)])):(0,a.kq)("",!0),(0,a._)("dt",null,(0,o.zw)((0,o.kC)(e.$t("oauth2.APP.ISSUE_AT")))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(Ye.p6)((0,i.SU)(m).issued_at,(0,i.SU)(d).timezone,(0,i.SU)(d).date_format)),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.NAME"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).name),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.DESCRIPTION"))+":",1),(0,a._)("dd",{class:(0,o.C_)({"no-description":!(0,i.SU)(m).client_description})},(0,o.zw)((0,i.SU)(m).client_description?(0,i.SU)(m).client_description:e.$t("oauth2.NO_DESCRIPTION")),3),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.URL"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).website),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.REDIRECT_URL"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).redirect_uris.length>0?(0,i.SU)(m).redirect_uris[0]:""),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.SCOPE.LABEL"))+":",1),(0,a._)("dd",oa,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(m).scope.split(" "),(e=>((0,a.wg)(),(0,a.iD)("span",{class:"client-scope",key:e},[(0,a._)("code",null,(0,o.zw)(e),1)])))),128))])]),(0,a._)("div",sa,[(0,a._)("button",{class:"danger",onClick:t[2]||(t[2]=e=>R(!1))},(0,o.zw)(e.$t("oauth2.REVOKE_ALL_TOKENS")),1),(0,a._)("button",{class:"danger",onClick:t[3]||(t[3]=e=>R(!0))},(0,o.zw)(e.$t("oauth2.DELETE_APP")),1),(0,a._)("button",{onClick:t[4]||(t[4]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)])])):((0,a.wg)(),(0,a.iD)("div",ia,[(0,a._)("p",la,(0,o.zw)(e.$t("oauth2.NO_APP")),1),(0,a._)("button",{onClick:t[5]||(t[5]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)]))])}}});const ua=(0,P.Z)(ca,[["__scopeId","data-v-3a844fa2"]]);var da=ua;const ma={id:"oauth2-apps-list"},_a={class:"apps-list"},Ea={key:0},Sa={class:"app-issued-at"},Ta={key:1,class:"no-apps"},pa={class:"app-list-buttons"};var Aa=(0,a.aZ)({__name:"UserAppsList",props:{authUser:null},setup(e){const t=e,n=(0,c.o)(),s=(0,r.yj)(),{authUser:u}=(0,i.BK)(t),d=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENTS])),m=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENTS_PAGINATION]));let _=E(s.query);function E(e){const t={};return e.page&&(t.page=(0,Ke.z_)(e.page,Ke.Hf)),t}function S(e){n.dispatch(l.Km.ACTIONS.GET_CLIENTS,e)}return(0,a.wF)((()=>{S(_)})),(0,a.YP)((()=>s.query),(async e=>{_=E(e),S(_)})),(e,t)=>{const n=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("div",ma,[(0,a._)("p",_a,(0,o.zw)(e.$t("oauth2.APPS_LIST")),1),(0,i.SU)(d).length>0?((0,a.wg)(),(0,a.iD)("ul",Ea,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(d),(t=>((0,a.wg)(),(0,a.iD)("li",{key:t.client_id},[(0,a.Wm)(n,{to:{name:"UserApp",params:{id:t.id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.name),1)])),_:2},1032,["to"]),(0,a._)("span",Sa,(0,o.zw)(e.$t("oauth2.APP.ISSUE_AT"))+" "+(0,o.zw)((0,i.SU)(Ye.p6)(t.issued_at,(0,i.SU)(u).timezone,(0,i.SU)(u).date_format)),1)])))),128))])):((0,a.wg)(),(0,a.iD)("div",Ta,(0,o.zw)(e.$t("oauth2.NO_APPS")),1)),(0,i.SU)(d).length>0?((0,a.wg)(),(0,a.j4)(Pe.Z,{key:2,pagination:(0,i.SU)(m),path:"/profile/apps",query:(0,i.SU)(_)},null,8,["pagination","query"])):(0,a.kq)("",!0),(0,a._)("div",pa,[(0,a._)("button",{onClick:t[0]||(t[0]=t=>e.$router.push("/profile/apps/new"))},(0,o.zw)(e.$t("oauth2.NEW_APP")),1),(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)])])}}});const Oa=(0,P.Z)(Aa,[["__scopeId","data-v-efa45ea0"]]);var Ra=Oa;const Ia={id:"user-sport-preferences"},Ua={key:0,class:"responsive-table"},ga={class:"mobile-display"},Na={key:0,class:"profile-buttons mobile-display"},ha={key:1,class:"profile-buttons"},za={class:"text-left"},wa={key:0},fa={class:"cell-heading"},va=["value"],Ca={class:"cell-heading"},Da={key:0,class:"disabled-message"},ka={key:1,class:"fa fa-refresh fa-spin fa-fw"},Pa={class:"cell-heading"},La={class:"cell-heading"},Ma=["checked"],ba={class:"cell-heading"},ya=["value"],Ga={key:1},Fa={key:0,class:"action-buttons"},Wa={class:"cell-heading"},Ka=["onClick"],Ya={key:1,class:"edition-buttons"},xa=["disabled"],$a=["disabled","onClick"],Ba=["disabled"],Za={key:0,class:"profile-buttons"},Ha={key:1,class:"profile-buttons"};var qa=(0,a.aZ)({__name:"UserSportPreferences",props:{user:null,isEdition:{type:Boolean}},setup(e){const t=e,n=(0,c.o)(),{t:r}=(0,ie.QT)(),{isEdition:u,user:d}=(0,i.BK)(t),m="#838383",_=(0,a.f3)("sportColors"),E=(0,a.Fl)((()=>n.getters[l.O8.GETTERS.SPORTS])),S=(0,a.Fl)((()=>(0,le.xH)(E.value,r,"is_active",d.value.sports_list))),T=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),p=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),A=(0,i.qj)({sport_id:0,color:null,is_active:!0,stopped_speed_threshold:1});function O(e){null!==e?(A.sport_id=e.id,A.color=e.color?e.color:_?_[e.label]:m,A.is_active=e.is_active_for_user,A.stopped_speed_threshold=e.stopped_speed_threshold):N()}function R(e){return A.sport_id===e}function I(e){A.color=e.target.value}function U(e){A.stopped_speed_threshold=parseFloat(e.target.value)}function g(e){A.is_active=e.target.checked}function N(){A.sport_id=0,A.color=null,A.is_active=!0,A.stopped_speed_threshold=1,n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)}function h(e){e.preventDefault(),n.dispatch(l.YN.ACTIONS.UPDATE_USER_SPORT_PREFERENCES,A)}function z(e,t){e.preventDefault(),n.dispatch(l.YN.ACTIONS.RESET_USER_SPORT_PREFERENCES,t)}return(0,a.YP)((()=>T.value),(e=>{e||p.value||N()})),(e,t)=>{const n=(0,a.up)("SportImage"),r=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",Ia,[(0,i.SU)(E).length>0?((0,a.wg)(),(0,a.iD)("div",Ua,[(0,a._)("div",ga,[(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("div",Na,[(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/profile/sports")),["prevent"]))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,a.wg)(),(0,a.iD)("div",ha,[(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/profile/edit/sports"))},(0,o.zw)(e.$t("user.PROFILE.EDIT_SPORTS_PREFERENCES")),1),(0,a._)("button",{onClick:t[2]||(t[2]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))]),(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.COLOR")),1),(0,a._)("th",za,(0,o.zw)(e.$t("workouts.SPORT",0)),1),(0,a._)("th",null,(0,o.zw)(e.$t("workouts.WORKOUT",0)),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.IS_ACTIVE")),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD")),1),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("th",wa,(0,o.zw)(e.$t("user.PROFILE.SPORT.ACTION")),1)):(0,a.kq)("",!0)])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(s=>((0,a.wg)(),(0,a.iD)("tr",{key:s.id},[(0,a._)("td",null,[(0,a._)("span",fa,(0,o.zw)(e.$t("user.PROFILE.SPORT.COLOR")),1),R(s.id)?((0,a.wg)(),(0,a.iD)("input",{key:0,class:"sport-color",type:"color",value:A.color,onInput:I},null,40,va)):((0,a.wg)(),(0,a.j4)(n,{key:1,title:s.translatedLabel,"sport-label":s.label,color:s.color?s.color:(0,i.SU)(_)[s.label]},null,8,["title","sport-label","color"]))]),(0,a._)("td",{class:(0,o.C_)(["sport-label",{"disabled-sport":!s.is_active}])},[(0,a._)("span",Ca,(0,o.zw)(e.$t("user.PROFILE.SPORT.LABEL")),1),(0,a.Uk)(" "+(0,o.zw)(s.translatedLabel)+" ",1),s.is_active?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("span",Da," ("+(0,o.zw)(e.$t("user.PROFILE.SPORT.DISABLED_BY_ADMIN"))+") ",1)),(0,i.SU)(T)&&R(s.id)?((0,a.wg)(),(0,a.iD)("i",ka)):(0,a.kq)("",!0),(0,i.SU)(p)&&A.sport_id===s.id?((0,a.wg)(),(0,a.j4)(r,{key:2,message:(0,i.SU)(p)},null,8,["message"])):(0,a.kq)("",!0)],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",Pa,(0,o.zw)(e.$t("workouts.WORKOUT",0)),1),(0,a._)("i",{class:(0,o.C_)("fa fa"+((0,i.SU)(d).sports_list.includes(s.id)?"-check":"")),"aria-hidden":"true"},null,2)],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",La,(0,o.zw)(e.$t("user.PROFILE.SPORT.IS_ACTIVE")),1),R(s.id)&&s.is_active?((0,a.wg)(),(0,a.iD)("input",{key:0,type:"checkbox",checked:s.is_active_for_user,onChange:g},null,40,Ma)):((0,a.wg)(),(0,a.iD)("i",{key:1,class:(0,o.C_)("fa fa"+(s.is_active_for_user?"-check":"")),"aria-hidden":"true"},null,2))],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",ba,(0,o.zw)(e.$t("user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD")),1),R(s.id)&&s.is_active?((0,a.wg)(),(0,a.iD)("input",{key:0,class:"threshold-input",type:"number",min:"0",step:"0.1",value:A.stopped_speed_threshold,onInput:U},null,40,ya)):((0,a.wg)(),(0,a.iD)("span",Ga,(0,o.zw)(s.stopped_speed_threshold),1))],2),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("td",Fa,[(0,a._)("span",Wa,(0,o.zw)(e.$t("user.PROFILE.SPORT.ACTION")),1),0===A.sport_id?((0,a.wg)(),(0,a.iD)("button",{key:0,onClick:e=>O(s)},(0,o.zw)(e.$t("buttons.EDIT")),9,Ka)):(0,a.kq)("",!0),R(s.id)?((0,a.wg)(),(0,a.iD)("div",Ya,[(0,a._)("button",{disabled:(0,i.SU)(T),onClick:h},(0,o.zw)(e.$t("buttons.SUBMIT")),9,xa),(0,a._)("button",{disabled:(0,i.SU)(T),onClick:e=>z(e,s.id)},(0,o.zw)(e.$t("buttons.RESET")),9,$a),(0,a._)("button",{disabled:(0,i.SU)(T),onClick:t[3]||(t[3]=e=>O(null))},(0,o.zw)(e.$t("buttons.CANCEL")),9,Ba)])):(0,a.kq)("",!0)])):(0,a.kq)("",!0)])))),128))])]),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("div",Za,[(0,a._)("button",{class:"cancel",onClick:t[4]||(t[4]=(0,s.iM)((t=>e.$router.push("/profile/sports")),["prevent"]))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,a.wg)(),(0,a.iD)("div",Ha,[(0,a._)("button",{onClick:t[5]||(t[5]=t=>e.$router.push("/profile/edit/sports"))},(0,o.zw)(e.$t("user.PROFILE.EDIT_SPORTS_PREFERENCES")),1),(0,a._)("button",{onClick:t[6]||(t[6]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))])):(0,a.kq)("",!0)])}}});const Va=(0,P.Z)(qa,[["__scopeId","data-v-74e52489"]]);var ja=Va,Xa=n(2894);const Ja=e=>((0,a.dD)("data-v-74257266"),e=e(),(0,a.Cn)(),e),Qa={class:"about-text"},eo=["innerHTML"],to=Ja((()=>(0,a._)("i",{class:"fa fa-book fa-padding","aria-hidden":"true"},null,-1))),no={href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer"},ro=Ja((()=>(0,a._)("i",{class:"fa fa-github fa-padding","aria-hidden":"true"},null,-1))),ao={href:"https://github.com/SamR1/FitTrackee",target:"_blank",rel:"noopener noreferrer"},oo=Ja((()=>(0,a._)("i",{class:"fa fa-balance-scale fa-padding","aria-hidden":"true"},null,-1))),so=Ja((()=>(0,a._)("a",{href:"https://choosealicense.com/licenses/agpl-3.0/",target:"_blank",rel:"noopener noreferrer"}," AGPLv3 ",-1))),io={key:0},lo=Ja((()=>(0,a._)("i",{class:"fa fa-envelope-o fa-padding","aria-hidden":"true"},null,-1))),co=["href"];var uo=(0,a.aZ)({__name:"About",setup(e){const t=(0,c.o)(),n=(0,a.Fl)((()=>t.getters[l.SY.GETTERS.APP_CONFIG]));return(e,t)=>{const r=(0,a.up)("i18n-t");return(0,a.wg)(),(0,a.iD)("div",Qa,[(0,a._)("div",null,[(0,a._)("p",{class:"error-message",innerHTML:e.$t("about.FITTRACKEE_DESCRIPTION")},null,8,eo),(0,a._)("p",null,[to,(0,a._)("a",no,(0,o.zw)((0,o.kC)(e.$t("common.DOCUMENTATION"))),1)]),(0,a._)("p",null,[ro,(0,a._)("a",ao,(0,o.zw)(e.$t("about.SOURCE_CODE")),1)]),(0,a._)("p",null,[oo,(0,a.Wm)(r,{keypath:"about.FITTRACKEE_LICENSE"},{default:(0,a.w5)((()=>[so])),_:1})]),(0,i.SU)(n).admin_contact?((0,a.wg)(),(0,a.iD)("div",io,[lo,(0,a._)("a",{href:`mailto:${(0,i.SU)(n).admin_contact}`},(0,o.zw)(e.$t("about.CONTACT_ADMIN")),9,co)])):(0,a.kq)("",!0)])])}}});const mo=(0,P.Z)(uo,[["__scopeId","data-v-74257266"]]);var _o=mo;const Eo={id:"bike"},So=["src"];function To(e,t){return(0,a.wg)(),(0,a.iD)("div",Eo,[(0,a._)("img",{class:"bike-img",src:"/img/bike.svg",alt:"mountain bike"},null,8,So)])}const po={},Ao=(0,P.Z)(po,[["render",To],["__scopeId","data-v-795f7f5f"]]);var Oo=Ao;const Ro={id:"about",class:"view"},Io={class:"container"},Uo={class:"container-sub"},go={class:"container-sub about-details"};var No=(0,a.aZ)({__name:"AboutView",setup(e){return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ro,[(0,a._)("div",Io,[(0,a._)("div",Uo,[(0,a.Wm)(Oo)]),(0,a._)("div",go,[(0,a.Wm)(_o)])])]))}});const ho=(0,P.Z)(No,[["__scopeId","data-v-bffb50d0"]]);var zo=ho,wo=n(1818),fo=n(2056);const vo=e=>((0,a.dD)("data-v-96abcc38"),e=e(),(0,a.Cn)(),e),Co={class:"timeline-workout"},Do={class:"box"},ko={class:"workout-user-date"},Po={class:"workout-user"},Lo=["title"],Mo={key:0},bo={key:1,class:"no-map"},yo={class:"img"},Go={class:"data"},Fo=vo((()=>(0,a._)("i",{class:"fa fa-clock-o","aria-hidden":"true"},null,-1))),Wo={key:0},Ko={class:"data"},Yo=vo((()=>(0,a._)("i",{class:"fa fa-road","aria-hidden":"true"},null,-1))),xo={key:0,class:"data elevation"},$o=["alt"],Bo={class:"data-values"},Zo={key:1,class:"data altitude"},Ho=vo((()=>(0,a._)("i",{class:"fa fa-location-arrow","aria-hidden":"true"},null,-1))),qo={class:"data-values"};var Vo=(0,a.aZ)({__name:"WorkoutCard",props:{user:null,useImperialUnits:{type:Boolean},workout:{default:()=>({})},sport:{default:()=>({})}},setup(e){const t=e,n=(0,c.o)(),{user:r,workout:s,sport:u,useImperialUnits:d}=(0,i.BK)(t),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LOCALE]));return(e,t)=>{const n=(0,a.up)("router-link"),l=(0,a.up)("SportImage"),c=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",Co,[(0,a._)("div",Do,[(0,a._)("div",ko,[(0,a._)("div",Po,[(0,a.Wm)(Le.Z,{user:(0,i.SU)(r)},null,8,["user"]),(0,i.SU)(r).username?((0,a.wg)(),(0,a.j4)(n,{key:0,class:"workout-user-name",to:{name:"User",params:{username:(0,i.SU)(r).username}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(r).username),1)])),_:1},8,["to"])):(0,a.kq)("",!0)]),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(n,{key:0,class:"workout-title",to:{name:"Workout",params:{workoutId:(0,i.SU)(s).id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(s).title),1)])),_:1},8,["to"])):(0,a.kq)("",!0),(0,i.SU)(s).workout_date&&(0,i.SU)(r)?((0,a.wg)(),(0,a.iD)("div",{key:1,class:"workout-date",title:(0,i.SU)(Ye.p6)((0,i.SU)(s).workout_date,(0,i.SU)(r).timezone,(0,i.SU)(r).date_format)},(0,o.zw)((0,i.SU)(wo.Z)(new Date((0,i.SU)(s).workout_date),new Date,{addSuffix:!0,locale:(0,i.SU)(m)})),9,Lo)):(0,a.kq)("",!0)]),(0,a._)("div",{class:(0,o.C_)(["workout-map",{"no-cursor":!(0,i.SU)(s)}]),onClick:t[0]||(t[0]=t=>(0,i.SU)(s).id?e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(s).id}}):null)},[(0,i.SU)(s)?((0,a.wg)(),(0,a.iD)("div",Mo,[(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.j4)(fo.Z,{key:0,workout:(0,i.SU)(s)},null,8,["workout"])):((0,a.wg)(),(0,a.iD)("div",bo,(0,o.zw)(e.$t("workouts.NO_MAP")),1))])):(0,a.kq)("",!0)],2),(0,a._)("div",{class:(0,o.C_)(["workout-data",{"without-gpx":(0,i.SU)(s)&&!(0,i.SU)(s).with_gpx}]),onClick:t[1]||(t[1]=t=>(0,i.SU)(s).id?e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(s).id}}):null)},[(0,a._)("div",yo,[(0,i.SU)(u).label?((0,a.wg)(),(0,a.j4)(l,{key:0,"sport-label":(0,i.SU)(u).label,color:(0,i.SU)(u).color},null,8,["sport-label","color"])):(0,a.kq)("",!0)]),(0,a._)("div",Go,[Fo,(0,i.SU)(s)?((0,a.wg)(),(0,a.iD)("span",Wo,(0,o.zw)((0,i.SU)(s).moving),1)):(0,a.kq)("",!0)]),(0,a._)("div",Ko,[Yo,(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).distance,digits:3,unitFrom:"km",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)]),(0,i.SU)(s)&&(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.iD)("div",xo,[(0,a._)("img",{class:"mountains",src:"/img/workouts/mountains.svg",alt:e.$t("workouts.ELEVATION")},null,8,$o),(0,a._)("div",Bo,[(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).min_alt,unitFrom:"m",displayUnit:!1,useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0),(0,a.Uk)("/ "),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:1,distance:(0,i.SU)(s).max_alt,unitFrom:"m",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)])])):(0,a.kq)("",!0),(0,i.SU)(s)&&(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.iD)("div",Zo,[Ho,(0,a._)("div",qo,[(0,a.Uk)(" +"),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).ascent,unitFrom:"m",displayUnit:!1,useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0),(0,a.Uk)("/- "),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:1,distance:(0,i.SU)(s).descent,unitFrom:"m",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)])])):(0,a.kq)("",!0)],2)])])}}});const jo=(0,P.Z)(Vo,[["__scopeId","data-v-96abcc38"]]);var Xo=jo,Jo=n(5630),Qo=n(3768);const es={id:"timeline"},ts={class:"section-title"},ns={key:0},rs={key:1},as={key:1,class:"more-workouts"};var os=(0,a.aZ)({__name:"Timeline",props:{sports:null,user:null},setup(e){const t=e,n=(0,c.o)(),{sports:r,user:s}=(0,i.BK)(t),u=(0,i.iH)(1),d=5,m=t.user.nb_workouts>=d?d:t.user.nb_workouts;(0,a.wF)((()=>S()));const _=(0,a.Fl)((()=>n.getters[l.aX.GETTERS.TIMELINE_WORKOUTS])),E=(0,a.Fl)((()=>_.value.length>0&&null!==_.value[_.value.length-1].previous_workout));function S(){n.dispatch(l.aX.ACTIONS.GET_TIMELINE_WORKOUTS,{page:u.value,per_page:d,...Qo.eR})}function T(){u.value+=1,n.dispatch(l.aX.ACTIONS.GET_MORE_TIMELINE_WORKOUTS,{page:u.value,per_page:d,...Qo.eR})}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",es,[(0,a._)("div",ts,(0,o.zw)(e.$t("workouts.LATEST_WORKOUTS")),1),(0,i.SU)(s).nb_workouts>0&&0===(0,i.SU)(_).length?((0,a.wg)(),(0,a.iD)("div",ns,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)([...Array((0,i.SU)(m)).keys()],(e=>((0,a.wg)(),(0,a.j4)(Xo,{user:(0,i.SU)(s),useImperialUnits:(0,i.SU)(s).imperial_units,key:e},null,8,["user","useImperialUnits"])))),128))])):((0,a.wg)(),(0,a.iD)("div",rs,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(_),(e=>((0,a.wg)(),(0,a.j4)(Xo,{workout:e,sport:(0,i.SU)(_).length>0?(0,i.SU)(r).filter((t=>t.id===e.sport_id))[0]:null,user:(0,i.SU)(s),useImperialUnits:(0,i.SU)(s).imperial_units,key:e.id},null,8,["workout","sport","user","useImperialUnits"])))),128)),0===(0,i.SU)(_).length?((0,a.wg)(),(0,a.j4)(Jo.Z,{key:0})):(0,a.kq)("",!0),(0,i.SU)(E)?((0,a.wg)(),(0,a.iD)("div",as,[(0,a._)("button",{onClick:T},(0,o.zw)(e.$t("workouts.LOAD_MORE_WORKOUT")),1)])):(0,a.kq)("",!0)]))]))}});const ss=(0,P.Z)(os,[["__scopeId","data-v-35567bf2"]]);var is=ss,ls=n(1640),cs=n(4559),us=n(7349),ds=n(1743),ms=n(9160),_s=n(1085);const Es=["title"];var Ss=(0,a.aZ)({__name:"CalendarWorkout",props:{displayHARecord:{type:Boolean},workout:null,sportLabel:null,sportColor:null},setup(e){const t=e,{displayHARecord:n,workout:r,sportLabel:o,sportColor:s}=(0,i.BK)(t);return(e,t)=>{const l=(0,a.up)("SportImage");return(0,a.wg)(),(0,a.iD)("div",{class:"calendar-workout",onClick:t[0]||(t[0]=t=>e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(r).id}}))},[(0,a.Wm)(l,{"sport-label":(0,i.SU)(o),title:(0,i.SU)(r).title,color:(0,i.SU)(s)},null,8,["sport-label","title","color"]),(0,a._)("sup",null,[(0,i.SU)(r).records.length>0?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-trophy custom-fa-small","aria-hidden":"true",title:(0,i.SU)(r).records.filter((e=>!!(0,i.SU)(n)||"HA"!==e.record_type)).map((t=>` ${e.$t(`workouts.RECORD_${t.record_type}`)}`))},null,8,Es)):(0,a.kq)("",!0)])])}}});const Ts=Ss;var ps=Ts;const As={class:"donut-chart"},Os={height:"34",width:"34",viewBox:"0 0 34 34"},Rs=["stroke","stroke-dashoffset","transform"];var Is=(0,a.aZ)({__name:"DonutChart",props:{colors:null,datasets:null},setup(e){const t=e,{colors:n,datasets:r}=(0,i.BK)(t);let o=-90;const s=16,l=16,c=14,u=2*Math.PI*c;function d(e,t){return t-e*t}function m(e,t){const n=`rotate(${o}, ${s}, ${l})`;return o=360*t+o,n}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",As,[((0,a.wg)(),(0,a.iD)("svg",Os,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(Object.entries((0,i.SU)(r)),((e,t)=>((0,a.wg)(),(0,a.iD)("g",{key:t},[(0,a._)("circle",{cx:s,cy:l,r:c,fill:"transparent",stroke:(0,i.SU)(n)[+e[0]],"stroke-dashoffset":d(e[1].percentage,u),"stroke-dasharray":u,"stroke-width":"3","stroke-opacity":"0.8",transform:m(t,e[1].percentage)},null,8,Rs)])))),128))]))]))}});const Us=Is;var gs=Us;const Ns={class:"calendar-workouts-chart"},hs={class:"workouts-count"},zs={key:0,class:"workouts-pane"},ws={class:"more-workouts"};var fs=(0,a.aZ)({__name:"CalendarWorkoutsChart",props:{colors:null,datasets:null,sports:null,workouts:null},setup(e){const t=e,{colors:n,datasets:r,sports:s,workouts:l}=(0,i.BK)(t),c=(0,i.iH)(!0);function u(e){e.stopPropagation(),c.value=!c.value}return(e,t)=>{const d=(0,a.Q2)("click-outside");return(0,a.wg)(),(0,a.iD)("div",Ns,[(0,a._)("div",{class:"workouts-chart",onClick:u},[(0,a._)("div",hs,(0,o.zw)((0,i.SU)(l).length),1),(0,a.Wm)(gs,{datasets:(0,i.SU)(r),colors:(0,i.SU)(n)},null,8,["datasets","colors"])]),c.value?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("div",zs,[(0,a.wy)(((0,a.wg)(),(0,a.iD)("div",ws,[(0,a._)("i",{class:"fa fa-times calendar-more","aria-hidden":"true",onClick:u}),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(l),((e,t)=>((0,a.wg)(),(0,a.j4)(ps,{key:t,workout:e,sportLabel:(0,i.SU)(le.PA)(e,(0,i.SU)(s)),sportColor:(0,i.SU)(le.CM)(e,(0,i.SU)(s))},null,8,["workout","sportLabel","sportColor"])))),128))])),[[d,u]])]))])}}});const vs=(0,P.Z)(fs,[["__scopeId","data-v-52d4310a"]]);var Cs=vs;const Ds={class:"calendar-workouts"},ks={class:"desktop-display"},Ps={key:0,class:"workouts-display"},Ls={key:1,class:"donut-display"},Ms={class:"mobile-display"},bs={key:0,class:"donut-display"};var ys=(0,a.aZ)({__name:"CalendarWorkouts",props:{displayHARecord:{type:Boolean},workouts:null,sports:null},setup(e){const t=e,{displayHARecord:n,workouts:r,sports:o}=(0,i.BK)(t),s=(0,a.Fl)((()=>(0,Qo.BN)(t.workouts))),l=(0,a.Fl)((()=>(0,le.Yx)(t.sports))),c=6;return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ds,[(0,a._)("div",ks,[(0,i.SU)(r).length<=c?((0,a.wg)(),(0,a.iD)("div",Ps,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(r).slice(0,c),((e,t)=>((0,a.wg)(),(0,a.j4)(ps,{key:t,displayHARecord:(0,i.SU)(n),workout:e,sportLabel:(0,i.SU)(le.PA)(e,(0,i.SU)(o)),sportColor:(0,i.SU)(le.CM)(e,(0,i.SU)(o))},null,8,["displayHARecord","workout","sportLabel","sportColor"])))),128))])):((0,a.wg)(),(0,a.iD)("div",Ls,[(0,a.Wm)(Cs,{workouts:(0,i.SU)(r),sports:(0,i.SU)(o),datasets:(0,i.SU)(s),colors:(0,i.SU)(l)},null,8,["workouts","sports","datasets","colors"])]))]),(0,a._)("div",Ms,[(0,i.SU)(r).length>0?((0,a.wg)(),(0,a.iD)("div",bs,[(0,a.Wm)(Cs,{workouts:(0,i.SU)(r),sports:(0,i.SU)(o),datasets:(0,i.SU)(s),colors:(0,i.SU)(l)},null,8,["workouts","sports","datasets","colors"])])):(0,a.kq)("",!0)])]))}});const Gs=ys;var Fs=Gs;const Ws={class:"calendar-cells"},Ks={class:"calendar-cell-day"};var Ys=(0,a.aZ)({__name:"CalendarCells",props:{currentDay:null,displayHARecord:{type:Boolean},endDate:null,sports:null,startDate:null,timezone:null,weekStartingMonday:{type:Boolean},workouts:null},setup(e){const t=e,{currentDay:n,displayHARecord:r,endDate:s,sports:l,startDate:c,timezone:u,weekStartingMonday:d,workouts:m}=(0,i.BK)(t),_=(0,i.iH)([]);function E(){_.value=[];let e=c.value;while(e<=s.value){const t=[];for(let n=0;n<7;n++)t.push(e),e=(0,us.Z)(e,1);_.value.push(t)}}function S(e){return d.value?[5,6].includes(e):[0,6].includes(e)}function T(e,t){return t?t.filter((t=>(0,ds.Z)((0,Ye.eB)(t.workout_date,u.value),e))).reverse():[]}return(0,a.bv)((()=>E())),(0,a.YP)((()=>t.currentDay),(()=>E())),(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ws,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(_.value,((e,t)=>((0,a.wg)(),(0,a.iD)("div",{class:"calendar-row",key:t},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(e,((e,t)=>((0,a.wg)(),(0,a.iD)("div",{class:(0,o.C_)(["calendar-cell",{"disabled-cell":!(0,i.SU)(ms.Z)(e,(0,i.SU)(n)),"week-end":S(t),today:(0,i.SU)(_s.Z)(e)}]),key:t},[(0,a.Wm)(Fs,{workouts:T(e,(0,i.SU)(m)),sports:(0,i.SU)(l),displayHARecord:(0,i.SU)(r)},null,8,["workouts","sports","displayHARecord"]),(0,a._)("div",Ks,(0,o.zw)((0,i.SU)(jt.Z)(e,"d")),1)],2)))),128))])))),128))]))}});const xs=Ys;var $s=xs;const Bs={class:"calendar-days"};var Zs=(0,a.aZ)({__name:"CalendarDays",props:{startDate:null,localeOptions:null},setup(e){const t=e,n=[];for(let r=0;r<7;r++)n.push((0,us.Z)(t.startDate,r));return(t,r)=>((0,a.wg)(),(0,a.iD)("div",Bs,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(n,((t,n)=>(0,a._)("div",{class:"calendar-day",key:n},(0,o.zw)((0,i.SU)(jt.Z)(t,"EEE",{locale:e.localeOptions})),1))),64))]))}});const Hs=Zs;var qs=Hs;const Vs={class:"calendar-header"},js=(0,a._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1),Xs=[js],Js={class:"calendar-month"},Qs=(0,a._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1),ei=[Qs];var ti=(0,a.aZ)({__name:"CalendarHeader",props:{day:null,localeOptions:null},emits:["displayNextMonth","displayPreviousMonth"],setup(e,{emit:t}){const n=e,{day:r,localeOptions:s}=(0,i.BK)(n);return(e,n)=>((0,a.wg)(),(0,a.iD)("div",Vs,[(0,a._)("div",{class:"calendar-arrow calendar-arrow-left",onClick:n[0]||(n[0]=e=>t("displayPreviousMonth"))},Xs),(0,a._)("div",Js,[(0,a._)("span",null,(0,o.zw)((0,i.SU)(jt.Z)((0,i.SU)(r),"MMM yyyy",{locale:(0,i.SU)(s)})),1)]),(0,a._)("div",{class:"calendar-arrow calendar-arrow-right",onClick:n[1]||(n[1]=e=>t("displayNextMonth"))},ei)]))}});const ni=ti;var ri=ni;const ai={id:"user-calendar"},oi={class:"calendar-card box"};var si=(0,a.aZ)({__name:"index",props:{sports:null,user:null},setup(e){const t=e,n=(0,c.o)(),{sports:r,user:o}=(0,i.BK)(t),s="yyyy-MM-dd",u=(0,i.iH)(new Date),d=(0,i.iH)((0,Ye.yx)(u.value,t.user.weekm)),m=(0,a.Fl)((()=>n.getters[l.aX.GETTERS.CALENDAR_WORKOUTS])),_=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LOCALE]));function E(){d.value=(0,Ye.yx)(u.value,t.user.weekm);const e={from:(0,jt.Z)(d.value.start,s),to:(0,jt.Z)(d.value.end,s),page:1,per_page:100,...Qo.eR};n.dispatch(l.aX.ACTIONS.GET_CALENDAR_WORKOUTS,e)}function S(){u.value=(0,ls.Z)(u.value,1),E()}function T(){u.value=(0,cs.Z)(u.value,1),E()}return(0,a.wF)((()=>E())),(e,t)=>((0,a.wg)(),(0,a.iD)("div",ai,[(0,a._)("div",oi,[(0,a.Wm)(ri,{day:u.value,"locale-options":(0,i.SU)(_),onDisplayNextMonth:S,onDisplayPreviousMonth:T},null,8,["day","locale-options"]),(0,a.Wm)(qs,{"start-date":d.value.start,"locale-options":(0,i.SU)(_)},null,8,["start-date","locale-options"]),(0,a.Wm)($s,{currentDay:u.value,displayHARecord:(0,i.SU)(o).display_ascent,"end-date":d.value.end,sports:(0,i.SU)(r),"start-date":d.value.start,timezone:(0,i.SU)(o).timezone,workouts:(0,i.SU)(m),weekStartingMonday:(0,i.SU)(o).weekm},null,8,["currentDay","displayHARecord","end-date","sports","start-date","timezone","workouts","weekStartingMonday"])])]))}});const ii=si;var li=ii,ci=n(3703),ui=n(4135),di=n(3170);const mi={class:"user-month-stats"};var _i=(0,a.aZ)({__name:"UserMonthStats",props:{sports:null,user:null},setup(e){const t=e,{sports:n,user:r}=(0,i.BK)(t),s=new Date,l={duration:"week",start:(0,ci.Z)(s),end:(0,ui.Z)(s)},c=t.sports.map((e=>e.id));return(e,t)=>{const s=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",mi,[(0,a.Wm)(s,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("dashboard.THIS_MONTH")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(di.Z,{sports:(0,i.SU)(n),user:(0,i.SU)(r),"chart-params":l,"displayed-sport-ids":(0,i.SU)(c),"hide-chart-if-no-data":!0},null,8,["sports","user","displayed-sport-ids"])])),_:1})])}}});const Ei=(0,P.Z)(_i,[["__scopeId","data-v-1bcddc12"]]);var Si=Ei,Ti=n(2540),pi=n(3649);const{locale:Ai}=Ti.Z.global,Oi=(e,t,n,r)=>{const a="km",o=n?pi.Dl[a].defaultTarget:a,s="m",i=n?pi.Dl[s].defaultTarget:s;let l;switch(e.record_type){case"AS":case"MS":l=`${(0,pi.sC)(+e.value,a,o,2)} ${o}/h`;break;case"FD":l=`${(0,pi.sC)(+e.value,a,o,3)} ${o}`;break;case"HA":l=`${(0,pi.sC)(+e.value,s,i,2)} ${i}`;break;case"LD":l=e.value;break;default:throw new Error(`Invalid record type, expected: "AS", "FD", "HA", "LD", "MD", got: "${e.record_type}"`)}return{workout_date:(0,Ye.p6)(e.workout_date,t,r,!1),workout_id:e.workout_id,id:e.id,record_type:e.record_type,value:l}},Ri=(e,t)=>{const n=e.label.toLowerCase(),r=t.label.toLowerCase();return n>r?1:n(o=(0,Ye.mh)(o,Ai.value),e.filter((e=>!!a||"HA"!==e.record_type)).reduce(((e,a)=>{const s=t.find((e=>e.id===a.sport_id));return s&&s.label&&(void 0===e[s.translatedLabel]&&(e[s.translatedLabel]={label:s.label,color:s.color,records:[]}),e[s.translatedLabel].records.push(Oi(a,n,r,o))),e}),{})),Ui={class:"records-card"},gi={class:"record-type"},Ni={class:"record-value"},hi={class:"record-date"};var zi=(0,a.aZ)({__name:"RecordsCard",props:{records:null,sportTranslatedLabel:null},setup(e){const t=e,{records:n,sportTranslatedLabel:r}=(0,i.BK)(t),{t:s}=(0,ie.QT)();function l(e){const t=[];return e.map((e=>{t.push({...e,label:s(`workouts.RECORD_${e.record_type}`)})})),t.sort(Ri)}return(e,t)=>{const s=(0,a.up)("SportImage"),c=(0,a.up)("router-link"),u=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",Ui,[(0,a.Wm)(u,null,{title:(0,a.w5)((()=>[(0,a.Wm)(s,{"sport-label":(0,i.SU)(n).label,color:(0,i.SU)(n).color},null,8,["sport-label","color"]),(0,a.Uk)(" "+(0,o.zw)((0,i.SU)(r)),1)])),content:(0,a.w5)((()=>[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(l((0,i.SU)(n).records),(e=>((0,a.wg)(),(0,a.iD)("div",{class:"record",key:e.id},[(0,a._)("span",gi,(0,o.zw)(e.label),1),(0,a._)("span",Ni,(0,o.zw)(e.value),1),(0,a._)("span",hi,[(0,a.Wm)(c,{to:{name:"Workout",params:{workoutId:e.workout_id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.workout_date),1)])),_:2},1032,["to"])])])))),128))])),_:1})])}}});const wi=(0,P.Z)(zi,[["__scopeId","data-v-8d17c606"]]);var fi=wi;const vi=e=>((0,a.dD)("data-v-f0c85cb8"),e=e(),(0,a.Cn)(),e),Ci={class:"user-records-section"},Di={class:"section-title"},ki=vi((()=>(0,a._)("i",{class:"fa fa-trophy custom-fa-small","aria-hidden":"true"},null,-1))),Pi={class:"user-records"},Li={key:0,class:"no-records"};var Mi=(0,a.aZ)({__name:"index",props:{sports:null,user:null},setup(e){const t=e,{t:n}=(0,ie.QT)(),r=(0,a.Fl)((()=>Ii(t.user.records,(0,le.xH)(t.sports,n),t.user.timezone,t.user.imperial_units,t.user.display_ascent,t.user.date_format)));return(t,n)=>((0,a.wg)(),(0,a.iD)("div",Ci,[(0,a._)("div",Di,[ki,(0,a.Uk)(" "+(0,o.zw)(t.$t("workouts.RECORD",2)),1)]),(0,a._)("div",Pi,[0===Object.keys((0,i.SU)(r)).length?((0,a.wg)(),(0,a.iD)("div",Li,(0,o.zw)(t.$t("workouts.NO_RECORDS")),1)):(0,a.kq)("",!0),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(Object.keys((0,i.SU)(r)).sort(),(t=>((0,a.wg)(),(0,a.j4)(fi,{sportTranslatedLabel:t,records:(0,i.SU)(r)[t],key:t,useImperialUnits:e.user.imperial_units},null,8,["sportTranslatedLabel","records","useImperialUnits"])))),128))])]))}});const bi=(0,P.Z)(Mi,[["__scopeId","data-v-f0c85cb8"]]);var yi=bi;const Gi={id:"user-stats"};var Fi=(0,a.aZ)({__name:"index",props:{user:null},setup(e){const t=e,{t:n}=(0,ie.QT)(),{user:r}=(0,i.BK)(t),o=(0,a.Fl)((()=>t.user.total_duration)),s=(0,a.Fl)((()=>E(o))),l="km",c=r.value.imperial_units?pi.Dl[l].defaultTarget:l,u=(0,a.Fl)((()=>r.value.imperial_units?(0,pi.sC)(r.value.total_distance,l,c,2):parseFloat(r.value.total_distance.toFixed(2)))),d="m",m=r.value.imperial_units?pi.Dl[d].defaultTarget:d,_=(0,a.Fl)((()=>r.value.imperial_units?(0,pi.sC)(r.value.total_ascent,d,m,2):parseFloat(r.value.total_ascent.toFixed(2))));function E(e){const t=e.value.match(/day/g)?e.value.split(", ")[1]:e.value;return{days:e.value.match(/day/g)?`${e.value.split(" ")[0]} ${e.value.match(/days/g)?n("common.DAY",2):n("common.DAY",1)}`:`0 ${n("common.DAY",2)},`,duration:`${t.split(":")[0]}h ${t.split(":")[1]}min`}}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Gi,[(0,a.Wm)($,{icon:"calendar",value:(0,i.SU)(r).nb_workouts,text:e.$t("workouts.WORKOUT",(0,i.SU)(r).nb_workouts)},null,8,["value","text"]),(0,a.Wm)($,{icon:"road",value:(0,i.SU)(u),text:"mi"===(0,i.SU)(c)?"miles":(0,i.SU)(c)},null,8,["value","text"]),(0,i.SU)(r).display_ascent?((0,a.wg)(),(0,a.j4)($,{key:0,icon:"location-arrow",value:(0,i.SU)(_),text:"ft"===(0,i.SU)(m)?"feet":(0,i.SU)(m)},null,8,["value","text"])):(0,a.kq)("",!0),(0,a.Wm)($,{icon:"clock-o",value:(0,i.SU)(s).days,text:(0,i.SU)(s).duration},null,8,["value","text"]),(0,i.SU)(r).display_ascent?(0,a.kq)("",!0):((0,a.wg)(),(0,a.j4)($,{key:1,icon:"tags",value:(0,i.SU)(r).nb_sports,text:e.$t("workouts.SPORT",(0,i.SU)(r).nb_sports)},null,8,["value","text"]))]))}});const Wi=Fi;var Ki=Wi;const Yi=e=>((0,a.dD)("data-v-4c0893c1"),e=e(),(0,a.Cn)(),e),xi={key:0,id:"dashboard",class:"view"},$i={class:"container mobile-menu"},Bi={class:"box"},Zi=Yi((()=>(0,a._)("i",{class:"fa fa-calendar","aria-hidden":"true"},null,-1))),Hi=[Zi],qi=Yi((()=>(0,a._)("i",{class:"fa fa-bar-chart","aria-hidden":"true"},null,-1))),Vi=[qi],ji=Yi((()=>(0,a._)("i",{class:"fa fa-map-o","aria-hidden":"true"},null,-1))),Xi=[ji],Ji=Yi((()=>(0,a._)("i",{class:"fa fa-trophy","aria-hidden":"true"},null,-1))),Qi=[Ji],el={class:"container"},tl={class:"container dashboard-container"},nl={class:"left-container dashboard-sub-container"},rl={class:"right-container dashboard-sub-container"},al=Yi((()=>(0,a._)("div",{id:"bottom"},null,-1))),ol={key:1,class:"app-loading"};var sl=(0,a.aZ)({__name:"Dashboard",setup(e){const t=(0,c.o)(),n=(0,a.Fl)((()=>t.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),r=(0,a.Fl)((()=>t.getters[l.O8.GETTERS.SPORTS])),s=(0,i.iH)("calendar");function u(e){s.value=e}return(0,a.wF)((()=>t.dispatch(l.YN.ACTIONS.GET_USER_PROFILE))),(e,t)=>{const l=(0,a.up)("Loader");return(0,i.SU)(n).username&&(0,i.SU)(r).length>0?((0,a.wg)(),(0,a.iD)("div",xi,[(0,a._)("div",$i,[(0,a._)("div",Bi,[(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"calendar"===s.value}]),onClick:t[0]||(t[0]=e=>u("calendar"))},Hi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"chart"===s.value}]),onClick:t[1]||(t[1]=e=>u("chart"))},Vi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"timeline"===s.value}]),onClick:t[2]||(t[2]=e=>u("timeline"))},Xi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"records"===s.value}]),onClick:t[3]||(t[3]=e=>u("records"))},Qi,2)])]),(0,a._)("div",el,[(0,a.Wm)(Ki,{user:(0,i.SU)(n)},null,8,["user"])]),(0,a._)("div",tl,[(0,a._)("div",nl,[(0,a.Wm)(Si,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("chart"===s.value)})},null,8,["sports","user","class"]),(0,a.Wm)(yi,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("records"===s.value)})},null,8,["sports","user","class"])]),(0,a._)("div",rl,[(0,a.Wm)(li,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("calendar"===s.value)})},null,8,["sports","user","class"]),(0,a.Wm)(is,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("timeline"===s.value)})},null,8,["sports","user","class"])])]),al])):((0,a.wg)(),(0,a.iD)("div",ol,[(0,a.Wm)(l)]))}}});const il=(0,P.Z)(sl,[["__scopeId","data-v-4c0893c1"]]);var ll=il,cl=n(8273);const ul={class:"not-found view"};var dl=(0,a.aZ)({__name:"NotFoundView",setup(e){return(e,t)=>((0,a.wg)(),(0,a.iD)("div",ul,[(0,a.Wm)(cl.Z)]))}});const ml=dl;var _l=ml,El=n(2411);const Sl={id:"loginOrRegister",class:"view"},Tl={class:"container"},pl={class:"container-sub"},Al={class:"container-sub"};var Ol=(0,a.aZ)({__name:"LoginOrRegister",props:{action:null},setup(e){const t=e,{action:n}=(0,i.BK)(t);return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Sl,[(0,a._)("div",Tl,[(0,a._)("div",pl,[(0,a.Wm)(Oo)]),(0,a._)("div",Al,[(0,a.Wm)(El.Z,{action:(0,i.SU)(n)},null,8,["action"])])])]))}});const Rl=(0,P.Z)(Ol,[["__scopeId","data-v-6a38125b"]]);var Il=Rl;const Ul=e=>{const t=/(\/profile)(\/edit)*(\/*)/,n=e.replace(t,"").toUpperCase();return""===n?"PROFILE":n.toUpperCase()},gl=[{path:"/",name:"Dashboard",component:ll},{path:"/login",name:"Login",component:Il,props:{action:"login"}},{path:"/register",name:"Register",component:Il,props:{action:"register"}},{path:"/account-confirmation",name:"AccountConfirmation",component:()=>n.e(845).then(n.bind(n,4264))},{path:"/account-confirmation/resend",name:"AccountConfirmationResend",component:()=>n.e(24).then(n.bind(n,5639)),props:{action:"account-confirmation-resend"}},{path:"/account-confirmation/email-sent",name:"AccountConfirmationEmailSend",component:()=>n.e(24).then(n.bind(n,5639)),props:{action:"email-sent"}},{path:"/password-reset/sent",name:"PasswordEmailSent",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"request-sent"}},{path:"/password-reset/request",name:"PasswordResetRequest",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"reset-request"}},{path:"/password-reset/password-updated",name:"PasswordUpdated",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"password-updated"}},{path:"/password-reset",name:"PasswordReset",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"reset"}},{path:"/email-update",name:"EmailUpdate",component:()=>n.e(845).then(n.bind(n,8160))},{path:"/profile",name:"Profile",component:()=>n.e(845).then(n.bind(n,6266)),children:[{path:"",name:"UserProfile",component:Nt,props:e=>({tab:Ul(e.path)}),children:[{path:"",name:"UserInfos",component:ht.Z},{path:"preferences",name:"UserPreferences",component:Dt},{path:"sports",name:"UserSportPreferences",component:ja,props:{isEdition:!1}},{path:"apps",name:"UserApps",component:Xr,children:[{path:"",name:"UserAppsList",component:Ra},{path:":id",name:"UserApp",component:da},{path:":id/created",name:"CreatedUserApp",component:da,props:{afterCreation:!0}},{path:"new",name:"AddUserApp",component:Mr},{path:"authorize",name:"AuthorizeUserApp",component:Hr}]}]},{path:"edit",name:"UserProfileEdition",component:Mt,props:e=>({tab:Ul(e.path)}),children:[{path:"",name:"UserInfosEdition",component:Sn},{path:"account",name:"UserAccountEdition",component:Vt},{path:"picture",name:"UserPictureEdition",component:wn},{path:"preferences",name:"UserPreferencesEdition",component:ur},{path:"sports",name:"UserSportPreferencesEdition",component:ja,props:{isEdition:!0}}]}]},{path:"/statistics",name:"Statistics",component:()=>n.e(193).then(n.bind(n,7885))},{path:"/users/:username",name:"User",component:()=>n.e(845).then(n.bind(n,9453))},{path:"/workouts",name:"Workouts",component:()=>n.e(401).then(n.bind(n,5651))},{path:"/workouts/:workoutId",name:"Workout",component:()=>n.e(401).then(n.bind(n,4915)),props:{displaySegment:!1}},{path:"/workouts/:workoutId/edit",name:"EditWorkout",component:()=>n.e(401).then(n.bind(n,8237))},{path:"/workouts/:workoutId/segment/:segmentId",name:"WorkoutSegment",component:()=>n.e(401).then(n.bind(n,4915)),props:{displaySegment:!0}},{path:"/workouts/add",name:"AddWorkout",component:()=>n.e(401).then(n.bind(n,4189))},{path:"/admin",name:"Administration",component:()=>n.e(328).then(n.bind(n,6e3)),children:[{path:"",name:"AdministrationMenu",component:se},{path:"application",name:"ApplicationAdministration",component:M},{path:"application/edit",name:"ApplicationAdministrationEdition",component:M,props:{edition:!0}},{path:"sports",name:"SportsAdministration",component:De},{path:"users/:username",name:"UserFromAdmin",component:()=>n.e(845).then(n.bind(n,9453)),props:{fromAdmin:!0}},{path:"users",name:"UsersAdministration",component:mt}]},{path:"/about",name:"About",component:zo},{path:"/:pathMatch(.*)*",name:"not-found",component:_l}],Nl=(0,r.p7)({history:(0,r.PO)("/"),routes:gl}),hl=["/login","/password-reset","/password-reset/password-updated","/password-reset/request","/password-reset/sent","/register","/account-confirmation","/account-confirmation/resend","/account-confirmation/email-sent"],zl=["/email-update","/about"];Nl.beforeEach(((e,t,n)=>{Xa.Z.dispatch(l.YN.ACTIONS.CHECK_AUTH_USER).then((()=>{if(zl.includes(e.path))return n();if(Xa.Z.getters[l.YN.GETTERS.IS_AUTHENTICATED]&&hl.includes(e.path))return n("/");if(Xa.Z.getters[l.YN.GETTERS.IS_AUTHENTICATED]||hl.includes(e.path))n();else{const t="/"===e.path?{path:"/login"}:{path:"/login",query:{from:e.fullPath}};n(t)}})).catch((e=>{console.error(e),n()}))}));var wl=Nl},5801:function(e,t,n){"use strict";var r,a,o,s,i,l,c,u,d,m,_,E,S,T,p,A,O,R;n.d(t,{YN:function(){return h},Km:function(){return z},SY:function(){return U},O8:function(){return g},gu:function(){return N},RT:function(){return w},aX:function(){return f}}),function(e){e["CHECK_AUTH_USER"]="CHECK_AUTH_USER",e["CONFIRM_ACCOUNT"]="CONFIRM_ACCOUNT",e["CONFIRM_EMAIL"]="CONFIRM_EMAIL",e["DELETE_ACCOUNT"]="DELETE_ACCOUNT",e["DELETE_PICTURE"]="DELETE_PICTURE",e["GET_USER_PROFILE"]="GET_USER_PROFILE",e["LOGIN_OR_REGISTER"]="LOGIN_OR_REGISTER",e["LOGOUT"]="LOGOUT",e["SEND_PASSWORD_RESET_REQUEST"]="SEND_PASSWORD_RESET_REQUEST",e["RESEND_ACCOUNT_CONFIRMATION_EMAIL"]="RESEND_ACCOUNT_CONFIRMATION_EMAIL",e["RESET_USER_PASSWORD"]="RESET_USER_PASSWORD",e["RESET_USER_SPORT_PREFERENCES"]="RESET_USER_SPORT_PREFERENCES",e["UPDATE_USER_ACCOUNT"]="UPDATE_USER_ACCOUNT",e["UPDATE_USER_PICTURE"]="UPDATE_USER_PICTURE",e["UPDATE_USER_PROFILE"]="UPDATE_USER_PROFILE",e["UPDATE_USER_PREFERENCES"]="UPDATE_USER_PREFERENCES",e["UPDATE_USER_SPORT_PREFERENCES"]="UPDATE_USER_SPORT_PREFERENCES"}(r||(r={})),function(e){e["AUTH_TOKEN"]="AUTH_TOKEN",e["AUTH_USER_PROFILE"]="AUTH_USER_PROFILE",e["IS_ADMIN"]="IS_ADMIN",e["IS_AUTHENTICATED"]="IS_AUTHENTICATED",e["IS_SUCCESS"]="IS_SUCCESS",e["IS_REGISTRATION_SUCCESS"]="IS_REGISTRATION_SUCCESS",e["USER_LOADING"]="USER_LOADING"}(a||(a={})),function(e){e["CLEAR_AUTH_USER_TOKEN"]="CLEAR_AUTH_USER_TOKEN",e["UPDATE_AUTH_TOKEN"]="UPDATE_AUTH_TOKEN",e["UPDATE_AUTH_USER_PROFILE"]="UPDATE_AUTH_USER_PROFILE",e["UPDATE_IS_SUCCESS"]="UPDATE_USER_IS_SUCCESS",e["UPDATE_IS_REGISTRATION_SUCCESS"]="UPDATE_IS_REGISTRATION_SUCCESS",e["UPDATE_USER_LOADING"]="UPDATE_USER_LOADING"}(o||(o={})),function(e){e["AUTHORIZE_CLIENT"]="AUTHORIZE_CLIENT",e["CREATE_CLIENT"]="CREATE_CLIENT",e["DELETE_CLIENT"]="DELETE_CLIENT",e["GET_CLIENTS"]="GET_CLIENTS",e["GET_CLIENT_BY_CLIENT_ID"]="GET_CLIENT_BY_CLIENT_ID",e["GET_CLIENT_BY_ID"]="GET_CLIENT_BY_ID",e["REVOKE_ALL_TOKENS"]="REVOKE_ALL_TOKENS"}(s||(s={})),function(e){e["CLIENT"]="CLIENT",e["CLIENTS"]="CLIENTS",e["CLIENTS_PAGINATION"]="CLIENTS_PAGINATION",e["REVOCATION_SUCCESSFUL"]="REVOCATION_SUCCESSFUL"}(i||(i={})),function(e){e["EMPTY_CLIENT"]="EMPTY_CLIENT",e["SET_CLIENT"]="SET_CLIENT",e["SET_CLIENTS"]="SET_CLIENTS",e["SET_CLIENTS_PAGINATION"]="SET_CLIENTS_PAGINATION",e["SET_REVOCATION_SUCCESSFUL"]="SET_REVOCATION_SUCCESSFUL"}(l||(l={})),function(e){e["GET_APPLICATION_CONFIG"]="GET_APPLICATION_CONFIG",e["GET_APPLICATION_STATS"]="GET_APPLICATION_STATS",e["UPDATE_APPLICATION_CONFIG"]="UPDATE_APPLICATION_CONFIG",e["UPDATE_APPLICATION_LANGUAGE"]="UPDATE_APPLICATION_LANGUAGE"}(c||(c={})),function(e){e["APP_CONFIG"]="APP_CONFIG",e["APP_LOADING"]="APP_LOADING",e["APP_STATS"]="APP_STATS",e["ERROR_MESSAGES"]="ERROR_MESSAGES",e["LANGUAGE"]="LANGUAGE",e["LOCALE"]="LOCALE"}(u||(u={})),function(e){e["EMPTY_ERROR_MESSAGES"]="EMPTY_ERROR_MESSAGES",e["SET_ERROR_MESSAGES"]="SET_ERROR_MESSAGES",e["UPDATE_APPLICATION_CONFIG"]="UPDATE_APPLICATION_CONFIG",e["UPDATE_APPLICATION_LOADING"]="UPDATE_APPLICATION_LOADING",e["UPDATE_APPLICATION_STATS"]="UPDATE_APPLICATION_STATS",e["UPDATE_LANG"]="UPDATE_LANG"}(d||(d={})),function(e){e["GET_SPORTS"]="GET_SPORTS",e["UPDATE_SPORTS"]="UPDATE_SPORTS"}(m||(m={})),function(e){e["SPORTS"]="SPORTS"}(_||(_={})),function(e){e["SET_SPORTS"]="SET_SPORTS"}(E||(E={})),function(e){e["GET_USER_STATS"]="GET_USER_STATS"}(S||(S={})),function(e){e["USER_STATS"]="USER_STATS"}(T||(T={})),function(e){e["EMPTY_USER_STATS"]="EMPTY_USER_STATS",e["UPDATE_USER_STATS"]="UPDATE_USER_STATS"}(p||(p={})),function(e){e["EMPTY_USER"]="EMPTY_USER",e["EMPTY_USERS"]="EMPTY_USERS",e["GET_USER"]="GET_USER",e["GET_USERS"]="GET_USERS",e["UPDATE_USER"]="UPDATE_USER",e["DELETE_USER_ACCOUNT"]="DELETE_USER_ACCOUNT"}(A||(A={})),function(e){e["USER"]="USER",e["USERS"]="USERS",e["USERS_IS_SUCCESS"]="USERS_IS_SUCCESS",e["USERS_LOADING"]="USERS_LOADING",e["USERS_PAGINATION"]="USERS_PAGINATION"}(O||(O={})),function(e){e["UPDATE_USER"]="UPDATE_USER",e["UPDATE_USER_IN_USERS"]="UPDATE_USER_IN_USERS",e["UPDATE_USERS"]="UPDATE_USERS",e["UPDATE_USERS_LOADING"]="UPDATE_USERS_LOADING",e["UPDATE_USERS_PAGINATION"]="UPDATE_USERS_PAGINATION",e["UPDATE_IS_SUCCESS"]="UPDATE_IS_SUCCESS"}(R||(R={}));var I=n(52);const U={ACTIONS:c,GETTERS:u,MUTATIONS:d},g={ACTIONS:m,GETTERS:_,MUTATIONS:E},N={ACTIONS:S,GETTERS:T,MUTATIONS:p},h={ACTIONS:r,GETTERS:a,MUTATIONS:o},z={ACTIONS:s,GETTERS:i,MUTATIONS:l},w={ACTIONS:A,GETTERS:O,MUTATIONS:R},f={ACTIONS:I.tW,GETTERS:I.JP,MUTATIONS:I.CW}},2894:function(e,t,n){"use strict";n.d(t,{Z:function(){return me}});var r=n(3907),a=(n(7658),n(5167)),o=n(9669),s=n.n(o),i=n(8566),l=n(2024);const c=s().create({baseURL:(0,l.k)()});c.interceptors.request.use((e=>{const t=new AbortController;e.signal=t.signal;const n=(0,i.a)(e);return i.j.set(n,t),e}),(e=>Promise.reject(e))),c.interceptors.response.use((e=>((0,i.a)(e.config),e)),(e=>("canceled"!==e.message&&(0,i.a)(e.response.config),Promise.reject(e))));var u=c,d=n(5073),m=n(5801);const _=(e,t)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z["delete"](`users/${t.username}`).then((n=>{204===n.status?t.fromAdmin?d.Z.push("/admin/users"):e.dispatch(m.YN.ACTIONS.LOGOUT).then((()=>d.Z.push("/"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},E={[m.RT.ACTIONS.EMPTY_USER](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USER,{})},[m.RT.ACTIONS.EMPTY_USERS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS,[]),e.commit(m.RT.MUTATIONS.UPDATE_USERS_PAGINATION,{})},[m.RT.ACTIONS.GET_USER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!0),a.Z.get(`users/${t}`).then((t=>{"success"===t.data.status?e.commit(m.RT.MUTATIONS.UPDATE_USER,t.data.data.users[0]):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.GET_USERS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!0),a.Z.get("users",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.RT.MUTATIONS.UPDATE_USERS,t.data.data.users),e.commit(m.RT.MUTATIONS.UPDATE_USERS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.UPDATE_USER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1);const n={};void 0!==t.admin&&(n.admin=t.admin),t.resetPassword&&(n.reset_password=t.resetPassword),t.activate&&(n.activate=t.activate),void 0!==t.new_email&&(n.new_email=t.new_email),a.Z.patch(`users/${t.username}`,n).then((n=>{"success"===n.data.status?(e.commit(m.RT.MUTATIONS.UPDATE_USER_IN_USERS,n.data.data.users[0]),(t.resetPassword||t.new_email)&&e.commit(m.RT.MUTATIONS.UPDATE_IS_SUCCESS,!0),(t.activate||t.new_email)&&e.commit(m.RT.MUTATIONS.UPDATE_USER,n.data.data.users[0])):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.DELETE_USER_ACCOUNT](e,t){_(e,{username:t.username,fromAdmin:!0})}},S=e=>{localStorage.removeItem("authToken"),e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.gu.MUTATIONS.EMPTY_USER_STATS),e.commit(m.YN.MUTATIONS.CLEAR_AUTH_USER_TOKEN),e.commit(m.RT.MUTATIONS.UPDATE_USERS,[]),e.commit(m.aX.MUTATIONS.EMPTY_WORKOUTS),e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),d.Z.push("/login")},T={[m.YN.ACTIONS.CHECK_AUTH_USER](e){window.localStorage.authToken&&!e.getters[m.YN.GETTERS.IS_AUTHENTICATED]&&(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,window.localStorage.authToken),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE)),!window.localStorage.authToken&&e.getters[m.YN.GETTERS.IS_AUTHENTICATED]&&S(e)},[m.YN.ACTIONS.CONFIRM_ACCOUNT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/account/confirm",{token:t.token}).then((t=>{if("success"===t.data.status){const n=t.data.auth_token;window.localStorage.setItem("authToken",n),e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,n),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/")))}else(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t)}))},[m.YN.ACTIONS.CONFIRM_EMAIL](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),u.post("/auth/email/update",{token:t.token}).then((n=>{"success"===n.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!0),t.refreshUser&&e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile/edit/account"))),d.Z.push("/profile/edit/account")):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t)}))},[m.YN.ACTIONS.GET_USER_PROFILE](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("auth/profile").then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),t.data.data.language&&e.dispatch(m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,t.data.data.language),e.dispatch(m.O8.ACTIONS.GET_SPORTS)):((0,l.S)(e,null),S(e))})).catch((t=>{"canceled"!==t.message&&((0,l.S)(e,t),S(e))}))},[m.YN.ACTIONS.LOGIN_OR_REGISTER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!1),u.post(`/auth/${t.actionType}`,t.formData).then((n=>{if("success"===n.data.status)if("login"===t.actionType){const r=n.data.auth_token;window.localStorage.setItem("authToken",r),e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,r),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("string"===typeof t.redirectUrl?t.redirectUrl:"/")))}else d.Z.push("/login").then((()=>e.commit(m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!0)));else(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.LOGOUT](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.post("auth/logout").then((t=>{"success"===t.data.status?S(e):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.UPDATE_USER_PROFILE](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),d.Z.push("/profile")):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.UPDATE_USER_ACCOUNT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),a.Z.patch("auth/profile/edit/account",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!0)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.UPDATE_USER_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit/preferences",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),e.dispatch(m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,t.data.data.language).then((()=>d.Z.push("/profile/preferences")))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.RESET_USER_SPORT_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z["delete"](`auth/profile/reset/sports/${t}`).then((t=>{204===t.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)}))},[m.YN.ACTIONS.UPDATE_USER_SPORT_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit/sports",t).then((t=>{"success"===t.data.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)}))},[m.YN.ACTIONS.UPDATE_USER_PICTURE](e,t){if(e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),!t.picture)throw new Error("No file part");const n=new FormData;n.append("file",t.picture),a.Z.post("auth/picture",n,{headers:{"content-type":"multipart/form-data"}}).then((t=>{"success"===t.data.status?e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.DELETE_ACCOUNT](e,t){_(e,t)},[m.YN.ACTIONS.DELETE_PICTURE](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z["delete"]("auth/picture").then((t=>{204===t.status?e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.SEND_PASSWORD_RESET_REQUEST](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/password/reset-request",t).then((t=>{"success"===t.data.status?d.Z.push("/password-reset/sent"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/account/resend-confirmation",t).then((t=>{"success"===t.data.status?d.Z.push("/account-confirmation/email-sent"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.RESET_USER_PASSWORD](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/password/update",t).then((t=>{"success"===t.data.status?d.Z.push("/password-reset/password-updated"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},p={[m.YN.GETTERS.AUTH_TOKEN]:e=>e.authToken,[m.YN.GETTERS.AUTH_USER_PROFILE]:e=>e.authUserProfile,[m.YN.GETTERS.IS_AUTHENTICATED]:e=>null!==e.authToken,[m.YN.GETTERS.IS_ADMIN]:e=>e.authUserProfile&&e.authUserProfile.admin,[m.YN.GETTERS.IS_REGISTRATION_SUCCESS]:e=>e.isRegistrationSuccess,[m.YN.GETTERS.IS_SUCCESS]:e=>e.isSuccess,[m.YN.GETTERS.USER_LOADING]:e=>e.loading},A={[m.YN.MUTATIONS.CLEAR_AUTH_USER_TOKEN](e){e.authToken=null,e.authUserProfile={}},[m.YN.MUTATIONS.UPDATE_AUTH_TOKEN](e,t){e.authToken=t},[m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE](e,t){e.authUserProfile=t},[m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS](e,t){e.isRegistrationSuccess=t},[m.YN.MUTATIONS.UPDATE_IS_SUCCESS](e,t){e.isSuccess=t},[m.YN.MUTATIONS.UPDATE_USER_LOADING](e,t){e.loading=t}},O={authToken:null,authUserProfile:{},isSuccess:!1,isRegistrationSuccess:!1,loading:!1},R={state:O,actions:T,getters:p,mutations:A};var I=R;const U=(e,t)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get(t).then((t=>{"success"===t.data.status?e.commit(m.Km.MUTATIONS.SET_CLIENT,t.data.data.client):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},g={[m.Km.ACTIONS.AUTHORIZE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES);const n=new FormData;n.set("client_id",t.client_id),n.set("response_type",t.response_type),n.set("scope",t.scope),n.set("confirm","true"),t.state&&n.set("state",t.state),t.code_challenge&&n.set("code_challenge",t.code_challenge),t.code_challenge_method&&n.set("code_challenge_method",t.code_challenge_method),a.Z.post("oauth/authorize",n,{headers:{"Content-Type":"multipart/form-data"}}).then((t=>{200==t.status&&t.data.redirect_url?window.location.href=t.data.redirect_url:(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.CREATE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.post("oauth/apps",t).then((t=>{"created"===t.data.status?(e.commit(m.Km.MUTATIONS.SET_CLIENT,t.data.data.client),d.Z.push(`/profile/apps/${t.data.data.client.id}/created`)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.DELETE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z["delete"](`oauth/apps/${t}`).then((t=>{204===t.status?e.dispatch(m.Km.ACTIONS.GET_CLIENTS).then((()=>d.Z.push("/profile/apps"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.GET_CLIENT_BY_CLIENT_ID](e,t){U(e,`oauth/apps/${t}`)},[m.Km.ACTIONS.GET_CLIENT_BY_ID](e,t){U(e,`oauth/apps/${t}/by_id`)},[m.Km.ACTIONS.GET_CLIENTS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("oauth/apps",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.Km.MUTATIONS.SET_CLIENTS,t.data.data.clients),e.commit(m.Km.MUTATIONS.SET_CLIENTS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.REVOKE_ALL_TOKENS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!1),a.Z.post(`oauth/apps/${t}/revoke`).then((t=>{"success"===t.data.status?e.commit(m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!0):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},N={[m.Km.GETTERS.CLIENT]:e=>e.client,[m.Km.GETTERS.CLIENTS]:e=>e.clients,[m.Km.GETTERS.CLIENTS_PAGINATION]:e=>e.pagination,[m.Km.GETTERS.REVOCATION_SUCCESSFUL]:e=>e.revocationSuccessful},h={[m.Km.MUTATIONS.SET_CLIENT](e,t){e.client=t},[m.Km.MUTATIONS.EMPTY_CLIENT](e){e.client={}},[m.Km.MUTATIONS.SET_CLIENTS](e,t){e.clients=t},[m.Km.MUTATIONS.SET_CLIENTS_PAGINATION](e,t){e.pagination=t},[m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL](e,t){e.revocationSuccessful=t}},z={client:{},clients:[],pagination:{},revocationSuccessful:!1},w={state:z,actions:g,getters:N,mutations:h};var f=w,v=n(2540);const{locale:C}=v.Z.global,D={[m.SY.ACTIONS.GET_APPLICATION_CONFIG](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING,!0),a.Z.get("config").then((t=>{"success"===t.data.status?e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG,t.data.data):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING,!1)))},[m.SY.ACTIONS.GET_APPLICATION_STATS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("stats/all").then((t=>{"success"===t.data.status?e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_STATS,t.data.data):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.SY.ACTIONS.UPDATE_APPLICATION_CONFIG](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.patch("config",t).then((t=>{"success"===t.data.status?(e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG,t.data.data),d.Z.push("/admin/application")):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE](e,t){document.querySelector("html")?.setAttribute("lang",t),e.commit(m.SY.MUTATIONS.UPDATE_LANG,t),C.value=t}},k={[m.SY.GETTERS.APP_CONFIG]:e=>e.application.config,[m.SY.GETTERS.APP_LOADING]:e=>e.appLoading,[m.SY.GETTERS.APP_STATS]:e=>e.application.statistics,[m.SY.GETTERS.ERROR_MESSAGES]:e=>e.errorMessages,[m.SY.GETTERS.LANGUAGE]:e=>e.language,[m.SY.GETTERS.LOCALE]:e=>e.locale};var P=n(6287);const L={[m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES](e){e.errorMessages=null},[m.SY.MUTATIONS.SET_ERROR_MESSAGES](e,t){e.errorMessages=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG](e,t){e.application.config=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING](e,t){e.appLoading=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_STATS](e,t){e.application.statistics=t},[m.SY.MUTATIONS.UPDATE_LANG](e,t){e.language=t,e.locale=P.v1[t]}};var M=n(5826);const b={root:!0,language:"en",locale:M.Z,errorMessages:null,application:{statistics:{sports:0,uploads_dir_size:0,users:0,workouts:0}},appLoading:!1},y={[m.O8.ACTIONS.GET_SPORTS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("sports").then((t=>{"success"===t.data.status?(e.commit(m.O8.MUTATIONS.SET_SPORTS,t.data.data.sports),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.O8.ACTIONS.UPDATE_SPORTS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.patch(`sports/${t.id}`,{is_active:t.isActive}).then((t=>{"success"===t.data.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},G={[m.O8.GETTERS.SPORTS]:e=>e.sports},F={[m.O8.MUTATIONS.SET_SPORTS](e,t){e.sports=t}},W={sports:[]},K={state:W,actions:y,getters:G,mutations:F};var Y=K;const x={[m.gu.ACTIONS.GET_USER_STATS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get(`stats/${t.username}/${t.filterType}`,{params:t.params}).then((t=>{"success"===t.data.status?e.commit(m.gu.MUTATIONS.UPDATE_USER_STATS,t.data.data.statistics):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},$={[m.gu.GETTERS.USER_STATS]:e=>e.statistics},B={[m.gu.MUTATIONS.UPDATE_USER_STATS](e,t){e.statistics=t},[m.gu.MUTATIONS.EMPTY_USER_STATS](e){e.statistics={}}},Z={statistics:{}},H={state:Z,actions:x,getters:$,mutations:B};var q=H;const V={[m.RT.GETTERS.USER]:e=>e.user,[m.RT.GETTERS.USERS]:e=>e.users,[m.RT.GETTERS.USERS_IS_SUCCESS]:e=>e.isSuccess,[m.RT.GETTERS.USERS_LOADING]:e=>e.loading,[m.RT.GETTERS.USERS_PAGINATION]:e=>e.pagination},j={[m.RT.MUTATIONS.UPDATE_USER](e,t){e.user=t},[m.RT.MUTATIONS.UPDATE_USER_IN_USERS](e,t){e.users=e.users.map((e=>e.username===t.username?t:e))},[m.RT.MUTATIONS.UPDATE_USERS](e,t){e.users=t},[m.RT.MUTATIONS.UPDATE_USERS_LOADING](e,t){e.loading=t},[m.RT.MUTATIONS.UPDATE_USERS_PAGINATION](e,t){e.pagination=t},[m.RT.MUTATIONS.UPDATE_IS_SUCCESS](e,t){e.isSuccess=t}},X={user:{},users:[],loading:!1,isSuccess:!1,pagination:{}},J={state:X,actions:E,getters:V,mutations:j};var Q=J,ee=n(52);const te=(e,t,n)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("workouts",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.aX.MUTATIONS[n],t.data.data.workouts),n===ee.CW.SET_USER_WORKOUTS&&e.commit(m.aX.MUTATIONS.SET_WORKOUTS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},ne={[m.aX.ACTIONS.GET_CALENDAR_WORKOUTS](e,t){e.commit(m.aX.MUTATIONS.EMPTY_CALENDAR_WORKOUTS),te(e,t,ee.CW.SET_CALENDAR_WORKOUTS)},[m.aX.ACTIONS.GET_USER_WORKOUTS](e,t){te(e,t,ee.CW.SET_USER_WORKOUTS)},[m.aX.ACTIONS.GET_TIMELINE_WORKOUTS](e,t){te(e,t,ee.CW.SET_TIMELINE_WORKOUTS)},[m.aX.ACTIONS.GET_MORE_TIMELINE_WORKOUTS](e,t){te(e,t,ee.CW.ADD_TIMELINE_WORKOUTS)},[m.aX.ACTIONS.GET_WORKOUT_DATA](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0);const n=t.segmentId?`/segment/${t.segmentId}`:"";a.Z.get(`workouts/${t.workoutId}`).then((r=>{const o=r.data.data.workouts[0];if("success"===r.data.status){if(t.segmentId&&(0===o.segments.length||!o.segments[+t.segmentId-1]))throw new Error("WORKOUT_NOT_FOUND");e.commit(m.aX.MUTATIONS.SET_WORKOUT,r.data.data.workouts[0]),r.data.data.workouts[0].with_gpx&&(a.Z.get(`workouts/${t.workoutId}/chart_data${n}`).then((t=>{"success"===t.data.status&&e.commit(m.aX.MUTATIONS.SET_WORKOUT_CHART_DATA,t.data.data.chart_data)})),a.Z.get(`workouts/${t.workoutId}/gpx${n}`).then((t=>{"success"===t.data.status&&e.commit(m.aX.MUTATIONS.SET_WORKOUT_GPX,t.data.data.gpx)})))}else e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),(0,l.S)(e,null)})).catch((t=>{e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.DELETE_WORKOUT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z["delete"](`workouts/${t.workoutId}`).then((()=>{e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE),d.Z.push("/")})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.EDIT_WORKOUT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z.patch(`workouts/${t.workoutId}`,t.data).then((()=>{e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE),e.dispatch(m.aX.ACTIONS.GET_WORKOUT_DATA,{workoutId:t.workoutId}).then((()=>{d.Z.push({name:"Workout",params:{workoutId:t.workoutId}})}))})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.ADD_WORKOUT](e,t){if(e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),!t.file)throw new Error("No file part");const n=new FormData;n.append("file",t.file),n.append("data",`{"sport_id": ${t.sport_id}, "notes": "${t.notes}"}`),a.Z.post("workouts",n,{headers:{"content-type":"multipart/form-data"}}).then((t=>{if("created"===t.data.status){e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE);const n=t.data.data.workouts[0];d.Z.push(1===t.data.data.workouts.length?`/workouts/${n.id}`:"/")}})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.ADD_WORKOUT_WITHOUT_GPX](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z.post("workouts/no_gpx",t).then((t=>{if("created"===t.data.status){e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE);const n=t.data.data.workouts[0];d.Z.push(`/workouts/${n.id}`)}})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))}},re={[m.aX.GETTERS.CALENDAR_WORKOUTS]:e=>e.calendar_workouts,[m.aX.GETTERS.TIMELINE_WORKOUTS]:e=>e.timeline_workouts,[m.aX.GETTERS.USER_WORKOUTS]:e=>e.user_workouts,[m.aX.GETTERS.WORKOUT_DATA]:e=>e.workoutData,[m.aX.GETTERS.WORKOUTS_PAGINATION]:e=>e.pagination},ae={[m.aX.MUTATIONS.ADD_TIMELINE_WORKOUTS](e,t){e.timeline_workouts=e.timeline_workouts.concat(t)},[m.aX.MUTATIONS.SET_CALENDAR_WORKOUTS](e,t){e.calendar_workouts=t},[m.aX.MUTATIONS.SET_TIMELINE_WORKOUTS](e,t){e.timeline_workouts=t},[m.aX.MUTATIONS.SET_USER_WORKOUTS](e,t){e.user_workouts=t},[m.aX.MUTATIONS.SET_WORKOUTS_PAGINATION](e,t){e.pagination=t},[m.aX.MUTATIONS.SET_WORKOUT](e,t){e.workoutData.workout=t},[m.aX.MUTATIONS.SET_WORKOUT_CHART_DATA](e,t){e.workoutData.chartData=t},[m.aX.MUTATIONS.SET_WORKOUT_GPX](e,t){e.workoutData.gpx=t},[m.aX.MUTATIONS.SET_WORKOUT_LOADING](e,t){e.workoutData.loading=t},[m.aX.MUTATIONS.EMPTY_CALENDAR_WORKOUTS](e){e.calendar_workouts=[]},[m.aX.MUTATIONS.EMPTY_WORKOUTS](e){e.calendar_workouts=[],e.user_workouts=[],e.timeline_workouts=[]},[m.aX.MUTATIONS.EMPTY_WORKOUT](e){e.workoutData={gpx:"",loading:!1,workout:{},chartData:[]}}},oe={calendar_workouts:[],timeline_workouts:[],pagination:{},user_workouts:[],workoutData:{gpx:"",loading:!1,workout:{},chartData:[]}},se={state:oe,actions:ne,getters:re,mutations:ae};var ie=se;const le={authUserModule:I,oAuthModule:f,sportsModule:Y,statsModule:q,usersModule:Q,workoutsModule:ie},ce={state:b,actions:D,getters:k,mutations:L,modules:le};var ue=ce;const de=(0,r.MT)(ue);var me=de},52:function(e,t,n){"use strict";var r,a,o;n.d(t,{CW:function(){return o},JP:function(){return a},tW:function(){return r}}),function(e){e["ADD_WORKOUT"]="ADD_WORKOUT",e["ADD_WORKOUT_WITHOUT_GPX"]="ADD_WORKOUT_WITHOUT_GPX",e["DELETE_WORKOUT"]="DELETE_WORKOUT",e["EDIT_WORKOUT"]="EDIT_WORKOUT",e["GET_CALENDAR_WORKOUTS"]="GET_CALENDAR_WORKOUTS",e["GET_USER_WORKOUTS"]="GET_USER_WORKOUTS",e["GET_TIMELINE_WORKOUTS"]="GET_TIMELINE_WORKOUTS",e["GET_MORE_TIMELINE_WORKOUTS"]="GET_MORE_TIMELINE_WORKOUTS",e["GET_WORKOUT_DATA"]="GET_WORKOUT_DATA"}(r||(r={})),function(e){e["CALENDAR_WORKOUTS"]="CALENDAR_WORKOUTS",e["TIMELINE_WORKOUTS"]="TIMELINE_WORKOUTS",e["USER_WORKOUTS"]="USER_WORKOUTS",e["WORKOUT_DATA"]="WORKOUT_DATA",e["WORKOUTS_PAGINATION"]="WORKOUTS_PAGINATION"}(a||(a={})),function(e){e["ADD_TIMELINE_WORKOUTS"]="ADD_TIMELINE_WORKOUTS",e["EMPTY_WORKOUTS"]="EMPTY_WORKOUTS",e["EMPTY_CALENDAR_WORKOUTS"]="EMPTY_CALENDAR_WORKOUTS",e["EMPTY_WORKOUT"]="EMPTY_WORKOUT",e["SET_CALENDAR_WORKOUTS"]="SET_CALENDAR_WORKOUTS",e["SET_TIMELINE_WORKOUTS"]="SET_TIMELINE_WORKOUTS",e["SET_USER_WORKOUTS"]="SET_USER_WORKOUTS",e["SET_WORKOUT"]="SET_WORKOUT",e["SET_WORKOUT_GPX"]="SET_WORKOUT_GPX",e["SET_WORKOUT_CHART_DATA"]="SET_WORKOUT_CHART_DATA",e["SET_WORKOUT_LOADING"]="SET_WORKOUT_LOADING",e["SET_WORKOUTS_PAGINATION"]="SET_WORKOUTS_PAGINATION"}(o||(o={}))},9917:function(e,t,n){"use strict";n.d(t,{o:function(){return a}});var r=n(3907);function a(){return(0,r.oR)()}},2766:function(e,t,n){"use strict";n.d(t,{Hf:function(){return a},Ne:function(){return c},fS:function(){return r},lM:function(){return d},pm:function(){return l},z_:function(){return s}});const r=["asc","desc"],a=1,o=10,s=(e,t)=>e&&"string"===typeof e&&+e>0?+e:t,i=(e,t,n)=>e&&"string"===typeof e&&t.includes(e)?e:n,l=(e,t,n,l)=>{const c=l||{},u=c.defaultSort||"asc",d={};return d.page=s(e.page,a),d.per_page=s(e.per_page,o),d.order=i(e.order,r,u),d.order_by=i(e.order_by,t,n),"string"===typeof e.q?d.q=e.q:delete d.q,d},c=["from","to","ave_speed_from","ave_speed_to","max_speed_from","max_speed_to","distance_from","distance_to","duration_from","duration_to","sport_id"],u=(e,t=1)=>Array.from({length:e-t+1},((e,n)=>t+n)),d=(e,t)=>{if(e<0)return[];if(e<9)return u(e);let n=[1,2];return t<4?n=n.concat([3,4,5]):t<6?n=n.concat(u(t+2,3)):(n=n.concat(["..."]),t=e-2&&n[n.length-1]{switch(e){case"week":return(0,r.Z)(t,{weekStartsOn:n?1:0});case"year":return(0,a.Z)(t);case"month":return(0,o.Z)(t);default:throw new Error(`Invalid duration, expected: "week", "month", "year", got: "${e}"`)}},p=(e,t)=>{switch(e){case"week":return(0,s.Z)(t,7);case"year":return(0,i.Z)(t,1);case"month":return(0,l.Z)(t,1);default:throw new Error(`Invalid duration, expected: "week", "month", "year", got: "${e}"`)}},A=(e,t)=>(0,m.utcToZonedTime)(new Date(e),t),O=(e,t)=>{const n=(0,o.Z)(e),a=(0,c.Z)(e),s=t?1:0;return{start:(0,r.Z)(n,{weekStartsOn:s}),end:(0,u.Z)(a,{weekStartsOn:s})}},R=(e,t=null,n=null)=>(t||(t="yyyy/MM/dd"),t=g(t,S.value),n||(n="HH:mm"),{workout_date:(0,d.Z)(e,t,{locale:E.v1[S.value]}),workout_time:(0,d.Z)(e,n)}),I=["MM/dd/yyyy","dd/MM/yyyy","yyyy-MM-dd","date_string"],U={de:"do MMM yyyy",en:"MMM. do, yyyy",fr:"d MMM yyyy"},g=(e,t)=>"date_string"===e?U[t]:e,N=(e,t,n,r=!0,a=null)=>(a||(a=S.value),(0,d.Z)(A(e,t),`${g(n,a)}${r?" HH:mm":""}`,{locale:E.v1[a]})),h=(e,t,n=null)=>{const r=n||S.value,a=[];return I.map((n=>{const o=g(n,r);a.push({label:`${o} - ${N(e,t,o,!1,r)}`,value:n})})),a}},8966:function(e,t,n){"use strict";n.d(t,{Z:function(){return a},j:function(){return o}});const r=["bytes","KB","MB","GB","TB"],a=(e,t=!0)=>{const n=Math.floor(Math.log(e)/Math.log(1024));if(!e)return t?"0 bytes":{size:"0",suffix:"bytes"};const a=(e/Math.pow(1024,n)).toFixed(1),o=r[n];return t?`${a}${o}`:{size:a,suffix:o}},o=e=>{const t=e/1048576;return+t.toFixed(2)}},2024:function(e,t,n){"use strict";n.d(t,{S:function(){return o},k:function(){return a}});var r=n(5801);const a=()=>"/api/",o=(e,t,n="UNKNOWN")=>{if(t&&"canceled"===t.message)return;if(401===t?.response?.status&&"invalid_token"===t.response.data.error)return localStorage.removeItem("authToken"),void e.dispatch(r.YN.ACTIONS.CHECK_AUTH_USER);const a=t?t.response?413===t.response.status?"file size is greater than the allowed size":t.response.data.message?t.response.data.message:n:t.message?t.message:n:n;e.commit(r.SY.MUTATIONS.SET_ERROR_MESSAGES,a.includes("\n")?a.split("\n").filter((e=>""!==e)).map((e=>`api.ERROR.${e}`)):`api.ERROR.${a}`)}},6287:function(e,t,n){"use strict";n.d(t,{mT:function(){return u},v1:function(){return i},zK:function(){return l}});var r=n(879),a=n(5826),o=n(5830),s=n(2540);const i={de:r.Z,en:a.Z,fr:o.Z},l={de:"Deutsch",en:"English",fr:"Français"},{availableLocales:c}=s.Z.global,u=c.map((e=>({label:l[e],value:e})))},631:function(e,t,n){"use strict";n.d(t,{CM:function(){return l},PA:function(){return i},Yx:function(){return a},Zo:function(){return r},xH:function(){return s}});const r={"Cycling (Sport)":"#4c9792","Cycling (Transport)":"#88af98","Cycling (Virtual)":"#64a360",Hiking:"#bb757c","Mountain Biking":"#d4b371","Mountain Biking (Electric)":"#fc9d6f",Rowing:"#fcce72",Running:"#835b83","Skiing (Alpine)":"#67a4bd","Skiing (Cross Country)":"#9498d0",Snowshoes:"#5780a8",Trail:"#09a98a",Walking:"#838383"},a=e=>{const t={};return e.map((e=>t[e.id]=e.color?e.color:r[e.label])),t},o=(e,t)=>{const n=e.translatedLabel.toLowerCase(),r=t.translatedLabel.toLowerCase();return n>r?1:ne.filter((e=>"all"===n||(r.includes(e.id)||e[n]))).map((e=>({...e,translatedLabel:t(`sports.${e.label}.LABEL`)}))).sort(o),i=(e,t)=>t.filter((t=>t.id===e.sport_id)).map((e=>e.label))[0],l=(e,t)=>t.filter((t=>t.id===e.sport_id)).map((e=>e.color))[0]},9318:function(e,t,n){"use strict";n.d(t,{FN:function(){return C},aZ:function(){return v},v1:function(){return f}});n(7658);var r=n(4850),a=n(8148),o=n(9319),s=n(584),i=n(4559),l=n(3703),c=n(876),u=n(7090),d=n(4135),m=n(1593),_=n(7982),E=n(3500),S=n(1640),T=n(2540),p=n(6558),A=n(6287),O=n(631),R=n(3649);const{locale:I}=T.Z.global,U={week:{api:"yyyy-MM-dd",chart:"MM/dd/yyyy"},month:{api:"yyyy-MM",chart:"MM/yyyy"},year:{api:"yyyy",chart:"yyyy"}},g=["average_speed","nb_workouts","total_duration","total_distance","total_ascent","total_descent"],N=(e,t)=>{const n=[];for(let r=(0,p.Nh)(e.duration,e.start,t);r<=e.end;r=(0,p.xA)(e.duration,r))n.push(r);return n},h=(e,t,n=!1)=>{const r={label:e,backgroundColor:[t],data:[]};return n&&(r.type="line",r.borderColor=[t],r.spanGaps=!0),r},z=e=>{const t={average_speed:[],nb_workouts:[],total_distance:[],total_duration:[],total_ascent:[],total_descent:[]};return e.map((e=>{const n=e.color?e.color:O.Zo[e.label];t.average_speed.push(h(e.label,n,!0)),t.nb_workouts.push(h(e.label,n)),t.total_distance.push(h(e.label,n)),t.total_duration.push(h(e.label,n)),t.total_ascent.push(h(e.label,n)),t.total_descent.push(h(e.label,n))})),t},w=(e,t,n)=>{switch(e){case"average_speed":case"total_distance":case"total_ascent":case"total_descent":return(0,R.f3)(["average_speed","total_distance"].includes(e)?"km":"m",t,n);default:case"nb_workouts":case"total_duration":return t}},f=(e,t,n,a,o,s,i)=>{const l=N(e,t),c=U[e.duration],u=n.filter((e=>a.includes(e.id))),d=[],m=z(u),_={};return u.map((e=>_[e.label]=e.id)),l.map((t=>{const n=(0,r.Z)(t,c.api),a=(0,r.Z)(t,"week"===e.duration?(0,p.mh)(i,I.value):c.chart,{locale:A.v1[I.value]});d.push(a),g.map((e=>{m[e].map((t=>{t.data.push(n in o&&_[t.label]in o[n]?w(e,o[n][_[t.label]][e],s):"average_speed"===e?null:0)}))}))})),{labels:d,datasets:m}},v=(e,t,n)=>{const r=n?1:0,m="year"===t?(0,a.Z)((0,o.Z)(e,9)):"week"===t?(0,s.Z)((0,i.Z)(e,2),{weekStartsOn:r}):(0,l.Z)((0,i.Z)(e,11)),_="year"===t?(0,c.Z)(e):"week"===t?(0,u.Z)(e,{weekStartsOn:r}):(0,d.Z)(e);return{duration:t,end:_,start:m}},C=(e,t,n)=>{const{duration:r,start:T,end:p}=e,A=n?1:0;return{duration:r,end:"year"===r?(0,c.Z)(t?(0,o.Z)(p,1):(0,m.Z)(p,1)):"week"===r?(0,u.Z)(t?(0,_.Z)(p,1):(0,E.Z)(p,1),{weekStartsOn:A}):(0,d.Z)(t?(0,i.Z)(p,1):(0,S.Z)(p,1)),start:"year"===r?(0,a.Z)(t?(0,o.Z)(T,1):(0,m.Z)(T,1)):"week"===r?(0,s.Z)(t?(0,_.Z)(T,1):(0,E.Z)(T,1),{weekStartsOn:A}):(0,l.Z)(t?(0,i.Z)(T,1):(0,S.Z)(T,1))}}},3649:function(e,t,n){"use strict";n.d(t,{Dl:function(){return r},f3:function(){return s},sC:function(){return o}});const r={ft:{unit:"ft",system:"imperial",multiplier:1,defaultTarget:"m"},mi:{unit:"mi",system:"imperial",multiplier:5280,defaultTarget:"km"},m:{unit:"m",system:"metric",multiplier:1,defaultTarget:"ft"},km:{unit:"m",system:"metric",multiplier:1e3,defaultTarget:"mi"}},a={metric:{imperial:3.280839895,metric:1},imperial:{metric:1/3.280839895,imperial:1}},o=(e,t,n,o=3)=>{const s=r[t],i=r[n],l=e*s.multiplier*a[s.system][i.system]/i.multiplier;return null!==o?parseFloat(l.toFixed(o)):l},s=(e,t,n)=>{const a=n?r[e].defaultTarget:e;return n?o(t,e,a,2):t}},3768:function(e,t,n){"use strict";n.d(t,{BN:function(){return o},EX:function(){return a},eR:function(){return s}});n(7658);var r=n(3649);const a=(e,t,n)=>{const a={speed:{label:t("workouts.SPEED"),backgroundColor:["#FFFFFF"],borderColor:["#8884d8"],borderWidth:2,data:[],yAxisID:"ySpeed"},elevation:{label:t("workouts.ELEVATION"),backgroundColor:["#e5e5e5"],borderColor:["#cccccc"],borderWidth:1,fill:!0,data:[],yAxisID:"yElevation"}},o=[],s=[],i=[];return e.map((e=>{o.push(e.distance),s.push(e.duration),a.speed.data.push((0,r.f3)("km",e.speed,n)),a.elevation.data.push((0,r.f3)("m",e.elevation,n)),i.push({latitude:e.latitude,longitude:e.longitude})})),{distance_labels:o,duration_labels:s,datasets:a,coordinates:i}},o=e=>{const t=e.length;if(0===t)return{};const n={};return e.map((e=>{n[e.sport_id]||(n[e.sport_id]={count:0,percentage:0}),n[e.sport_id].count+=1,n[e.sport_id].percentage=n[e.sport_id].count/t})),n},s={order:"desc",order_by:"workout_date"}},2531:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(6252);const a={class:"card"},o={class:"card-title"},s={class:"card-content"};function i(e,t){return(0,r.wg)(),(0,r.iD)("div",a,[(0,r._)("div",o,[(0,r.WI)(e.$slots,"title")]),(0,r._)("div",s,[(0,r.WI)(e.$slots,"content")])])}var l=n(3744);const c={},u=(0,l.Z)(c,[["render",i]]);var d=u},8626:function(e,t,n){"use strict";n.d(t,{Z:function(){return T}});var r=n(6252),a=n(3577),o=n(2262);const s={class:"table-selects"},i=["value"],l=["value"],c=["value"],u=["value"],d=["value"],m=["value"];var _=(0,r.aZ)({__name:"FilterSelects",props:{order_by:null,query:null,sort:null,message:null},emits:["updateSelect"],setup(e,{emit:t}){const n=e,{order_by:_,query:E,sort:S,message:T}=(0,o.BK)(n),p=[10,25,50,100];function A(e){t("updateSelect",e.target.id,e.target.value)}return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.ORDER_BY.LABEL"))+": ",1),(0,r._)("select",{name:"order_by",id:"order_by",value:(0,o.SU)(E).order_by,onChange:A},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(_),(t=>((0,r.wg)(),(0,r.iD)("option",{value:t,key:t},(0,a.zw)(e.$t(`${(0,o.SU)(T)}.${t.toUpperCase()}`)),9,l)))),128))],40,i)]),(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.ORDER.LABEL"))+": ",1),(0,r._)("select",{name:"order",id:"order",value:(0,o.SU)(E).order,onChange:A},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(S),(t=>((0,r.wg)(),(0,r.iD)("option",{value:t,key:t},(0,a.zw)(e.$t(`common.SELECTS.ORDER.${t.toUpperCase()}`)),9,u)))),128))],40,c)]),(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.PER_PAGE.LABEL"))+": ",1),(0,r._)("select",{name:"per_page",id:"per_page",value:(0,o.SU)(E).per_page,onChange:A},[((0,r.wg)(),(0,r.iD)(r.HY,null,(0,r.Ko)(p,(e=>(0,r._)("option",{value:e,key:e},(0,a.zw)(e),9,m))),64))],40,d)])]))}}),E=n(3744);const S=(0,E.Z)(_,[["__scopeId","data-v-72463173"]]);var T=S},7167:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(6252);const a={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 -51 512 512"},o=(0,r.uE)('',1),s=[o];function i(e,t,n,o,i,l){return(0,r.wg)(),(0,r.iD)("svg",a,s)}var l={name:"ErrorImg"},c=n(3744);const u=(0,c.Z)(l,[["render",i]]);var d=u},8273:function(e,t,n){"use strict";n.d(t,{Z:function(){return E}});var r=n(6252),a=n(2262),o=(n(7658),n(3577));const s={id:"error"},i={class:"error-content"};var l=(0,r.aZ)({__name:"Error",props:{title:null,message:null,buttonText:null,path:{default:"/"}},setup(e){const t=e,{buttonText:n,title:l,message:c,path:u}=(0,a.BK)(t);return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[(0,r._)("div",i,[(0,r._)("h1",null,(0,o.zw)((0,a.SU)(l)),1),(0,r._)("p",null,(0,o.zw)((0,a.SU)(c)),1),(0,a.SU)(n)?((0,r.wg)(),(0,r.iD)("button",{key:0,onClick:t[0]||(t[0]=t=>e.$router.push((0,a.SU)(u))),class:"upper"},(0,o.zw)((0,a.SU)(n)),1)):(0,r.kq)("",!0)])]))}}),c=n(3744);const u=(0,c.Z)(l,[["__scopeId","data-v-b60bfa80"]]);var d=u,m=(0,r.aZ)({__name:"NotFound",props:{target:{default:"PAGE"}},setup(e){const t=e,{target:n}=(0,a.BK)(t),o=(0,a.iH)(),s=(0,a.iH)(!1);function i(){o.value=setTimeout((()=>{s.value=!0}),500)}return(0,r.bv)((()=>i())),(0,r.Ah)((()=>{o.value&&clearTimeout(o.value)})),(e,t)=>s.value?((0,r.wg)(),(0,r.j4)(d,{key:0,title:"404",message:e.$t(`error.NOT_FOUND.${(0,a.SU)(n)}`),"button-text":e.$t("common.HOME")},null,8,["message","button-text"])):(0,r.kq)("",!0)}});const _=m;var E=_},5020:function(e,t,n){"use strict";n.d(t,{Z:function(){return T}});var r=n(6252),a=n(3577),o=n(2262),s=n(2766);const i=e=>((0,r.dD)("data-v-3a9a4a65"),e=e(),(0,r.Cn)(),e),l={class:"pagination-center","aria-label":"navigation"},c={class:"pagination"},u=i((()=>(0,r._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1))),d={key:0},m=i((()=>(0,r._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1)));var _=(0,r.aZ)({__name:"Pagination",props:{pagination:null,path:null,query:null},setup(e){const t=e,{pagination:n,path:i,query:_}=(0,o.BK)(t);function E(e,t){const n=Object.assign({},_.value);return n.page=t?e+t:e,n}return(e,t)=>{const _=(0,r.up)("router-link");return(0,r.wg)(),(0,r.iD)("nav",l,[(0,r._)("ul",c,[(0,r._)("li",{class:(0,a.C_)(["page-prev",{disabled:!(0,o.SU)(n).has_prev}])},[(0,r.Wm)(_,{class:"page-link",to:{path:(0,o.SU)(i),query:E((0,o.SU)(n).page,-1)},disabled:!(0,o.SU)(n).has_prev},{default:(0,r.w5)((({navigate:t})=>[(0,r.WI)(e.$slots,"default",{onClick:e=>(0,o.SU)(n).has_next?t:null},(()=>[(0,r.Uk)((0,a.zw)(e.$t("api.PAGINATION.PREVIOUS"))+" ",1),u]))])),_:3},8,["to","disabled"])],2),((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(s.lM)((0,o.SU)(n).pages,(0,o.SU)(n).page),(e=>((0,r.wg)(),(0,r.iD)("li",{key:e,class:(0,a.C_)(["page",{active:e===(0,o.SU)(n).page}])},["..."===e?((0,r.wg)(),(0,r.iD)("span",d," ... ")):((0,r.wg)(),(0,r.j4)(_,{key:1,class:"page-link",to:{path:(0,o.SU)(i),query:E(+e)}},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e),1)])),_:2},1032,["to"]))],2)))),128)),(0,r._)("li",{class:(0,a.C_)(["page-next",{disabled:!(0,o.SU)(n).has_next}])},[(0,r.Wm)(_,{class:"page-link",to:{path:(0,o.SU)(i),query:E((0,o.SU)(n).page,1)},disabled:!(0,o.SU)(n).has_next},{default:(0,r.w5)((({navigate:t})=>[(0,r.WI)(e.$slots,"default",{onClick:e=>(0,o.SU)(n).has_next?t:null},(()=>[(0,r.Uk)((0,a.zw)(e.$t("api.PAGINATION.NEXT"))+" ",1),m]))])),_:3},8,["to","disabled"])],2)])])}}}),E=n(3744);const S=(0,E.Z)(_,[["__scopeId","data-v-3a9a4a65"]]);var T=S},8403:function(e,t,n){"use strict";n.d(t,{Z:function(){return v}});var r=n(6252),a=n(2262),o=n(9963),s=n(3577),i=n(4366),l=n(5801),c=n(9917);const u=async e=>{const t=await n.e(881).then(n.bind(n,410)),r=await n.e(881).then(n.bind(n,8288)),a=await n.e(881).then(n.bind(n,6947)),o=await n.e(881).then(n.bind(n,8056)),s={de:o,en:r,fr:a,nb:r},l=s[e],c={graphs:t.default.adjacencyGraphs,dictionary:{...t.default.dictionary,...l.default.dictionary}};i.Mu.setOptions(c)},d=e=>{switch(e){case 2:return"AVERAGE";case 3:return"GOOD";case 4:return"STRONG";default:return"WEAK"}},m={class:"password-strength"},_=["value"],E={key:0,class:"password-strength-details"},S={class:"password-strength-value"},T={key:0,class:"info-box"},p={class:"password-feedback"};var A=(0,r.aZ)({__name:"PasswordStength",props:{password:null},setup(e){const t=e,{password:n}=(0,a.BK)(t),o=(0,c.o)(),A=(0,r.Fl)((()=>o.getters[l.SY.GETTERS.LANGUAGE])),O=(0,r.Fl)((()=>o.getters[l.YN.GETTERS.IS_SUCCESS])),R=(0,a.iH)(0),I=(0,a.iH)(""),U=(0,a.iH)([]),g=(0,a.iH)("0% 100%");function N(e){const t=(0,i.tu)(e);R.value=t.score,I.value=d(R.value),U.value=t.feedback.suggestions,g.value=100*R.value/4+"% 100%"}return(0,r.wF)((async()=>await u(A.value))),(0,r.YP)((()=>A.value),(async e=>{await u(e)})),(0,r.YP)((()=>n.value),(async e=>{O.value?I.value="":N(e)})),(e,t)=>((0,r.wg)(),(0,r.iD)("div",m,[(0,r._)("input",{class:(0,s.C_)(["password-slider",`strength-${R.value}`]),style:(0,s.j5)({backgroundSize:g.value}),type:"range",value:R.value,min:"0",max:"4",step:"1"},null,14,_),I.value?((0,r.wg)(),(0,r.iD)("div",E,[(0,r._)("span",S,(0,s.zw)(e.$t("user.PASSWORD_STRENGTH.LABEL"))+": "+(0,s.zw)(e.$t(`user.PASSWORD_STRENGTH.${I.value}`)),1),U.value.length>0?((0,r.wg)(),(0,r.iD)("div",T,[(0,r._)("ul",p,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)(U.value,(t=>((0,r.wg)(),(0,r.iD)("li",{key:t},(0,s.zw)(e.$t(`user.PASSWORD_STRENGTH.SUGGESTIONS.${t}`)),1)))),128))])])):(0,r.kq)("",!0)])):(0,r.kq)("",!0)]))}}),O=n(3744);const R=(0,O.Z)(A,[["__scopeId","data-v-74e71df5"]]);var I=R;const U=e=>((0,r.dD)("data-v-5a126514"),e=e(),(0,r.Cn)(),e),g={class:"password-input"},N=["id","disabled","placeholder","required","type"],h={key:0,class:"form-info"},z=U((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1)));var w=(0,r.aZ)({__name:"PasswordInput",props:{checkStrength:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},id:{default:"password"},password:{default:""},placeholder:null,required:{type:Boolean,default:!1}},emits:["updatePassword","passwordError"],setup(e,{emit:t}){const n=e,{checkStrength:i,disabled:l,id:c,password:u,placeholder:d,required:m}=(0,a.BK)(n),_=(0,a.iH)(!1),E=(0,a.iH)("");function S(){_.value=!_.value}function T(e){t("updatePassword",e.target.value)}function p(){t("passwordError")}return(0,r.YP)((()=>u.value),(e=>{""===e&&(E.value="")})),(e,t)=>((0,r.wg)(),(0,r.iD)("div",g,[(0,r.wy)((0,r._)("input",{id:(0,a.SU)(c),disabled:(0,a.SU)(l),placeholder:(0,a.SU)(d),required:(0,a.SU)(m),type:_.value?"text":"password","onUpdate:modelValue":t[0]||(t[0]=e=>E.value=e),minlength:"8",onInput:T,onInvalid:p},null,40,N),[[o.YZ,E.value]]),(0,r._)("div",{class:"show-password",onClick:S},[(0,r.Uk)((0,s.zw)(e.$t(`user.${_.value?"HIDE":"SHOW"}_PASSWORD`))+" ",1),(0,r._)("i",{class:(0,s.C_)(["fa","fa-eye"+(_.value?"-slash":"")]),"aria-hidden":"true"},null,2)]),(0,a.SU)(i)?((0,r.wg)(),(0,r.iD)("div",h,[z,(0,r.Uk)(" "+(0,s.zw)(e.$t("user.PASSWORD_INFO")),1)])):(0,r.kq)("",!0),(0,a.SU)(i)?((0,r.wg)(),(0,r.j4)(I,{key:1,password:E.value},null,8,["password"])):(0,r.kq)("",!0)]))}});const f=(0,O.Z)(w,[["__scopeId","data-v-5a126514"]]);var v=f},2056:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(6252),a=n(3577),o=n(2262),s=n(2024);const i=(0,r._)("div",{class:"map-attribution"},[(0,r._)("span",{class:"map-attribution-text"},"©"),(0,r._)("a",{class:"map-attribution-text",href:"https://www.openstreetmap.org/copyright",target:"_blank",rel:"noopener noreferrer"}," OpenStreetMap ")],-1);var l=(0,r.aZ)({__name:"StaticMap",props:{workout:null,displayHover:{type:Boolean,default:!1}},setup(e){const t=e,{displayHover:n}=(0,o.BK)(t),l=`${(0,s.k)()}workouts/map/${t.workout.map}`;return(e,t)=>((0,r.wg)(),(0,r.iD)("div",{class:(0,a.C_)(["static-map",{"display-hover":(0,o.SU)(n)}])},[(0,o.SU)(n)?((0,r.wg)(),(0,r.iD)("img",{key:0,src:l,alt:""})):((0,r.wg)(),(0,r.iD)("div",{key:1,class:"bg-map-image",style:(0,a.j5)({backgroundImage:`url(${l})`})},null,4)),i],2))}});const c=l;var u=c},3170:function(e,t,n){"use strict";n.d(t,{Z:function(){return y}});var r=n(6252),a=n(3577);const o={class:"start-chart"},s={key:0},i={key:1},l={class:"chart-radio"},c=["checked"],u=["checked"],d=["checked"],m={key:0},_=["checked"],E={key:1},S=["checked"],T={key:2},p=["checked"];function A(e,t,n,A,O,R){const I=(0,r.up)("Chart");return(0,r.wg)(),(0,r.iD)("div",o,[e.hideChartIfNoData&&e.emptyStats?((0,r.wg)(),(0,r.iD)("div",s,(0,a.zw)(e.$t("workouts.NO_WORKOUTS")),1)):((0,r.wg)(),(0,r.iD)("div",i,[(0,r._)("div",l,[(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"total_distance",checked:"total_distance"===e.displayedData,onClick:t[0]||(t[0]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,c),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DISTANCE")),1)]),(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"total_duration",checked:"total_duration"===e.displayedData,onClick:t[1]||(t[1]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,u),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DURATION")),1)]),(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"nb_workouts",checked:"nb_workouts"===e.displayedData,onClick:t[2]||(t[2]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,d),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.WORKOUT",2)),1)]),e.fullStats?((0,r.wg)(),(0,r.iD)("label",m,[(0,r._)("input",{type:"radio",name:"average_speed",checked:"average_speed"===e.displayedData,onClick:t[3]||(t[3]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,_),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.AVERAGE_SPEED")),1)])):(0,r.kq)("",!0),e.fullStats?((0,r.wg)(),(0,r.iD)("label",E,[(0,r._)("input",{type:"radio",name:"total_ascent",checked:"total_ascent"===e.displayedData,onClick:t[4]||(t[4]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,S),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.ASCENT")),1)])):(0,r.kq)("",!0),e.fullStats?((0,r.wg)(),(0,r.iD)("label",T,[(0,r._)("input",{type:"radio",name:"total_descent",checked:"total_descent"===e.displayedData,onClick:t[5]||(t[5]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,p),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DESCENT")),1)])):(0,r.kq)("",!0)]),e.labels.length>0?((0,r.wg)(),(0,r.j4)(I,{key:0,datasets:e.datasets,labels:e.labels,displayedData:e.displayedData,displayedSportIds:e.displayedSportIds,fullStats:e.fullStats,useImperialUnits:e.user.imperial_units},null,8,["datasets","labels","displayedData","displayedSportIds","fullStats","useImperialUnits"])):(0,r.kq)("",!0)]))])}var O=n(4850),R=n(2262);const I={class:"chart"};function U(e,t,n,a,o,s){const i=(0,r.up)("BarChart");return(0,r.wg)(),(0,r.iD)("div",I,[(0,r.Wm)(i,(0,r.dG)(e.barChartProps,{class:"bar-chart"}),null,16)])}var g=n(6518),N=n(9150);const h=(e,t=!1)=>{let n="0";t&&(n=String(Math.floor(e/86400)),e%=86400);const r=String(Math.floor(e/3600)).padStart(2,"0");e%=3600;const a=String(Math.floor(e/60)).padStart(2,"0"),o=String(e%60).padStart(2,"0");return t?`${"0"===n?"":`${n}d `}${"00"===r?"":`${r}h `}${a}m ${o}s`:`${"00"===r?"":`${r}:`}${a}:${o}`};var z=n(3649);const w=(e,t,n,r=!0,a="km")=>{const o=n?z.Dl[a].defaultTarget:a;switch(e){case"average_speed":return`${t.toFixed(2)} ${o}/h`;case"total_duration":return h(t,r);case"total_distance":case"total_ascent":case"total_descent":return`${t.toFixed(2)} ${o}`;default:return t.toString()}};var f=(0,r.aZ)({name:"Chart",components:{BarChart:g.vz},props:{datasets:{type:Object,required:!0},labels:{type:Object,required:!0},displayedData:{type:String,required:!0},displayedSportIds:{type:Array,required:!0},fullStats:{type:Boolean,required:!0},useImperialUnits:{type:Boolean,required:!0}},setup(e){const{t:t}=(0,N.QT)();function n(e){return isNaN(e)?0:+e}function a(e,t){return n(e)+n(t)}function o(e){return["total_ascent","total_descent"].includes(e)?"m":"km"}const s=(0,r.Fl)((()=>({labels:e.labels,datasets:JSON.parse(JSON.stringify(e.datasets))}))),i=(0,r.Fl)((()=>({responsive:!0,maintainAspectRatio:!0,animation:!1,layout:{padding:{top:e.fullStats?40:22}},scales:{x:{stacked:!0,grid:{drawOnChartArea:!1}},y:{stacked:"average_speed"!==e.displayedData,grid:{drawOnChartArea:!1},ticks:{maxTicksLimit:6,callback:function(t){return w(e.displayedData,+t,e.useImperialUnits,!1,o(e.displayedData))}},afterFit:function(t){t.width=e.fullStats?90:60}}},plugins:{datalabels:{anchor:"end",align:"end",color:function(t){return"average_speed"===e.displayedData&&t.dataset.backgroundColor?t.dataset.backgroundColor[0]:"#666666"},rotation:function(t){return e.fullStats&&t.chart.chartArea.width<580?310:0},display:function(t){return!(e.fullStats&&t.chart.chartArea.width<300)&&("average_speed"!==e.displayedData||1==e.displayedSportIds.length&&"auto")},formatter:function(t,n){if("average_speed"===e.displayedData)return w(e.displayedData,t,e.useImperialUnits,!1);{const t=n.chart.data.datasets.map((e=>e.data[n.dataIndex])).reduce(((e,t)=>a(e,t)),0);return n.datasetIndex===e.displayedSportIds.length-1&&t>0?w(e.displayedData,t,e.useImperialUnits,!1,o(e.displayedData)):null}}},legend:{display:!1},tooltip:{interaction:{intersect:!0,mode:"index",position:"average_speed"===e.displayedData?"nearest":"average"},filter:function(e){return"0"!==e.formattedValue},callbacks:{label:function(n){let r=t(`sports.${n.dataset.label}.LABEL`)||"";return r&&(r+=": "),null!==n.parsed.y&&(r+=w(e.displayedData,n.parsed.y,e.useImperialUnits,!0,o(e.displayedData))),r},footer:function(n){if("average_speed"===e.displayedData)return"";let r=0;return n.map((e=>{r+=e.parsed.y})),`${t("common.TOTAL")}: `+w(e.displayedData,r,e.useImperialUnits,!0,o(e.displayedData))}}}}}))),{barChartProps:l}=(0,g.xZ)({chartData:s,options:i});return{barChartProps:l}}}),v=n(3744);const C=(0,v.Z)(f,[["render",U]]);var D=C,k=n(5801),P=n(9917),L=n(9318),M=(0,r.aZ)({name:"UserMonthStats",components:{Chart:D},props:{sports:{type:Object,required:!0},user:{type:Object,required:!0},chartParams:{type:Object,required:!0},displayedSportIds:{type:Array,default:()=>[]},fullStats:{type:Boolean,default:!1},hideChartIfNoData:{type:Boolean,default:!1}},setup(e){const t=(0,P.o)(),n=(0,R.iH)("total_distance"),a=(0,r.Fl)((()=>t.getters[k.gu.GETTERS.USER_STATS])),o=(0,r.Fl)((()=>(0,L.v1)(e.chartParams,e.user.weekm,e.sports,e.displayedSportIds,a.value,e.user.imperial_units,e.user.date_format)));function s(n){t.dispatch(k.gu.ACTIONS.GET_USER_STATS,{username:e.user.username,filterType:"by_time",params:n})}function i(e){n.value=e.target.name}function l(e,t){return{from:(0,O.Z)(e.start,"yyyy-MM-dd"),to:(0,O.Z)(e.end,"yyyy-MM-dd"),time:"week"===e.duration?"week"+(t.weekm?"m":""):e.duration}}return(0,r.wF)((()=>s(l(e.chartParams,e.user)))),(0,r.YP)((()=>e.chartParams),(async t=>{s(l(t,e.user))})),{datasets:(0,r.Fl)((()=>o.value.datasets[n.value])),labels:(0,r.Fl)((()=>o.value.labels)),emptyStats:(0,r.Fl)((()=>0===Object.keys(a.value).length)),displayedData:n,updateDisplayData:i}}});const b=(0,v.Z)(M,[["render",A],["__scopeId","data-v-d5e9b348"]]);var y=b},2179:function(e,t,n){"use strict";n.d(t,{Z:function(){return N}});var r=n(6252),a=n(2262),o=n(3577),s=n(6595),i=n(5801),l=n(9917);const c={class:"box user-header"},u={class:"user-details"},d={class:"user-name"},m={class:"user-stats"},_={class:"user-stat"},E={class:"stat-number"},S={class:"stat-label"},T={class:"user-stat"},p={class:"stat-label"},A={class:"user-stat hide-small"},O={class:"stat-number"},R={class:"stat-label"};var I=(0,r.aZ)({__name:"UserHeader",props:{user:null},setup(e){const t=e,{user:n}=(0,a.BK)(t),I=(0,l.o)(),U=(0,r.Fl)((()=>I.getters[i.YN.GETTERS.AUTH_USER_PROFILE]));return(e,t)=>{const i=(0,r.up)("Distance");return(0,r.wg)(),(0,r.iD)("div",c,[(0,r.Wm)(s.Z,{user:(0,a.SU)(n)},null,8,["user"]),(0,r._)("div",u,[(0,r._)("div",d,(0,o.zw)((0,a.SU)(n).username),1),(0,r._)("div",m,[(0,r._)("div",_,[(0,r._)("span",E,(0,o.zw)((0,a.SU)(n).nb_workouts),1),(0,r._)("span",S,(0,o.zw)(e.$t("workouts.WORKOUT",(0,a.SU)(n).nb_workouts)),1)]),(0,r._)("div",T,[(0,r.Wm)(i,{distance:(0,a.SU)(n).total_distance,unitFrom:"km",digits:0,displayUnit:!1,useImperialUnits:(0,a.SU)(U).imperial_units},null,8,["distance","useImperialUnits"]),(0,r._)("span",p,(0,o.zw)((0,a.SU)(U).imperial_units?"miles":"km"),1)]),(0,r._)("div",A,[(0,r._)("span",O,(0,o.zw)((0,a.SU)(n).nb_sports),1),(0,r._)("span",R,(0,o.zw)(e.$t("workouts.SPORT",(0,a.SU)(n).nb_sports)),1)])])])])}}}),U=n(3744);const g=(0,U.Z)(I,[["__scopeId","data-v-20291951"]]);var N=g},1585:function(e,t,n){"use strict";n.d(t,{Z:function(){return f}});n(7658);var r=n(6252),a=n(2262),o=n(3577),s=n(9963),i=n(4850),l=n(5801),c=n(9917),u=n(6558),d=n(6287);const m={id:"user-infos",class:"description-list"},_={key:1,class:"info-box success-message"},E={key:4,class:"email-form form-box"},S={class:"form-items",for:"email"},T={class:"form-items",for:"email"},p={class:"form-buttons"},A={class:"confirm",type:"submit"},O=["onClick"],R={key:5},I={class:"user-bio"},U={key:0,class:"profile-buttons"},g=["onClick"],N={key:1,class:"profile-buttons"};var h=(0,r.aZ)({__name:"UserInfos",props:{user:null,fromAdmin:{type:Boolean,default:!1}},setup(e){const t=e,n=(0,c.o)(),{user:h,fromAdmin:z}=(0,a.BK)(t),w=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.LANGUAGE])),f=(0,r.Fl)((()=>n.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),v=(0,r.Fl)((()=>t.user.created_at?(0,u.p6)(t.user.created_at,f.value.timezone,f.value.date_format):"")),C=(0,r.Fl)((()=>t.user.birth_date?(0,i.Z)(new Date(t.user.birth_date),`${(0,u.mh)(f.value.date_format,w.value)}`,{locale:d.v1[w.value]}):"")),D=(0,r.Fl)((()=>n.getters[l.RT.GETTERS.USERS_IS_SUCCESS])),k=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),P=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.APP_CONFIG])),L=(0,a.iH)(""),M=(0,a.iH)(!1),b=(0,a.iH)(!1),y=(0,a.iH)(""),G=(0,a.iH)("");function F(e){L.value=e,""!==e&&n.commit(l.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1)}function W(e){n.dispatch(l.RT.ACTIONS.DELETE_USER_ACCOUNT,{username:e})}function K(e){G.value="password-reset",n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,resetPassword:!0})}function Y(e){n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,activate:!0})}function x(){Z(),y.value=h.value.email_to_confirm?h.value.email_to_confirm:"",b.value=!0,G.value="email-update"}function $(){y.value="",b.value=!1}function B(e){n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,new_email:y.value})}function Z(){n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),n.commit(l.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1),G.value=""}return(0,r.Ah)((()=>Z())),(0,r.YP)((()=>D.value),(e=>{e&&(F(""),$())})),(e,t)=>{const n=(0,r.up)("Modal"),i=(0,r.up)("AlertMessage"),l=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",m,[L.value?((0,r.wg)(),(0,r.j4)(n,{key:0,title:e.$t("common.CONFIRMATION"),message:"delete"===L.value?"admin.CONFIRM_USER_ACCOUNT_DELETION":"admin.CONFIRM_USER_PASSWORD_RESET",strongMessage:(0,a.SU)(h).username,onConfirmAction:t[0]||(t[0]=e=>"delete"===L.value?W((0,a.SU)(h).username):K((0,a.SU)(h).username)),onCancelAction:t[1]||(t[1]=e=>F(""))},null,8,["title","message","strongMessage"])):(0,r.kq)("",!0),(0,a.SU)(D)?((0,r.wg)(),(0,r.iD)("div",_,(0,o.zw)(e.$t(`admin.${"password-reset"===G.value?"PASSWORD_RESET":"USER_EMAIL_UPDATE"}_SUCCESSFUL`)),1)):(0,r.kq)("",!0),(0,a.SU)(h).is_active?(0,r.kq)("",!0):((0,r.wg)(),(0,r.j4)(i,{key:2,message:"user.THIS_USER_ACCOUNT_IS_INACTIVE"})),(0,a.SU)(k)?((0,r.wg)(),(0,r.j4)(l,{key:3,message:(0,a.SU)(k)},null,8,["message"])):(0,r.kq)("",!0),b.value?((0,r.wg)(),(0,r.iD)("div",E,[(0,r._)("form",{class:(0,o.C_)({errors:M.value}),onSubmit:t[4]||(t[4]=(0,s.iM)((e=>B((0,a.SU)(h).username)),["prevent"]))},[(0,r._)("label",S,[(0,r.Uk)((0,o.zw)(e.$t("admin.CURRENT_EMAIL"))+" ",1),(0,r.wy)((0,r._)("input",{id:"email",type:"email","onUpdate:modelValue":t[2]||(t[2]=e=>(0,a.SU)(h).email=e),disabled:""},null,512),[[s.nr,(0,a.SU)(h).email]])]),(0,r._)("label",T,[(0,r.Uk)((0,o.zw)(e.$t("admin.NEW_EMAIL"))+"* ",1),(0,r.wy)((0,r._)("input",{id:"new-email",type:"email",required:"","onUpdate:modelValue":t[3]||(t[3]=e=>y.value=e)},null,512),[[s.nr,y.value]])]),(0,r._)("div",p,[(0,r._)("button",A,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,r._)("button",{class:"cancel",onClick:(0,s.iM)($,["prevent"])},(0,o.zw)(e.$t("buttons.CANCEL")),9,O)])],34)])):((0,r.wg)(),(0,r.iD)("div",R,[(0,r._)("dl",null,[(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(v)),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.FIRST_NAME"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(h).first_name),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.LAST_NAME"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(h).last_name),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.BIRTH_DATE"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(C)),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.LOCATION"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(h).location),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.BIO"))+":",1),(0,r._)("dd",I,(0,o.zw)((0,a.SU)(h).bio),1)]),(0,a.SU)(z)?((0,r.wg)(),(0,r.iD)("div",U,[(0,a.SU)(f).username!==(0,a.SU)(h).username?((0,r.wg)(),(0,r.iD)("button",{key:0,class:"danger",onClick:t[5]||(t[5]=(0,s.iM)((e=>F("delete")),["prevent"]))},(0,o.zw)(e.$t("admin.DELETE_USER")),1)):(0,r.kq)("",!0),(0,a.SU)(h).is_active?(0,r.kq)("",!0):((0,r.wg)(),(0,r.iD)("button",{key:1,onClick:t[6]||(t[6]=(0,s.iM)((e=>Y((0,a.SU)(h).username)),["prevent"]))},(0,o.zw)(e.$t("admin.ACTIVATE_USER_ACCOUNT")),1)),(0,a.SU)(f).username!==(0,a.SU)(h).username?((0,r.wg)(),(0,r.iD)("button",{key:2,onClick:(0,s.iM)(x,["prevent"])},(0,o.zw)(e.$t("admin.UPDATE_USER_EMAIL")),9,g)):(0,r.kq)("",!0),(0,a.SU)(f).username!==(0,a.SU)(h).username&&(0,a.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("button",{key:3,onClick:t[7]||(t[7]=(0,s.iM)((e=>F("reset")),["prevent"]))},(0,o.zw)(e.$t("admin.RESET_USER_PASSWORD")),1)):(0,r.kq)("",!0),(0,r._)("button",{onClick:t[8]||(t[8]=t=>e.$router.go(-1))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,r.wg)(),(0,r.iD)("div",N,[(0,r._)("button",{onClick:t[9]||(t[9]=t=>e.$router.push("/profile/edit"))},(0,o.zw)(e.$t("user.PROFILE.EDIT")),1),(0,r._)("button",{onClick:t[10]||(t[10]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))]))])}}}),z=n(3744);const w=(0,z.Z)(h,[["__scopeId","data-v-217519af"]]);var f=w},2411:function(e,t,n){"use strict";n.d(t,{Z:function(){return C}});var r=n(6252),a=n(3577),o=n(2262),s=n(9963),i=n(2201),l=n(8403),c=n(5801),u=n(9917);const d=e=>((0,r.dD)("data-v-b3c885de"),e=e(),(0,r.Cn)(),e),m={id:"user-form"},_={key:2,class:"info-box success-message"},E={class:"form-items"},S=["disabled","placeholder"],T={key:1,class:"form-info"},p=d((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),A=["disabled","placeholder"],O={key:3,class:"form-info"},R=d((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),I=["disabled"],U={key:3},g={key:0},N={key:4},h={class:"account"},z={key:5};var w=(0,r.aZ)({__name:"UserAuthForm",props:{action:null,token:{default:""}},setup(e){const t=e,n=(0,i.yj)(),d=(0,u.o)(),{action:w}=(0,o.BK)(t),f=(0,o.qj)({username:"",email:"",password:""}),v=(0,r.Fl)((()=>G(t.action))),C=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.ERROR_MESSAGES])),D=(0,r.Fl)((()=>d.getters[c.YN.GETTERS.IS_REGISTRATION_SUCCESS])),k=(0,r.Fl)((()=>d.getters[c.YN.GETTERS.IS_SUCCESS])),P=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.APP_CONFIG])),L=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.LANGUAGE])),M=(0,r.Fl)((()=>"register"===t.action&&!P.value.is_registration_enabled)),b=(0,r.Fl)((()=>["reset-request","account-confirmation-resend"].includes(t.action)&&!P.value.is_email_sending_enabled)),y=(0,o.iH)(!1);function G(e){switch(e){case"reset-request":case"reset":return"buttons.SUBMIT";default:return`buttons.${t.action.toUpperCase()}`}}function F(){y.value=!0}function W(e){f.password=e}function K(e){switch(e){case"reset":return t.token?d.dispatch(c.YN.ACTIONS.RESET_USER_PASSWORD,{password:f.password,token:t.token}):d.commit(c.SY.MUTATIONS.SET_ERROR_MESSAGES,"user.INVALID_TOKEN");case"reset-request":return d.dispatch(c.YN.ACTIONS.SEND_PASSWORD_RESET_REQUEST,{email:f.email});case"account-confirmation-resend":return d.dispatch(c.YN.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL,{email:f.email});default:f["language"]=L.value,d.dispatch(c.YN.ACTIONS.LOGIN_OR_REGISTER,{actionType:e,formData:f,redirectUrl:n.query.from})}}function Y(){f.username="",f.email="",f.password=""}return(0,r.Ah)((()=>d.commit(c.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(0,r.YP)((()=>n.path),(async()=>{d.commit(c.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),d.commit(c.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),d.commit(c.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!1),y.value=!1,Y()})),(e,t)=>{const n=(0,r.up)("AlertMessage"),i=(0,r.up)("router-link"),c=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",{id:"user-auth-form",class:(0,a.C_)(`${["reset","reset-request"].includes((0,o.SU)(w))?(0,o.SU)(w):"user-form"}`)},[(0,r._)("div",m,[(0,r._)("div",{class:(0,a.C_)(["form-box",{disabled:(0,o.SU)(M)}])},[(0,o.SU)(M)?((0,r.wg)(),(0,r.j4)(n,{key:0,message:"user.REGISTER_DISABLED"})):(0,r.kq)("",!0),(0,o.SU)(b)?((0,r.wg)(),(0,r.j4)(n,{key:1,message:"admin.EMAIL_SENDING_DISABLED"})):(0,r.kq)("",!0),(0,o.SU)(k)||(0,o.SU)(D)?((0,r.wg)(),(0,r.iD)("div",_,(0,a.zw)(e.$t("user.PROFILE.SUCCESSFUL_"+((0,o.SU)(D)?"REGISTRATION"+((0,o.SU)(P).is_email_sending_enabled?"_WITH_EMAIL":""):"UPDATE"))),1)):(0,r.kq)("",!0),(0,r._)("form",{class:(0,a.C_)({errors:y.value}),onSubmit:t[2]||(t[2]=(0,s.iM)((e=>K((0,o.SU)(w))),["prevent"]))},[(0,r._)("div",E,["register"===(0,o.SU)(w)?(0,r.wy)(((0,r.wg)(),(0,r.iD)("input",{key:0,id:"username",disabled:(0,o.SU)(M),required:"",pattern:"[a-zA-Z0-9_]+",minlength:"3",maxlength:"30",onInvalid:F,"onUpdate:modelValue":t[0]||(t[0]=e=>f.username=e),placeholder:e.$t("user.USERNAME")},null,40,S)),[[s.nr,f.username]]):(0,r.kq)("",!0),"register"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",T,[p,(0,r.Uk)(" "+(0,a.zw)(e.$t("user.USERNAME_INFO")),1)])):(0,r.kq)("",!0),"reset"!==(0,o.SU)(w)?(0,r.wy)(((0,r.wg)(),(0,r.iD)("input",{key:2,id:"email",disabled:(0,o.SU)(M)||(0,o.SU)(b),required:"",onInvalid:F,type:"email","onUpdate:modelValue":t[1]||(t[1]=e=>f.email=e),placeholder:e.$t("user.EMAIL")},null,40,A)),[[s.nr,f.email]]):(0,r.kq)("",!0),["reset-request","register","account-confirmation-resend"].includes((0,o.SU)(w))?((0,r.wg)(),(0,r.iD)("div",O,[R,(0,r.Uk)(" "+(0,a.zw)(e.$t("user.EMAIL_INFO")),1)])):(0,r.kq)("",!0),["account-confirmation-resend","reset-request"].includes((0,o.SU)(w))?(0,r.kq)("",!0):((0,r.wg)(),(0,r.j4)(l.Z,{key:4,disabled:(0,o.SU)(M),required:!0,placeholder:"reset"===(0,o.SU)(w)?e.$t("user.ENTER_PASSWORD"):e.$t("user.PASSWORD"),password:f.password,checkStrength:["reset","register"].includes((0,o.SU)(w)),onUpdatePassword:W,onPasswordError:F},null,8,["disabled","placeholder","password","checkStrength"]))]),(0,r._)("button",{type:"submit",disabled:(0,o.SU)(M)||(0,o.SU)(b)},(0,a.zw)(e.$t((0,o.SU)(v))),9,I)],34),"login"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",U,[(0,r.Wm)(i,{class:"links",to:"/register"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.REGISTER")),1)])),_:1}),(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("span",g,"-")):(0,r.kq)("",!0),(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.j4)(i,{key:1,class:"links",to:"/password-reset/request"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.PASSWORD_FORGOTTEN")),1)])),_:1})):(0,r.kq)("",!0)])):(0,r.kq)("",!0),"register"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",N,[(0,r._)("span",h,(0,a.zw)(e.$t("user.ALREADY_HAVE_ACCOUNT")),1),(0,r.Wm)(i,{class:"links",to:"/login"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.LOGIN")),1)])),_:1})])):(0,r.kq)("",!0),["login","register"].includes((0,o.SU)(w))&&(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("div",z,[(0,r.Wm)(i,{class:"links",to:"/account-confirmation/resend"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.ACCOUNT_CONFIRMATION_NOT_RECEIVED")),1)])),_:1})])):(0,r.kq)("",!0),(0,o.SU)(C)?((0,r.wg)(),(0,r.j4)(c,{key:6,message:(0,o.SU)(C)},null,8,["message"])):(0,r.kq)("",!0)],2)])],2)}}}),f=n(3744);const v=(0,f.Z)(w,[["__scopeId","data-v-b3c885de"]]);var C=v},6595:function(e,t,n){"use strict";n.d(t,{Z:function(){return _}});var r=n(6252),a=n(2262),o=n(2024);const s={class:"user-picture"},i=["alt","src"],l={key:1,class:"no-picture"},c=(0,r._)("i",{class:"fa fa-user-circle-o","aria-hidden":"true"},null,-1),u=[c];var d=(0,r.aZ)({__name:"UserPicture",props:{user:null},setup(e){const t=e,n=(0,r.Fl)((()=>t.user.picture?`${(0,o.k)()}users/${t.user.username}/picture?${Date.now()}`:""));return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[""!==(0,a.SU)(n)?((0,r.wg)(),(0,r.iD)("img",{key:0,class:"profile-user-img",alt:e.$t("user.USER_PICTURE"),src:(0,a.SU)(n)},null,8,i)):((0,r.wg)(),(0,r.iD)("div",l,u))]))}});const m=d;var _=m},5630:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(6252),a=n(3577);const o={class:"no-workouts box"};function s(e,t){const n=(0,r.up)("router-link");return(0,r.wg)(),(0,r.iD)("div",o,[(0,r._)("div",null,[(0,r.Uk)((0,a.zw)(e.$t("workouts.NO_WORKOUTS"))+" ",1),(0,r.Wm)(n,{to:"/workouts/add"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("workouts.UPLOAD_FIRST_WORKOUT")),1)])),_:1})])])}var i=n(3744);const l={},c=(0,i.Z)(l,[["render",s],["__scopeId","data-v-4b4d15fb"]]);var u=c},4612:function(e,t,n){var r={"./de/de.ts":9923,"./en/en.ts":8757,"./fr/fr.ts":6625,"./nb/nb.ts":8891};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=4612}},t={};function n(r){var a=t[r];if(void 0!==a)return a.exports;var o=t[r]={exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.m=e,function(){var e=[];n.O=function(t,r,a,o){if(!r){var s=1/0;for(u=0;u=o)&&Object.keys(n.O).every((function(e){return n.O[e](r[l])}))?r.splice(l--,1):(i=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]}}(),function(){n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,{a:t}),t}}(),function(){var e,t=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__};n.t=function(r,a){if(1&a&&(r=this(r)),8&a)return r;if("object"===typeof r&&r){if(4&a&&r.__esModule)return r;if(16&a&&"function"===typeof r.then)return r}var o=Object.create(null);n.r(o);var s={};e=e||[null,t({}),t([]),t(t)];for(var i=2&a&&r;"object"==typeof i&&!~e.indexOf(i);i=t(i))Object.getOwnPropertyNames(i).forEach((function(e){s[e]=function(){return r[e]}}));return s["default"]=function(){return r},n.d(o,s),o}}(),function(){n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}}(),function(){n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce((function(t,r){return n.f[r](e,t),t}),[]))}}(),function(){n.u=function(e){return"static/js/"+({24:"reset",193:"statistics",328:"admin",401:"workouts",845:"profile",881:"password"}[e]||e)+"."+{24:"3194c9f0",93:"02cf293c",193:"04a17f2e",243:"e551248f",328:"9bc68088",401:"a514f12a",431:"e5102e07",633:"81a8ddc8",845:"430ae7df",858:"3f2a93f2",881:"43430dfc"}[e]+".js"}}(),function(){n.miniCssF=function(e){return"static/css/"+{24:"reset",193:"statistics",328:"admin",401:"workouts",845:"profile"}[e]+"."+{24:"e2527ec6",193:"40e24e75",328:"73df498d",401:"41709693",845:"203e78e2"}[e]+".css"}}(),function(){n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){var e={},t="fittrackee_client:";n.l=function(r,a,o,s){if(e[r])e[r].push(a);else{var i,l;if(void 0!==o)for(var c=document.getElementsByTagName("script"),u=0;u{const t=new AbortController;e.signal=t.signal;const n=(0,o.a)(e);o.j.set(n,t);const r=s.Z.getters[i.YN.GETTERS.AUTH_TOKEN];if(r){const t=`Bearer ${r}`;e.headers&&e.headers.Authorization!==t&&(e.headers.Authorization=`Bearer ${r}`)}return e}),(e=>Promise.reject(e))),c.interceptors.response.use((e=>((0,o.a)(e.config),e)),(e=>("canceled"!==e.message&&(0,o.a)(e.response.config),Promise.reject(e)))),t["Z"]=c},8566:function(e,t,n){"use strict";n.d(t,{a:function(){return o},j:function(){return r}});const r=new Map,a=e=>{const{method:t,url:n,params:r={},data:a={}}=e;return[t,n,JSON.stringify(r),JSON.stringify(a)].join("")},o=e=>{const t=a(e);if(r.has(t)){const e=r.get(t)||{};e?.abort(),r.delete(t)}return t}},2540:function(e,t,n){"use strict";var r=n(9150);const a=["nb"];function o(){const e=n(4612),t={};return e.keys().forEach((n=>{const r=n.match(/([A-Za-z0-9-_]+)\./i);if(r&&r.length>1&&!a.includes(r[1])){const a=r[1];t[a]=e(n).default}})),t}t["Z"]=(0,r.o)({legacy:!1,locale:"en",fallbackLocale:"en",globalInjection:!0,messages:o()})},9923:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Kontaktiere den Administrator"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee ist ein selbst-gehosteter Outdoor-Aktivitäts-Tracker."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["unter ",n(r(0))," Lizenz "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Quellkode"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Aktion"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Aktiviere Konto"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Aktiv"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Hinzufügen/Entfernen von Administratorrechten, Lösche Nutzerkonto."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Anwendung"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Kontakt-E-Mail des Administrators"])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Max. Anzahl aktiver Nutzer"])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["Wenn 0, gibt es keine Registrierungslimitierung.."])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Max. Dateianzahl im zip Archiv"])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["keine Kontakt-E-Mail"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. Größe der hochgeladenen Dateien (in Mb)"])},TITLE:e=>{const{normalize:t}=e;return t(["Anwendungskonfiguration"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. Größe des zip Archives (in Mb)"])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Zurück zu Admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Möchtest du wirklich das ",n(r(0))," Konto löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Möchtest du wirklich das ",n(r(0))," Passwort zurücksetzen?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Aktuelle E-Mail"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Lösche Nutzer"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["E-Mail-Versand ist deaktiviert."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Aktivieren/Deaktivieren von Sportarten."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["Neue E-Mail"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Das wasswort wurde zurückgesetzt."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Registrierung ist derzeit deaktiviert."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Registrierung ist derzeit aktiviert."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Aktiv"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["Trainings existieren"])},IMAGE:e=>{const{normalize:t}=e;return t(["Bild"])},LABEL:e=>{const{normalize:t}=e;return t(["Titel"])}},TITLE:e=>{const{normalize:t}=e;return t(["Sportarten Administration"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Aktualisiere Anwemdungskonfiguration (maximale Anzahl an registrierten Nutzern, maximale Dateigröße)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Aktualisiere E-Mail"])},USER:e=>{const{normalize:t}=e;return t(["Nutzer"])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Die E-Mail Adresse wurde aktualisiert."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Administratorrechte hinzufügen"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Administratorrechte entfernen"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["Adminstatus"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["Registrierungsdatum"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["Accountstatus"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nutzername"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["Trainingsanzahl"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["E-Mail: Eine gültige E-Mail muss angegeben werden."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Fehler bei der GPX-Verarbeitung."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Fehler beim Einlesen der GPX-Datei"])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Fehler beim Abrufen der Konfiguration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Fehler beim Aktualisieren der Konfiguration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Fehler. Die Registrierung ist deaktiviert."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["Dateierweiterung ist nicht erlaubt."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["Die Datei ist größer als erlaubt."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Ungültige Anmeldedaten."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Die bereitgestellten Daten sind ungültig."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte erneut anmelden."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte erneut anmelden."])},"Network Error":e=>{const{normalize:t}=e;return t(["Netzwerkfehler."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["Die neue E-Mail muss sich von der aktuellen E-Mail unterscheiden"])},"no file part":e=>{const{normalize:t}=e;return t(["Keine Datei angegeben."])},"no selected file":e=>{const{normalize:t}=e;return t(["Keine Datei ausgewählt."])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Passwort: Passwort und Passwortbestätigung stimmen nicht überein."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Gebe ein gültiges Authentifizierungstoken an."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Es tut mir leid, der Benutzername ist schon vergeben."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Sportart existiert nicht."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Die Signatur ist abgelaufen. Bitte melde dich erneut an."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Registrierung erfolgreich."])},"user does not exist":e=>{const{normalize:t}=e;return t(["Der Nutzer existiert nicht."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["Um den Administrator zu kontaktieren, muss eine gültige E-Mail-Adresse angegeben werden"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["Du kannst Dein Konto nicht löschen, da kein anderer Nutzer hat Administratorrechte besitzt."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["Du hast keine Berechtigung."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["Vorhergehende"])},NEXT:e=>{const{normalize:t}=e;return t(["Nächste"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Bestätigungs-E-Mail erneut senden"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Autorisieren"])},BACK:e=>{const{normalize:t}=e;return t(["Zurück"])},CANCEL:e=>{const{normalize:t}=e;return t(["Abbrechen"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Filter löschen"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Mein Konto löschen"])},DISABLE:e=>{const{normalize:t}=e;return t(["Deaktivieren"])},EDIT:e=>{const{normalize:t}=e;return t(["Bearbeiten"])},ENABLE:e=>{const{normalize:t}=e;return t(["Aktivieren"])},FILTER:e=>{const{normalize:t}=e;return t(["Filter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Anmelden"])},NO:e=>{const{normalize:t}=e;return t(["Nein"])},REGISTER:e=>{const{normalize:t}=e;return t(["Registrieren"])},RESET:e=>{const{normalize:t}=e;return t(["Zurücksetzen"])},SUBMIT:e=>{const{normalize:t}=e;return t(["Speichern"])},YES:e=>{const{normalize:t}=e;return t(["Ja"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["Über"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bestätigung"])},CONTACT:e=>{const{normalize:t}=e;return t(["Kontakt"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["Tag"]),t(["Tage"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Angezeigt"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["Dokumentation (en)"])},HERE:e=>{const{normalize:t}=e;return t(["hier"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Versteckt"])},HOME:e=>{const{normalize:t}=e;return t(["Startseite"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["sortiert nach"])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["sortieren"])},ASC:e=>{const{normalize:t}=e;return t(["aufsteigend"])},DESC:e=>{const{normalize:t}=e;return t(["absteigend"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["pro Seite"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Insgesamt"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Dashboard"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["Dieser Monat"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["Bei der Anwendung scheinen einige Probleme aufgetreten zu sein.
Bitte versuche es später noch einmal oder kontaktiere den Administrator."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Seite nicht gefunden"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Training nicht gefunden"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Etwas lief schief"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Eine neue OAuth2-Anwendung hinzufügen"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["ID"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Geheimnis"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Anwendungsbeschreibung"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Erstellt am"])},NAME:e=>{const{normalize:t}=e;return t(["Anwendungsname"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["Weiterleitungs-URL"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Geltungsbereich"])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf auth-Endpunkte"])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf auth-Endpunkte"])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf users-Endpunkte"])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf users-Endpunkte"])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf workouts-Endpunkte"])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf workouts-Endpunkte"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf die Anwendungskonfiguration"])}},URL:e=>{const{normalize:t}=e;return t(["Anwendungs-URL"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Anwendung erfolgreich erstellt. Stelle sicher, dass du das Geheimnis kopierst, du kannst es nicht erneut anzeigen."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist sicher, dass du diese App löschen willst?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Die Anwendung ",n(r(0))," fragt an:"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["OAuth2-Anwendungen"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t([n(r(0))," den Zugriff auf deinen Account erlauben?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["in Zwischenablage kopieren"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Anwendung löschen"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Anwendung hinzufügen"])},NO_APP:e=>{const{normalize:t}=e;return t(["Anwendung wurde nicht gefunden!"])},NO_APPS:e=>{const{normalize:t}=e;return t(["keine Anwendungen"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["keine Beschreibung"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Alle Tokens zurückrufen"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist du sicher, dass du alle Tokens zurückrufen möchtest?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["Alle vorhandenen und vergebenen Tokens wurde zurückgerufen."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Pendeln)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Virtuell)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Wandern"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["Mountainbiken"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["Mountainbiken (elektrisch)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Rudern"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Laufen"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Skifahren (Alpin)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Skifahren (Langlauf)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Schneeschuhe"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Gehen"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistik"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["Woche"])},month:e=>{const{normalize:t}=e;return t(["Monat"])},year:e=>{const{normalize:t}=e;return t(["Jahr"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Hast du keine Anweisungen erhalten?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Prüfe deine E-Mail. Eine neue Bestätigungs-E-Mail wurde an die angegebene Adresse geschickt."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Hast du bereits ein Konto?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Möchtest du dein Konto wirklich löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Aktuelles Passwort"])},EMAIL:e=>{const{normalize:t}=e;return t(["E-Mail"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Gebe eine gültige E-Mail-Adresse an."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Gebe ein Passwort ein"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Nach Benutzernamen filtern"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort verbergen"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte fordere ein neues Passworts an."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Sprache"])},LOG_IN:e=>{const{normalize:t}=e;return t(["Anmelden"])},LOGIN:e=>{const{normalize:t}=e;return t(["Anmeldung"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Abmelden"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["Neues Passwort"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["Keine Nutzer gefunden."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["Mindestens 8 Zeichen sind erforderlich."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Passwort vergessen?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Prüfe Deine E-Mail. Wenn Deine Adresse in der Datenbank enthalten ist, wirst du eine E-Mail mit einem Link erhalten um Dein Passwort zurückzusetzen."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["schwach"])},AVERAGE:e=>{const{normalize:t}=e;return t(["mittel"])},GOOD:e=>{const{normalize:t}=e;return t(["gut"])},STRONG:e=>{const{normalize:t}=e;return t(["start"])},LABEL:e=>{const{normalize:t}=e;return t(["Passwortstärke"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Vermeide vorhersehbare Buchstabenersetzungen wie ","@"," für a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Vermeide umgekehrte Schreibweisen gebräuchlicher Wörter."])},allUppercase:e=>{const{normalize:t}=e;return t(["Schreibe einige, aber nicht alle Buchstaben groß."])},capitalization:e=>{const{normalize:t}=e;return t(["Schreibe mehr als nur den ersten Buchstaben groß."])},dates:e=>{const{normalize:t}=e;return t(["Vermeide Daten und Jahreszahlen, die mit Dir in Verbindung gebracht werden."])},recentYears:e=>{const{normalize:t}=e;return t(["Vermeide Angabe von letzten Jahreszahlen."])},associatedYears:e=>{const{normalize:t}=e;return t(["Vermeide Jahreszahlen, die mit Dir in Verbindung gebracht werden."])},sequences:e=>{const{normalize:t}=e;return t(["Vermeide gebräuchliche Zeichenfolgen."])},repeated:e=>{const{normalize:t}=e;return t(["Vermeide wiederholungen von Wörtern und Zeichen."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Verwende längere Tastaturmuster und ändere mehrmals die Schreibrichtung."])},anotherWord:e=>{const{normalize:t}=e;return t(["Füge weitere weniger gebräuchliche Wörter hinzu."])},useWords:e=>{const{normalize:t}=e;return t(["Verwenden Sie mehrere Wörter, aber vermeide gebräuchliche Ausdrücke."])},noNeed:e=>{const{normalize:t}=e;return t(["Du kannst sichere Passwörter erstellen, ohne Symbole, Zahlen oder Großbuchstaben zu verwenden."])},pwned:e=>{const{normalize:t}=e;return t(["Wenn Sie dieses Passwort auch anderweitig verwenden, sollten Sie es ändern."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Dein Passwort wurde aktualisiert. Klicke ",n(r(0))," um dich anzumelden."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Kontoausgabe"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Anstiegs-bezogene Daten (Aufnahmen, gesamt)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Zurück zum Profil"])},BIO:e=>{const{normalize:t}=e;return t(["Biographie"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Geburtsdatum"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Datumsanzeigeformat"])},EDIT:e=>{const{normalize:t}=e;return t(["Profil bearbeiten"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen ändern"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen für Sportarten ändern"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Bitte ",n(r(0))," um Deine E-Mail Adresse nochmals zu ändern oder kontaktiere den Administrator"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["Vorname"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["Erster Tag der Woche"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Sprache"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Nachname"])},LOCATION:e=>{const{normalize:t}=e;return t(["Ort"])},MONDAY:e=>{const{normalize:t}=e;return t(["Montag"])},PICTURE:e=>{const{normalize:t}=e;return t(["Bild"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Bildausgabe"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Bild aktualisieren"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Bild entfernen"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Einstellungsausgabe"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Profil-Ausgabe"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Regirierungsdatum"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Sportarten-Einstellungsausgabe"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Sontag"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["Konto"])},APPS:e=>{const{normalize:t}=e;return t(["Anwendungen"])},PICTURE:e=>{const{normalize:t}=e;return t(["Bild"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen"])},PROFILE:e=>{const{normalize:t}=e;return t(["Profil"])},SPORTS:e=>{const{normalize:t}=e;return t(["Sportarten"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["Aktion"])},COLOR:e=>{const{normalize:t}=e;return t(["Farbe"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["vom Admin deaktiviert"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["aktiv"])},LABEL:e=>{const{normalize:t}=e;return t(["Titel"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["Geschwindigkeitsschwellenwert für Stopp"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich aktualisiert. Bitte prüfe Deine E-Mail um die neue E-Mail Adresse zu bestätigen."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich erstellt."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["Ein Aktivierungslink für Dein Konto wurde an die angegebene E-Mail Adresse geschickt."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich aktualisiert."])},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Einheiten für die Distanz"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Imperiales System (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Metrisches System (m, km)"])}},TIMEZONE:e=>{const{normalize:t}=e;return t(["Zeitzone"])}},REGISTER:e=>{const{normalize:t}=e;return t(["Registrieren"])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["E-Mail zur Kontobestätigung erneut senden"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Entschuldigung, die Registrierung ist deaktiviert."])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort anzeigen"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["Dieser Account ist inaktiv."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["Benutzerbild"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nutzername"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(["3 bis 30 Zeichen sind erforderlich, nur alphanumerische Zeichen und der Unterstrich _ sind erlaubt."])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Training hinzufügen"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["Analyse"])},ASCENT:e=>{const{normalize:t}=e;return t(["Aufstieg"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["Durchschn. Geschwindigkeit"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["Durchschnittsgeschwindigkeit"])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["zurück zum Training"])},DATE:e=>{const{normalize:t}=e;return t(["Datum"])},DESCENT:e=>{const{normalize:t}=e;return t(["Abstieg"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["zeige Filter"])},DISTANCE:e=>{const{normalize:t}=e;return t(["Entfernung"])},DURATION:e=>{const{normalize:t}=e;return t(["Dauer"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Training bearbeiten"])},ELEVATION:e=>{const{normalize:t}=e;return t(["Höhe"])},END:e=>{const{normalize:t}=e;return t(["Ende"])},FROM:e=>{const{normalize:t}=e;return t(["Von"])},GPX_FILE:e=>{const{normalize:t}=e;return t([".gpx Datei"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["verberge Filter"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Letzte Trainings"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Lade mehr Trainings"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["maximale Höhe"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["Maximale Dateianzahl"])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["Maximalgröße"])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["Max. Geschwindigkeit"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["minimale Höhe"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Nächstes Segment"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Nächstes Training"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["Daten aus gpx, ohne Bereinigung"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["Keine Datei angegeben"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["enthält keinen Ordner"])},NO_MAP:e=>{const{normalize:t}=e;return t(["Keine Karte"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Kein nächstes Segment"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Kein nächstes Training"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["Keine Anmerkungen"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Kein vorheriges Segment"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Kein vorheriges Training"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["Keine Aufzeichnungen."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["Keine Trainings."])},NOTES:e=>{const{normalize:t}=e;return t(["Anmerkungen"])},PAUSES:e=>{const{normalize:t}=e;return t(["Pausen"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Vorheriges Segment"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Vorheriges Training"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["Aufzeichnung"]),t(["Aufzeichnungen"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Durchschn. Geschwindigkeit"])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Weiteste Entfernung"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Höchster Anstieg"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Längste Dauer"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Max. Geschwindigkeit"])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["verbleibende Zeichen"])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["Segment"]),t(["Segmente"])])},SPEED:e=>{const{normalize:t}=e;return t(["Geschwindigkeit"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["Sportart"]),t(["Sportarten"])])},START:e=>{const{normalize:t}=e;return t(["Start"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Start und Ziel"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["Höhenachse bei Null starten"])},TITLE:e=>{const{normalize:t}=e;return t(["Titel"])},TO:e=>{const{normalize:t}=e;return t(["bis"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["Gesamtdauer"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Füge erstes Training hinzu!"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["Luftfeuchtigkeit"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["Temperatur"])},WIND:e=>{const{normalize:t}=e;return t(["Wind"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNO"])},NE:e=>{const{normalize:t}=e;return t(["NO"])},ENE:e=>{const{normalize:t}=e;return t(["ONO"])},E:e=>{const{normalize:t}=e;return t(["O"])},ESE:e=>{const{normalize:t}=e;return t(["OSO"])},SE:e=>{const{normalize:t}=e;return t(["SO"])},SSE:e=>{const{normalize:t}=e;return t(["SSO"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSW"])},SW:e=>{const{normalize:t}=e;return t(["SW"])},WSW:e=>{const{normalize:t}=e;return t(["WSW"])},W:e=>{const{normalize:t}=e;return t(["W"])},WNW:e=>{const{normalize:t}=e;return t(["WNW"])},NW:e=>{const{normalize:t}=e;return t(["NW"])},NNW:e=>{const{normalize:t}=e;return t(["NNW"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["klarer Tag"])},"clear-night":e=>{const{normalize:t}=e;return t(["klare Nacht"])},cloudy:e=>{const{normalize:t}=e;return t(["wolkig"])},fog:e=>{const{normalize:t}=e;return t(["Nebel"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["teilweise bewölkter Tag"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["teilweise bewölkte Nacht"])},rain:e=>{const{normalize:t}=e;return t(["Regen"])},sleet:e=>{const{normalize:t}=e;return t(["Schneeregen"])},snow:e=>{const{normalize:t}=e;return t(["Schnee"])},wind:e=>{const{normalize:t}=e;return t(["Wind"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["mit .gpx Datei"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["ohne .gpx Datei"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["Training"]),t(["Trainings"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["Trainingsdatum"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist du sicher, dass du dieses Training löschen möchtest?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t([".zip Datei"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["oder .zip Datei mit .gpx Dateien"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},8757:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Contact the administrator"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee is a self-hosted outdoor activity tracker."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["under ",n(r(0))," license "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Source code"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Action"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Activate account"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Active"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Add/remove admin rights, delete user account."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Application"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Administrator email for contact"])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Max. number of active users"])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["If 0, no limitation on registration."])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Max. files of zip archive"])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["no contact email"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. size of uploaded files (in Mb)"])},TITLE:e=>{const{normalize:t}=e;return t(["Application configuration"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. size of zip archive (in Mb)"])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Back to admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Are you sure you want to delete ",n(r(0))," account? All data will be deleted, this cannot be undone."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Are you sure you want to reset ",n(r(0))," password?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Current email"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Delete user"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["Email sending is disabled."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Enable/disable sports."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["New email"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["The password has been reset."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Registration is currently disabled."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Registration is currently enabled."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Reset password"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Active"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["workouts exist"])},IMAGE:e=>{const{normalize:t}=e;return t(["Image"])},LABEL:e=>{const{normalize:t}=e;return t(["Label"])}},TITLE:e=>{const{normalize:t}=e;return t(["Sports administration"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Update application configuration (maximum number of registered users, maximum files size)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Update email"])},USER:e=>{const{normalize:t,plural:n}=e;return n([t(["user"]),t(["users"])])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["The email address has been updated."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Add admin rights"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Remove admin rights"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["admin status"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["registration date"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["account status"])},USERNAME:e=>{const{normalize:t}=e;return t(["username"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["workout count"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Error. Please try again or contact the administrator."])},"at least one file in zip archive exceeds size limit, please check the archive":e=>{const{normalize:t}=e;return t(["At least one file in zip archive exceeds size limit, please check the archive."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["Email: valid email must be provided."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Error during gpx processing."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Error during gpx file parsing."])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Error on getting configuration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Error when updating configuration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Error, please try again or contact the administrator."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Error, registration is disabled."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["File extension not allowed."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["File size is greater than the allowed size."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Invalid credentials."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Provided data are invalid."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Invalid token, please log in again."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Invalid token, please log in again."])},"Network Error":e=>{const{normalize:t}=e;return t(["Network Error."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["The new email must be different than curent email"])},"no file part":e=>{const{normalize:t}=e;return t(["No file provided."])},"no selected file":e=>{const{normalize:t}=e;return t(["No selected file."])},"the number of files in the archive exceeds the limit":e=>{const{normalize:t}=e;return t(["The number of files in the archive exceeds the limit."])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Password: password and password confirmation don't match."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Provide a valid auth token."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Sorry, that username is already taken."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Sport does not exist."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Signature expired. Please log in again."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Successfully registered."])},"user does not exist":e=>{const{normalize:t}=e;return t(["User does not exist."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["A valid email must be provided for administrator contact"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["You can not delete your account, no other user has admin rights."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["You do not have permissions."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["previous"])},NEXT:e=>{const{normalize:t}=e;return t(["next"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Resend confirmation email"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Authorize"])},BACK:e=>{const{normalize:t}=e;return t(["Back"])},CANCEL:e=>{const{normalize:t}=e;return t(["Cancel"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Clear filters"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Delete my account"])},DISABLE:e=>{const{normalize:t}=e;return t(["Disable"])},EDIT:e=>{const{normalize:t}=e;return t(["Edit"])},ENABLE:e=>{const{normalize:t}=e;return t(["Enable"])},FILTER:e=>{const{normalize:t}=e;return t(["Filter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Log in"])},NO:e=>{const{normalize:t}=e;return t(["No"])},REGISTER:e=>{const{normalize:t}=e;return t(["Register"])},RESET:e=>{const{normalize:t}=e;return t(["Reset"])},SUBMIT:e=>{const{normalize:t}=e;return t(["Submit"])},YES:e=>{const{normalize:t}=e;return t(["Yes"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["about"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Confirmation"])},CONTACT:e=>{const{normalize:t}=e;return t(["contact"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["day"]),t(["days"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Displayed"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["documentation"])},HERE:e=>{const{normalize:t}=e;return t(["here"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Hidden"])},HOME:e=>{const{normalize:t}=e;return t(["Home"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["order by"])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["sort"])},ASC:e=>{const{normalize:t}=e;return t(["ascending"])},DESC:e=>{const{normalize:t}=e;return t(["descending"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["par page"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Total"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Dashboard"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["This month"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Error. Please try again or contact the administrator."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["The application seems to have encountered some issues.
Please try again later or contact the administrator."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Page not found"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Workout not found"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Something went wrong"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Add a new OAuth2 application"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["Id"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Secret"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Application description"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Issue at"])},NAME:e=>{const{normalize:t}=e;return t(["Application name"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["Redirect URL"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Scope"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to application configuration."])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to auth endpoints."])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to auth endpoints."])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to users endpoints."])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to users endpoints."])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to workouts endpoints."])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to workouts endpoints."])}},URL:e=>{const{normalize:t}=e;return t(["Application URL"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Application created successfully. Make sure to copy the secret now, it won't show up again."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete this app?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["The application ",n(r(0))," is requesting:"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["OAuth2 applications"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Authorize ",n(r(0))," to use your account?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["copy to the clipboard"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Delete application"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Add an application"])},NO_APP:e=>{const{normalize:t}=e;return t(["Application not found!"])},NO_APPS:e=>{const{normalize:t}=e;return t(["no applications"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["no description"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Revoke all tokens"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to revoke all tokens?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["All existing associated tokens have been revoked."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Transport)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Virtual)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Hiking"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["Mountain Biking"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["Mountain Biking (Electric)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Rowing"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Running"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Skiing (Alpine)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Skiing (Cross Country)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Snowshoes"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Walking"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistics"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["week"])},month:e=>{const{normalize:t}=e;return t(["month"])},year:e=>{const{normalize:t}=e;return t(["year"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Didn't received instructions?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Check your email. A new confirmation email has been sent to the address provided."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Already have an account?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete your account? All data will be deleted, this cannot be undone"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Current password"])},EMAIL:e=>{const{normalize:t}=e;return t(["Email"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Enter a valid email address."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Enter a password"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Filter on username"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["hide password"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Invalid token, please request a new password reset."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Language"])},LOG_IN:e=>{const{normalize:t}=e;return t(["log in"])},LOGIN:e=>{const{normalize:t}=e;return t(["Login"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Logout"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["New password"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["No users found."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Password"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["At least 8 characters required."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Forgot password?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Password reset"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Check your email. If your address is in our database, you'll received an email with a link to reset your password."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["weak"])},AVERAGE:e=>{const{normalize:t}=e;return t(["average"])},GOOD:e=>{const{normalize:t}=e;return t(["good"])},STRONG:e=>{const{normalize:t}=e;return t(["strong"])},LABEL:e=>{const{normalize:t}=e;return t(["password strength"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Avoid predictable letter substitutions like ","@"," for a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Avoid reversed spellings of common words."])},allUppercase:e=>{const{normalize:t}=e;return t(["Capitalize some, but not all letters."])},capitalization:e=>{const{normalize:t}=e;return t(["Capitalize more than the first letter."])},dates:e=>{const{normalize:t}=e;return t(["Avoid dates and years that are associated with you."])},recentYears:e=>{const{normalize:t}=e;return t(["Avoid recent years."])},associatedYears:e=>{const{normalize:t}=e;return t(["Avoid years that are associated with you."])},sequences:e=>{const{normalize:t}=e;return t(["Avoid common character sequences."])},repeated:e=>{const{normalize:t}=e;return t(["Avoid repeated words and characters."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Use longer keyboard patterns and change typing direction multiple times."])},anotherWord:e=>{const{normalize:t}=e;return t(["Add more words that are less common."])},useWords:e=>{const{normalize:t}=e;return t(["Use multiple words, but avoid common phrases."])},noNeed:e=>{const{normalize:t}=e;return t(["You can create strong passwords without using symbols, numbers, or uppercase letters."])},pwned:e=>{const{normalize:t}=e;return t(["If you use this password elsewhere, you should change it."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Your password have been updated. Click ",n(r(0))," to log in."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Account edition"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Ascent-related data (records, total)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Back to profile"])},BIO:e=>{const{normalize:t}=e;return t(["Bio"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Birth date"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Date display format"])},EDIT:e=>{const{normalize:t}=e;return t(["Edit profile"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Edit preferences"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Edit sports preferences"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Please ",n(r(0))," to change your email address again or contact the administrator"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["First name"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["First day of week"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Language"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Last name"])},LOCATION:e=>{const{normalize:t}=e;return t(["Location"])},MONDAY:e=>{const{normalize:t}=e;return t(["Monday"])},PICTURE:e=>{const{normalize:t}=e;return t(["Picture"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Picture edition"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Update picture"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Remove picture"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Preferences edition"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Profile edition"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Registration date"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Sports preferences edition"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Sunday"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["account"])},APPS:e=>{const{normalize:t}=e;return t(["apps"])},PICTURE:e=>{const{normalize:t}=e;return t(["picture"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["preferences"])},PROFILE:e=>{const{normalize:t}=e;return t(["profile"])},SPORTS:e=>{const{normalize:t}=e;return t(["sports"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["action"])},COLOR:e=>{const{normalize:t}=e;return t(["color"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["disabled by admin"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["active"])},LABEL:e=>{const{normalize:t}=e;return t(["label"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["stopped speed threshold"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Your account has been updated successfully. Please check your email to confirm your new email address."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Your account has been created successfully."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["A link to activate your account has been emailed to the address provided."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Your account has been updated successfully."])},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Units for distance"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Imperial system (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Metric system (m, km)"])}},TIMEZONE:e=>{const{normalize:t}=e;return t(["Timezone"])}},REGISTER:e=>{const{normalize:t}=e;return t(["Register"])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Resend account confirmation email"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Sorry, registration is disabled."])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Reset your password"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["show password"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["This user account is inactive."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["user picture"])},USERNAME:e=>{const{normalize:t}=e;return t(["Username"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(['3 to 30 characters required, only alphanumeric characters and the underscore character "_" allowed.'])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Add a workout"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["analysis"])},ASCENT:e=>{const{normalize:t}=e;return t(["ascent"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["ave. speed"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["average speed"])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["back to workout"])},DATE:e=>{const{normalize:t}=e;return t(["date"])},DESCENT:e=>{const{normalize:t}=e;return t(["descent"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["display filters"])},DISTANCE:e=>{const{normalize:t}=e;return t(["distance"])},DURATION:e=>{const{normalize:t}=e;return t(["duration"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Edit the workout"])},ELEVATION:e=>{const{normalize:t}=e;return t(["elevation"])},END:e=>{const{normalize:t}=e;return t(["end"])},FROM:e=>{const{normalize:t}=e;return t(["from"])},GPX_FILE:e=>{const{normalize:t}=e;return t([".gpx file"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["hide filters"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Latest workouts"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Load more workouts"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["max. altitude"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["max files"])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["max size"])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["max. speed"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["min. altitude"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["No next segment"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Next workout"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["data from gpx, without any cleaning"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["No file provided"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["no folder inside"])},NO_MAP:e=>{const{normalize:t}=e;return t(["No map"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["No next segment"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["No next workout"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["No notes"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["No previous segment"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["No previous workout"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["No records."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["No workouts."])},NOTES:e=>{const{normalize:t}=e;return t(["notes"])},PAUSES:e=>{const{normalize:t}=e;return t(["pauses"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Previous segment"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Previous workout"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["record"]),t(["records"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Ave. speed"])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Farthest distance"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Highest ascent"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Longest duration"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Max. speed"])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["remaining characters"])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["segment"]),t(["segments"])])},SPEED:e=>{const{normalize:t}=e;return t(["speed"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["sport"]),t(["sports"])])},START:e=>{const{normalize:t}=e;return t(["start"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Start and finish"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["start elevation axis at zero"])},TITLE:e=>{const{normalize:t}=e;return t(["title"])},TO:e=>{const{normalize:t}=e;return t(["to"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["total duration"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Upload one!"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["humidity"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["temperature"])},WIND:e=>{const{normalize:t}=e;return t(["wind"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNE"])},NE:e=>{const{normalize:t}=e;return t(["NE"])},ENE:e=>{const{normalize:t}=e;return t(["ENE"])},E:e=>{const{normalize:t}=e;return t(["E"])},ESE:e=>{const{normalize:t}=e;return t(["ESE"])},SE:e=>{const{normalize:t}=e;return t(["SE"])},SSE:e=>{const{normalize:t}=e;return t(["SSE"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSW"])},SW:e=>{const{normalize:t}=e;return t(["SW"])},WSW:e=>{const{normalize:t}=e;return t(["WSW"])},W:e=>{const{normalize:t}=e;return t(["W"])},WNW:e=>{const{normalize:t}=e;return t(["WNW"])},NW:e=>{const{normalize:t}=e;return t(["NW"])},NNW:e=>{const{normalize:t}=e;return t(["NNW"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["clear day"])},"clear-night":e=>{const{normalize:t}=e;return t(["clear night"])},cloudy:e=>{const{normalize:t}=e;return t(["cloudy"])},fog:e=>{const{normalize:t}=e;return t(["fog"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["partly cloudy day"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["partly cloudy night"])},rain:e=>{const{normalize:t}=e;return t(["rain"])},sleet:e=>{const{normalize:t}=e;return t(["sleet"])},snow:e=>{const{normalize:t}=e;return t(["snow"])},wind:e=>{const{normalize:t}=e;return t(["wind"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["with .gpx file"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["without .gpx file"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["workout"]),t(["workouts"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["workout date"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete this workout?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t([".zip file"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["or .zip file containing .gpx files"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},6625:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Contacter l'administrateur"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee est un tracker d'activités sportives (en extérieur)."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["sous licence ",n(r(0))," (en) "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Code source (en)"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Action"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Activer le compte"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Actif"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Ajouter/retirer des droits d'administration, supprimer des comptes utilisateurs."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Application"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Email de l'administrateur pour contact "])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Nombre maximum d'utilisateurs actifs "])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["Si égal à 0, pas limite d'inscription"])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Nombre max. de fichiers dans une archive zip "])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["non renseigné"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Taille max. des fichiers (en Mo) "])},TITLE:e=>{const{normalize:t}=e;return t(["Configuration de l'application"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Taille max. des archives zip (en Mo) "])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Revenir à l'admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Êtes-vous sûr de vouloir supprimer le compte de l'utilisateur ",n(r(0))," ? Toutes les données seront définitivement."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Êtes-vous sûr de vouloir réinitialiser le mot de passe de l'utilisateur ",n(r(0))," ?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Adresse email actuelle"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Supprimer l'utilisateur"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["L'envoi d'emails est désactivé."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Activer/désactiver des sports."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["Nouvelle adresse email"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Le mot de passe a été réinitialisé."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Les inscriptions sont actuellement désactivées."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Les inscriptions sont actuellement activées."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Réinit. le mot de passe"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Actif"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["des séances existent"])},IMAGE:e=>{const{normalize:t}=e;return t(["Image"])},LABEL:e=>{const{normalize:t}=e;return t(["Label"])}},TITLE:e=>{const{normalize:t}=e;return t(["Administration - Sports"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Configurer l'application (nombre maximum d'utilisateurs inscrits, taille maximale des fichers)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Changer l'email"])},USER:e=>{const{normalize:t,plural:n}=e;return n([t(["utilisateur"]),t(["utilisateurs"])])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["L'adresse email a été mise à jour."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Ajouter les droits d'admin"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Retirer les droits d'admin"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["status administrateur"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["date d'inscription"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["statut du compte"])},USERNAME:e=>{const{normalize:t}=e;return t(["nom d'utilisateur"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["nombre de séances"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Erreur. Veuillez réessayer ou contacter l'administrateur."])},"at least one file in zip archive exceeds size limit, please check the archive":e=>{const{normalize:t}=e;return t(["Au moins un fichier de l'archive zip dépasse la taille maximale, veuillez vérifier l'archive."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["Courriel : une adresse électronique valide doit être fournie."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Erreur lors du traitement du fichier gpx."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Erreur lors de l'analyse du fichier."])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Erreur lors de la récupération de la configuration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Erreur lors de la mise à jour de la configuration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Erreur, veuillez réessayer ou contacter l'administrateur."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Erreur, les inscriptions sont désactivées."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["Extension de fichier non autorisée."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["La taille du fichier est supérieure à la limite autorisée."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Identifiants invalides."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Données fournies incorrectes."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Jeton de connexion invalide, merci de vous reconnecter."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Jeton de connexion, merci de vous reconnecter."])},"no file part":e=>{const{normalize:t}=e;return t(["Pas de fichier fourni."])},"no selected file":e=>{const{normalize:t}=e;return t(["Pas de fichier sélectionné."])},"Network Error":e=>{const{normalize:t}=e;return t(["Erreur réseau."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["La nouvelle addresse électronique doit être differente de l'adresse actuelle"])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Mot de passe : les mots de passe saisis sont différents."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Merci de fournir un jeton de connexion valide."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Ce sport n'existe pas."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Signature expirée. Merci de vous reconnecter."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Désolé, ce nom d'utilisateur est déjà utilisé."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Inscription validée."])},"the number of files in the archive exceeds the limit":e=>{const{normalize:t}=e;return t(["Le nombre de fichiers de l'archive dépasse la limite."])},"user does not exist":e=>{const{normalize:t}=e;return t(["L'utilisateur n'existe pas."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["Une adresse électronique doit être fournie pour le contact de l'administrateur"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["Vous ne pouvez pas supprimer votre compte, aucun autre utilisateur n'a des droits d'administration."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["Vous n'avez pas les permissions nécessaires."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["précédent"])},NEXT:e=>{const{normalize:t}=e;return t(["suivant"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Renvoyer le message de confirmation"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Autoriser"])},BACK:e=>{const{normalize:t}=e;return t(["Retour"])},CANCEL:e=>{const{normalize:t}=e;return t(["Annuler"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Réinitialiser"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Supprimer mon compte"])},DISABLE:e=>{const{normalize:t}=e;return t(["Désactiver"])},EDIT:e=>{const{normalize:t}=e;return t(["Modifier"])},ENABLE:e=>{const{normalize:t}=e;return t(["Activer"])},FILTER:e=>{const{normalize:t}=e;return t(["Filtrer"])},LOGIN:e=>{const{normalize:t}=e;return t(["Se connecter"])},NO:e=>{const{normalize:t}=e;return t(["Non"])},REGISTER:e=>{const{normalize:t}=e;return t(["S'inscrire"])},RESET:e=>{const{normalize:t}=e;return t(["Réinit."])},SUBMIT:e=>{const{normalize:t}=e;return t(["Valider"])},YES:e=>{const{normalize:t}=e;return t(["Oui"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["à propos"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Confirmation"])},CONTACT:e=>{const{normalize:t}=e;return t(["contact"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["jour"]),t(["jours"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Affiché"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["documentation (en)"])},HERE:e=>{const{normalize:t}=e;return t(["ici"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Masqué"])},HOME:e=>{const{normalize:t}=e;return t(["Accueil"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["trier par "])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["tri"])},ASC:e=>{const{normalize:t}=e;return t(["ascendant"])},DESC:e=>{const{normalize:t}=e;return t(["descendant"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["par page"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Total"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Tableau de bord"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["Ce mois-ci"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Erreur. Veuillez réessayer ou contacter l'administrateur."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["L'application semble rencontrer quelques problèmes.
Veuillez réessayer plus tard ou contacter l'administrateur."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Page introuvable"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Séance introuvable"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Une erreur s'est produite"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Ajouter une nouvelle application OAuth2"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["Identifiant"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Secret"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Description de l'application"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Créée le"])},NAME:e=>{const{normalize:t}=e;return t(["Nom de l'application"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["URL de redirection"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Scope"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture à la configuration de l'application."])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes auth."])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes auth."])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes users."])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes users."])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes workouts."])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes workouts."])}},URL:e=>{const{normalize:t}=e;return t(["URL de l'application"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Application créée avec succès. Assurez-vous de copier le secret maintenant, il ne s'affichera plus."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr de vouloir supprimer cette application ?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["L'application ",n(r(0))," demande les accès suivants :"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["Applications OAuth2"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Autoriser ",n(r(0))," à utiliser votre compte ?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["copier dans le presse papier"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Supprimer l'application"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Ajouter une application"])},NO_APP:e=>{const{normalize:t}=e;return t(["Application introuvable !"])},NO_APPS:e=>{const{normalize:t}=e;return t(["pas de applications"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["pas de description"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Révoquer tous les jetons"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr de vouloir révoquer tous les jetons ?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["Tous les jetons associés existants ont été révoqués."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Transport)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Virtuel)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Randonnée"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["VTT"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["VTT (Électrique)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Aviron"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Course"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Ski (Alpin)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Ski (Randonnée)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Raquettes"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Marche"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistiques"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["semaine"])},month:e=>{const{normalize:t}=e;return t(["mois"])},year:e=>{const{normalize:t}=e;return t(["année"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Vous n'avez pas reçu les instructions ?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Vérifiez vos courriels. Un nouveau courriel de confirmation a été envoyé à l'adresse électronique fournie."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Vous avez déjà un compte ?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr·e de vouloir supprimer votre compte ? Toutes les données seront définitivement effacés"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Mot de passe actuel"])},EMAIL:e=>{const{normalize:t}=e;return t(["Courriel"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Saisissez une adresse électronique valide."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Saisissez un mot de passe"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Filtrer sur le nom d'utilisateur"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["masquer le mot de passe"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Jeton invalide, veuillez demander une nouvelle réinitialisation de mot de passe."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Langue"])},LOG_IN:e=>{const{normalize:t}=e;return t(["connecter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Se connecter"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Se déconnecter"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["Nouveau mot de passe"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["Aucun utilisateur trouvé."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Mot de passe"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["8 caractères minimum."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Mot de passe oublié ?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Réinitialisation du mot de passe"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Vérifiez vos courriels. Si vote adresse est dans notre base de données, vous recevrez un courriel avec un lien pour réinitialiser votre mot de passe."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["faible"])},AVERAGE:e=>{const{normalize:t}=e;return t(["moyenne"])},GOOD:e=>{const{normalize:t}=e;return t(["bonne"])},STRONG:e=>{const{normalize:t}=e;return t(["forte"])},LABEL:e=>{const{normalize:t}=e;return t(["robustesse du mot de passe"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Évitez les substitutions de lettres prévisibles comme ","@"," pour a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Évitez les orthographes inversées des mots courants."])},allUppercase:e=>{const{normalize:t}=e;return t(["Mettez quelques lettres en majuscules, mais pas toutes."])},capitalization:e=>{const{normalize:t}=e;return t(["Capitalisez mais pas seulement la première lettre."])},dates:e=>{const{normalize:t}=e;return t(["Évitez les dates et les années qui vous sont associées. (ex : date ou année de naissance)."])},recentYears:e=>{const{normalize:t}=e;return t(["Évitez les dernières années."])},associatedYears:e=>{const{normalize:t}=e;return t(["Évitez les années qui vous sont associées. (ex : date de naissance)."])},sequences:e=>{const{normalize:t}=e;return t(["Évitez les séquences de caractères courantes."])},repeated:e=>{const{normalize:t}=e;return t(["Évitez les mots et les caractères répétés."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Utilisez des motifs de clavier plus longs et changez de sens de frappe plusieurs fois."])},anotherWord:e=>{const{normalize:t}=e;return t(["Ajoutez des mots moins courants."])},useWords:e=>{const{normalize:t}=e;return t(["Utilisez plusieurs mots, mais évitez les phrases courantes."])},noNeed:e=>{const{normalize:t}=e;return t(["Vous pouvez créer des mots de passe forts sans utiliser de symboles, de chiffres ou de lettres majuscules."])},pwned:e=>{const{normalize:t}=e;return t(["Si vous utilisez ce mot de passe ailleurs, vous devriez le modifier."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Votre mot de passe a été mis à jour. Cliquez ",n(r(0))," pour vous connecter."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour du compte"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Données relatives au dénivelé positif (records, total)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Revenir au profil"])},BIO:e=>{const{normalize:t}=e;return t(["Bio"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Date de naissance"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Format d'affichage de la date"])},EDIT:e=>{const{normalize:t}=e;return t(["Modifier le profil"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Modifier les préférences"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Modifier les préférences des sports"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Veuillez vous ",n(r(0))," pour changer de nouveau votre adresse électronique ou contacter l'administrateur"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["Premier jour de la semaine"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["Prénom"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Langue"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Nom"])},LOCATION:e=>{const{normalize:t}=e;return t(["Lieu"])},MONDAY:e=>{const{normalize:t}=e;return t(["Lundi"])},PICTURE:e=>{const{normalize:t}=e;return t(["Image de profil"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour de l'image de profil"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Mettre à jour l'image"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Supprimer"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour des préférences"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour du profil"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Date d'inscription"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour des préférences des sports"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Dimanche"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["compte"])},APPS:e=>{const{normalize:t}=e;return t(["apps"])},PICTURE:e=>{const{normalize:t}=e;return t(["image"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["préférences"])},PROFILE:e=>{const{normalize:t}=e;return t(["profil"])},SPORTS:e=>{const{normalize:t}=e;return t(["sports"])}},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Unités pour les distances"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Système impérial (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Système métrique (m, km)"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["action"])},COLOR:e=>{const{normalize:t}=e;return t(["couleur"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["désactivé par l'administrateur"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["actif"])},LABEL:e=>{const{normalize:t}=e;return t(["label"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["seuil de vitesse arrêtée"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Votre compte a été modifié avec succès. Veuillez vérifier votre boîte de réception pour valider votre nouvelle adresse électronique."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Votre compte a été créé avec succès."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["Un lien pour activer votre compte a été envoyé à l'adresse électronique fournie."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Votre compte a été modifié avec succès."])},TIMEZONE:e=>{const{normalize:t}=e;return t(["Fuseau horaire"])}},REGISTER:e=>{const{normalize:t}=e;return t(["S'inscrire"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Désolé, les inscriptions sont désactivées."])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Envoyer à nouveau le courriel de confirmation de compte"])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Réinitialiser votre mot de passe"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["afficher le mot de passe"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["Le compte de cet utilisateur est inactif."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["photo de l'utilisateur"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nom d'utilisateur"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(["3 à 30 caractères requis, seuls les caractères alphanumériques et le caractère _ sont autorisés."])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Ajouter une séance"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["analyse"])},ASCENT:e=>{const{normalize:t}=e;return t(["dénivelé positif"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["vitesse moyenne"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["vitesse moy."])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["revenir à la séance"])},DATE:e=>{const{normalize:t}=e;return t(["date"])},DESCENT:e=>{const{normalize:t}=e;return t(["dénivelé négatif"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["afficher les filtres"])},DISTANCE:e=>{const{normalize:t}=e;return t(["distance"])},DURATION:e=>{const{normalize:t}=e;return t(["durée"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Modifier la séance"])},ELEVATION:e=>{const{normalize:t}=e;return t(["altitude"])},END:e=>{const{normalize:t}=e;return t(["fin"])},FROM:e=>{const{normalize:t}=e;return t(["à partir de"])},GPX_FILE:e=>{const{normalize:t}=e;return t(["fichier .gpx"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["masquer les filtres"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Séances récentes"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Charger les séances suivantes"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["altitude max"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["fichiers max. "])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["taille max. "])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["vitesse max"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["altitude min"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Segment suivant"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Séance suivante"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["données issues du fichier gpx, sans correction"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["Pas de fichier fourni"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["pas de répertoire"])},NO_MAP:e=>{const{normalize:t}=e;return t(["Pas de carte"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Pas de segment suivant"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Pas de séance suivante"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["Pas de notes"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Pas de segment précédent"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Pas de séance précédente"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["Pas de records."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["Pas de séances."])},NOTES:e=>{const{normalize:t}=e;return t(["notes"])},PAUSES:e=>{const{normalize:t}=e;return t(["pauses"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Segment précédent"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Séance précédente"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["record"]),t(["records"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Vitesse moy."])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Distance la + longue"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Dénivelé positif le + élevé"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Durée la + longue"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Vitesse max."])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["nombre de caractères restants "])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["segment"]),t(["segments"])])},SPEED:e=>{const{normalize:t}=e;return t(["vitesse"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["sport"]),t(["sports"])])},START:e=>{const{normalize:t}=e;return t(["début"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Départ et arrivée"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["démarrer l'axe de l'altitude à 0"])},TITLE:e=>{const{normalize:t}=e;return t(["titre"])},TO:e=>{const{normalize:t}=e;return t(["jusqu'au"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["durée totale"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Ajoutez votre première séance !"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["humidité"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["température"])},WIND:e=>{const{normalize:t}=e;return t(["vent"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNE"])},NE:e=>{const{normalize:t}=e;return t(["NE"])},ENE:e=>{const{normalize:t}=e;return t(["ENE"])},E:e=>{const{normalize:t}=e;return t(["E"])},ESE:e=>{const{normalize:t}=e;return t(["ESE"])},SE:e=>{const{normalize:t}=e;return t(["SE"])},SSE:e=>{const{normalize:t}=e;return t(["SSE"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSO"])},SW:e=>{const{normalize:t}=e;return t(["SO"])},WSW:e=>{const{normalize:t}=e;return t(["OSO"])},W:e=>{const{normalize:t}=e;return t(["O"])},WNW:e=>{const{normalize:t}=e;return t(["ONO"])},NW:e=>{const{normalize:t}=e;return t(["NO"])},NNW:e=>{const{normalize:t}=e;return t(["NNO"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["ensoleillé"])},"clear-night":e=>{const{normalize:t}=e;return t(["nuit claire"])},cloudy:e=>{const{normalize:t}=e;return t(["nuageux"])},fog:e=>{const{normalize:t}=e;return t(["brouillard"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["partiellement nuageux"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["nuit partiellement nuageuse"])},rain:e=>{const{normalize:t}=e;return t(["pluie"])},sleet:e=>{const{normalize:t}=e;return t(["neige fondue"])},snow:e=>{const{normalize:t}=e;return t(["neige"])},wind:e=>{const{normalize:t}=e;return t(["venteux"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["avec un fichier .gpx"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["sans fichier .gpx"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["séance"]),t(["séances"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["date de la séance"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Etes-vous sûr de vouloir supprimer cette séance ?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t(["archive .zip"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["ou une archive .zip contenant des fichiers .gpx"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},8891:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={},a={},o={},s={},i={},l={},c={},u={},d={},m={},_={},E={},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},4970:function(e,t,n){"use strict";var r=n(6775),a=n(6429),o=n(9963),s=n(2343),i=n(5205);(0,i.z)("/service-worker.js",{ready(){console.log("App is being served from cache by a service worker.\nFor more details, visit https://goo.gl/AFskqB")},registered(){console.log("Service worker has been registered.")},cached(){console.log("Content has been cached for offline use.")},updatefound(){console.log("New content is downloading.")},updated(){console.log("New content is available; please refresh.")},offline(){console.log("No internet connection found. App is running in offline mode.")},error(e){console.error("Error during service worker registration:",e)}});var l=n(6252),c=n(2262),u=n(3577);const d=e=>((0,l.dD)("data-v-2c73279e"),e=e(),(0,l.Cn)(),e),m={id:"footer"},_={class:"footer-items"},E={class:"footer-item"},S=d((()=>(0,l._)("strong",null,"FitTrackee",-1))),T=d((()=>(0,l._)("div",{class:"footer-item bullet"},"•",-1))),p={class:"footer-item"},A={key:0,class:"footer-item bullet"},O={key:1,class:"footer-item"},R=["href"],I=d((()=>(0,l._)("div",{class:"footer-item bullet"},"•",-1))),U={class:"footer-item"},g={href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer"};var N=(0,l.aZ)({__name:"Footer",props:{version:null,adminContact:null},setup(e){const t=e,{adminContact:n,version:r}=(0,c.BK)(t);return(e,t)=>{const a=(0,l.up)("router-link");return(0,l.wg)(),(0,l.iD)("div",m,[(0,l._)("div",_,[(0,l._)("div",E,[S,(0,l.Uk)(" v"+(0,u.zw)((0,c.SU)(r)),1)]),T,(0,l._)("div",p,[(0,l.Wm)(a,{to:"/about"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("common.ABOUT")),1)])),_:1})]),(0,c.SU)(n)?((0,l.wg)(),(0,l.iD)("div",A,"•")):(0,l.kq)("",!0),(0,c.SU)(n)?((0,l.wg)(),(0,l.iD)("div",O,[(0,l._)("a",{href:`mailto:${(0,c.SU)(n)}`},(0,u.zw)(e.$t("common.CONTACT")),9,R)])):(0,l.kq)("",!0),I,(0,l._)("div",U,[(0,l._)("a",g,(0,u.zw)(e.$t("common.DOCUMENTATION")),1)])])])}}}),h=n(3744);const z=(0,h.Z)(N,[["__scopeId","data-v-2c73279e"]]);var w=z,f=(n(7658),n(6595)),v=n(5801),C=n(9917),D=n(6287);const k=e=>((0,l.dD)("data-v-95c1cc02"),e=e(),(0,l.Cn)(),e),P={id:"nav"},L={class:"nav-container"},M={class:"nav-app-name"},b={class:"nav-items-close"},y=k((()=>(0,l._)("div",{class:"app-name"},"FitTrackee",-1))),G={key:0,class:"nav-items-group"},F=k((()=>(0,l._)("div",{class:"nav-item nav-separator"},null,-1))),W={class:"nav-items-user-menu"},K={key:0,class:"nav-items-group"},Y={class:"nav-item nav-profile-img"},x={key:1,class:"nav-items-group"},$=k((()=>(0,l._)("i",{class:"fa fa-language"},null,-1)));var B=(0,l.aZ)({__name:"NavBar",emits:["menuInteraction"],setup(e,{emit:t}){const n=(0,C.o)(),r=(0,l.Fl)((()=>n.getters[v.YN.GETTERS.AUTH_USER_PROFILE])),a=(0,l.Fl)((()=>n.getters[v.YN.GETTERS.IS_AUTHENTICATED])),o=(0,l.Fl)((()=>n.getters[v.SY.GETTERS.LANGUAGE])),s=(0,c.iH)(!1);function i(){s.value=!0,t("menuInteraction",!0)}function d(){s.value=!1,t("menuInteraction",!1)}function m(e){n.dispatch(v.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,e.value.toString())}function _(){n.dispatch(v.YN.ACTIONS.LOGOUT)}return(e,t)=>{const n=(0,l.up)("router-link"),E=(0,l.up)("Dropdown");return(0,l.wg)(),(0,l.iD)("div",P,[(0,l._)("div",L,[(0,l._)("div",M,[(0,l._)("div",{class:"nav-item app-name",onClick:t[0]||(t[0]=t=>e.$router.push("/"))}," FitTrackee ")]),(0,l._)("div",{class:(0,u.C_)(["nav-icon-open",{"menu-open":s.value}])},[(0,l._)("i",{class:"fa fa-bars hamburger-icon",onClick:t[1]||(t[1]=e=>i())})],2),(0,l._)("div",{class:(0,u.C_)(["nav-items",{"menu-open":s.value}])},[(0,l._)("div",b,[y,(0,l._)("i",{class:(0,u.C_)(["fa fa-close close-icon nav-item",{"menu-closed":!s.value}]),onClick:t[2]||(t[2]=e=>d())},null,2)]),(0,l._)("div",{class:"nav-items-app-menu",onClick:t[3]||(t[3]=e=>d())},[(0,c.SU)(a)?((0,l.wg)(),(0,l.iD)("div",G,[(0,l.Wm)(n,{class:"nav-item",to:"/"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("dashboard.DASHBOARD")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/workouts"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,u.kC)(e.$t("workouts.WORKOUT",2))),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/statistics"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("statistics.STATISTICS")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/workouts/add"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("workouts.ADD_WORKOUT")),1)])),_:1}),(0,c.SU)(a)&&(0,c.SU)(r).admin?((0,l.wg)(),(0,l.j4)(n,{key:0,class:"nav-item",to:"/admin"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("admin.ADMIN")),1)])),_:1})):(0,l.kq)("",!0),F])):(0,l.kq)("",!0)]),(0,l._)("div",W,[(0,c.SU)(a)?((0,l.wg)(),(0,l.iD)("div",K,[(0,l._)("div",Y,[(0,l.Wm)(f.Z,{user:(0,c.SU)(r)},null,8,["user"])]),(0,l.Wm)(n,{class:"nav-item",to:"/profile",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,c.SU)(r).username),1)])),_:1}),(0,l._)("div",{class:"nav-item nav-link",onClick:_},(0,u.zw)(e.$t("user.LOGOUT")),1)])):((0,l.wg)(),(0,l.iD)("div",x,[(0,l.Wm)(n,{class:"nav-item",to:"/login",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("user.LOGIN")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/register",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("user.REGISTER")),1)])),_:1})])),(0,c.SU)(D.mT)&&(0,c.SU)(o)?((0,l.wg)(),(0,l.j4)(E,{key:2,class:"nav-item",options:(0,c.SU)(D.mT),selected:(0,c.SU)(o),onSelected:m},{default:(0,l.w5)((()=>[$])),_:1},8,["options","selected"])):(0,l.kq)("",!0)])],2)])])}}});const Z=(0,h.Z)(B,[["__scopeId","data-v-95c1cc02"]]);var H=Z,q=n(7167);const V={id:"no-config"},j={class:"error-page"},X={class:"error-img"},J=["innerHTML"];var Q=(0,l.aZ)({__name:"NoConfig",setup(e){return(e,t)=>((0,l.wg)(),(0,l.iD)("div",V,[(0,l._)("div",j,[(0,l._)("div",X,[(0,l.Wm)(q.Z)]),(0,l._)("p",{class:"error-message",innerHTML:e.$t("error.APP_ERROR")},null,8,J)])]))}});const ee=(0,h.Z)(Q,[["__scopeId","data-v-47759238"]]);var te=ee;const ne=(0,l._)("div",{id:"top"},null,-1),re={key:0,class:"app-container"},ae={class:"app-loading"},oe={class:"container scroll"},se=(0,l._)("i",{class:"fa fa-chevron-up","aria-hidden":"true"},null,-1),ie=[se];var le=(0,l.aZ)({__name:"App",setup(e){const t=(0,C.o)(),n=(0,l.Fl)((()=>t.getters[v.SY.GETTERS.APP_CONFIG])),r=(0,l.Fl)((()=>t.getters[v.SY.GETTERS.APP_LOADING])),a=(0,c.iH)(!1),o=(0,c.iH)(!1);function s(e){a.value=e}function i(e){return e.getBoundingClientRect().top=0}function d(){window.onscroll=()=>{const e=document.querySelector("#bottom");o.value=null!==e&&i(e)}}function m(){window.scrollTo({top:0,behavior:"smooth"}),setTimeout((()=>{o.value=!1}),300)}function _(){let e="en";try{const t=navigator.language.split("-")[0];t in D.v1&&(e=t)}catch(n){e="en"}t.dispatch(v.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,e)}return(0,l.wF)((()=>{_(),t.dispatch(v.SY.ACTIONS.GET_APPLICATION_CONFIG)})),(0,l.bv)((()=>d())),(e,t)=>{const i=(0,l.up)("Loader"),d=(0,l.up)("router-view");return(0,l.wg)(),(0,l.iD)(l.HY,null,[ne,(0,l.Wm)(H,{onMenuInteraction:s}),(0,c.SU)(r)?((0,l.wg)(),(0,l.iD)("div",re,[(0,l._)("div",ae,[(0,l.Wm)(i)])])):((0,l.wg)(),(0,l.iD)("div",{key:1,class:(0,u.C_)(["app-container",{"hide-scroll":a.value}])},[(0,c.SU)(n)?((0,l.wg)(),(0,l.j4)(d,{key:0})):((0,l.wg)(),(0,l.j4)(te,{key:1}))],2)),(0,l._)("div",oe,[(0,l._)("div",{class:(0,u.C_)(["scroll-button",{"display-button":o.value}]),onClick:m},ie,2)]),(0,c.SU)(n)?((0,l.wg)(),(0,l.j4)(w,{key:2,version:(0,c.SU)(n)?(0,c.SU)(n).version:"",adminContact:(0,c.SU)(n).admin_contact},null,8,["version","adminContact"])):(0,l.kq)("",!0)],64)}}});const ce=le;var ue=ce,de=n(2540),me=n(5073),_e=n(2894);const Ee={class:"alert-message"},Se=["innerHTML"];var Te=(0,l.aZ)({__name:"AlertMessage",props:{message:null},setup(e){const t=e,{message:n}=(0,c.BK)(t);return(e,t)=>((0,l.wg)(),(0,l.iD)("div",Ee,[(0,l._)("div",{innerHTML:e.$t((0,c.SU)(n))},null,8,Se)]))}});const pe=(0,h.Z)(Te,[["__scopeId","data-v-69d7e4ff"]]);var Ae=pe,Oe=n(2531);const Re={class:"custom-textarea"},Ie=["id","name","maxLenght","disabled"],Ue={class:"remaining-chars"};var ge=(0,l.aZ)({__name:"CustomTextArea",props:{name:null,charLimit:{default:500},disabled:{type:Boolean,default:!1},input:{default:""}},emits:["updateValue"],setup(e,{emit:t}){const n=e,r=(0,c.iH)("");function a(e){t("updateValue",e.target.value)}return(0,l.YP)((()=>n.input),(e=>{r.value=null===e?"":e})),(t,n)=>((0,l.wg)(),(0,l.iD)("div",Re,[(0,l.wy)((0,l._)("textarea",{id:e.name,name:e.name,maxLenght:e.charLimit,disabled:e.disabled,"onUpdate:modelValue":n[0]||(n[0]=e=>r.value=e),onInput:a},null,40,Ie),[[o.nr,r.value]]),(0,l._)("div",Ue,(0,u.zw)(t.$t("workouts.REMAINING_CHARS"))+": "+(0,u.zw)(r.value.length)+"/"+(0,u.zw)(e.charLimit),1)]))}});const Ne=(0,h.Z)(ge,[["__scopeId","data-v-8cf5cc64"]]);var he=Ne,ze=n(3649),we=(0,l.aZ)({__name:"Distance",props:{distance:null,unitFrom:null,useImperialUnits:{type:Boolean},digits:{default:2},displayUnit:{type:Boolean,default:!0},speed:{type:Boolean,default:!1},strong:{type:Boolean,default:!1}},setup(e){const t=e,{digits:n,displayUnit:r,distance:a,speed:o,strong:s,unitFrom:i,useImperialUnits:d}=(0,c.BK)(t),m=(0,l.Fl)((()=>d.value?ze.Dl[i.value].defaultTarget:i.value)),_=(0,l.Fl)((()=>d.value?(0,ze.sC)(a.value,i.value,m.value,n.value):parseFloat(a.value.toFixed(n.value))));return(e,t)=>((0,l.wg)(),(0,l.iD)(l.HY,null,[(0,l._)("span",{class:(0,u.C_)(["distance",{strong:(0,c.SU)(s)}])},(0,u.zw)((0,c.SU)(_)),3),(0,l.Uk)(" "+(0,u.zw)(" ")+" "),(0,c.SU)(r)?((0,l.wg)(),(0,l.iD)("span",{key:0,class:(0,u.C_)(["unit",{strong:(0,c.SU)(s)}])},(0,u.zw)((0,c.SU)(m))+(0,u.zw)((0,c.SU)(o)?"/h":""),3)):(0,l.kq)("",!0)],64))}});const fe=(0,h.Z)(we,[["__scopeId","data-v-f46ff1d6"]]);var ve=fe,Ce=n(2201);const De={class:"dropdown-wrapper"},ke={key:0,class:"dropdown-list"},Pe=["onClick"];var Le=(0,l.aZ)({__name:"Dropdown",props:{options:null,selected:null},emits:{selected:e=>e},setup(e,{emit:t}){const n=e,r=(0,Ce.yj)(),a=(0,c.iH)(!1),o=n.options.map((e=>e));function s(){a.value=!a.value}function i(e){t("selected",e),a.value=!1}return(0,l.YP)((()=>r.path),(()=>a.value=!1)),(t,n)=>((0,l.wg)(),(0,l.iD)("div",De,[(0,l._)("div",{class:"dropdown-selected",onClick:s},[(0,l.WI)(t.$slots,"default")]),a.value?((0,l.wg)(),(0,l.iD)("ul",ke,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)((0,c.SU)(o),((t,n)=>((0,l.wg)(),(0,l.iD)("li",{class:(0,u.C_)(["dropdown-item",{selected:t.value===e.selected}]),key:n,onClick:e=>i(t)},(0,u.zw)(t.label),11,Pe)))),128))])):(0,l.kq)("",!0)]))}});const Me=(0,h.Z)(Le,[["__scopeId","data-v-2d3b4eac"]]);var be=Me;const ye={class:"error-message"},Ge={key:0},Fe={key:1};var We=(0,l.aZ)({__name:"ErrorMessage",props:{message:null},setup(e){const t=e,{message:n}=(0,c.BK)(t);return(e,t)=>((0,l.wg)(),(0,l.iD)("div",ye,[Array.isArray((0,c.SU)(n))?((0,l.wg)(),(0,l.iD)("ul",Ge,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)((0,c.SU)(n),((t,n)=>((0,l.wg)(),(0,l.iD)("li",{key:n},(0,u.zw)(e.$t(t)),1)))),128))])):((0,l.wg)(),(0,l.iD)("div",Fe,(0,u.zw)(e.$t((0,c.SU)(n))),1))]))}});const Ke=(0,h.Z)(We,[["__scopeId","data-v-2659a79a"]]);var Ye=Ke;const xe={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve"},$e=(0,l._)("desc",{id:"cyclingSportDescription"}," silhouette of a person riding a bicycle ",-1),Be=(0,l._)("g",null,[(0,l._)("path",{d:"M321.097,112.359c20.973,12.338,47.985,5.315,60.293-15.652c12.34-20.973,5.35-47.974-15.623-60.304\n\t\tc-21.009-12.332-47.99-5.317-60.314,15.65C293.129,73.036,300.103,100.027,321.097,112.359z"}),(0,l._)("path",{d:"M393.081,264.102c-2.414,0-4.8,0.194-7.169,0.362l-14.431-71.605l4.702-1.757c10.666-3.987,16.093-15.868,12.098-26.54\n\t\tc-3.994-10.681-15.946-16.084-26.531-12.09l-51.823,19.38l-2.321-18.864c6.3-13.193,5.541-29.78-4.767-41.482\n\t\tc-21.224-24.092-47.12-12.508-55.191-5.976l-106.884,86.555l0.016,0.024c-3.319,2.893-6.089,6.485-7.86,10.842\n\t\tc-2.191,5.396-2.596,11.067-1.564,16.384c-8.503,0.669-15.255,7.571-15.255,16.246c0,9.085,7.346,16.44,16.432,16.48l-6.797,15.906\n\t\tc-8.62-2.465-17.674-3.866-27.066-3.866C44.27,264.102,0,308.354,0,362.754c0,54.403,44.27,98.663,98.668,98.663\n\t\tc54.403,0,98.652-44.26,98.652-98.663c0-36.228-19.683-67.867-48.858-85.024l10.957-25.652h17.767l60.281,24.462l-32.201,52.773\n\t\tc-8.297,13.612-3.994,31.382,9.615,39.685c4.691,2.86,9.878,4.229,15,4.229c9.729,0,19.234-4.929,24.677-13.838l29.339-48.095\n\t\tl19.072,11.511c-5.447,12.227-8.54,25.726-8.54,39.95c0,54.403,44.254,98.663,98.652,98.663c54.402,0,98.656-44.26,98.656-98.663\n\t\tC491.737,308.354,447.483,264.102,393.081,264.102z M98.668,436.671c-40.756,0-73.923-33.161-73.923-73.917\n\t\tc0-40.756,33.167-73.909,73.923-73.909c5.944,0,11.649,0.896,17.188,2.224l-20.476,47.893\n\t\tc-11.758,1.619-20.843,11.598-20.843,23.792c0,13.323,10.808,24.132,24.13,24.132c8.767,0,16.367-4.745,20.589-11.76h52.065\n\t\tC165.395,409.988,135.188,436.671,98.668,436.671z M171.322,350.383h-52.065c-0.355-0.588-0.708-1.176-1.112-1.732l20.476-47.901\n\t\tC155.679,311.776,167.793,329.595,171.322,350.383z M296.781,290.175l7.666-12.564c4.416-7.233,5.431-16.038,2.774-24.084\n\t\tc-2.661-8.046-8.718-14.515-16.562-17.704l-52.725-21.395l32.443-26.281l1.804,14.691c0.756,6.267,4.366,11.841,9.761,15.12\n\t\tc3.271,1.981,6.979,2.988,10.698,2.988c2.435,0,4.88-0.435,7.218-1.306l48.15-18.001l13.627,67.691\n\t\tc-18.268,6.162-34.117,17.51-45.848,32.314L296.781,290.175z M375.396,337.633l-38.003-22.94\n\t\tc7.877-9.118,17.787-16.319,29.205-20.734L375.396,337.633z M393.081,436.671c-40.757,0-73.907-33.161-73.907-73.917\n\t\tc0-9.544,1.965-18.597,5.268-26.983l44.541,26.888c0,0.032-0.016,0.064-0.016,0.095c0,13.323,10.808,24.132,24.114,24.132\n\t\tc13.322,0,24.118-10.81,24.118-24.132c0-10.478-6.721-19.307-16.06-22.64l-10.277-51.043c0.756-0.024,1.463-0.226,2.22-0.226\n\t\tc40.757,0,73.911,33.153,73.911,73.909C466.992,403.51,433.838,436.671,393.081,436.671z"})],-1),Ze=[$e,Be];function He(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",xe,Ze)}var qe={name:"CyclingSport"};const Ve=(0,h.Z)(qe,[["render",He]]);var je=Ve;const Xe={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Je=(0,l._)("desc",{id:"cyclingTransportDescription"}," silhouette of a person riding a bicycle (for transportation) ",-1),Qe=(0,l._)("g",{id:"g147"},[(0,l._)("path",{d:"m 189.097,82.359 c 20.97701,12.331184 47.97442,5.308784 60.293,-15.652 12.32942,-20.979222 5.35418,-47.981117 -15.623,-60.304 -21.00482,-12.3391184 -47.99,-5.317 -60.314,15.65 -12.324,20.983 -5.34599,47.967183 15.644,60.306 z",id:"path143"}),(0,l._)("path",{d:"m 393.081,264.102 c -2.414,0 -4.8,0.194 -7.169,0.362 l -14.431,-71.605 4.702,-1.757 c 10.666,-3.987 16.093,-15.868 12.098,-26.54 -3.994,-10.681 -15.946,-16.084 -26.531,-12.09 l -63.05508,-1.53717 C 284.04753,137.09803 248.90259,106.55858 243.33317,101.62481 217.77732,75.090916 186.1698,85.012419 178.0988,91.544419 L 140.764,192.085 l 0.016,0.024 c -3.319,2.893 -6.089,6.485 -7.86,10.842 -2.191,5.396 -2.596,11.067 -1.564,16.384 -8.503,0.669 -15.255,7.571 -15.255,16.246 0,9.085 7.346,16.44 16.432,16.48 l -6.797,15.906 c -8.62,-2.465 -17.674,-3.866 -27.066,-3.866 C 44.27,264.102 0,308.354 0,362.754 c 0,54.403 44.27,98.663 98.668,98.663 54.403,0 98.652,-44.26 98.652,-98.663 0,-36.228 -19.683,-67.867 -48.858,-85.024 l 10.957,-25.652 h 17.767 l 60.281,24.462 -32.201,52.773 c -8.297,13.612 -3.994,31.382 9.615,39.685 4.691,2.86 9.878,4.229 15,4.229 9.729,0 19.234,-4.929 24.677,-13.838 l 29.339,-48.095 19.072,11.511 c -5.447,12.227 -8.54,25.726 -8.54,39.95 0,54.403 44.254,98.663 98.652,98.663 54.402,0 98.656,-44.26 98.656,-98.663 0,-54.401 -44.254,-98.653 -98.656,-98.653 z M 98.668,436.671 c -40.756,0 -73.923,-33.161 -73.923,-73.917 0,-40.756 33.167,-73.909 73.923,-73.909 5.944,0 11.649,0.896 17.188,2.224 L 95.38,338.962 c -11.758,1.619 -20.843,11.598 -20.843,23.792 0,13.323 10.808,24.132 24.13,24.132 8.767,0 16.367,-4.745 20.589,-11.76 h 52.065 c -5.926,34.862 -36.133,61.545 -72.653,61.545 z m 72.654,-86.288 h -52.065 c -0.355,-0.588 -0.708,-1.176 -1.112,-1.732 l 20.476,-47.901 c 17.058,11.026 29.172,28.845 32.701,49.633 z m 125.459,-60.208 7.666,-12.564 c 4.416,-7.233 5.431,-16.038 2.774,-24.084 -2.661,-8.046 -8.718,-14.515 -16.562,-17.704 l -73.83357,-31.7176 16.7558,-45.21274 c 10.36934,4.13303 41.82171,27.90767 45.77423,28.08592 3.271,1.981 8.57725,1.46711 12.29625,1.46711 2.435,0 18.50584,0.70472 20.84384,-0.16628 L 343.32113,188.03378 361.635,269.33 c -18.268,6.162 -34.117,17.51 -45.848,32.314 z m 78.615,47.458 -38.003,-22.94 c 7.877,-9.118 17.787,-16.319 29.205,-20.734 z m 17.685,99.038 c -40.757,0 -73.907,-33.161 -73.907,-73.917 0,-9.544 1.965,-18.597 5.268,-26.983 l 44.541,26.888 c 0,0.032 -0.016,0.064 -0.016,0.095 0,13.323 10.808,24.132 24.114,24.132 13.322,0 24.118,-10.81 24.118,-24.132 0,-10.478 -6.721,-19.307 -16.06,-22.64 l -10.277,-51.043 c 0.756,-0.024 1.463,-0.226 2.22,-0.226 40.757,0 73.911,33.153 73.911,73.909 -10e-4,40.756 -33.155,73.917 -73.912,73.917 z",id:"path145"})],-1),et=[Je,Qe];function tt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Xe,et)}var nt={name:"CyclingTransport"};const rt=(0,h.Z)(nt,[["render",tt]]);var at=rt;const ot={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},st=(0,l.uE)(' silhouette of a person riding a bicycle with virtual indicator ',4),it=[st];function lt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",ot,it)}var ct={name:"CyclingVirtual"};const ut=(0,h.Z)(ct,[["render",lt]]);var dt=ut;const mt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 463.507 463.507",style:{"enable-background":"new 0 0 463.507 463.507"},"xml:space":"preserve"},_t=(0,l._)("desc",{id:"hikingDescription"},"silhouette of a person hiking",-1),Et=(0,l._)("g",null,[(0,l._)("path",{d:"M246.413,78.492c21.688,0,39.255-17.573,39.255-39.251c0-21.67-17.567-39.24-39.255-39.24\n\t\tc-21.652,0-39.242,17.57-39.242,39.24C207.171,60.919,224.761,78.492,246.413,78.492z"}),(0,l._)("path",{d:"M386.604,202.858c0-11.185-9.066-20.251-20.253-20.251h-68.479l-38.62-54.832l0.127-0.933\n\t\tc1.378-10.474-1.474-21.067-7.911-29.444c-6.441-8.378-15.932-13.852-26.408-15.23c-11.596-1.511-22.592,2.224-30.852,9.225V45.779\n\t\tc0-7.847-6.362-14.217-14.225-14.217H140.59c-7.867,0-14.225,6.37-14.225,14.217v168.953c0,20.68,15.821,37.476,35.979,39.446\n\t\tl-3.043,7.073l-23.859,90.136l-53.73,72.188c-8.006,10.768-5.794,25.987,4.984,34.001c4.348,3.245,9.443,4.811,14.491,4.811\n\t\tc7.422,0,14.729-3.385,19.511-9.795l56.529-75.945c1.851-2.484,3.213-5.299,4.003-8.289l16.266-61.414l44.521,40.877l-6.076,88.603\n\t\tc-0.917,13.393,9.177,24.99,22.58,25.908c0.552,0.04,1.124,0.056,1.691,0.056c12.66,0,23.339-9.819,24.208-22.642l6.882-100.264\n\t\tc0.508-7.364-2.371-14.572-7.815-19.564l-45.994-42.219l13.992-90.613l19.331,27.435c3.801,5.387,9.972,8.592,16.552,8.592h70.882\n\t\tl1.339,232.294c0,4.478,3.626,8.101,8.101,8.101c4.479,0,8.101-3.624,8.101-8.101l-1.339-234.036\n\t\tC381.588,218.245,386.604,211.15,386.604,202.858z"})],-1),St=[_t,Et];function Tt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",mt,St)}var pt={name:"Hiking"};const At=(0,h.Z)(pt,[["render",Tt]]);var Ot=At;const Rt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 503.162 503.162",style:{"enable-background":"new 0 0 503.162 503.162"},"xml:space":"preserve"},It=(0,l._)("desc",{id:"mountainBikingDescription"}," silhouette of a person riding a mountain bike ",-1),Ut=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M149.951,67.997c15.711-7.143,22.739-25.675,15.596-41.416c-7.124-15.701-25.723-22.682-41.453-15.539\n\t\t\tc-15.721,7.134-22.702,25.752-15.578,41.444C115.679,68.216,134.23,75.14,149.951,67.997z"}),(0,l._)("path",{d:"M87.517,89.072l-32.828,87.755c-1.979,5.967-1.683,12.594,1.1,18.733c4.055,8.922,12.604,14.525,21.755,15.271\n\t\t\tl76.873,6.244l29.137,64.184c4.122,9.046,14.832,13.148,23.906,9.017c9.075-4.131,13.072-14.859,8.951-23.944l-36.424-80.201\n\t\t\tc0,0-3.605-13.76-21.343-14.133l-43.873-2.572l21.009-55.166l31.671,20.588c5.584,3.663,10.997,3.682,15.1,1.722l55.051-24.997\n\t\t\tc17.069-7.755,6.952-30.036-10.108-22.29l-47.506,21.707l-53.55-34.846c0,0-11.638-8.013-24.241-2.285\n\t\t\tC102.205,73.858,91.112,77.243,87.517,89.072z"}),(0,l._)("path",{d:"M423.687,182.488l-2.61,15.042c-2.123,12.154-13.35,25.092-25.092,28.888l-3.711,1.195\n\t\t\tc3.041-16.543,1.282-34.148-6.215-50.633c-19.498-42.974-70.094-61.87-112.943-42.419\n\t\t\tc-42.878,19.479-61.936,70.017-42.438,112.981c17.069,37.562,57.881,56.744,96.534,47.966l-0.784,1.415\n\t\t\tc-5.968,10.796-20.817,19.221-33.144,18.8l-17.892-0.622c-12.336-0.411-30.514,5.002-40.603,12.116l-22.376,15.759\n\t\t\tc-10.107,7.104-28.276,12.632-40.612,12.354l-12.001-0.277c12.718-22.845,14.889-51.159,3.242-76.806\n\t\t\tc-19.517-42.955-70.074-61.879-113.019-42.381c-42.792,19.44-61.87,70.007-42.372,112.933\n\t\t\tc16.667,36.711,56.084,55.788,93.914,48.444l-1.32,2.056c-6.675,10.385-22.08,18.398-34.406,17.92l-32.79-1.291\n\t\t\tc-12.326-0.497-24.021,8.97-26.096,21.143l-2.62,15.339c-0.564,3.271-0.354,6.11,0.401,8.501c-0.43,1.778-0.736,3.548-0.736,5.326\n\t\t\tv9.562c0,10.557,8.568,19.125,19.125,19.125h460.932c10.557,0,19.115-8.568,19.106-19.125l-0.125-167.507\n\t\t\tc0-2.782-0.593-5.221-1.616-7.286c1.396-3.806,2.057-7.841,1.598-11.839l-4.677-40.497c-1.415-12.249-9.763-29.146-18.637-37.724\n\t\t\tl-36.127-34.951C434.712,167.418,425.79,170.325,423.687,182.488z"})])],-1),gt=[It,Ut];function Nt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Rt,gt)}var ht={name:"MountainBiking"};const zt=(0,h.Z)(ht,[["render",Nt]]);var wt=zt;const ft={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 503.162 503.162",style:{"enable-background":"new 0 0 503.162 503.162"},"xml:space":"preserve"},vt=(0,l.uE)(' silhouette of a person riding an electric mountain bike ',18),Ct=[vt];function Dt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",ft,Ct)}var kt={name:"MountainBikingElectric"};const Pt=(0,h.Z)(kt,[["render",Dt]]);var Lt=Pt;const Mt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 534.51 534.51",style:{"enable-background":"new 0 0 534.51 534.51"},"xml:space":"preserve"},bt=(0,l._)("desc",{id:"rowingDescription"},"silhouette of a person rowing",-1),yt=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M70.517,393.857h132.622l-67.205,68.631c-3.28,3.385-3.204,8.797,0.172,12.076c1.597,1.568,3.72,2.43,5.958,2.43\n\t\t\tc2.305,0,4.533-0.947,6.12-2.572l78.881-80.555h221.315c12.45,0,30.676-6.006,40.296-13.914\n\t\t\tc8.788-7.229,19.049-16.217,26.345-24.299c10.375-9.811,22.214-23.639-4.255-22.834c-6.98,0.248-206.789,0.02-223.926,0\n\t\t\tl47.144-48.139l22.176-22.032l28.209,9.17c10.414,3.385,22.472-0.803,26.919-9.362c4.446-8.558,0.268-18.407-9.343-21.993\n\t\t\tl-17.404-6.512l54.698-54.774c12.507,6.617,28.362,4.867,38.899-5.671l46.541-46.607c13.11-13.015,13.11-33.957,0-46.923\n\t\t\tc-12.909-13.034-34.042-13.034-46.942,0l-46.512,46.598c-10.892,10.815-12.508,27.139-5.26,39.742l-57.853,59.077L253.744,183.09\n\t\t\tc-1.482-0.851-14.153-5.786-26.833-10.643c-14.898-5.719-30.371,0.583-34.53,13.971l-7.525,24.241l-35.324,118.451\n\t\t\tc-0.468,1.34-0.603,2.562-0.746,3.711H14.136c-12.45,0-17.662,8.836-11.618,19.727l23.237,21.592\n\t\t\tC39.123,385.068,58.066,393.857,70.517,393.857z M272.63,248.727c1.797-5.967,8.099-9.39,14.075-7.64l51.37,14.975l-33.038,33.737\n\t\t\tl-43.453,43.012h-14.2L272.63,248.727z"}),(0,l._)("circle",{cx:"248.953",cy:"109.842",r:"52.326"})])],-1),Gt=[bt,yt];function Ft(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Mt,Gt)}var Wt={name:"Rowing"};const Kt=(0,h.Z)(Wt,[["render",Ft]]);var Yt=Kt;const xt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve"},$t=(0,l._)("desc",{id:"runningDescription"},"silhouette of a running person",-1),Bt=(0,l._)("g",null,[(0,l._)("path",{d:"M282.74,80.771c22.318,0,40.401-18.08,40.401-40.389C323.141,18.084,305.058,0,282.74,0\n\t\tc-22.281,0-40.378,18.084-40.378,40.383C242.362,62.691,260.458,80.771,282.74,80.771z"}),(0,l._)("path",{d:"M400.207,188.547H331.47l-38.766-55.03l0.123-0.944c1.384-10.514-1.475-21.146-7.94-29.556\n\t\tc-6.461-8.409-16.007-13.903-26.52-15.287c-10.926-1.429-22.619,3.12-31.206,8.646c-1.441,0.928-84.97,54.921-84.97,54.921\n\t\tc-5.175,3.358-8.542,8.877-9.165,15.016c-0.634,6.13,1.574,12.222,5.976,16.541l58.982,58l-6.417,48.954l-18.707,65.584l-67.8-19.4\n\t\tc-12.911-3.676-26.44,3.796-30.159,16.747c-3.699,12.951,3.799,26.459,16.758,30.168l91.271,26.109\n\t\tc2.192,0.627,4.444,0.936,6.7,0.936c4.113,0,8.195-1.04,11.848-3.073c5.655-3.146,9.833-8.409,11.611-14.635l21.963-77.057\n\t\tl26.365,36.639l6.684,119.628c0.73,12.991,11.501,23.036,24.349,23.036c0.441,0,0.92-0.016,1.379-0.039\n\t\tc13.453-0.748,23.745-12.262,23-25.713l-7.083-126.736c-0.271-4.643-1.846-9.116-4.56-12.887l-32.24-44.811l11.959-91.279\n\t\tl19.409,27.555c3.794,5.407,10.005,8.624,16.613,8.624h79.28c11.226,0,20.326-9.101,20.326-20.329\n\t\tC420.533,197.647,411.432,188.547,400.207,188.547z M204.606,190.357l-19.026-18.717l23.476-15.206L204.606,190.357z"})],-1),Zt=[$t,Bt];function Ht(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",xt,Zt)}var qt={name:"Running"};const Vt=(0,h.Z)(qt,[["render",Ht]]);var jt=Vt;const Xt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 522.362 522.362",style:{"enable-background":"new 0 0 522.362 522.362"},"xml:space":"preserve"},Jt=(0,l._)("desc",{id:"alpineSkiingDescription"},"silhouette of a person skiing",-1),Qt=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M14.314,351.859L408.088,461.78c4.484,1.311,9.104,1.97,13.731,1.97l0,0c17.471,0,33.746-9.429,42.467-24.604\n\t\t\tc2.716-4.724,3.137-10.27,1.157-15.214c-1.912-4.762-5.767-8.31-10.576-9.744c-7.373-2.237-15.481,1.109-22.146,9.229\n\t\t\tc-3.548,4.303-9.496,6.244-15.07,4.714l-136.467-38.078c1.396-0.555,2.812-1.195,4.236-2.065l103.266-63.15\n\t\t\tc15.443-9.362,18.493-33.957,7.812-43.883l-64.758-60.233l39.972-21.688l69.682,9.744c5.23,0.736,9.744-2.037,10.079-6.187\n\t\t\tc0.344-4.141-3.624-8.1-8.855-8.826l-48.605-6.828l22.472-12.192c39.895-23.275,5.823-85.192-35.334-63.112l-87.554,61.19\n\t\t\tl-117.503-16.515l2.543-12.087c0.545-2.582-1.109-5.116-3.691-5.661c-2.572-0.593-5.116,1.1-5.661,3.701l-2.678,12.709\n\t\t\tl-18.331-2.582c-5.231-0.727-9.467,2.123-9.467,6.369s4.236,8.281,9.467,9.017l15.176,2.123l-2.544,12.087\n\t\t\tc-0.545,2.582,1.109,5.125,3.691,5.671c0.334,0.076,0.66,0.105,0.994,0.105c2.209,0,4.198-1.54,4.676-3.787l2.678-12.737\n\t\t\tl102.414,14.315l-5.308,3.72c-4.332,3.022-10.155,9.151-11.723,14.201c-3.844,12.45-1.473,26.717,10.452,37.705l68.802,62.175\n\t\t\tc0,0-50.978,31.776-74.998,46.397c-14.219,8.606-13.674,23.858-6.129,33.393L23.705,318.199\n\t\t\tc-10.012-2.792-20.569,2.554-23.113,11.695C-2,339.169,4.159,349.029,14.314,351.859z"}),(0,l._)("path",{d:"M450.842,72.003c-15.291,16.715-14.201,42.667,2.639,58.121c16.706,15.31,42.716,14.086,58.073-2.668\n\t\t\tc15.386-16.677,14.172-42.734-2.544-58.016C492.305,54.064,466.17,55.192,450.842,72.003z"})])],-1),en=[Jt,Qt];function tn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Xt,en)}var nn={name:"SkiingAlpine"};const rn=(0,h.Z)(nn,[["render",tn]]);var an=rn;const on={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 296 296",style:{"enable-background":"new 0 0 296 296"},"xml:space":"preserve"},sn=(0,l._)("desc",{id:"crossCountrySkiingDescription"}," silhouette of a person skiing (cross country) ",-1),ln=(0,l._)("g",null,[(0,l._)("path",{d:"M241.313,246.906h-39.564l0.456-1.273c5.62-18.374,3.479-37.58-6.027-54.278c-5.653-9.929-13.443-18.018-22.745-23.959\n\t\tl12.886-51.126c3.035-12.05-4.272-24.266-16.322-27.301c-2.634-0.664-5.278-0.826-7.833-0.559\n\t\tc-0.151-0.011-0.299-0.032-0.452-0.038c-26.03-1.077-51.443,8.485-70.33,25.993L41.586,82.855\n\t\tc-4.332-2.741-10.065-1.451-12.806,2.881s-1.451,10.065,2.88,12.806l47.625,30.136c-2.557,6.013-0.962,13.224,4.375,17.531\n\t\tc2.774,2.24,6.104,3.33,9.413,3.33c4.377-0.001,8.717-1.907,11.68-5.579l0.478-0.591c8.686-10.766,20.465-18.479,33.484-22.317\n\t\tl-11.095,44.046c-1.061,4.214-0.854,8.448,0.374,12.305c-12.908,17.917-28.398,33.68-46.198,46.979l-14.649,10.727\n\t\tc-3.938,2.943-6.001,7.798-6.005,11.798H8.25c-4.556,0-8.083,4.131-8.083,8.688v2.063c0,4.556,3.527,8.25,8.083,8.25h55.188\n\t\th161.375H280c9.113,0,16.167-7.387,16.167-16.5v-2.5H241.313z M153.974,192.398c0.741-0.153,1.471-0.231,2.188-0.457\n\t\tc5.742,3.406,10.53,8.313,13.945,14.311c5.378,9.447,6.59,20.402,3.41,30.797l-1.799,5.674c-0.447,1.461-0.656,3.184-0.657,4.184\n\t\th-69.909C121.581,231.906,139.297,213.274,153.974,192.398z M167,57.938c0-15.378,12.466-27.844,27.844-27.844\n\t\ts27.844,12.466,27.844,27.844s-12.466,27.844-27.844,27.844S167,73.315,167,57.938z"})],-1),cn=[sn,ln];function un(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",on,cn)}var dn={name:"SkiingCrossCountry"};const mn=(0,h.Z)(dn,[["render",un]]);var _n=mn;const En={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Sn=(0,l.uE)('silhouette of a person with snowshoes',6),Tn=[Sn];function pn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",En,Tn)}var An={name:"Snowshoes"};const On=(0,h.Z)(An,[["render",pn]]);var Rn=On;const In={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 535.876 535.876",style:{"enable-background":"new 0 0 535.876 535.876"},"xml:space":"preserve"},Un=(0,l._)("desc",{id:"trailDescription"},"silhouette of a person running (trail)",-1),gn=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M505.204,326.949c-5.805-10.892-15.176-10.862-20.923,0.067l-7.114,13.512c-5.757,10.92-20.416,19.775-32.752,19.775\n\t\t\th-16.753c-12.346,0-29.645,6.847-38.643,15.29l-32.35,30.342l-1.233-105.388c0.822-18.446-10.596-24.634-10.596-24.634\n\t\t\tl-56.543-25.972l33.67-67.645l38.527,22.912c0,0,15.472,9.715,26.727-9.324l37.026-63.093c1.625-3.519,2.094-7.564,1.052-11.609\n\t\t\tc-2.381-9.256-11.81-14.86-21.095-12.479c-4.083,1.042-7.459,3.49-9.754,6.713l-30.772,51.962l-62.777-37.102\n\t\t\tc-4.733-2.716-10.519-3.691-16.257-2.209l-78.345,20.12c-5.03,1.291-8.96,4.762-11.017,9.142l-38.097,76.165\n\t\t\tc-2.591,3.854-3.624,8.73-2.371,13.607c2.285,8.941,11.456,14.363,20.435,12.059c5.04-1.291,8.951-4.743,10.997-9.161\n\t\t\tl35.314-70.858l28.936-7.296l-76.203,149.921l-65.981,16.734c-1.759,0.393-3.48,1.023-5.163,1.836\n\t\t\tc-10.596,5.412-14.679,18.179-9.267,28.803c4.733,9.266,15.252,13.636,24.901,10.978l78.067-20.187\n\t\t\tc18.6-4.093,23.313-14.449,23.313-14.449l30.581-58.79l62.28,35.678l0.593,86.216c0.01,1.08,0.259,2.161,0.421,3.241l-11.6-4.188\n\t\t\tc-11.608-4.188-30.57-4.608-42.361-0.956l-26.135,8.128c-11.79,3.663-30.791,3.338-42.447-0.717l-19.221-6.694\n\t\t\tc-11.657-4.054-28.831-0.984-38.374,6.838L109.9,433.954c-9.544,7.822-26.67,10.72-38.25,6.483L40.84,429.135\n\t\t\tc-11.58-4.256-25.608,1.157-31.336,12.097l-7.21,13.789c-5.728,10.93-0.354,19.794,11.982,19.794H500.27\n\t\t\tc12.336,0,24.309-9.802,26.728-21.907l8.004-39.981c2.409-12.097-0.325-30.733-6.14-41.616L505.204,326.949z"}),(0,l._)("path",{d:"M326.395,126.625c17.806-4.562,28.563-22.721,23.983-40.526c-4.581-17.844-22.74-28.554-40.555-23.983\n\t\t\tc-17.796,4.581-28.535,22.711-23.964,40.535C290.439,120.476,308.599,131.205,326.395,126.625z"})])],-1),Nn=[Un,gn];function hn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",In,Nn)}var zn={name:"Trail"};const wn=(0,h.Z)(zn,[["render",hn]]);var fn=wn;const vn={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Cn=(0,l.uE)('silhouette of a walking person',3),Dn=[Cn];function kn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",vn,Dn)}var Pn={name:"Walking"};const Ln=(0,h.Z)(Pn,[["render",kn]]);var Mn=Ln;const bn=["title"];var yn=(0,l.aZ)({__name:"index",props:{sportLabel:null,color:null,title:{default:""}},setup(e){const t=e,{color:n,sportLabel:r,title:a}=(0,c.BK)(t),o=(0,l.f3)("sportColors");return(e,t)=>((0,l.wg)(),(0,l.iD)("div",{class:"sport-img",style:(0,u.j5)({fill:(0,c.SU)(n)?(0,c.SU)(n):(0,c.SU)(o)[(0,c.SU)(r)]}),title:(0,c.SU)(a)?(0,c.SU)(a):e.$t(`sports.${(0,c.SU)(r)}.LABEL`)},["Cycling (Sport)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(je,{key:0})):(0,l.kq)("",!0),"Cycling (Transport)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(at,{key:1})):(0,l.kq)("",!0),"Cycling (Virtual)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(dt,{key:2})):(0,l.kq)("",!0),"Hiking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Ot,{key:3})):(0,l.kq)("",!0),"Mountain Biking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(wt,{key:4})):(0,l.kq)("",!0),"Mountain Biking (Electric)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Lt,{key:5})):(0,l.kq)("",!0),"Rowing"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Yt,{key:6})):(0,l.kq)("",!0),"Running"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(jt,{key:7})):(0,l.kq)("",!0),"Skiing (Alpine)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(an,{key:8})):(0,l.kq)("",!0),"Skiing (Cross Country)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(_n,{key:9})):(0,l.kq)("",!0),"Snowshoes"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Rn,{key:10})):(0,l.kq)("",!0),"Trail"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(fn,{key:11})):(0,l.kq)("",!0),"Walking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Mn,{key:12})):(0,l.kq)("",!0)],12,bn))}});const Gn=yn;var Fn=Gn;const Wn={class:"loader"};function Kn(e,t){return(0,l.wg)(),(0,l.iD)("div",Wn)}const Yn={},xn=(0,h.Z)(Yn,[["render",Kn],["__scopeId","data-v-4c9921ee"]]);var $n=xn;const Bn={id:"modal"},Zn={class:"custom-modal"},Hn={key:0,class:"modal-message"},qn={key:1,class:"modal-message"},Vn={class:"modal-buttons"};var jn=(0,l.aZ)({__name:"Modal",props:{title:null,message:null,strongMessage:{default:()=>null}},emits:["cancelAction","confirmAction"],setup(e,{emit:t}){const n=e,r=(0,C.o)(),{title:a,message:o,strongMessage:s}=(0,c.BK)(n),i=(0,l.Fl)((()=>r.getters[v.SY.GETTERS.ERROR_MESSAGES]));return(0,l.Ah)((()=>r.commit(v.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(e,n)=>{const r=(0,l.up)("i18n-t"),d=(0,l.up)("ErrorMessage"),m=(0,l.up)("Card");return(0,l.wg)(),(0,l.iD)("div",Bn,[(0,l._)("div",Zn,[(0,l.Wm)(m,null,{title:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,c.SU)(a)),1)])),content:(0,l.w5)((()=>[(0,c.SU)(s)?((0,l.wg)(),(0,l.iD)("div",Hn,[(0,l.Wm)(r,{keypath:(0,c.SU)(o)},{default:(0,l.w5)((()=>[(0,l._)("span",null,(0,u.zw)((0,c.SU)(s)),1)])),_:1},8,["keypath"])])):((0,l.wg)(),(0,l.iD)("div",qn,(0,u.zw)((0,c.SU)(o)),1)),(0,c.SU)(i)?((0,l.wg)(),(0,l.j4)(d,{key:2,message:(0,c.SU)(i)},null,8,["message"])):(0,l.kq)("",!0),(0,l._)("div",Vn,[(0,c.SU)(i)?(0,l.kq)("",!0):((0,l.wg)(),(0,l.iD)("button",{key:0,class:"confirm",onClick:n[0]||(n[0]=e=>t("confirmAction"))},(0,u.zw)(e.$t("buttons.YES")),1)),(0,l._)("button",{class:"cancel",onClick:n[1]||(n[1]=e=>t("cancelAction"))},(0,u.zw)(e.$t("buttons."+((0,c.SU)(i)?"CANCEL":"NO"))),1)])])),_:1})])])}}});const Xn=(0,h.Z)(jn,[["__scopeId","data-v-e8fcfaba"]]);var Jn=Xn;const Qn=[{target:Ae,name:"AlertMessage"},{target:Oe.Z,name:"Card"},{target:he,name:"CustomTextArea"},{target:ve,name:"Distance"},{target:be,name:"Dropdown"},{target:Ye,name:"ErrorMessage"},{target:$n,name:"Loader"},{target:Jn,name:"Modal"},{target:Fn,name:"SportImage"}],er={mounted:(e,t)=>{e.clickOutsideEvent=function(n){e===n.target||e.contains(n.target)||t.value(n)},document.body.addEventListener("click",e.clickOutsideEvent),document.body.addEventListener("touchstart",e.clickOutsideEvent)},unmounted:function(e){e.clickOutsideEvent&&(document.body.removeEventListener("click",e.clickOutsideEvent),document.body.removeEventListener("touchstart",e.clickOutsideEvent),e.clickOutsideEvent=void 0)}};var tr=n(631);r.kL.register(r.ZL,r.jn,r.od,r.De,r.Dx,r.u,r.Gu,r.vn,r.uw,r.ST,r.f$,a.Z);const nr=(0,o.ri)(ue).provide("sportColors",tr.Zo).use(de.Z).use(_e.Z).use(me.Z).use(s.ZP,{name:"VFullscreen"}).directive("click-outside",er);Qn.forEach((e=>{nr.component(e.name,e.target)})),nr.mount("#app")},5073:function(e,t,n){"use strict";n.d(t,{Z:function(){return wl}});var r=n(2201),a=(n(7658),n(6252)),o=n(3577),s=n(9963),i=n(2262),l=n(5801),c=n(9917),u=n(8966);const d=e=>((0,a.dD)("data-v-24ec93e2"),e=e(),(0,a.Cn)(),e),m={id:"admin-app",class:"admin-card"},_=["onSubmit"],E={for:"admin_contact"},S=["value"],T=["disabled"],p={for:"max_users"},A=["disabled"],O={class:"user-limit-help"},R={class:"info-box"},I=d((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),U={for:"max_single_file_size"},g=["disabled"],N={for:"max_zip_file_size"},h=["disabled"],z={for:"gpx_limit_import"},w=["disabled"],f={key:1,class:"form-buttons"},v={class:"confirm",type:"submit"},C=["onClick"],D={key:2,class:"form-buttons"};var k=(0,a.aZ)({__name:"AdminApplication",props:{appConfig:null,edition:{type:Boolean,default:!1}},setup(e){const t=e,{edition:n}=(0,i.BK)(t),d=(0,c.o)(),k=(0,r.tv)(),P=(0,i.qj)({admin_contact:"",max_users:0,max_single_file_size:0,max_zip_file_size:0,gpx_limit_import:0}),L=(0,a.Fl)((()=>d.getters[l.SY.GETTERS.ERROR_MESSAGES]));function M(e){Object.keys(P).map((t=>{["max_single_file_size","max_zip_file_size"].includes(t)?P[t]=(0,u.j)(e[t]):P[t]=e[t]}))}function b(){M(t.appConfig),d.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),k.push("/admin/application")}function y(){const e=Object.assign({},P);e.max_single_file_size*=1048576,e.max_zip_file_size*=1048576,d.dispatch(l.SY.ACTIONS.UPDATE_APPLICATION_CONFIG,e)}return(0,a.wF)((()=>{t.appConfig&&M(t.appConfig)})),(e,t)=>{const r=(0,a.up)("ErrorMessage"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",m,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.TITLE")),1)])),content:(0,a.w5)((()=>[(0,a._)("form",{class:"admin-form",onSubmit:(0,s.iM)(y,["prevent"])},[(0,a._)("label",E,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.ADMIN_CONTACT"))+": ",1),(0,i.SU)(n)||P.admin_contact?(0,a.wy)(((0,a.wg)(),(0,a.iD)("input",{key:1,id:"admin_contact",name:"admin_contact",type:"email","onUpdate:modelValue":t[0]||(t[0]=e=>P.admin_contact=e),disabled:!(0,i.SU)(n)},null,8,T)),[[s.nr,P.admin_contact]]):((0,a.wg)(),(0,a.iD)("input",{key:0,class:"no-contact",value:e.$t("admin.APP_CONFIG.NO_CONTACT_EMAIL"),disabled:""},null,8,S))]),(0,a._)("label",p,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.MAX_USERS_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_users",name:"max_users",type:"number",min:"0","onUpdate:modelValue":t[1]||(t[1]=e=>P.max_users=e),disabled:!(0,i.SU)(n)},null,8,A),[[s.nr,P.max_users]])]),(0,a._)("div",O,[(0,a._)("span",R,[I,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.APP_CONFIG.MAX_USERS_HELP")),1)])]),(0,a._)("label",U,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.SINGLE_UPLOAD_MAX_SIZE_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_single_file_size",name:"max_single_file_size",type:"number",step:"0.1",min:"0","onUpdate:modelValue":t[2]||(t[2]=e=>P.max_single_file_size=e),disabled:!(0,i.SU)(n)},null,8,g),[[s.nr,P.max_single_file_size]])]),(0,a._)("label",N,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.ZIP_UPLOAD_MAX_SIZE_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_zip_file_size",name:"max_zip_file_size",type:"number",step:"0.1",min:"0","onUpdate:modelValue":t[3]||(t[3]=e=>P.max_zip_file_size=e),disabled:!(0,i.SU)(n)},null,8,h),[[s.nr,P.max_zip_file_size]])]),(0,a._)("label",z,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.MAX_FILES_IN_ZIP_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"gpx_limit_import",name:"gpx_limit_import",type:"number",min:"0","onUpdate:modelValue":t[4]||(t[4]=e=>P.gpx_limit_import=e),disabled:!(0,i.SU)(n)},null,8,w),[[s.nr,P.gpx_limit_import]])]),(0,i.SU)(L)?((0,a.wg)(),(0,a.j4)(r,{key:0,message:(0,i.SU)(L)},null,8,["message"])):(0,a.kq)("",!0),(0,i.SU)(n)?((0,a.wg)(),(0,a.iD)("div",f,[(0,a._)("button",v,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:(0,s.iM)(b,["prevent"])},(0,o.zw)(e.$t("buttons.CANCEL")),9,C)])):((0,a.wg)(),(0,a.iD)("div",D,[(0,a._)("button",{class:"confirm",onClick:t[5]||(t[5]=(0,s.iM)((t=>e.$router.push("/admin/application/edit")),["prevent"]))},(0,o.zw)(e.$t("buttons.EDIT")),1),(0,a._)("button",{class:"cancel",onClick:t[6]||(t[6]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)]))],40,_)])),_:1})])}}}),P=n(3744);const L=(0,P.Z)(k,[["__scopeId","data-v-24ec93e2"]]);var M=L;const b={class:"stat-card"},y={class:"stat-content box"},G={class:"stat-icon"},F={class:"stat-details"},W={class:"stat-huge"},K={class:"stat"};var Y=(0,a.aZ)({__name:"StatCard",props:{icon:null,text:null,value:null},setup(e){const t=e,{icon:n,text:r,value:s}=(0,i.BK)(t);return(e,t)=>((0,a.wg)(),(0,a.iD)("div",b,[(0,a._)("div",y,[(0,a._)("div",G,[(0,a._)("i",{class:(0,o.C_)(["fa",`fa-${(0,i.SU)(n)}`])},null,2)]),(0,a._)("div",F,[(0,a._)("div",W,(0,o.zw)((0,i.SU)(s)),1),(0,a._)("div",K,(0,o.zw)((0,i.SU)(r)),1)])])]))}});const x=Y;var $=x;const B={id:"user-stats"};var Z=(0,a.aZ)({__name:"AppStatsCards",props:{appStatistics:null},setup(e){const t=e,{appStatistics:n}=(0,i.BK)(t),r=(0,a.Fl)((()=>(0,u.Z)(n.value.uploads_dir_size,!1)));return(e,t)=>((0,a.wg)(),(0,a.iD)("div",B,[(0,a.Wm)($,{icon:"users",value:(0,i.SU)(n).users,text:e.$t("admin.USER",(0,i.SU)(n).users)},null,8,["value","text"]),(0,a.Wm)($,{icon:"tags",value:(0,i.SU)(n).sports,text:e.$t("workouts.SPORT",(0,i.SU)(n).sports)},null,8,["value","text"]),(0,a.Wm)($,{icon:"calendar",value:(0,i.SU)(n).workouts,text:e.$t("workouts.WORKOUT",(0,i.SU)(n).workouts)},null,8,["value","text"]),(0,a.Wm)($,{icon:"folder-open",value:(0,i.SU)(r).size,text:(0,i.SU)(r).suffix},null,8,["value","text"])]))}});const H=Z;var q=H,V=n(2531);const j=e=>((0,a.dD)("data-v-0dd66f89"),e=e(),(0,a.Cn)(),e),X={id:"admin-menu",class:"center-card"},J={class:"admin-menu description-list"},Q={class:"application-config-details"},ee=j((()=>(0,a._)("br",null,null,-1))),te={class:"registration-status"},ne={key:0,class:"email-sending-status"},re=j((()=>(0,a._)("i",{class:"fa fa-exclamation-triangle","aria-hidden":"true"},null,-1)));var ae=(0,a.aZ)({__name:"AdminMenu",props:{appConfig:null,appStatistics:{default:()=>({})}},setup(e){const t=e,{appConfig:n,appStatistics:r}=(0,i.BK)(t);return(e,t)=>{const s=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("div",X,[(0,a.Wm)(V.Z,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.ADMINISTRATION")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(q,{appStatistics:(0,i.SU)(r)},null,8,["appStatistics"]),(0,a._)("div",J,[(0,a._)("dl",null,[(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/application"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.APPLICATION")),1)])),_:1})]),(0,a._)("dd",Q,[(0,a.Uk)((0,o.zw)(e.$t("admin.UPDATE_APPLICATION_DESCRIPTION")),1),ee,(0,a._)("span",te,(0,o.zw)(e.$t("admin.REGISTRATION_"+((0,i.SU)(n).is_registration_enabled?"ENABLED":"DISABLED"))),1),(0,i.SU)(n).is_email_sending_enabled?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("span",ne,[re,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.EMAIL_SENDING_DISABLED")),1)]))]),(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/sports"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("workouts.SPORT",0))),1)])),_:1})]),(0,a._)("dd",null,(0,o.zw)(e.$t("admin.ENABLE_DISABLE_SPORTS")),1),(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/users"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("admin.USER",0))),1)])),_:1})]),(0,a._)("dd",null,(0,o.zw)(e.$t("admin.ADMIN_RIGHTS_DELETE_USER_ACCOUNT")),1)])])])),_:1})])}}});const oe=(0,P.Z)(ae,[["__scopeId","data-v-0dd66f89"]]);var se=oe,ie=n(9150),le=n(631);const ce=e=>((0,a.dD)("data-v-6d62af67"),e=e(),(0,a.Cn)(),e),ue={id:"admin-sports",class:"admin-card"},de={class:"responsive-table"},me=ce((()=>(0,a._)("th",null,"#",-1))),_e={class:"text-left"},Ee={class:"text-left sport-action"},Se=ce((()=>(0,a._)("th",null,null,-1))),Te={class:"text-center"},pe=ce((()=>(0,a._)("span",{class:"cell-heading"},"id",-1))),Ae={class:"cell-heading"},Oe={class:"sport-label"},Re={class:"cell-heading"},Ie={class:"text-center"},Ue={class:"cell-heading"},ge={class:"sport-action"},Ne={class:"cell-heading"},he={class:"action-button"},ze=["onClick"],we={key:0,class:"has-workouts"},fe=ce((()=>(0,a._)("i",{class:"fa fa-warning","aria-hidden":"true"},null,-1)));var ve=(0,a.aZ)({__name:"AdminSports",setup(e){const{t:t}=(0,ie.QT)(),n=(0,c.o)(),r=(0,a.Fl)((()=>(0,le.xH)(n.getters[l.O8.GETTERS.SPORTS],t))),u=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function d(e,t){n.dispatch(l.O8.ACTIONS.UPDATE_SPORTS,{id:e,isActive:t})}return(e,t)=>{const n=(0,a.up)("SportImage"),l=(0,a.up)("ErrorMessage"),c=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",ue,[(0,a.Wm)(c,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.SPORTS.TITLE")),1)])),content:(0,a.w5)((()=>[(0,a._)("button",{class:"top-button",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1),(0,a._)("div",de,[(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[me,(0,a._)("th",null,(0,o.zw)(e.$t("admin.SPORTS.TABLE.IMAGE")),1),(0,a._)("th",_e,(0,o.zw)(e.$t("admin.SPORTS.TABLE.LABEL")),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.SPORTS.TABLE.ACTIVE")),1),(0,a._)("th",Ee,(0,o.zw)(e.$t("admin.ACTION")),1),Se])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(r),(t=>((0,a.wg)(),(0,a.iD)("tr",{key:t.id},[(0,a._)("td",Te,[pe,(0,a.Uk)(" "+(0,o.zw)(t.id),1)]),(0,a._)("td",null,[(0,a._)("span",Ae,(0,o.zw)(e.$t("admin.SPORTS.TABLE.IMAGE")),1),(0,a.Wm)(n,{title:t.translatedLabel,"sport-label":t.label,color:t.color},null,8,["title","sport-label","color"])]),(0,a._)("td",Oe,[(0,a._)("span",Re,(0,o.zw)(e.$t("admin.SPORTS.TABLE.LABEL")),1),(0,a.Uk)(" "+(0,o.zw)(t.translatedLabel),1)]),(0,a._)("td",Ie,[(0,a._)("span",Ue,(0,o.zw)(e.$t("admin.SPORTS.TABLE.ACTIVE")),1),(0,a._)("i",{class:(0,o.C_)("fa fa"+(t.is_active?"-check":"")),"aria-hidden":"true"},null,2)]),(0,a._)("td",ge,[(0,a._)("span",Ne,(0,o.zw)(e.$t("admin.ACTION")),1),(0,a._)("div",he,[(0,a._)("button",{class:(0,o.C_)({danger:t.is_active}),onClick:e=>d(t.id,!t.is_active)},(0,o.zw)(e.$t(`buttons.${t.is_active?"DIS":"EN"}ABLE`)),11,ze),t.has_workouts?((0,a.wg)(),(0,a.iD)("span",we,[fe,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.SPORTS.TABLE.HAS_WORKOUTS")),1)])):(0,a.kq)("",!0)])])])))),128))])]),(0,i.SU)(u)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(u)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("button",{onClick:t[1]||(t[1]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)])])),_:1})])}}});const Ce=(0,P.Z)(ve,[["__scopeId","data-v-6d62af67"]]);var De=Ce,ke=n(8626),Pe=n(5020),Le=n(6595);const Me={class:"users-filters"},be={class:"search-username"},ye=["onKeyup","placeholder"];var Ge=(0,a.aZ)({__name:"UsersNameFilter",emits:["filterOnUsername"],setup(e,{emit:t}){const n=(0,r.yj)(),l=(0,i.iH)(n.query.q?n.query.q:"");function c(){""!==l.value&&t("filterOnUsername",l)}function u(){l.value="",t("filterOnUsername",l.value)}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Me,[(0,a._)("div",be,[(0,a.wy)((0,a._)("input",{id:"username",name:"username","onUpdate:modelValue":t[0]||(t[0]=e=>l.value=e),onKeyup:(0,s.D2)(c,["enter"]),placeholder:e.$t("user.FILTER_ON_USERNAME")},null,40,ye),[[s.nr,l.value,void 0,{trim:!0}]]),""!==l.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-times","aria-hidden":"true",onClick:u})):(0,a.kq)("",!0)]),(0,a._)("i",{class:(0,o.C_)(["fa fa-search",{"fa-disabled":""===l.value}]),"aria-hidden":"true",onClick:c},null,2)]))}});const Fe=(0,P.Z)(Ge,[["__scopeId","data-v-627a8e91"]]);var We=Fe,Ke=n(2766),Ye=n(6558);const xe=e=>((0,a.dD)("data-v-dc12ff78"),e=e(),(0,a.Cn)(),e),$e={id:"admin-users",class:"admin-card"},Be={key:0,class:"no-users"},Ze={key:1,class:"responsive-table"},He=xe((()=>(0,a._)("th",null,"#",-1))),qe={class:"left-text"},Ve={class:"left-text"},je={class:"left-text"},Xe={class:"cell-heading"},Je={class:"cell-heading"},Qe={class:"cell-heading"},et={class:"cell-heading"},tt={class:"text-center"},nt={class:"cell-heading"},rt={class:"text-center"},at={class:"cell-heading"},ot={class:"text-center"},st={class:"cell-heading"},it={class:"text-center"},lt={class:"cell-heading"},ct=["disabled","onClick"];var ut=(0,a.aZ)({__name:"AdminUsers",setup(e){const t=(0,c.o)(),n=(0,r.yj)(),u=(0,r.tv)(),d=["is_active","admin","created_at","username","workouts_count"],m="created_at";let _=(0,i.qj)((0,Ke.pm)(n.query,d,m));const E=(0,a.Fl)((()=>t.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),S=(0,a.Fl)((()=>t.getters[l.RT.GETTERS.USERS])),T=(0,a.Fl)((()=>t.getters[l.RT.GETTERS.USERS_PAGINATION])),p=(0,a.Fl)((()=>t.getters[l.SY.GETTERS.ERROR_MESSAGES]));function A(e){t.dispatch(l.RT.ACTIONS.GET_USERS,e)}function O(e){I("q",e.value)}function R(e,n){t.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,admin:n})}function I(e,t){_[e]=t,"per_page"===e&&(_.page=1),u.push({path:"/admin/users",query:_})}return(0,a.wF)((()=>A(_))),(0,a.Ah)((()=>{t.dispatch(l.RT.ACTIONS.EMPTY_USERS)})),(0,a.YP)((()=>n.query),(e=>{_=(0,Ke.pm)(e,d,m,{query:_}),A(_)})),(e,t)=>{const n=(0,a.up)("router-link"),r=(0,a.up)("ErrorMessage"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",$e,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("admin.USER",0))),1)])),content:(0,a.w5)((()=>[(0,a._)("button",{class:"top-button",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1),(0,a.Wm)(We,{onFilterOnUsername:O}),(0,a.Wm)(ke.Z,{sort:(0,i.SU)(Ke.fS),order_by:d,query:(0,i.SU)(_),message:"admin.USERS.SELECTS.ORDER_BY",onUpdateSelect:I},null,8,["sort","query"]),0===(0,i.SU)(S).length?((0,a.wg)(),(0,a.iD)("div",Be,(0,o.zw)(e.$t("user.NO_USERS_FOUND")),1)):((0,a.wg)(),(0,a.iD)("div",Ze,[(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[He,(0,a._)("th",qe,(0,o.zw)(e.$t("user.USERNAME")),1),(0,a._)("th",Ve,(0,o.zw)(e.$t("user.EMAIL")),1),(0,a._)("th",je,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE")),1),(0,a._)("th",null,(0,o.zw)((0,o.kC)(e.$t("workouts.WORKOUT",0))),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.ACTIVE")),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.ADMIN")),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.ACTION")),1)])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(t=>((0,a.wg)(),(0,a.iD)("tr",{key:t.username},[(0,a._)("td",null,[(0,a._)("span",Xe,(0,o.zw)(e.$t("user.PROFILE.PICTURE")),1),(0,a.Wm)(Le.Z,{user:t},null,8,["user"])]),(0,a._)("td",null,[(0,a._)("span",Je,(0,o.zw)(e.$t("user.USERNAME")),1),(0,a.Wm)(n,{to:`/admin/users/${t.username}`},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.username),1)])),_:2},1032,["to"])]),(0,a._)("td",null,[(0,a._)("span",Qe,(0,o.zw)(e.$t("user.EMAIL")),1),(0,a.Uk)(" "+(0,o.zw)(t.email),1)]),(0,a._)("td",null,[(0,a._)("span",et,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE")),1),(0,a.Uk)(" "+(0,o.zw)((0,i.SU)(Ye.p6)(t.created_at,(0,i.SU)(E).timezone,(0,i.SU)(E).date_format)),1)]),(0,a._)("td",tt,[(0,a._)("span",nt,(0,o.zw)((0,o.kC)(e.$t("workouts.WORKOUT",0))),1),(0,a.Uk)(" "+(0,o.zw)(t.nb_workouts),1)]),(0,a._)("td",rt,[(0,a._)("span",at,(0,o.zw)(e.$t("admin.ACTIVE")),1),(0,a._)("i",{class:(0,o.C_)(`fa fa${t.is_active?"-check":""}-square-o`),"aria-hidden":"true"},null,2)]),(0,a._)("td",ot,[(0,a._)("span",st,(0,o.zw)(e.$t("user.ADMIN")),1),(0,a._)("i",{class:(0,o.C_)(`fa fa${t.admin?"-check":""}-square-o`),"aria-hidden":"true"},null,2)]),(0,a._)("td",it,[(0,a._)("span",lt,(0,o.zw)(e.$t("admin.ACTION")),1),(0,a._)("button",{class:(0,o.C_)({danger:t.admin}),disabled:t.username===(0,i.SU)(E).username,onClick:e=>R(t.username,!t.admin)},(0,o.zw)(e.$t(`admin.USERS.TABLE.${t.admin?"REMOVE":"ADD"}_ADMIN_RIGHTS`)),11,ct)])])))),128))])]),(0,i.SU)(T).page?((0,a.wg)(),(0,a.j4)(Pe.Z,{key:0,path:"/admin/users",pagination:(0,i.SU)(T),query:(0,i.SU)(_)},null,8,["pagination","query"])):(0,a.kq)("",!0),(0,i.SU)(p)?((0,a.wg)(),(0,a.j4)(r,{key:1,message:(0,i.SU)(p)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("button",{onClick:t[1]||(t[1]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)]))])),_:1})])}}});const dt=(0,P.Z)(ut,[["__scopeId","data-v-dc12ff78"]]);var mt=dt,_t=n(2179);const Et={class:"profile-tabs custom-checkboxes-group"},St={class:"profile-tabs-checkboxes custom-checkboxes"},Tt=["id","name","checked","disabled","onInput"];var pt=(0,a.aZ)({__name:"UserProfileTabs",props:{tabs:null,selectedTab:null,edition:{type:Boolean},disabled:{type:Boolean,default:!1}},setup(e){const t=e,{tabs:n,selectedTab:r,disabled:s}=(0,i.BK)(t);function l(e){switch(e){case"ACCOUNT":case"PICTURE":return`/profile/edit/${e.toLocaleLowerCase()}`;case"APPS":case"PREFERENCES":case"SPORTS":return`/profile${t.edition?"/edit":""}/${e.toLocaleLowerCase()}`;default:case"PROFILE":return"/profile"+(t.edition?"/edit":"")}}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Et,[(0,a._)("div",St,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(n),(t=>((0,a.wg)(),(0,a.iD)("div",{class:"profile-tab custom-checkbox",key:t},[(0,a._)("label",null,[(0,a._)("input",{type:"radio",id:t,name:t,checked:(0,i.SU)(r).split("/")[0]===t,disabled:(0,i.SU)(s),onInput:n=>e.$router.push(l(t))},null,40,Tt),(0,a._)("span",null,(0,o.zw)(e.$t(`user.PROFILE.TABS.${t}`)),1)])])))),128))])]))}});const At=pt;var Ot=At;const Rt={id:"user-profile"},It={class:"box"};var Ut=(0,a.aZ)({__name:"index",props:{user:null,tab:null},setup(e){const t=e,{user:n,tab:r}=(0,i.BK)(t),o=["PROFILE","PREFERENCES","SPORTS","APPS"];return(e,t)=>{const s=(0,a.up)("router-view");return(0,a.wg)(),(0,a.iD)("div",Rt,[(0,a.Wm)(_t.Z,{user:(0,i.SU)(n)},null,8,["user"]),(0,a._)("div",It,[(0,a.Wm)(Ot,{tabs:o,selectedTab:(0,i.SU)(r),edition:!1},null,8,["selectedTab"]),(0,a.Wm)(s,{user:(0,i.SU)(n)},null,8,["user"])])])}}});const gt=(0,P.Z)(Ut,[["__scopeId","data-v-9729cba4"]]);var Nt=gt,ht=n(1585),zt=n(6287);const wt={id:"user-preferences",class:"description-list"},ft={class:"profile-buttons"};var vt=(0,a.aZ)({__name:"UserPreferences",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LANGUAGE])),s=(0,a.Fl)((()=>t.user.language?zt.zK[t.user.language]:zt.zK.en)),u=(0,a.Fl)((()=>t.user.weekm?"MONDAY":"SUNDAY")),d=(0,a.Fl)((()=>t.user.timezone?t.user.timezone:"Europe/Paris")),m=(0,a.Fl)((()=>t.user.date_format?t.user.date_format:"MM/dd/yyyy")),_=(0,a.Fl)((()=>t.user.display_ascent?"DISPLAYED":"HIDDEN"));return(t,n)=>((0,a.wg)(),(0,a.iD)("div",wt,[(0,a._)("dl",null,[(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.LANGUAGE"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(s)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.TIMEZONE"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(d)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.DATE_FORMAT"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(Ye.mh)((0,i.SU)(m),(0,i.SU)(r))),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.FIRST_DAY_OF_WEEK"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t(`user.PROFILE.${(0,i.SU)(u)}`)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.UNITS.LABEL"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t("user.PROFILE.UNITS."+(e.user.imperial_units?"IMPERIAL":"METRIC"))),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.ASCENT_DATA"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t(`common.${(0,i.SU)(_)}`)),1)]),(0,a._)("div",ft,[(0,a._)("button",{onClick:n[0]||(n[0]=e=>t.$router.push("/profile/edit/preferences"))},(0,o.zw)(t.$t("user.PROFILE.EDIT_PREFERENCES")),1),(0,a._)("button",{onClick:n[1]||(n[1]=e=>t.$router.push("/"))},(0,o.zw)(t.$t("common.HOME")),1)])]))}});const Ct=vt;var Dt=Ct;const kt={id:"user-profile-edition",class:"center-card"};var Pt=(0,a.aZ)({__name:"index",props:{user:null,tab:null},setup(e){const t=e,n=(0,c.o)(),{user:r,tab:s}=(0,i.BK)(t),u=["PROFILE","ACCOUNT","PICTURE","PREFERENCES","SPORTS"],d=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING]));return(e,t)=>{const n=(0,a.up)("router-view"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",kt,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t(`user.PROFILE.${(0,i.SU)(s)}_EDITION`)),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(Ot,{tabs:u,selectedTab:(0,i.SU)(s),edition:!0,disabled:(0,i.SU)(d)},null,8,["selectedTab","disabled"]),(0,a.Wm)(n,{user:(0,i.SU)(r)},null,8,["user"])])),_:1})])}}});const Lt=Pt;var Mt=Lt,bt=n(8403);const yt={id:"user-infos-edition"},Gt={class:"profile-form form-box"},Ft={key:1,class:"info-box success-message"},Wt=["onSubmit"],Kt={class:"form-items",for:"email"},Yt=["disabled"],xt={class:"form-items",for:"password-field"},$t={class:"form-items",for:"new-password-field"},Bt={class:"form-buttons"},Zt={class:"confirm",type:"submit"};var Ht=(0,a.aZ)({__name:"UserAccountEdition",props:{user:null},setup(e){const t=e,{user:n}=(0,i.BK)(t),r=(0,c.o)(),u=(0,i.qj)({email:"",password:"",new_password:""}),d=(0,a.Fl)((()=>r.getters[l.YN.GETTERS.USER_LOADING])),m=(0,a.Fl)((()=>r.getters[l.SY.GETTERS.APP_CONFIG])),_=(0,a.Fl)((()=>r.getters[l.YN.GETTERS.IS_SUCCESS])),E=(0,i.iH)(!1),S=(0,a.Fl)((()=>r.getters[l.SY.GETTERS.ERROR_MESSAGES])),T=(0,i.iH)(!1),p=(0,i.iH)(!1);function A(){T.value=!0}function O(e){u.email=e.email}function R(e){u.password=e}function I(e){u.new_password=e}function U(){const e={email:u.email,password:u.password};u.new_password&&(e.new_password=u.new_password),E.value=u.email!==n.value.email,r.dispatch(l.YN.ACTIONS.UPDATE_USER_ACCOUNT,e)}function g(e){p.value=e}function N(e){r.dispatch(l.YN.ACTIONS.DELETE_ACCOUNT,{username:e})}return(0,a.bv)((()=>{t.user&&O(t.user)})),(0,a.Ah)((()=>{r.commit(l.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),r.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(0,a.YP)((()=>_.value),(async e=>{e&&(R(""),I(""),O(n.value),T.value=!1)})),(0,a.YP)((()=>n.value.email),(async()=>{O(n.value)})),(e,t)=>{const r=(0,a.up)("Modal"),l=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",yt,[p.value?((0,a.wg)(),(0,a.j4)(r,{key:0,title:e.$t("common.CONFIRMATION"),message:e.$t("user.CONFIRM_ACCOUNT_DELETION"),onConfirmAction:t[0]||(t[0]=e=>N((0,i.SU)(n).username)),onCancelAction:t[1]||(t[1]=e=>g(!1))},null,8,["title","message"])):(0,a.kq)("",!0),(0,a._)("div",Gt,[(0,i.SU)(S)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(S)},null,8,["message"])):(0,a.kq)("",!0),(0,i.SU)(_)?((0,a.wg)(),(0,a.iD)("div",Ft,(0,o.zw)(e.$t(`user.PROFILE.SUCCESSFUL_${E.value&&(0,i.SU)(m).is_email_sending_enabled?"EMAIL_":""}UPDATE`)),1)):(0,a.kq)("",!0),(0,a._)("form",{class:(0,o.C_)({errors:T.value}),onSubmit:(0,s.iM)(U,["prevent"])},[(0,a._)("label",Kt,[(0,a.Uk)((0,o.zw)(e.$t("user.EMAIL"))+"* ",1),(0,a.wy)((0,a._)("input",{id:"email","onUpdate:modelValue":t[2]||(t[2]=e=>u.email=e),disabled:(0,i.SU)(d),required:!0,onInvalid:A},null,40,Yt),[[s.nr,u.email]])]),(0,a._)("label",xt,[(0,a.Uk)((0,o.zw)(e.$t("user.CURRENT_PASSWORD"))+"* ",1),(0,a.Wm)(bt.Z,{id:"password-field",disabled:(0,i.SU)(d),password:u.password,required:!0,onUpdatePassword:R,onPasswordError:A},null,8,["disabled","password"])]),(0,a._)("label",$t,[(0,a.Uk)((0,o.zw)(e.$t("user.NEW_PASSWORD"))+" ",1),(0,a.Wm)(bt.Z,{id:"new-password-field",disabled:(0,i.SU)(d),checkStrength:!0,password:u.new_password,isSuccess:!1,onUpdatePassword:I,onPasswordError:A},null,8,["disabled","password"])]),(0,a._)("div",Bt,[(0,a._)("button",Zt,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[3]||(t[3]=(0,s.iM)((t=>e.$router.push("/profile")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1),(0,a._)("button",{class:"danger",onClick:t[4]||(t[4]=(0,s.iM)((e=>g(!0)),["prevent"]))},(0,o.zw)(e.$t("buttons.DELETE_MY_ACCOUNT")),1)])],42,Wt)])])}}});const qt=(0,P.Z)(Ht,[["__scopeId","data-v-37b8c4c8"]]);var Vt=qt,jt=n(4850);const Xt={id:"user-infos-edition"},Jt={class:"profile-form form-box"},Qt=["onSubmit"],en={class:"form-items",for:"registrationDate"},tn=["value"],nn={class:"form-items",for:"first_name"},rn=["disabled"],an={class:"form-items",for:"last_name"},on={class:"form-items",for:"birth_date"},sn=["disabled"],ln={class:"form-items",for:"location"},cn=["disabled"],un={class:"form-items"},dn={class:"form-buttons"},mn={class:"confirm",type:"submit"};var _n=(0,a.aZ)({__name:"UserInfosEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({first_name:"",last_name:"",birth_date:"",location:"",bio:""}),u=(0,a.Fl)((()=>t.user.created_at?(0,Ye.p6)(t.user.created_at,t.user.timezone,t.user.date_format):"")),d=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function _(e){r.first_name=e.first_name?e.first_name:"",r.last_name=e.last_name?e.last_name:"",r.birth_date=e.birth_date?(0,jt.Z)(new Date(e.birth_date),"yyyy-MM-dd"):"",r.location=e.location?e.location:"",r.bio=e.bio?e.bio:""}function E(e){r.bio=e}function S(){n.dispatch(l.YN.ACTIONS.UPDATE_USER_PROFILE,r)}return(0,a.bv)((()=>{t.user&&_(t.user)})),(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage"),l=(0,a.up)("CustomTextArea");return(0,a.wg)(),(0,a.iD)("div",Xt,[(0,a._)("div",Jt,[(0,i.SU)(m)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(m)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("form",{onSubmit:(0,s.iM)(S,["prevent"])},[(0,a._)("label",en,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE"))+" ",1),(0,a._)("input",{id:"registrationDate",value:(0,i.SU)(u),disabled:""},null,8,tn)]),(0,a._)("label",nn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.FIRST_NAME"))+" ",1),(0,a.wy)((0,a._)("input",{id:"first_name","onUpdate:modelValue":t[0]||(t[0]=e=>r.first_name=e),disabled:(0,i.SU)(d)},null,8,rn),[[s.nr,r.first_name]])]),(0,a._)("label",an,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LAST_NAME"))+" ",1),(0,a.wy)((0,a._)("input",{id:"last_name","onUpdate:modelValue":t[1]||(t[1]=e=>r.last_name=e)},null,512),[[s.nr,r.last_name]])]),(0,a._)("label",on,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.BIRTH_DATE"))+" ",1),(0,a.wy)((0,a._)("input",{id:"birth_date",type:"date",class:"birth-date","onUpdate:modelValue":t[2]||(t[2]=e=>r.birth_date=e),disabled:(0,i.SU)(d)},null,8,sn),[[s.nr,r.birth_date]])]),(0,a._)("label",ln,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LOCATION"))+" ",1),(0,a.wy)((0,a._)("input",{id:"location","onUpdate:modelValue":t[3]||(t[3]=e=>r.location=e),disabled:(0,i.SU)(d)},null,8,cn),[[s.nr,r.location]])]),(0,a._)("label",un,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.BIO"))+" ",1),(0,a.Wm)(l,{name:"bio",charLimit:200,input:r.bio,disabled:(0,i.SU)(d),onUpdateValue:E},null,8,["input","disabled"])]),(0,a._)("div",dn,[(0,a._)("button",mn,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[4]||(t[4]=(0,s.iM)((t=>e.$router.push("/profile")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,Qt)])])}}});const En=(0,P.Z)(_n,[["__scopeId","data-v-5e5a4552"]]);var Sn=En;const Tn=e=>((0,a.dD)("data-v-687e9604"),e=e(),(0,a.Cn)(),e),pn={id:"user-picture-edition"},An={class:"user-picture-form"},On=["onSubmit"],Rn={class:"picture-help"},In={class:"info-box"},Un=Tn((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),gn={class:"picture-buttons"},Nn=["disabled"];var hn=(0,a.aZ)({__name:"UserPictureEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),{user:r}=(0,i.BK)(t),d=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.APP_CONFIG])),_=m.value.max_single_file_size?(0,u.Z)(m.value.max_single_file_size):"",E=(0,i.iH)(null);function S(){n.dispatch(l.YN.ACTIONS.DELETE_PICTURE)}function T(e){e.target.files&&(E.value=e.target.files[0])}function p(){E.value&&n.dispatch(l.YN.ACTIONS.UPDATE_USER_PICTURE,{picture:E.value})}return(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",pn,[(0,a._)("div",An,[(0,i.SU)(d)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(d)},null,8,["message"])):(0,a.kq)("",!0),(0,a.Wm)(Le.Z,{user:(0,i.SU)(r)},null,8,["user"]),(0,a._)("form",{onSubmit:(0,s.iM)(p,["prevent"])},[(0,a._)("input",{type:"file",name:"picture",accept:".png,.jpg,.gif",onInput:T},null,32),(0,a._)("div",Rn,[(0,a._)("span",In,[Un,(0,a.Uk)(" "+(0,o.zw)(e.$t("workouts.MAX_SIZE"))+": "+(0,o.zw)((0,i.SU)(_)),1)])]),(0,a._)("div",gn,[(0,a._)("button",{type:"submit",disabled:!E.value},(0,o.zw)(e.$t("user.PROFILE.PICTURE_UPDATE")),9,Nn),(0,i.SU)(r).picture?((0,a.wg)(),(0,a.iD)("button",{key:0,class:"danger",onClick:S},(0,o.zw)(e.$t("user.PROFILE.PICTURE_REMOVE")),1)):(0,a.kq)("",!0),(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=t=>e.$router.push("/profile"))},(0,o.zw)(e.$t("user.PROFILE.BACK_TO_PROFILE")),1)])],40,On)])])}}});const zn=(0,P.Z)(hn,[["__scopeId","data-v-687e9604"]]);var wn=zn;const fn=["Africa/Abidjan","Africa/Accra","Africa/Algiers","Africa/Bissau","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/El_Aaiun","Africa/Johannesburg","Africa/Juba","Africa/Khartoum","Africa/Lagos","Africa/Maputo","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Sao_Tome","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Araguaina","America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Asuncion","America/Atikokan","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Cayenne","America/Chicago","America/Chihuahua","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Fortaleza","America/Fort_Nelson","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Inuvik","America/Iqaluit","America/Jamaica","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/La_Paz","America/Lima","America/Los_Angeles","America/Maceio","America/Managua","America/Manaus","America/Martinique","America/Matamoros","America/Mazatlan","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Sitka","America/St_Johns","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Atyrau","Asia/Baghdad","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Chita","Asia/Choibalsan","Asia/Colombo","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Kathmandu","Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Riyadh","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ulaanbaatar","Asia/Urumqi","Asia/Ust-Nera","Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faroe","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/Stanley","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/Perth","Australia/Sydney","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belgrade","Europe/Berlin","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Helsinki","Europe/Istanbul","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Oslo","Europe/Paris","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/Saratov","Europe/Simferopol","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zaporozhye","Europe/Zurich","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Reunion","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Chuuk","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Pohnpei","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Wake","Pacific/Wallis"],vn={id:"tz-dropdown"},Cn=["value","disabled","onKeydown"],Dn=["onClick","onMouseover","autofocus"];var kn=(0,a.aZ)({__name:"TimezoneDropdown",props:{input:null,disabled:{type:Boolean,default:!1}},emits:["updateTimezone"],setup(e,{emit:t}){const n=e,{input:r,disabled:l}=(0,i.BK)(n),c=(0,i.iH)(n.input),u=(0,i.iH)(!1),d=(0,i.iH)(null),m=(0,i.iH)(0);function _(e){return e.toLowerCase().match(c.value.toLowerCase())}function E(e){m.value=e}function S(e){c.value=e,u.value=!1,t("updateTimezone",e)}function T(e){e.preventDefault(),d.value?.firstElementChild?.innerHTML&&S(d.value?.firstElementChild?.innerHTML)}function p(e){e.preventDefault(),u.value=!0,c.value=e.target.value.trim()}return(0,a.YP)((()=>n.input),(e=>{c.value=e})),(e,t)=>((0,a.wg)(),(0,a.iD)("div",vn,[(0,a._)("input",{class:"tz-dropdown-input",id:"timezone",name:"timezone",value:c.value,disabled:(0,i.SU)(l),required:"",onKeydown:[t[0]||(t[0]=(0,s.D2)((e=>S((0,i.SU)(r))),["esc"])),(0,s.D2)(T,["enter"])],onInput:p},null,40,Cn),u.value?((0,a.wg)(),(0,a.iD)("ul",{key:0,class:"tz-dropdown-list",ref_key:"tzList",ref:d},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(fn).filter((e=>_(e))),((e,t)=>((0,a.wg)(),(0,a.iD)("li",{key:e,class:(0,o.C_)(["tz-dropdown-item",{focus:t===m.value}]),onClick:t=>S(e),onMouseover:e=>E(t),autofocus:t===m.value},(0,o.zw)(e),43,Dn)))),128))],512)):(0,a.kq)("",!0)]))}});const Pn=(0,P.Z)(kn,[["__scopeId","data-v-47ea2903"]]);var Ln=Pn;const Mn={id:"user-preferences-edition"},bn={class:"profile-form form-box"},yn=["onSubmit"],Gn={class:"form-items"},Fn=["disabled"],Wn=["value"],Kn={class:"form-items"},Yn={class:"form-items"},xn=["disabled"],$n=["value"],Bn={class:"form-items form-checkboxes"},Zn={class:"checkboxes-label"},Hn={class:"checkboxes"},qn=["id","name","checked","disabled","onInput"],Vn={class:"checkbox-label"},jn={class:"form-items form-checkboxes"},Xn={class:"checkboxes-label"},Jn={class:"checkboxes"},Qn=["id","name","checked","disabled","onInput"],er={class:"checkbox-label"},tr={class:"form-items form-checkboxes"},nr={class:"checkboxes-label"},rr={class:"checkboxes"},ar=["id","name","checked","disabled","onInput"],or={class:"checkbox-label"},sr={class:"form-buttons"},ir={class:"confirm",type:"submit"};var lr=(0,a.aZ)({__name:"UserPreferencesEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({display_ascent:!0,imperial_units:!1,language:"",timezone:"Europe/Paris",date_format:"dd/MM/yyyy",weekm:!1}),u=[{label:"SUNDAY",value:!1},{label:"MONDAY",value:!0}],d=[{label:"METRIC",value:!1},{label:"IMPERIAL",value:!0}],m=[{label:"DISPLAYED",value:!0},{label:"HIDDEN",value:!1}],_=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),E=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),S=(0,a.Fl)((()=>(0,Ye.d2)((new Date).toUTCString(),t.user.timezone,r.language)));function T(e){r.display_ascent=e.display_ascent,r.imperial_units=!!e.imperial_units&&e.imperial_units,r.language=e.language?e.language:"en",r.timezone=e.timezone?e.timezone:"Europe/Paris",r.date_format=e.date_format?e.date_format:"dd/MM/yyyy",r.weekm=!!e.weekm&&e.weekm}function p(){n.dispatch(l.YN.ACTIONS.UPDATE_USER_PREFERENCES,r)}function A(e){r.timezone=e}function O(e){r.display_ascent=e}function R(e){r.imperial_units=e}function I(e){r.weekm=e}return(0,a.bv)((()=>{t.user&&T(t.user)})),(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",Mn,[(0,a._)("div",bn,[(0,i.SU)(E)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(E)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("form",{onSubmit:(0,s.iM)(p,["prevent"])},[(0,a._)("label",Gn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LANGUAGE"))+" ",1),(0,a.wy)((0,a._)("select",{id:"language","onUpdate:modelValue":t[0]||(t[0]=e=>r.language=e),disabled:(0,i.SU)(_)},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(zt.mT),(e=>((0,a.wg)(),(0,a.iD)("option",{value:e.value,key:e.value},(0,o.zw)(e.label),9,Wn)))),128))],8,Fn),[[s.bM,r.language]])]),(0,a._)("label",Kn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.TIMEZONE"))+" ",1),(0,a.Wm)(Ln,{input:r.timezone,disabled:(0,i.SU)(_),onUpdateTimezone:A},null,8,["input","disabled"])]),(0,a._)("label",Yn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.DATE_FORMAT"))+" ",1),(0,a.wy)((0,a._)("select",{id:"date_format","onUpdate:modelValue":t[1]||(t[1]=e=>r.date_format=e),disabled:(0,i.SU)(_)},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(e=>((0,a.wg)(),(0,a.iD)("option",{value:e.value,key:e.value},(0,o.zw)(e.label),9,$n)))),128))],8,xn),[[s.bM,r.date_format]])]),(0,a._)("div",Bn,[(0,a._)("span",Zn,(0,o.zw)(e.$t("user.PROFILE.FIRST_DAY_OF_WEEK")),1),(0,a._)("div",Hn,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(u,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.weekm,disabled:(0,i.SU)(_),onInput:e=>I(t.value)},null,40,qn),(0,a._)("span",Vn,(0,o.zw)(e.$t(`user.PROFILE.${t.label}`)),1)]))),64))])]),(0,a._)("div",jn,[(0,a._)("span",Xn,(0,o.zw)(e.$t("user.PROFILE.UNITS.LABEL")),1),(0,a._)("div",Jn,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(d,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.imperial_units,disabled:(0,i.SU)(_),onInput:e=>R(t.value)},null,40,Qn),(0,a._)("span",er,(0,o.zw)(e.$t(`user.PROFILE.UNITS.${t.label}`)),1)]))),64))])]),(0,a._)("div",tr,[(0,a._)("span",nr,(0,o.zw)(e.$t("user.PROFILE.ASCENT_DATA")),1),(0,a._)("div",rr,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(m,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.display_ascent,disabled:(0,i.SU)(_),onInput:e=>O(t.value)},null,40,ar),(0,a._)("span",or,(0,o.zw)(e.$t(`common.${t.label}`)),1)]))),64))])]),(0,a._)("div",sr,[(0,a._)("button",ir,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[2]||(t[2]=(0,s.iM)((t=>e.$router.push("/profile/preferences")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,yn)])])}}});const cr=(0,P.Z)(lr,[["__scopeId","data-v-065d5e6c"]]);var ur=cr;const dr=["profile:read","profile:write","users:read","users:write","workouts:read","workouts:write"],mr=["application:write"],_r={id:"new-oauth2-app"},Er={id:"new-oauth2-title"},Sr={id:"apps-form"},Tr=["onSubmit"],pr={class:"form-items"},Ar={class:"form-item"},Or={for:"app-name"},Rr={class:"form-item"},Ir={for:"app-description"},Ur={class:"form-item"},gr={for:"app-url"},Nr={class:"form-item"},hr={for:"app-redirect-uri"},zr={class:"form-item-scope"},wr={class:"form-item-scope-label"},fr={class:"scope-label"},vr=["name","checked","onChange"],Cr=["innerHTML"],Dr={class:"form-buttons"},kr=["disabled"];var Pr=(0,a.aZ)({__name:"AddUserApp",props:{authUser:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({client_name:"",client_uri:"",client_description:"",redirect_uri:""}),u=(0,i.qj)([]),d=(0,a.Fl)((()=>S(t.authUser,mr,dr)));function m(){const e={client_name:r.client_name,client_description:r.client_description,client_uri:r.client_uri,redirect_uris:[r.redirect_uri],scope:u.sort().join(" ")};n.dispatch(l.Km.ACTIONS.CREATE_CLIENT,e)}function _(e){r.client_description=e}function E(e){const t=u.indexOf(e);t>-1?u.splice(t,1):u.push(e)}function S(e,t,n){const r=[...n];return e.admin&&r.push(...t),r.sort()}return(e,t)=>{const n=(0,a.up)("CustomTextArea");return(0,a.wg)(),(0,a.iD)("div",_r,[(0,a._)("h1",Er,(0,o.zw)(e.$t("oauth2.ADD_A_NEW_APP")),1),(0,a._)("div",Sr,[(0,a._)("form",{onSubmit:(0,s.iM)(m,["prevent"])},[(0,a._)("div",pr,[(0,a._)("div",Ar,[(0,a._)("label",Or,(0,o.zw)(e.$t("oauth2.APP.NAME"))+"*",1),(0,a.wy)((0,a._)("input",{id:"app-name",type:"text",required:"","onUpdate:modelValue":t[0]||(t[0]=e=>r.client_name=e)},null,512),[[s.nr,r.client_name]])]),(0,a._)("div",Rr,[(0,a._)("label",Ir,(0,o.zw)(e.$t("oauth2.APP.DESCRIPTION")),1),(0,a.Wm)(n,{name:"app-description",charLimit:200,input:r.description,onUpdateValue:_},null,8,["input"])]),(0,a._)("div",Ur,[(0,a._)("label",gr,(0,o.zw)(e.$t("oauth2.APP.URL"))+"*",1),(0,a.wy)((0,a._)("input",{id:"app-url",type:"text",required:"","onUpdate:modelValue":t[1]||(t[1]=e=>r.client_uri=e)},null,512),[[s.nr,r.client_uri]])]),(0,a._)("div",Nr,[(0,a._)("label",hr,(0,o.zw)(e.$t("oauth2.APP.REDIRECT_URL"))+"* ",1),(0,a.wy)((0,a._)("input",{id:"app-redirect-uri",type:"text",required:"","onUpdate:modelValue":t[2]||(t[2]=e=>r.redirect_uri=e)},null,512),[[s.nr,r.redirect_uri]])]),(0,a._)("div",zr,[(0,a._)("div",wr,(0,o.zw)(e.$t("oauth2.APP.SCOPE.LABEL"))+"* ",1),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(d),(t=>((0,a.wg)(),(0,a.iD)("div",{class:"form-item-scope-checkboxes",key:t},[(0,a._)("label",fr,[(0,a._)("input",{type:"checkbox",name:t,checked:u.includes(t),onChange:e=>E(t)},null,40,vr),(0,a._)("code",null,(0,o.zw)(t),1)]),(0,a._)("p",{class:"scope-description",innerHTML:e.$t(`oauth2.APP.SCOPE.${t}_DESCRIPTION`)},null,8,Cr)])))),128))])]),(0,a._)("div",Dr,[(0,a._)("button",{class:"confirm",type:"submit",disabled:0===u.length},(0,o.zw)(e.$t("buttons.SUBMIT")),9,kr),(0,a._)("button",{class:"cancel",onClick:t[3]||(t[3]=(0,s.iM)((()=>e.$router.push("/profile/apps")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,Tr)])])}}});const Lr=(0,P.Z)(Pr,[["__scopeId","data-v-0657ee77"]]);var Mr=Lr;const br={id:"authorize-oauth2-app"},yr={key:0},Gr={id:"authorize-oauth2-title"},Fr={class:"oauth2-access description-list"},Wr={class:"client-scope"},Kr=["innerHTML"],Yr={class:"authorize-oauth2-buttons"},xr={key:1},$r={class:"no-app"};var Br=(0,a.aZ)({__name:"AuthorizeUserApp",setup(e){const t=(0,r.yj)(),n=(0,c.o)(),s=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENT])),u=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function d(){t.query.client_id&&"string"===typeof t.query.client_id&&n.dispatch(l.Km.ACTIONS.GET_CLIENT_BY_CLIENT_ID,t.query.client_id)}function m(){n.dispatch(l.Km.ACTIONS.AUTHORIZE_CLIENT,{client_id:`${t.query.client_id}`,redirect_uri:`${t.query.redirect_uri}`,response_type:`${t.query.response_type}`,scope:`${t.query.scope}`,state:`${t.query.state?t.query.state:""}`,code_challenge:`${t.query.code_challenge?t.query.code_challenge:""}`,code_challenge_method:`${t.query.code_challenge_method?t.query.code_challenge_method:""}`})}return(0,a.wF)((()=>d())),(e,t)=>{const n=(0,a.up)("router-link"),r=(0,a.up)("i18n-t"),l=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",br,[(0,i.SU)(s).client_id?((0,a.wg)(),(0,a.iD)("div",yr,[(0,a._)("h1",Gr,[(0,a.Wm)(r,{keypath:"oauth2.AUTHORIZE_APP"},{default:(0,a.w5)((()=>[(0,a.Wm)(n,{to:{name:"UserApp",params:{id:(0,i.SU)(s).id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(s).name),1)])),_:1},8,["to"])])),_:1})]),(0,i.SU)(u)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(u)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("div",Fr,[(0,a._)("p",null,(0,o.zw)(e.$t("oauth2.APP_REQUESTING_ACCESS")),1),(0,a._)("dl",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(s).scope.split(" "),(t=>((0,a.wg)(),(0,a.iD)(a.HY,{key:t},[(0,a._)("dt",Wr,[(0,a._)("code",null,(0,o.zw)(t),1)]),(0,a._)("dd",{innerHTML:e.$t(`oauth2.APP.SCOPE.${t}_DESCRIPTION`)},null,8,Kr)],64)))),128))]),(0,a._)("div",Yr,[(0,a._)("button",{class:"danger",onClick:m},(0,o.zw)(e.$t("buttons.AUTHORIZE")),1),(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])])])):((0,a.wg)(),(0,a.iD)("div",xr,[(0,a._)("p",$r,(0,o.zw)(e.$t("oauth2.NO_APP")),1),(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)]))])}}});const Zr=(0,P.Z)(Br,[["__scopeId","data-v-3b2fe9ed"]]);var Hr=Zr;const qr={id:"oauth2-apps"};var Vr=(0,a.aZ)({__name:"index",props:{user:null},setup(e){const t=e,n=(0,c.o)(),{user:r}=(0,i.BK)(t);return(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),n.commit(l.Km.MUTATIONS.SET_CLIENTS,[])})),(e,t)=>{const n=(0,a.up)("router-view");return(0,a.wg)(),(0,a.iD)("div",qr,[(0,a.Wm)(n,{authUser:(0,i.SU)(r)},null,8,["authUser"])])}}});const jr=Vr;var Xr=jr;const Jr={id:"oauth2-app",class:"description-list"},Qr={key:1},ea={key:0,class:"info-box success-message"},ta=["title"],na={key:0},ra={key:1,class:"app-secret"},aa=["title"],oa={class:"client-scopes"},sa={class:"app-buttons"},ia={key:2},la={class:"no-app"};var ca=(0,a.aZ)({__name:"UserApp",props:{authUser:null,afterCreation:{type:Boolean,default:!1}},setup(e){const t=e,n=(0,r.yj)(),s=(0,c.o)(),{afterCreation:u,authUser:d}=(0,i.BK)(t),m=(0,a.Fl)((()=>s.getters[l.Km.GETTERS.CLIENT])),_=(0,a.Fl)((()=>s.getters[l.Km.GETTERS.REVOCATION_SUCCESSFUL])),E=(0,i.iH)(!1),S=(0,i.iH)(null),T=(0,i.iH)(!1),p=(0,i.iH)(!1),A=(0,i.iH)(!1);function O(){!u.value&&n.params.id&&"string"===typeof n.params.id&&s.dispatch(l.Km.ACTIONS.GET_CLIENT_BY_ID,+n.params.id)}function R(e){S.value=e?"oauth2.APP_DELETION_CONFIRMATION":"oauth2.TOKENS_REVOCATION_CONFIRMATION",I(!0)}function I(e){E.value=e,e||(S.value=null)}function U(e){"oauth2.APP_DELETION_CONFIRMATION"===S.value?s.dispatch(l.Km.ACTIONS.DELETE_CLIENT,e):s.dispatch(l.Km.ACTIONS.REVOKE_ALL_TOKENS,e)}function g(){navigator.clipboard.writeText(m.value.client_id),T.value=!0,p.value=!1,setTimeout((()=>{T.value=!1}),3e3)}function N(){m.value.client_secret&&(navigator.clipboard.writeText(m.value.client_secret),p.value=!0,T.value=!1,setTimeout((()=>{p.value=!1}),3e3))}return(0,a.wF)((()=>{O(),navigator.clipboard&&(A.value=!0)})),(0,a.Ah)((()=>{s.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),s.commit(l.Km.MUTATIONS.EMPTY_CLIENT),s.commit(l.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!1)})),(0,a.YP)((()=>_.value),(e=>{e&&I(!1)})),(e,t)=>{const n=(0,a.up)("Modal");return(0,a.wg)(),(0,a.iD)("div",Jr,[E.value?((0,a.wg)(),(0,a.j4)(n,{key:0,title:e.$t("common.CONFIRMATION"),message:e.$t(S.value),onConfirmAction:t[0]||(t[0]=e=>U((0,i.SU)(m).id)),onCancelAction:t[1]||(t[1]=e=>I(!1))},null,8,["title","message"])):(0,a.kq)("",!0),(0,i.SU)(m)&&(0,i.SU)(m).client_id?((0,a.wg)(),(0,a.iD)("div",Qr,[(0,i.SU)(u)||(0,i.SU)(_)?((0,a.wg)(),(0,a.iD)("div",ea,(0,o.zw)(e.$t((0,i.SU)(u)?"oauth2.APP_CREATED_SUCCESSFULLY":"oauth2.TOKENS_REVOKED")),1)):(0,a.kq)("",!0),(0,a._)("dl",null,[(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.CLIENT_ID"))+":",1),(0,a._)("dd",null,[(0,a.Uk)((0,o.zw)((0,i.SU)(m).client_id)+" ",1),(0,i.SU)(u)&&A.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:(0,o.C_)("fa fa-"+(T.value?"check":"copy")),"aria-hidden":"true",title:e.$t("oauth2.COPY_TO_CLIPBOARD"),onClick:g},null,10,ta)):(0,a.kq)("",!0)]),(0,i.SU)(u)&&(0,i.SU)(m).client_secret?((0,a.wg)(),(0,a.iD)("dt",na,(0,o.zw)(e.$t("oauth2.APP.CLIENT_SECRET"))+": ",1)):(0,a.kq)("",!0),(0,i.SU)(u)&&(0,i.SU)(m).client_secret?((0,a.wg)(),(0,a.iD)("dd",ra,[(0,a.Uk)((0,o.zw)((0,i.SU)(m).client_secret)+" ",1),A.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:(0,o.C_)("fa fa-"+(p.value?"check":"copy")),"aria-hidden":"true",title:e.$t("oauth2.COPY_TO_CLIPBOARD"),onClick:N},null,10,aa)):(0,a.kq)("",!0)])):(0,a.kq)("",!0),(0,a._)("dt",null,(0,o.zw)((0,o.kC)(e.$t("oauth2.APP.ISSUE_AT")))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(Ye.p6)((0,i.SU)(m).issued_at,(0,i.SU)(d).timezone,(0,i.SU)(d).date_format)),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.NAME"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).name),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.DESCRIPTION"))+":",1),(0,a._)("dd",{class:(0,o.C_)({"no-description":!(0,i.SU)(m).client_description})},(0,o.zw)((0,i.SU)(m).client_description?(0,i.SU)(m).client_description:e.$t("oauth2.NO_DESCRIPTION")),3),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.URL"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).website),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.REDIRECT_URL"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).redirect_uris.length>0?(0,i.SU)(m).redirect_uris[0]:""),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.SCOPE.LABEL"))+":",1),(0,a._)("dd",oa,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(m).scope.split(" "),(e=>((0,a.wg)(),(0,a.iD)("span",{class:"client-scope",key:e},[(0,a._)("code",null,(0,o.zw)(e),1)])))),128))])]),(0,a._)("div",sa,[(0,a._)("button",{class:"danger",onClick:t[2]||(t[2]=e=>R(!1))},(0,o.zw)(e.$t("oauth2.REVOKE_ALL_TOKENS")),1),(0,a._)("button",{class:"danger",onClick:t[3]||(t[3]=e=>R(!0))},(0,o.zw)(e.$t("oauth2.DELETE_APP")),1),(0,a._)("button",{onClick:t[4]||(t[4]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)])])):((0,a.wg)(),(0,a.iD)("div",ia,[(0,a._)("p",la,(0,o.zw)(e.$t("oauth2.NO_APP")),1),(0,a._)("button",{onClick:t[5]||(t[5]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)]))])}}});const ua=(0,P.Z)(ca,[["__scopeId","data-v-3a844fa2"]]);var da=ua;const ma={id:"oauth2-apps-list"},_a={class:"apps-list"},Ea={key:0},Sa={class:"app-issued-at"},Ta={key:1,class:"no-apps"},pa={class:"app-list-buttons"};var Aa=(0,a.aZ)({__name:"UserAppsList",props:{authUser:null},setup(e){const t=e,n=(0,c.o)(),s=(0,r.yj)(),{authUser:u}=(0,i.BK)(t),d=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENTS])),m=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENTS_PAGINATION]));let _=E(s.query);function E(e){const t={};return e.page&&(t.page=(0,Ke.z_)(e.page,Ke.Hf)),t}function S(e){n.dispatch(l.Km.ACTIONS.GET_CLIENTS,e)}return(0,a.wF)((()=>{S(_)})),(0,a.YP)((()=>s.query),(async e=>{_=E(e),S(_)})),(e,t)=>{const n=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("div",ma,[(0,a._)("p",_a,(0,o.zw)(e.$t("oauth2.APPS_LIST")),1),(0,i.SU)(d).length>0?((0,a.wg)(),(0,a.iD)("ul",Ea,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(d),(t=>((0,a.wg)(),(0,a.iD)("li",{key:t.client_id},[(0,a.Wm)(n,{to:{name:"UserApp",params:{id:t.id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.name),1)])),_:2},1032,["to"]),(0,a._)("span",Sa,(0,o.zw)(e.$t("oauth2.APP.ISSUE_AT"))+" "+(0,o.zw)((0,i.SU)(Ye.p6)(t.issued_at,(0,i.SU)(u).timezone,(0,i.SU)(u).date_format)),1)])))),128))])):((0,a.wg)(),(0,a.iD)("div",Ta,(0,o.zw)(e.$t("oauth2.NO_APPS")),1)),(0,i.SU)(d).length>0?((0,a.wg)(),(0,a.j4)(Pe.Z,{key:2,pagination:(0,i.SU)(m),path:"/profile/apps",query:(0,i.SU)(_)},null,8,["pagination","query"])):(0,a.kq)("",!0),(0,a._)("div",pa,[(0,a._)("button",{onClick:t[0]||(t[0]=t=>e.$router.push("/profile/apps/new"))},(0,o.zw)(e.$t("oauth2.NEW_APP")),1),(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)])])}}});const Oa=(0,P.Z)(Aa,[["__scopeId","data-v-efa45ea0"]]);var Ra=Oa;const Ia={id:"user-sport-preferences"},Ua={key:0,class:"responsive-table"},ga={class:"mobile-display"},Na={key:0,class:"profile-buttons mobile-display"},ha={key:1,class:"profile-buttons"},za={class:"text-left"},wa={key:0},fa={class:"cell-heading"},va=["value"],Ca={class:"cell-heading"},Da={key:0,class:"disabled-message"},ka={key:1,class:"fa fa-refresh fa-spin fa-fw"},Pa={class:"cell-heading"},La={class:"cell-heading"},Ma=["checked"],ba={class:"cell-heading"},ya=["value"],Ga={key:1},Fa={key:0,class:"action-buttons"},Wa={class:"cell-heading"},Ka=["onClick"],Ya={key:1,class:"edition-buttons"},xa=["disabled"],$a=["disabled","onClick"],Ba=["disabled"],Za={key:0,class:"profile-buttons"},Ha={key:1,class:"profile-buttons"};var qa=(0,a.aZ)({__name:"UserSportPreferences",props:{user:null,isEdition:{type:Boolean}},setup(e){const t=e,n=(0,c.o)(),{t:r}=(0,ie.QT)(),{isEdition:u,user:d}=(0,i.BK)(t),m="#838383",_=(0,a.f3)("sportColors"),E=(0,a.Fl)((()=>n.getters[l.O8.GETTERS.SPORTS])),S=(0,a.Fl)((()=>(0,le.xH)(E.value,r,"is_active",d.value.sports_list))),T=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),p=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),A=(0,i.qj)({sport_id:0,color:null,is_active:!0,stopped_speed_threshold:1});function O(e){null!==e?(A.sport_id=e.id,A.color=e.color?e.color:_?_[e.label]:m,A.is_active=e.is_active_for_user,A.stopped_speed_threshold=e.stopped_speed_threshold):N()}function R(e){return A.sport_id===e}function I(e){A.color=e.target.value}function U(e){A.stopped_speed_threshold=parseFloat(e.target.value)}function g(e){A.is_active=e.target.checked}function N(){A.sport_id=0,A.color=null,A.is_active=!0,A.stopped_speed_threshold=1,n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)}function h(e){e.preventDefault(),n.dispatch(l.YN.ACTIONS.UPDATE_USER_SPORT_PREFERENCES,A)}function z(e,t){e.preventDefault(),n.dispatch(l.YN.ACTIONS.RESET_USER_SPORT_PREFERENCES,t)}return(0,a.YP)((()=>T.value),(e=>{e||p.value||N()})),(e,t)=>{const n=(0,a.up)("SportImage"),r=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",Ia,[(0,i.SU)(E).length>0?((0,a.wg)(),(0,a.iD)("div",Ua,[(0,a._)("div",ga,[(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("div",Na,[(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/profile/sports")),["prevent"]))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,a.wg)(),(0,a.iD)("div",ha,[(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/profile/edit/sports"))},(0,o.zw)(e.$t("user.PROFILE.EDIT_SPORTS_PREFERENCES")),1),(0,a._)("button",{onClick:t[2]||(t[2]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))]),(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.COLOR")),1),(0,a._)("th",za,(0,o.zw)(e.$t("workouts.SPORT",0)),1),(0,a._)("th",null,(0,o.zw)(e.$t("workouts.WORKOUT",0)),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.IS_ACTIVE")),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD")),1),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("th",wa,(0,o.zw)(e.$t("user.PROFILE.SPORT.ACTION")),1)):(0,a.kq)("",!0)])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(s=>((0,a.wg)(),(0,a.iD)("tr",{key:s.id},[(0,a._)("td",null,[(0,a._)("span",fa,(0,o.zw)(e.$t("user.PROFILE.SPORT.COLOR")),1),R(s.id)?((0,a.wg)(),(0,a.iD)("input",{key:0,class:"sport-color",type:"color",value:A.color,onInput:I},null,40,va)):((0,a.wg)(),(0,a.j4)(n,{key:1,title:s.translatedLabel,"sport-label":s.label,color:s.color?s.color:(0,i.SU)(_)[s.label]},null,8,["title","sport-label","color"]))]),(0,a._)("td",{class:(0,o.C_)(["sport-label",{"disabled-sport":!s.is_active}])},[(0,a._)("span",Ca,(0,o.zw)(e.$t("user.PROFILE.SPORT.LABEL")),1),(0,a.Uk)(" "+(0,o.zw)(s.translatedLabel)+" ",1),s.is_active?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("span",Da," ("+(0,o.zw)(e.$t("user.PROFILE.SPORT.DISABLED_BY_ADMIN"))+") ",1)),(0,i.SU)(T)&&R(s.id)?((0,a.wg)(),(0,a.iD)("i",ka)):(0,a.kq)("",!0),(0,i.SU)(p)&&A.sport_id===s.id?((0,a.wg)(),(0,a.j4)(r,{key:2,message:(0,i.SU)(p)},null,8,["message"])):(0,a.kq)("",!0)],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",Pa,(0,o.zw)(e.$t("workouts.WORKOUT",0)),1),(0,a._)("i",{class:(0,o.C_)("fa fa"+((0,i.SU)(d).sports_list.includes(s.id)?"-check":"")),"aria-hidden":"true"},null,2)],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",La,(0,o.zw)(e.$t("user.PROFILE.SPORT.IS_ACTIVE")),1),R(s.id)&&s.is_active?((0,a.wg)(),(0,a.iD)("input",{key:0,type:"checkbox",checked:s.is_active_for_user,onChange:g},null,40,Ma)):((0,a.wg)(),(0,a.iD)("i",{key:1,class:(0,o.C_)("fa fa"+(s.is_active_for_user?"-check":"")),"aria-hidden":"true"},null,2))],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",ba,(0,o.zw)(e.$t("user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD")),1),R(s.id)&&s.is_active?((0,a.wg)(),(0,a.iD)("input",{key:0,class:"threshold-input",type:"number",min:"0",step:"0.1",value:A.stopped_speed_threshold,onInput:U},null,40,ya)):((0,a.wg)(),(0,a.iD)("span",Ga,(0,o.zw)(s.stopped_speed_threshold),1))],2),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("td",Fa,[(0,a._)("span",Wa,(0,o.zw)(e.$t("user.PROFILE.SPORT.ACTION")),1),0===A.sport_id?((0,a.wg)(),(0,a.iD)("button",{key:0,onClick:e=>O(s)},(0,o.zw)(e.$t("buttons.EDIT")),9,Ka)):(0,a.kq)("",!0),R(s.id)?((0,a.wg)(),(0,a.iD)("div",Ya,[(0,a._)("button",{disabled:(0,i.SU)(T),onClick:h},(0,o.zw)(e.$t("buttons.SUBMIT")),9,xa),(0,a._)("button",{disabled:(0,i.SU)(T),onClick:e=>z(e,s.id)},(0,o.zw)(e.$t("buttons.RESET")),9,$a),(0,a._)("button",{disabled:(0,i.SU)(T),onClick:t[3]||(t[3]=e=>O(null))},(0,o.zw)(e.$t("buttons.CANCEL")),9,Ba)])):(0,a.kq)("",!0)])):(0,a.kq)("",!0)])))),128))])]),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("div",Za,[(0,a._)("button",{class:"cancel",onClick:t[4]||(t[4]=(0,s.iM)((t=>e.$router.push("/profile/sports")),["prevent"]))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,a.wg)(),(0,a.iD)("div",Ha,[(0,a._)("button",{onClick:t[5]||(t[5]=t=>e.$router.push("/profile/edit/sports"))},(0,o.zw)(e.$t("user.PROFILE.EDIT_SPORTS_PREFERENCES")),1),(0,a._)("button",{onClick:t[6]||(t[6]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))])):(0,a.kq)("",!0)])}}});const Va=(0,P.Z)(qa,[["__scopeId","data-v-74e52489"]]);var ja=Va,Xa=n(2894);const Ja=e=>((0,a.dD)("data-v-74257266"),e=e(),(0,a.Cn)(),e),Qa={class:"about-text"},eo=["innerHTML"],to=Ja((()=>(0,a._)("i",{class:"fa fa-book fa-padding","aria-hidden":"true"},null,-1))),no={href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer"},ro=Ja((()=>(0,a._)("i",{class:"fa fa-github fa-padding","aria-hidden":"true"},null,-1))),ao={href:"https://github.com/SamR1/FitTrackee",target:"_blank",rel:"noopener noreferrer"},oo=Ja((()=>(0,a._)("i",{class:"fa fa-balance-scale fa-padding","aria-hidden":"true"},null,-1))),so=Ja((()=>(0,a._)("a",{href:"https://choosealicense.com/licenses/agpl-3.0/",target:"_blank",rel:"noopener noreferrer"}," AGPLv3 ",-1))),io={key:0},lo=Ja((()=>(0,a._)("i",{class:"fa fa-envelope-o fa-padding","aria-hidden":"true"},null,-1))),co=["href"];var uo=(0,a.aZ)({__name:"About",setup(e){const t=(0,c.o)(),n=(0,a.Fl)((()=>t.getters[l.SY.GETTERS.APP_CONFIG]));return(e,t)=>{const r=(0,a.up)("i18n-t");return(0,a.wg)(),(0,a.iD)("div",Qa,[(0,a._)("div",null,[(0,a._)("p",{class:"error-message",innerHTML:e.$t("about.FITTRACKEE_DESCRIPTION")},null,8,eo),(0,a._)("p",null,[to,(0,a._)("a",no,(0,o.zw)((0,o.kC)(e.$t("common.DOCUMENTATION"))),1)]),(0,a._)("p",null,[ro,(0,a._)("a",ao,(0,o.zw)(e.$t("about.SOURCE_CODE")),1)]),(0,a._)("p",null,[oo,(0,a.Wm)(r,{keypath:"about.FITTRACKEE_LICENSE"},{default:(0,a.w5)((()=>[so])),_:1})]),(0,i.SU)(n).admin_contact?((0,a.wg)(),(0,a.iD)("div",io,[lo,(0,a._)("a",{href:`mailto:${(0,i.SU)(n).admin_contact}`},(0,o.zw)(e.$t("about.CONTACT_ADMIN")),9,co)])):(0,a.kq)("",!0)])])}}});const mo=(0,P.Z)(uo,[["__scopeId","data-v-74257266"]]);var _o=mo;const Eo={id:"bike"},So=["src"];function To(e,t){return(0,a.wg)(),(0,a.iD)("div",Eo,[(0,a._)("img",{class:"bike-img",src:"/img/bike.svg",alt:"mountain bike"},null,8,So)])}const po={},Ao=(0,P.Z)(po,[["render",To],["__scopeId","data-v-795f7f5f"]]);var Oo=Ao;const Ro={id:"about",class:"view"},Io={class:"container"},Uo={class:"container-sub"},go={class:"container-sub about-details"};var No=(0,a.aZ)({__name:"AboutView",setup(e){return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ro,[(0,a._)("div",Io,[(0,a._)("div",Uo,[(0,a.Wm)(Oo)]),(0,a._)("div",go,[(0,a.Wm)(_o)])])]))}});const ho=(0,P.Z)(No,[["__scopeId","data-v-bffb50d0"]]);var zo=ho,wo=n(1818),fo=n(2056);const vo=e=>((0,a.dD)("data-v-96abcc38"),e=e(),(0,a.Cn)(),e),Co={class:"timeline-workout"},Do={class:"box"},ko={class:"workout-user-date"},Po={class:"workout-user"},Lo=["title"],Mo={key:0},bo={key:1,class:"no-map"},yo={class:"img"},Go={class:"data"},Fo=vo((()=>(0,a._)("i",{class:"fa fa-clock-o","aria-hidden":"true"},null,-1))),Wo={key:0},Ko={class:"data"},Yo=vo((()=>(0,a._)("i",{class:"fa fa-road","aria-hidden":"true"},null,-1))),xo={key:0,class:"data elevation"},$o=["alt"],Bo={class:"data-values"},Zo={key:1,class:"data altitude"},Ho=vo((()=>(0,a._)("i",{class:"fa fa-location-arrow","aria-hidden":"true"},null,-1))),qo={class:"data-values"};var Vo=(0,a.aZ)({__name:"WorkoutCard",props:{user:null,useImperialUnits:{type:Boolean},workout:{default:()=>({})},sport:{default:()=>({})}},setup(e){const t=e,n=(0,c.o)(),{user:r,workout:s,sport:u,useImperialUnits:d}=(0,i.BK)(t),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LOCALE]));return(e,t)=>{const n=(0,a.up)("router-link"),l=(0,a.up)("SportImage"),c=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",Co,[(0,a._)("div",Do,[(0,a._)("div",ko,[(0,a._)("div",Po,[(0,a.Wm)(Le.Z,{user:(0,i.SU)(r)},null,8,["user"]),(0,i.SU)(r).username?((0,a.wg)(),(0,a.j4)(n,{key:0,class:"workout-user-name",to:{name:"User",params:{username:(0,i.SU)(r).username}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(r).username),1)])),_:1},8,["to"])):(0,a.kq)("",!0)]),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(n,{key:0,class:"workout-title",to:{name:"Workout",params:{workoutId:(0,i.SU)(s).id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(s).title),1)])),_:1},8,["to"])):(0,a.kq)("",!0),(0,i.SU)(s).workout_date&&(0,i.SU)(r)?((0,a.wg)(),(0,a.iD)("div",{key:1,class:"workout-date",title:(0,i.SU)(Ye.p6)((0,i.SU)(s).workout_date,(0,i.SU)(r).timezone,(0,i.SU)(r).date_format)},(0,o.zw)((0,i.SU)(wo.Z)(new Date((0,i.SU)(s).workout_date),new Date,{addSuffix:!0,locale:(0,i.SU)(m)})),9,Lo)):(0,a.kq)("",!0)]),(0,a._)("div",{class:(0,o.C_)(["workout-map",{"no-cursor":!(0,i.SU)(s)}]),onClick:t[0]||(t[0]=t=>(0,i.SU)(s).id?e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(s).id}}):null)},[(0,i.SU)(s)?((0,a.wg)(),(0,a.iD)("div",Mo,[(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.j4)(fo.Z,{key:0,workout:(0,i.SU)(s)},null,8,["workout"])):((0,a.wg)(),(0,a.iD)("div",bo,(0,o.zw)(e.$t("workouts.NO_MAP")),1))])):(0,a.kq)("",!0)],2),(0,a._)("div",{class:(0,o.C_)(["workout-data",{"without-gpx":(0,i.SU)(s)&&!(0,i.SU)(s).with_gpx}]),onClick:t[1]||(t[1]=t=>(0,i.SU)(s).id?e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(s).id}}):null)},[(0,a._)("div",yo,[(0,i.SU)(u).label?((0,a.wg)(),(0,a.j4)(l,{key:0,"sport-label":(0,i.SU)(u).label,color:(0,i.SU)(u).color},null,8,["sport-label","color"])):(0,a.kq)("",!0)]),(0,a._)("div",Go,[Fo,(0,i.SU)(s)?((0,a.wg)(),(0,a.iD)("span",Wo,(0,o.zw)((0,i.SU)(s).moving),1)):(0,a.kq)("",!0)]),(0,a._)("div",Ko,[Yo,(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).distance,digits:3,unitFrom:"km",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)]),(0,i.SU)(s)&&(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.iD)("div",xo,[(0,a._)("img",{class:"mountains",src:"/img/workouts/mountains.svg",alt:e.$t("workouts.ELEVATION")},null,8,$o),(0,a._)("div",Bo,[(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).min_alt,unitFrom:"m",displayUnit:!1,useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0),(0,a.Uk)("/ "),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:1,distance:(0,i.SU)(s).max_alt,unitFrom:"m",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)])])):(0,a.kq)("",!0),(0,i.SU)(s)&&(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.iD)("div",Zo,[Ho,(0,a._)("div",qo,[(0,a.Uk)(" +"),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).ascent,unitFrom:"m",displayUnit:!1,useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0),(0,a.Uk)("/- "),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:1,distance:(0,i.SU)(s).descent,unitFrom:"m",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)])])):(0,a.kq)("",!0)],2)])])}}});const jo=(0,P.Z)(Vo,[["__scopeId","data-v-96abcc38"]]);var Xo=jo,Jo=n(5630),Qo=n(3768);const es={id:"timeline"},ts={class:"section-title"},ns={key:0},rs={key:1},as={key:1,class:"more-workouts"};var os=(0,a.aZ)({__name:"Timeline",props:{sports:null,user:null},setup(e){const t=e,n=(0,c.o)(),{sports:r,user:s}=(0,i.BK)(t),u=(0,i.iH)(1),d=5,m=t.user.nb_workouts>=d?d:t.user.nb_workouts;(0,a.wF)((()=>S()));const _=(0,a.Fl)((()=>n.getters[l.aX.GETTERS.TIMELINE_WORKOUTS])),E=(0,a.Fl)((()=>_.value.length>0&&null!==_.value[_.value.length-1].previous_workout));function S(){n.dispatch(l.aX.ACTIONS.GET_TIMELINE_WORKOUTS,{page:u.value,per_page:d,...Qo.eR})}function T(){u.value+=1,n.dispatch(l.aX.ACTIONS.GET_MORE_TIMELINE_WORKOUTS,{page:u.value,per_page:d,...Qo.eR})}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",es,[(0,a._)("div",ts,(0,o.zw)(e.$t("workouts.LATEST_WORKOUTS")),1),(0,i.SU)(s).nb_workouts>0&&0===(0,i.SU)(_).length?((0,a.wg)(),(0,a.iD)("div",ns,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)([...Array((0,i.SU)(m)).keys()],(e=>((0,a.wg)(),(0,a.j4)(Xo,{user:(0,i.SU)(s),useImperialUnits:(0,i.SU)(s).imperial_units,key:e},null,8,["user","useImperialUnits"])))),128))])):((0,a.wg)(),(0,a.iD)("div",rs,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(_),(e=>((0,a.wg)(),(0,a.j4)(Xo,{workout:e,sport:(0,i.SU)(_).length>0?(0,i.SU)(r).filter((t=>t.id===e.sport_id))[0]:null,user:(0,i.SU)(s),useImperialUnits:(0,i.SU)(s).imperial_units,key:e.id},null,8,["workout","sport","user","useImperialUnits"])))),128)),0===(0,i.SU)(_).length?((0,a.wg)(),(0,a.j4)(Jo.Z,{key:0})):(0,a.kq)("",!0),(0,i.SU)(E)?((0,a.wg)(),(0,a.iD)("div",as,[(0,a._)("button",{onClick:T},(0,o.zw)(e.$t("workouts.LOAD_MORE_WORKOUT")),1)])):(0,a.kq)("",!0)]))]))}});const ss=(0,P.Z)(os,[["__scopeId","data-v-35567bf2"]]);var is=ss,ls=n(1640),cs=n(4559),us=n(7349),ds=n(1743),ms=n(9160),_s=n(1085);const Es=["title"];var Ss=(0,a.aZ)({__name:"CalendarWorkout",props:{displayHARecord:{type:Boolean},workout:null,sportLabel:null,sportColor:null},setup(e){const t=e,{displayHARecord:n,workout:r,sportLabel:o,sportColor:s}=(0,i.BK)(t);return(e,t)=>{const l=(0,a.up)("SportImage");return(0,a.wg)(),(0,a.iD)("div",{class:"calendar-workout",onClick:t[0]||(t[0]=t=>e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(r).id}}))},[(0,a.Wm)(l,{"sport-label":(0,i.SU)(o),title:(0,i.SU)(r).title,color:(0,i.SU)(s)},null,8,["sport-label","title","color"]),(0,a._)("sup",null,[(0,i.SU)(r).records.length>0?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-trophy custom-fa-small","aria-hidden":"true",title:(0,i.SU)(r).records.filter((e=>!!(0,i.SU)(n)||"HA"!==e.record_type)).map((t=>` ${e.$t(`workouts.RECORD_${t.record_type}`)}`))},null,8,Es)):(0,a.kq)("",!0)])])}}});const Ts=Ss;var ps=Ts;const As={class:"donut-chart"},Os={height:"34",width:"34",viewBox:"0 0 34 34"},Rs=["stroke","stroke-dashoffset","transform"];var Is=(0,a.aZ)({__name:"DonutChart",props:{colors:null,datasets:null},setup(e){const t=e,{colors:n,datasets:r}=(0,i.BK)(t);let o=-90;const s=16,l=16,c=14,u=2*Math.PI*c;function d(e,t){return t-e*t}function m(e,t){const n=`rotate(${o}, ${s}, ${l})`;return o=360*t+o,n}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",As,[((0,a.wg)(),(0,a.iD)("svg",Os,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(Object.entries((0,i.SU)(r)),((e,t)=>((0,a.wg)(),(0,a.iD)("g",{key:t},[(0,a._)("circle",{cx:s,cy:l,r:c,fill:"transparent",stroke:(0,i.SU)(n)[+e[0]],"stroke-dashoffset":d(e[1].percentage,u),"stroke-dasharray":u,"stroke-width":"3","stroke-opacity":"0.8",transform:m(t,e[1].percentage)},null,8,Rs)])))),128))]))]))}});const Us=Is;var gs=Us;const Ns={class:"calendar-workouts-chart"},hs={class:"workouts-count"},zs={key:0,class:"workouts-pane"},ws={class:"more-workouts"};var fs=(0,a.aZ)({__name:"CalendarWorkoutsChart",props:{colors:null,datasets:null,sports:null,workouts:null},setup(e){const t=e,{colors:n,datasets:r,sports:s,workouts:l}=(0,i.BK)(t),c=(0,i.iH)(!0);function u(e){e.stopPropagation(),c.value=!c.value}return(e,t)=>{const d=(0,a.Q2)("click-outside");return(0,a.wg)(),(0,a.iD)("div",Ns,[(0,a._)("div",{class:"workouts-chart",onClick:u},[(0,a._)("div",hs,(0,o.zw)((0,i.SU)(l).length),1),(0,a.Wm)(gs,{datasets:(0,i.SU)(r),colors:(0,i.SU)(n)},null,8,["datasets","colors"])]),c.value?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("div",zs,[(0,a.wy)(((0,a.wg)(),(0,a.iD)("div",ws,[(0,a._)("i",{class:"fa fa-times calendar-more","aria-hidden":"true",onClick:u}),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(l),((e,t)=>((0,a.wg)(),(0,a.j4)(ps,{key:t,workout:e,sportLabel:(0,i.SU)(le.PA)(e,(0,i.SU)(s)),sportColor:(0,i.SU)(le.CM)(e,(0,i.SU)(s))},null,8,["workout","sportLabel","sportColor"])))),128))])),[[d,u]])]))])}}});const vs=(0,P.Z)(fs,[["__scopeId","data-v-52d4310a"]]);var Cs=vs;const Ds={class:"calendar-workouts"},ks={class:"desktop-display"},Ps={key:0,class:"workouts-display"},Ls={key:1,class:"donut-display"},Ms={class:"mobile-display"},bs={key:0,class:"donut-display"};var ys=(0,a.aZ)({__name:"CalendarWorkouts",props:{displayHARecord:{type:Boolean},workouts:null,sports:null},setup(e){const t=e,{displayHARecord:n,workouts:r,sports:o}=(0,i.BK)(t),s=(0,a.Fl)((()=>(0,Qo.BN)(t.workouts))),l=(0,a.Fl)((()=>(0,le.Yx)(t.sports))),c=6;return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ds,[(0,a._)("div",ks,[(0,i.SU)(r).length<=c?((0,a.wg)(),(0,a.iD)("div",Ps,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(r).slice(0,c),((e,t)=>((0,a.wg)(),(0,a.j4)(ps,{key:t,displayHARecord:(0,i.SU)(n),workout:e,sportLabel:(0,i.SU)(le.PA)(e,(0,i.SU)(o)),sportColor:(0,i.SU)(le.CM)(e,(0,i.SU)(o))},null,8,["displayHARecord","workout","sportLabel","sportColor"])))),128))])):((0,a.wg)(),(0,a.iD)("div",Ls,[(0,a.Wm)(Cs,{workouts:(0,i.SU)(r),sports:(0,i.SU)(o),datasets:(0,i.SU)(s),colors:(0,i.SU)(l)},null,8,["workouts","sports","datasets","colors"])]))]),(0,a._)("div",Ms,[(0,i.SU)(r).length>0?((0,a.wg)(),(0,a.iD)("div",bs,[(0,a.Wm)(Cs,{workouts:(0,i.SU)(r),sports:(0,i.SU)(o),datasets:(0,i.SU)(s),colors:(0,i.SU)(l)},null,8,["workouts","sports","datasets","colors"])])):(0,a.kq)("",!0)])]))}});const Gs=ys;var Fs=Gs;const Ws={class:"calendar-cells"},Ks={class:"calendar-cell-day"};var Ys=(0,a.aZ)({__name:"CalendarCells",props:{currentDay:null,displayHARecord:{type:Boolean},endDate:null,sports:null,startDate:null,timezone:null,weekStartingMonday:{type:Boolean},workouts:null},setup(e){const t=e,{currentDay:n,displayHARecord:r,endDate:s,sports:l,startDate:c,timezone:u,weekStartingMonday:d,workouts:m}=(0,i.BK)(t),_=(0,i.iH)([]);function E(){_.value=[];let e=c.value;while(e<=s.value){const t=[];for(let n=0;n<7;n++)t.push(e),e=(0,us.Z)(e,1);_.value.push(t)}}function S(e){return d.value?[5,6].includes(e):[0,6].includes(e)}function T(e,t){return t?t.filter((t=>(0,ds.Z)((0,Ye.eB)(t.workout_date,u.value),e))).reverse():[]}return(0,a.bv)((()=>E())),(0,a.YP)((()=>t.currentDay),(()=>E())),(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ws,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(_.value,((e,t)=>((0,a.wg)(),(0,a.iD)("div",{class:"calendar-row",key:t},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(e,((e,t)=>((0,a.wg)(),(0,a.iD)("div",{class:(0,o.C_)(["calendar-cell",{"disabled-cell":!(0,i.SU)(ms.Z)(e,(0,i.SU)(n)),"week-end":S(t),today:(0,i.SU)(_s.Z)(e)}]),key:t},[(0,a.Wm)(Fs,{workouts:T(e,(0,i.SU)(m)),sports:(0,i.SU)(l),displayHARecord:(0,i.SU)(r)},null,8,["workouts","sports","displayHARecord"]),(0,a._)("div",Ks,(0,o.zw)((0,i.SU)(jt.Z)(e,"d")),1)],2)))),128))])))),128))]))}});const xs=Ys;var $s=xs;const Bs={class:"calendar-days"};var Zs=(0,a.aZ)({__name:"CalendarDays",props:{startDate:null,localeOptions:null},setup(e){const t=e,n=[];for(let r=0;r<7;r++)n.push((0,us.Z)(t.startDate,r));return(t,r)=>((0,a.wg)(),(0,a.iD)("div",Bs,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(n,((t,n)=>(0,a._)("div",{class:"calendar-day",key:n},(0,o.zw)((0,i.SU)(jt.Z)(t,"EEE",{locale:e.localeOptions})),1))),64))]))}});const Hs=Zs;var qs=Hs;const Vs={class:"calendar-header"},js=(0,a._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1),Xs=[js],Js={class:"calendar-month"},Qs=(0,a._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1),ei=[Qs];var ti=(0,a.aZ)({__name:"CalendarHeader",props:{day:null,localeOptions:null},emits:["displayNextMonth","displayPreviousMonth"],setup(e,{emit:t}){const n=e,{day:r,localeOptions:s}=(0,i.BK)(n);return(e,n)=>((0,a.wg)(),(0,a.iD)("div",Vs,[(0,a._)("div",{class:"calendar-arrow calendar-arrow-left",onClick:n[0]||(n[0]=e=>t("displayPreviousMonth"))},Xs),(0,a._)("div",Js,[(0,a._)("span",null,(0,o.zw)((0,i.SU)(jt.Z)((0,i.SU)(r),"MMM yyyy",{locale:(0,i.SU)(s)})),1)]),(0,a._)("div",{class:"calendar-arrow calendar-arrow-right",onClick:n[1]||(n[1]=e=>t("displayNextMonth"))},ei)]))}});const ni=ti;var ri=ni;const ai={id:"user-calendar"},oi={class:"calendar-card box"};var si=(0,a.aZ)({__name:"index",props:{sports:null,user:null},setup(e){const t=e,n=(0,c.o)(),{sports:r,user:o}=(0,i.BK)(t),s="yyyy-MM-dd",u=(0,i.iH)(new Date),d=(0,i.iH)((0,Ye.yx)(u.value,t.user.weekm)),m=(0,a.Fl)((()=>n.getters[l.aX.GETTERS.CALENDAR_WORKOUTS])),_=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LOCALE]));function E(){d.value=(0,Ye.yx)(u.value,t.user.weekm);const e={from:(0,jt.Z)(d.value.start,s),to:(0,jt.Z)(d.value.end,s),page:1,per_page:100,...Qo.eR};n.dispatch(l.aX.ACTIONS.GET_CALENDAR_WORKOUTS,e)}function S(){u.value=(0,ls.Z)(u.value,1),E()}function T(){u.value=(0,cs.Z)(u.value,1),E()}return(0,a.wF)((()=>E())),(e,t)=>((0,a.wg)(),(0,a.iD)("div",ai,[(0,a._)("div",oi,[(0,a.Wm)(ri,{day:u.value,"locale-options":(0,i.SU)(_),onDisplayNextMonth:S,onDisplayPreviousMonth:T},null,8,["day","locale-options"]),(0,a.Wm)(qs,{"start-date":d.value.start,"locale-options":(0,i.SU)(_)},null,8,["start-date","locale-options"]),(0,a.Wm)($s,{currentDay:u.value,displayHARecord:(0,i.SU)(o).display_ascent,"end-date":d.value.end,sports:(0,i.SU)(r),"start-date":d.value.start,timezone:(0,i.SU)(o).timezone,workouts:(0,i.SU)(m),weekStartingMonday:(0,i.SU)(o).weekm},null,8,["currentDay","displayHARecord","end-date","sports","start-date","timezone","workouts","weekStartingMonday"])])]))}});const ii=si;var li=ii,ci=n(3703),ui=n(4135),di=n(3170);const mi={class:"user-month-stats"};var _i=(0,a.aZ)({__name:"UserMonthStats",props:{sports:null,user:null},setup(e){const t=e,{sports:n,user:r}=(0,i.BK)(t),s=new Date,l={duration:"week",start:(0,ci.Z)(s),end:(0,ui.Z)(s)},c=t.sports.map((e=>e.id));return(e,t)=>{const s=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",mi,[(0,a.Wm)(s,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("dashboard.THIS_MONTH")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(di.Z,{sports:(0,i.SU)(n),user:(0,i.SU)(r),"chart-params":l,"displayed-sport-ids":(0,i.SU)(c),"hide-chart-if-no-data":!0},null,8,["sports","user","displayed-sport-ids"])])),_:1})])}}});const Ei=(0,P.Z)(_i,[["__scopeId","data-v-1bcddc12"]]);var Si=Ei,Ti=n(2540),pi=n(3649);const{locale:Ai}=Ti.Z.global,Oi=(e,t,n,r)=>{const a="km",o=n?pi.Dl[a].defaultTarget:a,s="m",i=n?pi.Dl[s].defaultTarget:s;let l;switch(e.record_type){case"AS":case"MS":l=`${(0,pi.sC)(+e.value,a,o,2)} ${o}/h`;break;case"FD":l=`${(0,pi.sC)(+e.value,a,o,3)} ${o}`;break;case"HA":l=`${(0,pi.sC)(+e.value,s,i,2)} ${i}`;break;case"LD":l=e.value;break;default:throw new Error(`Invalid record type, expected: "AS", "FD", "HA", "LD", "MD", got: "${e.record_type}"`)}return{workout_date:(0,Ye.p6)(e.workout_date,t,r,!1),workout_id:e.workout_id,id:e.id,record_type:e.record_type,value:l}},Ri=(e,t)=>{const n=e.label.toLowerCase(),r=t.label.toLowerCase();return n>r?1:n(o=(0,Ye.mh)(o,Ai.value),e.filter((e=>!!a||"HA"!==e.record_type)).reduce(((e,a)=>{const s=t.find((e=>e.id===a.sport_id));return s&&s.label&&(void 0===e[s.translatedLabel]&&(e[s.translatedLabel]={label:s.label,color:s.color,records:[]}),e[s.translatedLabel].records.push(Oi(a,n,r,o))),e}),{})),Ui={class:"records-card"},gi={class:"record-type"},Ni={class:"record-value"},hi={class:"record-date"};var zi=(0,a.aZ)({__name:"RecordsCard",props:{records:null,sportTranslatedLabel:null},setup(e){const t=e,{records:n,sportTranslatedLabel:r}=(0,i.BK)(t),{t:s}=(0,ie.QT)();function l(e){const t=[];return e.map((e=>{t.push({...e,label:s(`workouts.RECORD_${e.record_type}`)})})),t.sort(Ri)}return(e,t)=>{const s=(0,a.up)("SportImage"),c=(0,a.up)("router-link"),u=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",Ui,[(0,a.Wm)(u,null,{title:(0,a.w5)((()=>[(0,a.Wm)(s,{"sport-label":(0,i.SU)(n).label,color:(0,i.SU)(n).color},null,8,["sport-label","color"]),(0,a.Uk)(" "+(0,o.zw)((0,i.SU)(r)),1)])),content:(0,a.w5)((()=>[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(l((0,i.SU)(n).records),(e=>((0,a.wg)(),(0,a.iD)("div",{class:"record",key:e.id},[(0,a._)("span",gi,(0,o.zw)(e.label),1),(0,a._)("span",Ni,(0,o.zw)(e.value),1),(0,a._)("span",hi,[(0,a.Wm)(c,{to:{name:"Workout",params:{workoutId:e.workout_id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.workout_date),1)])),_:2},1032,["to"])])])))),128))])),_:1})])}}});const wi=(0,P.Z)(zi,[["__scopeId","data-v-8d17c606"]]);var fi=wi;const vi=e=>((0,a.dD)("data-v-f0c85cb8"),e=e(),(0,a.Cn)(),e),Ci={class:"user-records-section"},Di={class:"section-title"},ki=vi((()=>(0,a._)("i",{class:"fa fa-trophy custom-fa-small","aria-hidden":"true"},null,-1))),Pi={class:"user-records"},Li={key:0,class:"no-records"};var Mi=(0,a.aZ)({__name:"index",props:{sports:null,user:null},setup(e){const t=e,{t:n}=(0,ie.QT)(),r=(0,a.Fl)((()=>Ii(t.user.records,(0,le.xH)(t.sports,n),t.user.timezone,t.user.imperial_units,t.user.display_ascent,t.user.date_format)));return(t,n)=>((0,a.wg)(),(0,a.iD)("div",Ci,[(0,a._)("div",Di,[ki,(0,a.Uk)(" "+(0,o.zw)(t.$t("workouts.RECORD",2)),1)]),(0,a._)("div",Pi,[0===Object.keys((0,i.SU)(r)).length?((0,a.wg)(),(0,a.iD)("div",Li,(0,o.zw)(t.$t("workouts.NO_RECORDS")),1)):(0,a.kq)("",!0),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(Object.keys((0,i.SU)(r)).sort(),(t=>((0,a.wg)(),(0,a.j4)(fi,{sportTranslatedLabel:t,records:(0,i.SU)(r)[t],key:t,useImperialUnits:e.user.imperial_units},null,8,["sportTranslatedLabel","records","useImperialUnits"])))),128))])]))}});const bi=(0,P.Z)(Mi,[["__scopeId","data-v-f0c85cb8"]]);var yi=bi;const Gi={id:"user-stats"};var Fi=(0,a.aZ)({__name:"index",props:{user:null},setup(e){const t=e,{t:n}=(0,ie.QT)(),{user:r}=(0,i.BK)(t),o=(0,a.Fl)((()=>t.user.total_duration)),s=(0,a.Fl)((()=>E(o))),l="km",c=r.value.imperial_units?pi.Dl[l].defaultTarget:l,u=(0,a.Fl)((()=>r.value.imperial_units?(0,pi.sC)(r.value.total_distance,l,c,2):parseFloat(r.value.total_distance.toFixed(2)))),d="m",m=r.value.imperial_units?pi.Dl[d].defaultTarget:d,_=(0,a.Fl)((()=>r.value.imperial_units?(0,pi.sC)(r.value.total_ascent,d,m,2):parseFloat(r.value.total_ascent.toFixed(2))));function E(e){const t=e.value.match(/day/g)?e.value.split(", ")[1]:e.value;return{days:e.value.match(/day/g)?`${e.value.split(" ")[0]} ${e.value.match(/days/g)?n("common.DAY",2):n("common.DAY",1)}`:`0 ${n("common.DAY",2)},`,duration:`${t.split(":")[0]}h ${t.split(":")[1]}min`}}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Gi,[(0,a.Wm)($,{icon:"calendar",value:(0,i.SU)(r).nb_workouts,text:e.$t("workouts.WORKOUT",(0,i.SU)(r).nb_workouts)},null,8,["value","text"]),(0,a.Wm)($,{icon:"road",value:(0,i.SU)(u),text:"mi"===(0,i.SU)(c)?"miles":(0,i.SU)(c)},null,8,["value","text"]),(0,i.SU)(r).display_ascent?((0,a.wg)(),(0,a.j4)($,{key:0,icon:"location-arrow",value:(0,i.SU)(_),text:"ft"===(0,i.SU)(m)?"feet":(0,i.SU)(m)},null,8,["value","text"])):(0,a.kq)("",!0),(0,a.Wm)($,{icon:"clock-o",value:(0,i.SU)(s).days,text:(0,i.SU)(s).duration},null,8,["value","text"]),(0,i.SU)(r).display_ascent?(0,a.kq)("",!0):((0,a.wg)(),(0,a.j4)($,{key:1,icon:"tags",value:(0,i.SU)(r).nb_sports,text:e.$t("workouts.SPORT",(0,i.SU)(r).nb_sports)},null,8,["value","text"]))]))}});const Wi=Fi;var Ki=Wi;const Yi=e=>((0,a.dD)("data-v-4c0893c1"),e=e(),(0,a.Cn)(),e),xi={key:0,id:"dashboard",class:"view"},$i={class:"container mobile-menu"},Bi={class:"box"},Zi=Yi((()=>(0,a._)("i",{class:"fa fa-calendar","aria-hidden":"true"},null,-1))),Hi=[Zi],qi=Yi((()=>(0,a._)("i",{class:"fa fa-bar-chart","aria-hidden":"true"},null,-1))),Vi=[qi],ji=Yi((()=>(0,a._)("i",{class:"fa fa-map-o","aria-hidden":"true"},null,-1))),Xi=[ji],Ji=Yi((()=>(0,a._)("i",{class:"fa fa-trophy","aria-hidden":"true"},null,-1))),Qi=[Ji],el={class:"container"},tl={class:"container dashboard-container"},nl={class:"left-container dashboard-sub-container"},rl={class:"right-container dashboard-sub-container"},al=Yi((()=>(0,a._)("div",{id:"bottom"},null,-1))),ol={key:1,class:"app-loading"};var sl=(0,a.aZ)({__name:"Dashboard",setup(e){const t=(0,c.o)(),n=(0,a.Fl)((()=>t.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),r=(0,a.Fl)((()=>t.getters[l.O8.GETTERS.SPORTS])),s=(0,i.iH)("calendar");function u(e){s.value=e}return(0,a.wF)((()=>t.dispatch(l.YN.ACTIONS.GET_USER_PROFILE))),(e,t)=>{const l=(0,a.up)("Loader");return(0,i.SU)(n).username&&(0,i.SU)(r).length>0?((0,a.wg)(),(0,a.iD)("div",xi,[(0,a._)("div",$i,[(0,a._)("div",Bi,[(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"calendar"===s.value}]),onClick:t[0]||(t[0]=e=>u("calendar"))},Hi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"chart"===s.value}]),onClick:t[1]||(t[1]=e=>u("chart"))},Vi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"timeline"===s.value}]),onClick:t[2]||(t[2]=e=>u("timeline"))},Xi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"records"===s.value}]),onClick:t[3]||(t[3]=e=>u("records"))},Qi,2)])]),(0,a._)("div",el,[(0,a.Wm)(Ki,{user:(0,i.SU)(n)},null,8,["user"])]),(0,a._)("div",tl,[(0,a._)("div",nl,[(0,a.Wm)(Si,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("chart"===s.value)})},null,8,["sports","user","class"]),(0,a.Wm)(yi,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("records"===s.value)})},null,8,["sports","user","class"])]),(0,a._)("div",rl,[(0,a.Wm)(li,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("calendar"===s.value)})},null,8,["sports","user","class"]),(0,a.Wm)(is,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("timeline"===s.value)})},null,8,["sports","user","class"])])]),al])):((0,a.wg)(),(0,a.iD)("div",ol,[(0,a.Wm)(l)]))}}});const il=(0,P.Z)(sl,[["__scopeId","data-v-4c0893c1"]]);var ll=il,cl=n(8273);const ul={class:"not-found view"};var dl=(0,a.aZ)({__name:"NotFoundView",setup(e){return(e,t)=>((0,a.wg)(),(0,a.iD)("div",ul,[(0,a.Wm)(cl.Z)]))}});const ml=dl;var _l=ml,El=n(2411);const Sl={id:"loginOrRegister",class:"view"},Tl={class:"container"},pl={class:"container-sub"},Al={class:"container-sub"};var Ol=(0,a.aZ)({__name:"LoginOrRegister",props:{action:null},setup(e){const t=e,{action:n}=(0,i.BK)(t);return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Sl,[(0,a._)("div",Tl,[(0,a._)("div",pl,[(0,a.Wm)(Oo)]),(0,a._)("div",Al,[(0,a.Wm)(El.Z,{action:(0,i.SU)(n)},null,8,["action"])])])]))}});const Rl=(0,P.Z)(Ol,[["__scopeId","data-v-6a38125b"]]);var Il=Rl;const Ul=e=>{const t=/(\/profile)(\/edit)*(\/*)/,n=e.replace(t,"").toUpperCase();return""===n?"PROFILE":n.toUpperCase()},gl=[{path:"/",name:"Dashboard",component:ll},{path:"/login",name:"Login",component:Il,props:{action:"login"}},{path:"/register",name:"Register",component:Il,props:{action:"register"}},{path:"/account-confirmation",name:"AccountConfirmation",component:()=>n.e(845).then(n.bind(n,4264))},{path:"/account-confirmation/resend",name:"AccountConfirmationResend",component:()=>n.e(24).then(n.bind(n,5639)),props:{action:"account-confirmation-resend"}},{path:"/account-confirmation/email-sent",name:"AccountConfirmationEmailSend",component:()=>n.e(24).then(n.bind(n,5639)),props:{action:"email-sent"}},{path:"/password-reset/sent",name:"PasswordEmailSent",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"request-sent"}},{path:"/password-reset/request",name:"PasswordResetRequest",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"reset-request"}},{path:"/password-reset/password-updated",name:"PasswordUpdated",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"password-updated"}},{path:"/password-reset",name:"PasswordReset",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"reset"}},{path:"/email-update",name:"EmailUpdate",component:()=>n.e(845).then(n.bind(n,8160))},{path:"/profile",name:"Profile",component:()=>n.e(845).then(n.bind(n,6266)),children:[{path:"",name:"UserProfile",component:Nt,props:e=>({tab:Ul(e.path)}),children:[{path:"",name:"UserInfos",component:ht.Z},{path:"preferences",name:"UserPreferences",component:Dt},{path:"sports",name:"UserSportPreferences",component:ja,props:{isEdition:!1}},{path:"apps",name:"UserApps",component:Xr,children:[{path:"",name:"UserAppsList",component:Ra},{path:":id",name:"UserApp",component:da},{path:":id/created",name:"CreatedUserApp",component:da,props:{afterCreation:!0}},{path:"new",name:"AddUserApp",component:Mr},{path:"authorize",name:"AuthorizeUserApp",component:Hr}]}]},{path:"edit",name:"UserProfileEdition",component:Mt,props:e=>({tab:Ul(e.path)}),children:[{path:"",name:"UserInfosEdition",component:Sn},{path:"account",name:"UserAccountEdition",component:Vt},{path:"picture",name:"UserPictureEdition",component:wn},{path:"preferences",name:"UserPreferencesEdition",component:ur},{path:"sports",name:"UserSportPreferencesEdition",component:ja,props:{isEdition:!0}}]}]},{path:"/statistics",name:"Statistics",component:()=>n.e(193).then(n.bind(n,7885))},{path:"/users/:username",name:"User",component:()=>n.e(845).then(n.bind(n,9453))},{path:"/workouts",name:"Workouts",component:()=>n.e(401).then(n.bind(n,5651))},{path:"/workouts/:workoutId",name:"Workout",component:()=>n.e(401).then(n.bind(n,4915)),props:{displaySegment:!1}},{path:"/workouts/:workoutId/edit",name:"EditWorkout",component:()=>n.e(401).then(n.bind(n,8237))},{path:"/workouts/:workoutId/segment/:segmentId",name:"WorkoutSegment",component:()=>n.e(401).then(n.bind(n,4915)),props:{displaySegment:!0}},{path:"/workouts/add",name:"AddWorkout",component:()=>n.e(401).then(n.bind(n,4189))},{path:"/admin",name:"Administration",component:()=>n.e(328).then(n.bind(n,6e3)),children:[{path:"",name:"AdministrationMenu",component:se},{path:"application",name:"ApplicationAdministration",component:M},{path:"application/edit",name:"ApplicationAdministrationEdition",component:M,props:{edition:!0}},{path:"sports",name:"SportsAdministration",component:De},{path:"users/:username",name:"UserFromAdmin",component:()=>n.e(845).then(n.bind(n,9453)),props:{fromAdmin:!0}},{path:"users",name:"UsersAdministration",component:mt}]},{path:"/about",name:"About",component:zo},{path:"/:pathMatch(.*)*",name:"not-found",component:_l}],Nl=(0,r.p7)({history:(0,r.PO)("/"),routes:gl}),hl=["/login","/password-reset","/password-reset/password-updated","/password-reset/request","/password-reset/sent","/register","/account-confirmation","/account-confirmation/resend","/account-confirmation/email-sent"],zl=["/email-update","/about"];Nl.beforeEach(((e,t,n)=>{Xa.Z.dispatch(l.YN.ACTIONS.CHECK_AUTH_USER).then((()=>{if(zl.includes(e.path))return n();if(Xa.Z.getters[l.YN.GETTERS.IS_AUTHENTICATED]&&hl.includes(e.path))return n("/");if(Xa.Z.getters[l.YN.GETTERS.IS_AUTHENTICATED]||hl.includes(e.path))n();else{const t="/"===e.path?{path:"/login"}:{path:"/login",query:{from:e.fullPath}};n(t)}})).catch((e=>{console.error(e),n()}))}));var wl=Nl},5801:function(e,t,n){"use strict";var r,a,o,s,i,l,c,u,d,m,_,E,S,T,p,A,O,R;n.d(t,{YN:function(){return h},Km:function(){return z},SY:function(){return U},O8:function(){return g},gu:function(){return N},RT:function(){return w},aX:function(){return f}}),function(e){e["CHECK_AUTH_USER"]="CHECK_AUTH_USER",e["CONFIRM_ACCOUNT"]="CONFIRM_ACCOUNT",e["CONFIRM_EMAIL"]="CONFIRM_EMAIL",e["DELETE_ACCOUNT"]="DELETE_ACCOUNT",e["DELETE_PICTURE"]="DELETE_PICTURE",e["GET_USER_PROFILE"]="GET_USER_PROFILE",e["LOGIN_OR_REGISTER"]="LOGIN_OR_REGISTER",e["LOGOUT"]="LOGOUT",e["SEND_PASSWORD_RESET_REQUEST"]="SEND_PASSWORD_RESET_REQUEST",e["RESEND_ACCOUNT_CONFIRMATION_EMAIL"]="RESEND_ACCOUNT_CONFIRMATION_EMAIL",e["RESET_USER_PASSWORD"]="RESET_USER_PASSWORD",e["RESET_USER_SPORT_PREFERENCES"]="RESET_USER_SPORT_PREFERENCES",e["UPDATE_USER_ACCOUNT"]="UPDATE_USER_ACCOUNT",e["UPDATE_USER_PICTURE"]="UPDATE_USER_PICTURE",e["UPDATE_USER_PROFILE"]="UPDATE_USER_PROFILE",e["UPDATE_USER_PREFERENCES"]="UPDATE_USER_PREFERENCES",e["UPDATE_USER_SPORT_PREFERENCES"]="UPDATE_USER_SPORT_PREFERENCES"}(r||(r={})),function(e){e["AUTH_TOKEN"]="AUTH_TOKEN",e["AUTH_USER_PROFILE"]="AUTH_USER_PROFILE",e["IS_ADMIN"]="IS_ADMIN",e["IS_AUTHENTICATED"]="IS_AUTHENTICATED",e["IS_SUCCESS"]="IS_SUCCESS",e["IS_REGISTRATION_SUCCESS"]="IS_REGISTRATION_SUCCESS",e["USER_LOADING"]="USER_LOADING"}(a||(a={})),function(e){e["CLEAR_AUTH_USER_TOKEN"]="CLEAR_AUTH_USER_TOKEN",e["UPDATE_AUTH_TOKEN"]="UPDATE_AUTH_TOKEN",e["UPDATE_AUTH_USER_PROFILE"]="UPDATE_AUTH_USER_PROFILE",e["UPDATE_IS_SUCCESS"]="UPDATE_USER_IS_SUCCESS",e["UPDATE_IS_REGISTRATION_SUCCESS"]="UPDATE_IS_REGISTRATION_SUCCESS",e["UPDATE_USER_LOADING"]="UPDATE_USER_LOADING"}(o||(o={})),function(e){e["AUTHORIZE_CLIENT"]="AUTHORIZE_CLIENT",e["CREATE_CLIENT"]="CREATE_CLIENT",e["DELETE_CLIENT"]="DELETE_CLIENT",e["GET_CLIENTS"]="GET_CLIENTS",e["GET_CLIENT_BY_CLIENT_ID"]="GET_CLIENT_BY_CLIENT_ID",e["GET_CLIENT_BY_ID"]="GET_CLIENT_BY_ID",e["REVOKE_ALL_TOKENS"]="REVOKE_ALL_TOKENS"}(s||(s={})),function(e){e["CLIENT"]="CLIENT",e["CLIENTS"]="CLIENTS",e["CLIENTS_PAGINATION"]="CLIENTS_PAGINATION",e["REVOCATION_SUCCESSFUL"]="REVOCATION_SUCCESSFUL"}(i||(i={})),function(e){e["EMPTY_CLIENT"]="EMPTY_CLIENT",e["SET_CLIENT"]="SET_CLIENT",e["SET_CLIENTS"]="SET_CLIENTS",e["SET_CLIENTS_PAGINATION"]="SET_CLIENTS_PAGINATION",e["SET_REVOCATION_SUCCESSFUL"]="SET_REVOCATION_SUCCESSFUL"}(l||(l={})),function(e){e["GET_APPLICATION_CONFIG"]="GET_APPLICATION_CONFIG",e["GET_APPLICATION_STATS"]="GET_APPLICATION_STATS",e["UPDATE_APPLICATION_CONFIG"]="UPDATE_APPLICATION_CONFIG",e["UPDATE_APPLICATION_LANGUAGE"]="UPDATE_APPLICATION_LANGUAGE"}(c||(c={})),function(e){e["APP_CONFIG"]="APP_CONFIG",e["APP_LOADING"]="APP_LOADING",e["APP_STATS"]="APP_STATS",e["ERROR_MESSAGES"]="ERROR_MESSAGES",e["LANGUAGE"]="LANGUAGE",e["LOCALE"]="LOCALE"}(u||(u={})),function(e){e["EMPTY_ERROR_MESSAGES"]="EMPTY_ERROR_MESSAGES",e["SET_ERROR_MESSAGES"]="SET_ERROR_MESSAGES",e["UPDATE_APPLICATION_CONFIG"]="UPDATE_APPLICATION_CONFIG",e["UPDATE_APPLICATION_LOADING"]="UPDATE_APPLICATION_LOADING",e["UPDATE_APPLICATION_STATS"]="UPDATE_APPLICATION_STATS",e["UPDATE_LANG"]="UPDATE_LANG"}(d||(d={})),function(e){e["GET_SPORTS"]="GET_SPORTS",e["UPDATE_SPORTS"]="UPDATE_SPORTS"}(m||(m={})),function(e){e["SPORTS"]="SPORTS"}(_||(_={})),function(e){e["SET_SPORTS"]="SET_SPORTS"}(E||(E={})),function(e){e["GET_USER_STATS"]="GET_USER_STATS"}(S||(S={})),function(e){e["USER_STATS"]="USER_STATS"}(T||(T={})),function(e){e["EMPTY_USER_STATS"]="EMPTY_USER_STATS",e["UPDATE_USER_STATS"]="UPDATE_USER_STATS"}(p||(p={})),function(e){e["EMPTY_USER"]="EMPTY_USER",e["EMPTY_USERS"]="EMPTY_USERS",e["GET_USER"]="GET_USER",e["GET_USERS"]="GET_USERS",e["UPDATE_USER"]="UPDATE_USER",e["DELETE_USER_ACCOUNT"]="DELETE_USER_ACCOUNT"}(A||(A={})),function(e){e["USER"]="USER",e["USERS"]="USERS",e["USERS_IS_SUCCESS"]="USERS_IS_SUCCESS",e["USERS_LOADING"]="USERS_LOADING",e["USERS_PAGINATION"]="USERS_PAGINATION"}(O||(O={})),function(e){e["UPDATE_USER"]="UPDATE_USER",e["UPDATE_USER_IN_USERS"]="UPDATE_USER_IN_USERS",e["UPDATE_USERS"]="UPDATE_USERS",e["UPDATE_USERS_LOADING"]="UPDATE_USERS_LOADING",e["UPDATE_USERS_PAGINATION"]="UPDATE_USERS_PAGINATION",e["UPDATE_IS_SUCCESS"]="UPDATE_IS_SUCCESS"}(R||(R={}));var I=n(52);const U={ACTIONS:c,GETTERS:u,MUTATIONS:d},g={ACTIONS:m,GETTERS:_,MUTATIONS:E},N={ACTIONS:S,GETTERS:T,MUTATIONS:p},h={ACTIONS:r,GETTERS:a,MUTATIONS:o},z={ACTIONS:s,GETTERS:i,MUTATIONS:l},w={ACTIONS:A,GETTERS:O,MUTATIONS:R},f={ACTIONS:I.tW,GETTERS:I.JP,MUTATIONS:I.CW}},2894:function(e,t,n){"use strict";n.d(t,{Z:function(){return me}});var r=n(3907),a=(n(7658),n(5167)),o=n(9669),s=n.n(o),i=n(8566),l=n(2024);const c=s().create({baseURL:(0,l.k)()});c.interceptors.request.use((e=>{const t=new AbortController;e.signal=t.signal;const n=(0,i.a)(e);return i.j.set(n,t),e}),(e=>Promise.reject(e))),c.interceptors.response.use((e=>((0,i.a)(e.config),e)),(e=>("canceled"!==e.message&&(0,i.a)(e.response.config),Promise.reject(e))));var u=c,d=n(5073),m=n(5801);const _=(e,t)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z["delete"](`users/${t.username}`).then((n=>{204===n.status?t.fromAdmin?d.Z.push("/admin/users"):e.dispatch(m.YN.ACTIONS.LOGOUT).then((()=>d.Z.push("/"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},E={[m.RT.ACTIONS.EMPTY_USER](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USER,{})},[m.RT.ACTIONS.EMPTY_USERS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS,[]),e.commit(m.RT.MUTATIONS.UPDATE_USERS_PAGINATION,{})},[m.RT.ACTIONS.GET_USER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!0),a.Z.get(`users/${t}`).then((t=>{"success"===t.data.status?e.commit(m.RT.MUTATIONS.UPDATE_USER,t.data.data.users[0]):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.GET_USERS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!0),a.Z.get("users",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.RT.MUTATIONS.UPDATE_USERS,t.data.data.users),e.commit(m.RT.MUTATIONS.UPDATE_USERS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.UPDATE_USER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1);const n={};void 0!==t.admin&&(n.admin=t.admin),t.resetPassword&&(n.reset_password=t.resetPassword),t.activate&&(n.activate=t.activate),void 0!==t.new_email&&(n.new_email=t.new_email),a.Z.patch(`users/${t.username}`,n).then((n=>{"success"===n.data.status?(e.commit(m.RT.MUTATIONS.UPDATE_USER_IN_USERS,n.data.data.users[0]),(t.resetPassword||t.new_email)&&e.commit(m.RT.MUTATIONS.UPDATE_IS_SUCCESS,!0),(t.activate||t.new_email)&&e.commit(m.RT.MUTATIONS.UPDATE_USER,n.data.data.users[0])):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.DELETE_USER_ACCOUNT](e,t){_(e,{username:t.username,fromAdmin:!0})}},S=e=>{localStorage.removeItem("authToken"),e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.gu.MUTATIONS.EMPTY_USER_STATS),e.commit(m.YN.MUTATIONS.CLEAR_AUTH_USER_TOKEN),e.commit(m.RT.MUTATIONS.UPDATE_USERS,[]),e.commit(m.aX.MUTATIONS.EMPTY_WORKOUTS),e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),d.Z.push("/login")},T={[m.YN.ACTIONS.CHECK_AUTH_USER](e){window.localStorage.authToken&&!e.getters[m.YN.GETTERS.IS_AUTHENTICATED]&&(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,window.localStorage.authToken),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE)),!window.localStorage.authToken&&e.getters[m.YN.GETTERS.IS_AUTHENTICATED]&&S(e)},[m.YN.ACTIONS.CONFIRM_ACCOUNT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/account/confirm",{token:t.token}).then((t=>{if("success"===t.data.status){const n=t.data.auth_token;window.localStorage.setItem("authToken",n),e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,n),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/")))}else(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t)}))},[m.YN.ACTIONS.CONFIRM_EMAIL](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),u.post("/auth/email/update",{token:t.token}).then((n=>{"success"===n.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!0),t.refreshUser&&e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile/edit/account"))),d.Z.push("/profile/edit/account")):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t)}))},[m.YN.ACTIONS.GET_USER_PROFILE](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("auth/profile").then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),t.data.data.language&&e.dispatch(m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,t.data.data.language),e.dispatch(m.O8.ACTIONS.GET_SPORTS)):((0,l.S)(e,null),S(e))})).catch((t=>{"canceled"!==t.message&&((0,l.S)(e,t),S(e))}))},[m.YN.ACTIONS.LOGIN_OR_REGISTER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!1),u.post(`/auth/${t.actionType}`,t.formData).then((n=>{if("success"===n.data.status)if("login"===t.actionType){const r=n.data.auth_token;window.localStorage.setItem("authToken",r),e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,r),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("string"===typeof t.redirectUrl?t.redirectUrl:"/")))}else d.Z.push("/login").then((()=>e.commit(m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!0)));else(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.LOGOUT](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.post("auth/logout").then((t=>{"success"===t.data.status?S(e):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.UPDATE_USER_PROFILE](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),d.Z.push("/profile")):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.UPDATE_USER_ACCOUNT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),a.Z.patch("auth/profile/edit/account",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!0)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.UPDATE_USER_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit/preferences",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),e.dispatch(m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,t.data.data.language).then((()=>d.Z.push("/profile/preferences")))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.RESET_USER_SPORT_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z["delete"](`auth/profile/reset/sports/${t}`).then((t=>{204===t.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)}))},[m.YN.ACTIONS.UPDATE_USER_SPORT_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit/sports",t).then((t=>{"success"===t.data.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)}))},[m.YN.ACTIONS.UPDATE_USER_PICTURE](e,t){if(e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),!t.picture)throw new Error("No file part");const n=new FormData;n.append("file",t.picture),a.Z.post("auth/picture",n,{headers:{"content-type":"multipart/form-data"}}).then((t=>{"success"===t.data.status?e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.DELETE_ACCOUNT](e,t){_(e,t)},[m.YN.ACTIONS.DELETE_PICTURE](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z["delete"]("auth/picture").then((t=>{204===t.status?e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.SEND_PASSWORD_RESET_REQUEST](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/password/reset-request",t).then((t=>{"success"===t.data.status?d.Z.push("/password-reset/sent"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/account/resend-confirmation",t).then((t=>{"success"===t.data.status?d.Z.push("/account-confirmation/email-sent"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.RESET_USER_PASSWORD](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/password/update",t).then((t=>{"success"===t.data.status?d.Z.push("/password-reset/password-updated"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},p={[m.YN.GETTERS.AUTH_TOKEN]:e=>e.authToken,[m.YN.GETTERS.AUTH_USER_PROFILE]:e=>e.authUserProfile,[m.YN.GETTERS.IS_AUTHENTICATED]:e=>null!==e.authToken,[m.YN.GETTERS.IS_ADMIN]:e=>e.authUserProfile&&e.authUserProfile.admin,[m.YN.GETTERS.IS_REGISTRATION_SUCCESS]:e=>e.isRegistrationSuccess,[m.YN.GETTERS.IS_SUCCESS]:e=>e.isSuccess,[m.YN.GETTERS.USER_LOADING]:e=>e.loading},A={[m.YN.MUTATIONS.CLEAR_AUTH_USER_TOKEN](e){e.authToken=null,e.authUserProfile={}},[m.YN.MUTATIONS.UPDATE_AUTH_TOKEN](e,t){e.authToken=t},[m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE](e,t){e.authUserProfile=t},[m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS](e,t){e.isRegistrationSuccess=t},[m.YN.MUTATIONS.UPDATE_IS_SUCCESS](e,t){e.isSuccess=t},[m.YN.MUTATIONS.UPDATE_USER_LOADING](e,t){e.loading=t}},O={authToken:null,authUserProfile:{},isSuccess:!1,isRegistrationSuccess:!1,loading:!1},R={state:O,actions:T,getters:p,mutations:A};var I=R;const U=(e,t)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get(t).then((t=>{"success"===t.data.status?e.commit(m.Km.MUTATIONS.SET_CLIENT,t.data.data.client):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},g={[m.Km.ACTIONS.AUTHORIZE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES);const n=new FormData;n.set("client_id",t.client_id),n.set("response_type",t.response_type),n.set("scope",t.scope),n.set("confirm","true"),t.state&&n.set("state",t.state),t.code_challenge&&n.set("code_challenge",t.code_challenge),t.code_challenge_method&&n.set("code_challenge_method",t.code_challenge_method),a.Z.post("oauth/authorize",n,{headers:{"Content-Type":"multipart/form-data"}}).then((t=>{200==t.status&&t.data.redirect_url?window.location.href=t.data.redirect_url:(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.CREATE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.post("oauth/apps",t).then((t=>{"created"===t.data.status?(e.commit(m.Km.MUTATIONS.SET_CLIENT,t.data.data.client),d.Z.push(`/profile/apps/${t.data.data.client.id}/created`)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.DELETE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z["delete"](`oauth/apps/${t}`).then((t=>{204===t.status?e.dispatch(m.Km.ACTIONS.GET_CLIENTS).then((()=>d.Z.push("/profile/apps"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.GET_CLIENT_BY_CLIENT_ID](e,t){U(e,`oauth/apps/${t}`)},[m.Km.ACTIONS.GET_CLIENT_BY_ID](e,t){U(e,`oauth/apps/${t}/by_id`)},[m.Km.ACTIONS.GET_CLIENTS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("oauth/apps",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.Km.MUTATIONS.SET_CLIENTS,t.data.data.clients),e.commit(m.Km.MUTATIONS.SET_CLIENTS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.REVOKE_ALL_TOKENS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!1),a.Z.post(`oauth/apps/${t}/revoke`).then((t=>{"success"===t.data.status?e.commit(m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!0):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},N={[m.Km.GETTERS.CLIENT]:e=>e.client,[m.Km.GETTERS.CLIENTS]:e=>e.clients,[m.Km.GETTERS.CLIENTS_PAGINATION]:e=>e.pagination,[m.Km.GETTERS.REVOCATION_SUCCESSFUL]:e=>e.revocationSuccessful},h={[m.Km.MUTATIONS.SET_CLIENT](e,t){e.client=t},[m.Km.MUTATIONS.EMPTY_CLIENT](e){e.client={}},[m.Km.MUTATIONS.SET_CLIENTS](e,t){e.clients=t},[m.Km.MUTATIONS.SET_CLIENTS_PAGINATION](e,t){e.pagination=t},[m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL](e,t){e.revocationSuccessful=t}},z={client:{},clients:[],pagination:{},revocationSuccessful:!1},w={state:z,actions:g,getters:N,mutations:h};var f=w,v=n(2540);const{locale:C}=v.Z.global,D={[m.SY.ACTIONS.GET_APPLICATION_CONFIG](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING,!0),a.Z.get("config").then((t=>{"success"===t.data.status?e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG,t.data.data):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING,!1)))},[m.SY.ACTIONS.GET_APPLICATION_STATS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("stats/all").then((t=>{"success"===t.data.status?e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_STATS,t.data.data):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.SY.ACTIONS.UPDATE_APPLICATION_CONFIG](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.patch("config",t).then((t=>{"success"===t.data.status?(e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG,t.data.data),d.Z.push("/admin/application")):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE](e,t){document.querySelector("html")?.setAttribute("lang",t),e.commit(m.SY.MUTATIONS.UPDATE_LANG,t),C.value=t}},k={[m.SY.GETTERS.APP_CONFIG]:e=>e.application.config,[m.SY.GETTERS.APP_LOADING]:e=>e.appLoading,[m.SY.GETTERS.APP_STATS]:e=>e.application.statistics,[m.SY.GETTERS.ERROR_MESSAGES]:e=>e.errorMessages,[m.SY.GETTERS.LANGUAGE]:e=>e.language,[m.SY.GETTERS.LOCALE]:e=>e.locale};var P=n(6287);const L={[m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES](e){e.errorMessages=null},[m.SY.MUTATIONS.SET_ERROR_MESSAGES](e,t){e.errorMessages=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG](e,t){e.application.config=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING](e,t){e.appLoading=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_STATS](e,t){e.application.statistics=t},[m.SY.MUTATIONS.UPDATE_LANG](e,t){e.language=t,e.locale=P.v1[t]}};var M=n(5826);const b={root:!0,language:"en",locale:M.Z,errorMessages:null,application:{statistics:{sports:0,uploads_dir_size:0,users:0,workouts:0}},appLoading:!1},y={[m.O8.ACTIONS.GET_SPORTS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("sports").then((t=>{"success"===t.data.status?(e.commit(m.O8.MUTATIONS.SET_SPORTS,t.data.data.sports),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.O8.ACTIONS.UPDATE_SPORTS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.patch(`sports/${t.id}`,{is_active:t.isActive}).then((t=>{"success"===t.data.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},G={[m.O8.GETTERS.SPORTS]:e=>e.sports},F={[m.O8.MUTATIONS.SET_SPORTS](e,t){e.sports=t}},W={sports:[]},K={state:W,actions:y,getters:G,mutations:F};var Y=K;const x={[m.gu.ACTIONS.GET_USER_STATS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get(`stats/${t.username}/${t.filterType}`,{params:t.params}).then((t=>{"success"===t.data.status?e.commit(m.gu.MUTATIONS.UPDATE_USER_STATS,t.data.data.statistics):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},$={[m.gu.GETTERS.USER_STATS]:e=>e.statistics},B={[m.gu.MUTATIONS.UPDATE_USER_STATS](e,t){e.statistics=t},[m.gu.MUTATIONS.EMPTY_USER_STATS](e){e.statistics={}}},Z={statistics:{}},H={state:Z,actions:x,getters:$,mutations:B};var q=H;const V={[m.RT.GETTERS.USER]:e=>e.user,[m.RT.GETTERS.USERS]:e=>e.users,[m.RT.GETTERS.USERS_IS_SUCCESS]:e=>e.isSuccess,[m.RT.GETTERS.USERS_LOADING]:e=>e.loading,[m.RT.GETTERS.USERS_PAGINATION]:e=>e.pagination},j={[m.RT.MUTATIONS.UPDATE_USER](e,t){e.user=t},[m.RT.MUTATIONS.UPDATE_USER_IN_USERS](e,t){e.users=e.users.map((e=>e.username===t.username?t:e))},[m.RT.MUTATIONS.UPDATE_USERS](e,t){e.users=t},[m.RT.MUTATIONS.UPDATE_USERS_LOADING](e,t){e.loading=t},[m.RT.MUTATIONS.UPDATE_USERS_PAGINATION](e,t){e.pagination=t},[m.RT.MUTATIONS.UPDATE_IS_SUCCESS](e,t){e.isSuccess=t}},X={user:{},users:[],loading:!1,isSuccess:!1,pagination:{}},J={state:X,actions:E,getters:V,mutations:j};var Q=J,ee=n(52);const te=(e,t,n)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("workouts",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.aX.MUTATIONS[n],t.data.data.workouts),n===ee.CW.SET_USER_WORKOUTS&&e.commit(m.aX.MUTATIONS.SET_WORKOUTS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},ne={[m.aX.ACTIONS.GET_CALENDAR_WORKOUTS](e,t){e.commit(m.aX.MUTATIONS.EMPTY_CALENDAR_WORKOUTS),te(e,t,ee.CW.SET_CALENDAR_WORKOUTS)},[m.aX.ACTIONS.GET_USER_WORKOUTS](e,t){te(e,t,ee.CW.SET_USER_WORKOUTS)},[m.aX.ACTIONS.GET_TIMELINE_WORKOUTS](e,t){te(e,t,ee.CW.SET_TIMELINE_WORKOUTS)},[m.aX.ACTIONS.GET_MORE_TIMELINE_WORKOUTS](e,t){te(e,t,ee.CW.ADD_TIMELINE_WORKOUTS)},[m.aX.ACTIONS.GET_WORKOUT_DATA](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0);const n=t.segmentId?`/segment/${t.segmentId}`:"";a.Z.get(`workouts/${t.workoutId}`).then((r=>{const o=r.data.data.workouts[0];if("success"===r.data.status){if(t.segmentId&&(0===o.segments.length||!o.segments[+t.segmentId-1]))throw new Error("WORKOUT_NOT_FOUND");e.commit(m.aX.MUTATIONS.SET_WORKOUT,r.data.data.workouts[0]),r.data.data.workouts[0].with_gpx&&(a.Z.get(`workouts/${t.workoutId}/chart_data${n}`).then((t=>{"success"===t.data.status&&e.commit(m.aX.MUTATIONS.SET_WORKOUT_CHART_DATA,t.data.data.chart_data)})),a.Z.get(`workouts/${t.workoutId}/gpx${n}`).then((t=>{"success"===t.data.status&&e.commit(m.aX.MUTATIONS.SET_WORKOUT_GPX,t.data.data.gpx)})))}else e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),(0,l.S)(e,null)})).catch((t=>{e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.DELETE_WORKOUT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z["delete"](`workouts/${t.workoutId}`).then((()=>{e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE),d.Z.push("/")})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.EDIT_WORKOUT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z.patch(`workouts/${t.workoutId}`,t.data).then((()=>{e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE),e.dispatch(m.aX.ACTIONS.GET_WORKOUT_DATA,{workoutId:t.workoutId}).then((()=>{d.Z.push({name:"Workout",params:{workoutId:t.workoutId}})}))})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.ADD_WORKOUT](e,t){if(e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),!t.file)throw new Error("No file part");const n=new FormData;n.append("file",t.file),n.append("data",`{"sport_id": ${t.sport_id}, "notes": "${t.notes}"}`),a.Z.post("workouts",n,{headers:{"content-type":"multipart/form-data"}}).then((t=>{if("created"===t.data.status){e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE);const n=t.data.data.workouts[0];d.Z.push(1===t.data.data.workouts.length?`/workouts/${n.id}`:"/")}})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.ADD_WORKOUT_WITHOUT_GPX](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z.post("workouts/no_gpx",t).then((t=>{if("created"===t.data.status){e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE);const n=t.data.data.workouts[0];d.Z.push(`/workouts/${n.id}`)}})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))}},re={[m.aX.GETTERS.CALENDAR_WORKOUTS]:e=>e.calendar_workouts,[m.aX.GETTERS.TIMELINE_WORKOUTS]:e=>e.timeline_workouts,[m.aX.GETTERS.USER_WORKOUTS]:e=>e.user_workouts,[m.aX.GETTERS.WORKOUT_DATA]:e=>e.workoutData,[m.aX.GETTERS.WORKOUTS_PAGINATION]:e=>e.pagination},ae={[m.aX.MUTATIONS.ADD_TIMELINE_WORKOUTS](e,t){e.timeline_workouts=e.timeline_workouts.concat(t)},[m.aX.MUTATIONS.SET_CALENDAR_WORKOUTS](e,t){e.calendar_workouts=t},[m.aX.MUTATIONS.SET_TIMELINE_WORKOUTS](e,t){e.timeline_workouts=t},[m.aX.MUTATIONS.SET_USER_WORKOUTS](e,t){e.user_workouts=t},[m.aX.MUTATIONS.SET_WORKOUTS_PAGINATION](e,t){e.pagination=t},[m.aX.MUTATIONS.SET_WORKOUT](e,t){e.workoutData.workout=t},[m.aX.MUTATIONS.SET_WORKOUT_CHART_DATA](e,t){e.workoutData.chartData=t},[m.aX.MUTATIONS.SET_WORKOUT_GPX](e,t){e.workoutData.gpx=t},[m.aX.MUTATIONS.SET_WORKOUT_LOADING](e,t){e.workoutData.loading=t},[m.aX.MUTATIONS.EMPTY_CALENDAR_WORKOUTS](e){e.calendar_workouts=[]},[m.aX.MUTATIONS.EMPTY_WORKOUTS](e){e.calendar_workouts=[],e.user_workouts=[],e.timeline_workouts=[]},[m.aX.MUTATIONS.EMPTY_WORKOUT](e){e.workoutData={gpx:"",loading:!1,workout:{},chartData:[]}}},oe={calendar_workouts:[],timeline_workouts:[],pagination:{},user_workouts:[],workoutData:{gpx:"",loading:!1,workout:{},chartData:[]}},se={state:oe,actions:ne,getters:re,mutations:ae};var ie=se;const le={authUserModule:I,oAuthModule:f,sportsModule:Y,statsModule:q,usersModule:Q,workoutsModule:ie},ce={state:b,actions:D,getters:k,mutations:L,modules:le};var ue=ce;const de=(0,r.MT)(ue);var me=de},52:function(e,t,n){"use strict";var r,a,o;n.d(t,{CW:function(){return o},JP:function(){return a},tW:function(){return r}}),function(e){e["ADD_WORKOUT"]="ADD_WORKOUT",e["ADD_WORKOUT_WITHOUT_GPX"]="ADD_WORKOUT_WITHOUT_GPX",e["DELETE_WORKOUT"]="DELETE_WORKOUT",e["EDIT_WORKOUT"]="EDIT_WORKOUT",e["GET_CALENDAR_WORKOUTS"]="GET_CALENDAR_WORKOUTS",e["GET_USER_WORKOUTS"]="GET_USER_WORKOUTS",e["GET_TIMELINE_WORKOUTS"]="GET_TIMELINE_WORKOUTS",e["GET_MORE_TIMELINE_WORKOUTS"]="GET_MORE_TIMELINE_WORKOUTS",e["GET_WORKOUT_DATA"]="GET_WORKOUT_DATA"}(r||(r={})),function(e){e["CALENDAR_WORKOUTS"]="CALENDAR_WORKOUTS",e["TIMELINE_WORKOUTS"]="TIMELINE_WORKOUTS",e["USER_WORKOUTS"]="USER_WORKOUTS",e["WORKOUT_DATA"]="WORKOUT_DATA",e["WORKOUTS_PAGINATION"]="WORKOUTS_PAGINATION"}(a||(a={})),function(e){e["ADD_TIMELINE_WORKOUTS"]="ADD_TIMELINE_WORKOUTS",e["EMPTY_WORKOUTS"]="EMPTY_WORKOUTS",e["EMPTY_CALENDAR_WORKOUTS"]="EMPTY_CALENDAR_WORKOUTS",e["EMPTY_WORKOUT"]="EMPTY_WORKOUT",e["SET_CALENDAR_WORKOUTS"]="SET_CALENDAR_WORKOUTS",e["SET_TIMELINE_WORKOUTS"]="SET_TIMELINE_WORKOUTS",e["SET_USER_WORKOUTS"]="SET_USER_WORKOUTS",e["SET_WORKOUT"]="SET_WORKOUT",e["SET_WORKOUT_GPX"]="SET_WORKOUT_GPX",e["SET_WORKOUT_CHART_DATA"]="SET_WORKOUT_CHART_DATA",e["SET_WORKOUT_LOADING"]="SET_WORKOUT_LOADING",e["SET_WORKOUTS_PAGINATION"]="SET_WORKOUTS_PAGINATION"}(o||(o={}))},9917:function(e,t,n){"use strict";n.d(t,{o:function(){return a}});var r=n(3907);function a(){return(0,r.oR)()}},2766:function(e,t,n){"use strict";n.d(t,{Hf:function(){return a},Ne:function(){return c},fS:function(){return r},lM:function(){return d},pm:function(){return l},z_:function(){return s}});const r=["asc","desc"],a=1,o=10,s=(e,t)=>e&&"string"===typeof e&&+e>0?+e:t,i=(e,t,n)=>e&&"string"===typeof e&&t.includes(e)?e:n,l=(e,t,n,l)=>{const c=l||{},u=c.defaultSort||"asc",d={};return d.page=s(e.page,a),d.per_page=s(e.per_page,o),d.order=i(e.order,r,u),d.order_by=i(e.order_by,t,n),"string"===typeof e.q?d.q=e.q:delete d.q,d},c=["from","to","ave_speed_from","ave_speed_to","max_speed_from","max_speed_to","distance_from","distance_to","duration_from","duration_to","sport_id"],u=(e,t=1)=>Array.from({length:e-t+1},((e,n)=>t+n)),d=(e,t)=>{if(e<0)return[];if(e<9)return u(e);let n=[1,2];return t<4?n=n.concat([3,4,5]):t<6?n=n.concat(u(t+2,3)):(n=n.concat(["..."]),t=e-2&&n[n.length-1]{switch(e){case"week":return(0,r.Z)(t,{weekStartsOn:n?1:0});case"year":return(0,a.Z)(t);case"month":return(0,o.Z)(t);default:throw new Error(`Invalid duration, expected: "week", "month", "year", got: "${e}"`)}},p=(e,t)=>{switch(e){case"week":return(0,s.Z)(t,7);case"year":return(0,i.Z)(t,1);case"month":return(0,l.Z)(t,1);default:throw new Error(`Invalid duration, expected: "week", "month", "year", got: "${e}"`)}},A=(e,t)=>(0,m.utcToZonedTime)(new Date(e),t),O=(e,t)=>{const n=(0,o.Z)(e),a=(0,c.Z)(e),s=t?1:0;return{start:(0,r.Z)(n,{weekStartsOn:s}),end:(0,u.Z)(a,{weekStartsOn:s})}},R=(e,t=null,n=null)=>(t||(t="yyyy/MM/dd"),t=g(t,S.value),n||(n="HH:mm"),{workout_date:(0,d.Z)(e,t,{locale:E.v1[S.value]}),workout_time:(0,d.Z)(e,n)}),I=["MM/dd/yyyy","dd/MM/yyyy","yyyy-MM-dd","date_string"],U={de:"do MMM yyyy",en:"MMM. do, yyyy",fr:"d MMM yyyy"},g=(e,t)=>"date_string"===e?U[t]:e,N=(e,t,n,r=!0,a=null)=>(a||(a=S.value),(0,d.Z)(A(e,t),`${g(n,a)}${r?" HH:mm":""}`,{locale:E.v1[a]})),h=(e,t,n=null)=>{const r=n||S.value,a=[];return I.map((n=>{const o=g(n,r);a.push({label:`${o} - ${N(e,t,o,!1,r)}`,value:n})})),a}},8966:function(e,t,n){"use strict";n.d(t,{Z:function(){return a},j:function(){return o}});const r=["bytes","KB","MB","GB","TB"],a=(e,t=!0)=>{const n=Math.floor(Math.log(e)/Math.log(1024));if(!e)return t?"0 bytes":{size:"0",suffix:"bytes"};const a=(e/Math.pow(1024,n)).toFixed(1),o=r[n];return t?`${a}${o}`:{size:a,suffix:o}},o=e=>{const t=e/1048576;return+t.toFixed(2)}},2024:function(e,t,n){"use strict";n.d(t,{S:function(){return o},k:function(){return a}});var r=n(5801);const a=()=>"/api/",o=(e,t,n="UNKNOWN")=>{if(t&&"canceled"===t.message)return;if(401===t?.response?.status&&"invalid_token"===t.response.data.error)return localStorage.removeItem("authToken"),void e.dispatch(r.YN.ACTIONS.CHECK_AUTH_USER);const a=t?t.response?413===t.response.status?"file size is greater than the allowed size":t.response.data.message?t.response.data.message:n:t.message?t.message:n:n;e.commit(r.SY.MUTATIONS.SET_ERROR_MESSAGES,a.includes("\n")?a.split("\n").filter((e=>""!==e)).map((e=>`api.ERROR.${e}`)):`api.ERROR.${a}`)}},6287:function(e,t,n){"use strict";n.d(t,{mT:function(){return u},v1:function(){return i},zK:function(){return l}});var r=n(879),a=n(5826),o=n(5830),s=n(2540);const i={de:r.Z,en:a.Z,fr:o.Z},l={de:"Deutsch",en:"English",fr:"Français"},{availableLocales:c}=s.Z.global,u=c.map((e=>({label:l[e],value:e})))},631:function(e,t,n){"use strict";n.d(t,{CM:function(){return l},PA:function(){return i},Yx:function(){return a},Zo:function(){return r},xH:function(){return s}});const r={"Cycling (Sport)":"#4c9792","Cycling (Transport)":"#88af98","Cycling (Virtual)":"#64a360",Hiking:"#bb757c","Mountain Biking":"#d4b371","Mountain Biking (Electric)":"#fc9d6f",Rowing:"#fcce72",Running:"#835b83","Skiing (Alpine)":"#67a4bd","Skiing (Cross Country)":"#9498d0",Snowshoes:"#5780a8",Trail:"#09a98a",Walking:"#838383"},a=e=>{const t={};return e.map((e=>t[e.id]=e.color?e.color:r[e.label])),t},o=(e,t)=>{const n=e.translatedLabel.toLowerCase(),r=t.translatedLabel.toLowerCase();return n>r?1:ne.filter((e=>"all"===n||(r.includes(e.id)||e[n]))).map((e=>({...e,translatedLabel:t(`sports.${e.label}.LABEL`)}))).sort(o),i=(e,t)=>t.filter((t=>t.id===e.sport_id)).map((e=>e.label))[0],l=(e,t)=>t.filter((t=>t.id===e.sport_id)).map((e=>e.color))[0]},9318:function(e,t,n){"use strict";n.d(t,{FN:function(){return C},aZ:function(){return v},v1:function(){return f}});n(7658);var r=n(4850),a=n(8148),o=n(9319),s=n(584),i=n(4559),l=n(3703),c=n(876),u=n(7090),d=n(4135),m=n(1593),_=n(7982),E=n(3500),S=n(1640),T=n(2540),p=n(6558),A=n(6287),O=n(631),R=n(3649);const{locale:I}=T.Z.global,U={week:{api:"yyyy-MM-dd",chart:"MM/dd/yyyy"},month:{api:"yyyy-MM",chart:"MM/yyyy"},year:{api:"yyyy",chart:"yyyy"}},g=["average_speed","nb_workouts","total_duration","total_distance","total_ascent","total_descent"],N=(e,t)=>{const n=[];for(let r=(0,p.Nh)(e.duration,e.start,t);r<=e.end;r=(0,p.xA)(e.duration,r))n.push(r);return n},h=(e,t,n=!1)=>{const r={label:e,backgroundColor:[t],data:[]};return n&&(r.type="line",r.borderColor=[t],r.spanGaps=!0),r},z=e=>{const t={average_speed:[],nb_workouts:[],total_distance:[],total_duration:[],total_ascent:[],total_descent:[]};return e.map((e=>{const n=e.color?e.color:O.Zo[e.label];t.average_speed.push(h(e.label,n,!0)),t.nb_workouts.push(h(e.label,n)),t.total_distance.push(h(e.label,n)),t.total_duration.push(h(e.label,n)),t.total_ascent.push(h(e.label,n)),t.total_descent.push(h(e.label,n))})),t},w=(e,t,n)=>{switch(e){case"average_speed":case"total_distance":case"total_ascent":case"total_descent":return(0,R.f3)(["average_speed","total_distance"].includes(e)?"km":"m",t,n);default:case"nb_workouts":case"total_duration":return t}},f=(e,t,n,a,o,s,i)=>{const l=N(e,t),c=U[e.duration],u=n.filter((e=>a.includes(e.id))),d=[],m=z(u),_={};return u.map((e=>_[e.label]=e.id)),l.map((t=>{const n=(0,r.Z)(t,c.api),a=(0,r.Z)(t,"week"===e.duration?(0,p.mh)(i,I.value):c.chart,{locale:A.v1[I.value]});d.push(a),g.map((e=>{m[e].map((t=>{t.data.push(n in o&&_[t.label]in o[n]?w(e,o[n][_[t.label]][e],s):"average_speed"===e?null:0)}))}))})),{labels:d,datasets:m}},v=(e,t,n)=>{const r=n?1:0,m="year"===t?(0,a.Z)((0,o.Z)(e,9)):"week"===t?(0,s.Z)((0,i.Z)(e,2),{weekStartsOn:r}):(0,l.Z)((0,i.Z)(e,11)),_="year"===t?(0,c.Z)(e):"week"===t?(0,u.Z)(e,{weekStartsOn:r}):(0,d.Z)(e);return{duration:t,end:_,start:m}},C=(e,t,n)=>{const{duration:r,start:T,end:p}=e,A=n?1:0;return{duration:r,end:"year"===r?(0,c.Z)(t?(0,o.Z)(p,1):(0,m.Z)(p,1)):"week"===r?(0,u.Z)(t?(0,_.Z)(p,1):(0,E.Z)(p,1),{weekStartsOn:A}):(0,d.Z)(t?(0,i.Z)(p,1):(0,S.Z)(p,1)),start:"year"===r?(0,a.Z)(t?(0,o.Z)(T,1):(0,m.Z)(T,1)):"week"===r?(0,s.Z)(t?(0,_.Z)(T,1):(0,E.Z)(T,1),{weekStartsOn:A}):(0,l.Z)(t?(0,i.Z)(T,1):(0,S.Z)(T,1))}}},3649:function(e,t,n){"use strict";n.d(t,{Dl:function(){return r},f3:function(){return s},sC:function(){return o}});const r={ft:{unit:"ft",system:"imperial",multiplier:1,defaultTarget:"m"},mi:{unit:"mi",system:"imperial",multiplier:5280,defaultTarget:"km"},m:{unit:"m",system:"metric",multiplier:1,defaultTarget:"ft"},km:{unit:"m",system:"metric",multiplier:1e3,defaultTarget:"mi"}},a={metric:{imperial:3.280839895,metric:1},imperial:{metric:1/3.280839895,imperial:1}},o=(e,t,n,o=3)=>{const s=r[t],i=r[n],l=e*s.multiplier*a[s.system][i.system]/i.multiplier;return null!==o?parseFloat(l.toFixed(o)):l},s=(e,t,n)=>{const a=n?r[e].defaultTarget:e;return n?o(t,e,a,2):t}},3768:function(e,t,n){"use strict";n.d(t,{BN:function(){return o},EX:function(){return a},eR:function(){return s}});n(7658);var r=n(3649);const a=(e,t,n)=>{const a={speed:{label:t("workouts.SPEED"),backgroundColor:["#FFFFFF"],borderColor:["#8884d8"],borderWidth:2,data:[],yAxisID:"ySpeed"},elevation:{label:t("workouts.ELEVATION"),backgroundColor:["#e5e5e5"],borderColor:["#cccccc"],borderWidth:1,fill:!0,data:[],yAxisID:"yElevation"}},o=[],s=[],i=[];return e.map((e=>{o.push(e.distance),s.push(e.duration),a.speed.data.push((0,r.f3)("km",e.speed,n)),a.elevation.data.push((0,r.f3)("m",e.elevation,n)),i.push({latitude:e.latitude,longitude:e.longitude})})),{distance_labels:o,duration_labels:s,datasets:a,coordinates:i}},o=e=>{const t=e.length;if(0===t)return{};const n={};return e.map((e=>{n[e.sport_id]||(n[e.sport_id]={count:0,percentage:0}),n[e.sport_id].count+=1,n[e.sport_id].percentage=n[e.sport_id].count/t})),n},s={order:"desc",order_by:"workout_date"}},2531:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(6252);const a={class:"card"},o={class:"card-title"},s={class:"card-content"};function i(e,t){return(0,r.wg)(),(0,r.iD)("div",a,[(0,r._)("div",o,[(0,r.WI)(e.$slots,"title")]),(0,r._)("div",s,[(0,r.WI)(e.$slots,"content")])])}var l=n(3744);const c={},u=(0,l.Z)(c,[["render",i]]);var d=u},8626:function(e,t,n){"use strict";n.d(t,{Z:function(){return T}});var r=n(6252),a=n(3577),o=n(2262);const s={class:"table-selects"},i=["value"],l=["value"],c=["value"],u=["value"],d=["value"],m=["value"];var _=(0,r.aZ)({__name:"FilterSelects",props:{order_by:null,query:null,sort:null,message:null},emits:["updateSelect"],setup(e,{emit:t}){const n=e,{order_by:_,query:E,sort:S,message:T}=(0,o.BK)(n),p=[10,25,50,100];function A(e){t("updateSelect",e.target.id,e.target.value)}return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.ORDER_BY.LABEL"))+": ",1),(0,r._)("select",{name:"order_by",id:"order_by",value:(0,o.SU)(E).order_by,onChange:A},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(_),(t=>((0,r.wg)(),(0,r.iD)("option",{value:t,key:t},(0,a.zw)(e.$t(`${(0,o.SU)(T)}.${t.toUpperCase()}`)),9,l)))),128))],40,i)]),(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.ORDER.LABEL"))+": ",1),(0,r._)("select",{name:"order",id:"order",value:(0,o.SU)(E).order,onChange:A},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(S),(t=>((0,r.wg)(),(0,r.iD)("option",{value:t,key:t},(0,a.zw)(e.$t(`common.SELECTS.ORDER.${t.toUpperCase()}`)),9,u)))),128))],40,c)]),(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.PER_PAGE.LABEL"))+": ",1),(0,r._)("select",{name:"per_page",id:"per_page",value:(0,o.SU)(E).per_page,onChange:A},[((0,r.wg)(),(0,r.iD)(r.HY,null,(0,r.Ko)(p,(e=>(0,r._)("option",{value:e,key:e},(0,a.zw)(e),9,m))),64))],40,d)])]))}}),E=n(3744);const S=(0,E.Z)(_,[["__scopeId","data-v-72463173"]]);var T=S},7167:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(6252);const a={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 -51 512 512"},o=(0,r.uE)('',1),s=[o];function i(e,t,n,o,i,l){return(0,r.wg)(),(0,r.iD)("svg",a,s)}var l={name:"ErrorImg"},c=n(3744);const u=(0,c.Z)(l,[["render",i]]);var d=u},8273:function(e,t,n){"use strict";n.d(t,{Z:function(){return E}});var r=n(6252),a=n(2262),o=(n(7658),n(3577));const s={id:"error"},i={class:"error-content"};var l=(0,r.aZ)({__name:"Error",props:{title:null,message:null,buttonText:null,path:{default:"/"}},setup(e){const t=e,{buttonText:n,title:l,message:c,path:u}=(0,a.BK)(t);return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[(0,r._)("div",i,[(0,r._)("h1",null,(0,o.zw)((0,a.SU)(l)),1),(0,r._)("p",null,(0,o.zw)((0,a.SU)(c)),1),(0,a.SU)(n)?((0,r.wg)(),(0,r.iD)("button",{key:0,onClick:t[0]||(t[0]=t=>e.$router.push((0,a.SU)(u))),class:"upper"},(0,o.zw)((0,a.SU)(n)),1)):(0,r.kq)("",!0)])]))}}),c=n(3744);const u=(0,c.Z)(l,[["__scopeId","data-v-b60bfa80"]]);var d=u,m=(0,r.aZ)({__name:"NotFound",props:{target:{default:"PAGE"}},setup(e){const t=e,{target:n}=(0,a.BK)(t),o=(0,a.iH)(),s=(0,a.iH)(!1);function i(){o.value=setTimeout((()=>{s.value=!0}),500)}return(0,r.bv)((()=>i())),(0,r.Ah)((()=>{o.value&&clearTimeout(o.value)})),(e,t)=>s.value?((0,r.wg)(),(0,r.j4)(d,{key:0,title:"404",message:e.$t(`error.NOT_FOUND.${(0,a.SU)(n)}`),"button-text":e.$t("common.HOME")},null,8,["message","button-text"])):(0,r.kq)("",!0)}});const _=m;var E=_},5020:function(e,t,n){"use strict";n.d(t,{Z:function(){return T}});var r=n(6252),a=n(3577),o=n(2262),s=n(2766);const i=e=>((0,r.dD)("data-v-3a9a4a65"),e=e(),(0,r.Cn)(),e),l={class:"pagination-center","aria-label":"navigation"},c={class:"pagination"},u=i((()=>(0,r._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1))),d={key:0},m=i((()=>(0,r._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1)));var _=(0,r.aZ)({__name:"Pagination",props:{pagination:null,path:null,query:null},setup(e){const t=e,{pagination:n,path:i,query:_}=(0,o.BK)(t);function E(e,t){const n=Object.assign({},_.value);return n.page=t?e+t:e,n}return(e,t)=>{const _=(0,r.up)("router-link");return(0,r.wg)(),(0,r.iD)("nav",l,[(0,r._)("ul",c,[(0,r._)("li",{class:(0,a.C_)(["page-prev",{disabled:!(0,o.SU)(n).has_prev}])},[(0,r.Wm)(_,{class:"page-link",to:{path:(0,o.SU)(i),query:E((0,o.SU)(n).page,-1)},disabled:!(0,o.SU)(n).has_prev},{default:(0,r.w5)((({navigate:t})=>[(0,r.WI)(e.$slots,"default",{onClick:e=>(0,o.SU)(n).has_next?t:null},(()=>[(0,r.Uk)((0,a.zw)(e.$t("api.PAGINATION.PREVIOUS"))+" ",1),u]))])),_:3},8,["to","disabled"])],2),((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(s.lM)((0,o.SU)(n).pages,(0,o.SU)(n).page),(e=>((0,r.wg)(),(0,r.iD)("li",{key:e,class:(0,a.C_)(["page",{active:e===(0,o.SU)(n).page}])},["..."===e?((0,r.wg)(),(0,r.iD)("span",d," ... ")):((0,r.wg)(),(0,r.j4)(_,{key:1,class:"page-link",to:{path:(0,o.SU)(i),query:E(+e)}},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e),1)])),_:2},1032,["to"]))],2)))),128)),(0,r._)("li",{class:(0,a.C_)(["page-next",{disabled:!(0,o.SU)(n).has_next}])},[(0,r.Wm)(_,{class:"page-link",to:{path:(0,o.SU)(i),query:E((0,o.SU)(n).page,1)},disabled:!(0,o.SU)(n).has_next},{default:(0,r.w5)((({navigate:t})=>[(0,r.WI)(e.$slots,"default",{onClick:e=>(0,o.SU)(n).has_next?t:null},(()=>[(0,r.Uk)((0,a.zw)(e.$t("api.PAGINATION.NEXT"))+" ",1),m]))])),_:3},8,["to","disabled"])],2)])])}}}),E=n(3744);const S=(0,E.Z)(_,[["__scopeId","data-v-3a9a4a65"]]);var T=S},8403:function(e,t,n){"use strict";n.d(t,{Z:function(){return v}});var r=n(6252),a=n(2262),o=n(9963),s=n(3577),i=n(4366),l=n(5801),c=n(9917);const u=async e=>{const t=await n.e(881).then(n.bind(n,410)),r=await n.e(881).then(n.bind(n,8288)),a=await n.e(881).then(n.bind(n,6947)),o=await n.e(881).then(n.bind(n,8056)),s={de:o,en:r,fr:a,nb:r},l=s[e],c={graphs:t.default.adjacencyGraphs,dictionary:{...t.default.dictionary,...l.default.dictionary}};i.Mu.setOptions(c)},d=e=>{switch(e){case 2:return"AVERAGE";case 3:return"GOOD";case 4:return"STRONG";default:return"WEAK"}},m={class:"password-strength"},_=["value"],E={key:0,class:"password-strength-details"},S={class:"password-strength-value"},T={key:0,class:"info-box"},p={class:"password-feedback"};var A=(0,r.aZ)({__name:"PasswordStength",props:{password:null},setup(e){const t=e,{password:n}=(0,a.BK)(t),o=(0,c.o)(),A=(0,r.Fl)((()=>o.getters[l.SY.GETTERS.LANGUAGE])),O=(0,r.Fl)((()=>o.getters[l.YN.GETTERS.IS_SUCCESS])),R=(0,a.iH)(0),I=(0,a.iH)(""),U=(0,a.iH)([]),g=(0,a.iH)("0% 100%");function N(e){const t=(0,i.tu)(e);R.value=t.score,I.value=d(R.value),U.value=t.feedback.suggestions,g.value=100*R.value/4+"% 100%"}return(0,r.wF)((async()=>await u(A.value))),(0,r.YP)((()=>A.value),(async e=>{await u(e)})),(0,r.YP)((()=>n.value),(async e=>{O.value?I.value="":N(e)})),(e,t)=>((0,r.wg)(),(0,r.iD)("div",m,[(0,r._)("input",{class:(0,s.C_)(["password-slider",`strength-${R.value}`]),style:(0,s.j5)({backgroundSize:g.value}),type:"range",value:R.value,min:"0",max:"4",step:"1"},null,14,_),I.value?((0,r.wg)(),(0,r.iD)("div",E,[(0,r._)("span",S,(0,s.zw)(e.$t("user.PASSWORD_STRENGTH.LABEL"))+": "+(0,s.zw)(e.$t(`user.PASSWORD_STRENGTH.${I.value}`)),1),U.value.length>0?((0,r.wg)(),(0,r.iD)("div",T,[(0,r._)("ul",p,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)(U.value,(t=>((0,r.wg)(),(0,r.iD)("li",{key:t},(0,s.zw)(e.$t(`user.PASSWORD_STRENGTH.SUGGESTIONS.${t}`)),1)))),128))])])):(0,r.kq)("",!0)])):(0,r.kq)("",!0)]))}}),O=n(3744);const R=(0,O.Z)(A,[["__scopeId","data-v-74e71df5"]]);var I=R;const U=e=>((0,r.dD)("data-v-5a126514"),e=e(),(0,r.Cn)(),e),g={class:"password-input"},N=["id","disabled","placeholder","required","type"],h={key:0,class:"form-info"},z=U((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1)));var w=(0,r.aZ)({__name:"PasswordInput",props:{checkStrength:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},id:{default:"password"},password:{default:""},placeholder:null,required:{type:Boolean,default:!1}},emits:["updatePassword","passwordError"],setup(e,{emit:t}){const n=e,{checkStrength:i,disabled:l,id:c,password:u,placeholder:d,required:m}=(0,a.BK)(n),_=(0,a.iH)(!1),E=(0,a.iH)("");function S(){_.value=!_.value}function T(e){t("updatePassword",e.target.value)}function p(){t("passwordError")}return(0,r.YP)((()=>u.value),(e=>{""===e&&(E.value="")})),(e,t)=>((0,r.wg)(),(0,r.iD)("div",g,[(0,r.wy)((0,r._)("input",{id:(0,a.SU)(c),disabled:(0,a.SU)(l),placeholder:(0,a.SU)(d),required:(0,a.SU)(m),type:_.value?"text":"password","onUpdate:modelValue":t[0]||(t[0]=e=>E.value=e),minlength:"8",onInput:T,onInvalid:p},null,40,N),[[o.YZ,E.value]]),(0,r._)("div",{class:"show-password",onClick:S},[(0,r.Uk)((0,s.zw)(e.$t(`user.${_.value?"HIDE":"SHOW"}_PASSWORD`))+" ",1),(0,r._)("i",{class:(0,s.C_)(["fa","fa-eye"+(_.value?"-slash":"")]),"aria-hidden":"true"},null,2)]),(0,a.SU)(i)?((0,r.wg)(),(0,r.iD)("div",h,[z,(0,r.Uk)(" "+(0,s.zw)(e.$t("user.PASSWORD_INFO")),1)])):(0,r.kq)("",!0),(0,a.SU)(i)?((0,r.wg)(),(0,r.j4)(I,{key:1,password:E.value},null,8,["password"])):(0,r.kq)("",!0)]))}});const f=(0,O.Z)(w,[["__scopeId","data-v-5a126514"]]);var v=f},2056:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(6252),a=n(3577),o=n(2262),s=n(2024);const i=(0,r._)("div",{class:"map-attribution"},[(0,r._)("span",{class:"map-attribution-text"},"©"),(0,r._)("a",{class:"map-attribution-text",href:"https://www.openstreetmap.org/copyright",target:"_blank",rel:"noopener noreferrer"}," OpenStreetMap ")],-1);var l=(0,r.aZ)({__name:"StaticMap",props:{workout:null,displayHover:{type:Boolean,default:!1}},setup(e){const t=e,{displayHover:n}=(0,o.BK)(t),l=`${(0,s.k)()}workouts/map/${t.workout.map}`;return(e,t)=>((0,r.wg)(),(0,r.iD)("div",{class:(0,a.C_)(["static-map",{"display-hover":(0,o.SU)(n)}])},[(0,o.SU)(n)?((0,r.wg)(),(0,r.iD)("img",{key:0,src:l,alt:""})):((0,r.wg)(),(0,r.iD)("div",{key:1,class:"bg-map-image",style:(0,a.j5)({backgroundImage:`url(${l})`})},null,4)),i],2))}});const c=l;var u=c},3170:function(e,t,n){"use strict";n.d(t,{Z:function(){return y}});var r=n(6252),a=n(3577);const o={class:"start-chart"},s={key:0},i={key:1},l={class:"chart-radio"},c=["checked"],u=["checked"],d=["checked"],m={key:0},_=["checked"],E={key:1},S=["checked"],T={key:2},p=["checked"];function A(e,t,n,A,O,R){const I=(0,r.up)("Chart");return(0,r.wg)(),(0,r.iD)("div",o,[e.hideChartIfNoData&&e.emptyStats?((0,r.wg)(),(0,r.iD)("div",s,(0,a.zw)(e.$t("workouts.NO_WORKOUTS")),1)):((0,r.wg)(),(0,r.iD)("div",i,[(0,r._)("div",l,[(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"total_distance",checked:"total_distance"===e.displayedData,onClick:t[0]||(t[0]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,c),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DISTANCE")),1)]),(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"total_duration",checked:"total_duration"===e.displayedData,onClick:t[1]||(t[1]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,u),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DURATION")),1)]),(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"nb_workouts",checked:"nb_workouts"===e.displayedData,onClick:t[2]||(t[2]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,d),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.WORKOUT",2)),1)]),e.fullStats?((0,r.wg)(),(0,r.iD)("label",m,[(0,r._)("input",{type:"radio",name:"average_speed",checked:"average_speed"===e.displayedData,onClick:t[3]||(t[3]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,_),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.AVERAGE_SPEED")),1)])):(0,r.kq)("",!0),e.fullStats?((0,r.wg)(),(0,r.iD)("label",E,[(0,r._)("input",{type:"radio",name:"total_ascent",checked:"total_ascent"===e.displayedData,onClick:t[4]||(t[4]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,S),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.ASCENT")),1)])):(0,r.kq)("",!0),e.fullStats?((0,r.wg)(),(0,r.iD)("label",T,[(0,r._)("input",{type:"radio",name:"total_descent",checked:"total_descent"===e.displayedData,onClick:t[5]||(t[5]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,p),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DESCENT")),1)])):(0,r.kq)("",!0)]),e.labels.length>0?((0,r.wg)(),(0,r.j4)(I,{key:0,datasets:e.datasets,labels:e.labels,displayedData:e.displayedData,displayedSportIds:e.displayedSportIds,fullStats:e.fullStats,useImperialUnits:e.user.imperial_units},null,8,["datasets","labels","displayedData","displayedSportIds","fullStats","useImperialUnits"])):(0,r.kq)("",!0)]))])}var O=n(4850),R=n(2262);const I={class:"chart"};function U(e,t,n,a,o,s){const i=(0,r.up)("BarChart");return(0,r.wg)(),(0,r.iD)("div",I,[(0,r.Wm)(i,(0,r.dG)(e.barChartProps,{class:"bar-chart"}),null,16)])}var g=n(6518),N=n(9150);const h=(e,t=!1)=>{let n="0";t&&(n=String(Math.floor(e/86400)),e%=86400);const r=String(Math.floor(e/3600)).padStart(2,"0");e%=3600;const a=String(Math.floor(e/60)).padStart(2,"0"),o=String(e%60).padStart(2,"0");return t?`${"0"===n?"":`${n}d `}${"00"===r?"":`${r}h `}${a}m ${o}s`:`${"00"===r?"":`${r}:`}${a}:${o}`};var z=n(3649);const w=(e,t,n,r=!0,a="km")=>{const o=n?z.Dl[a].defaultTarget:a;switch(e){case"average_speed":return`${t.toFixed(2)} ${o}/h`;case"total_duration":return h(t,r);case"total_distance":case"total_ascent":case"total_descent":return`${t.toFixed(2)} ${o}`;default:return t.toString()}};var f=(0,r.aZ)({name:"Chart",components:{BarChart:g.vz},props:{datasets:{type:Object,required:!0},labels:{type:Object,required:!0},displayedData:{type:String,required:!0},displayedSportIds:{type:Array,required:!0},fullStats:{type:Boolean,required:!0},useImperialUnits:{type:Boolean,required:!0}},setup(e){const{t:t}=(0,N.QT)();function n(e){return isNaN(e)?0:+e}function a(e,t){return n(e)+n(t)}function o(e){return["total_ascent","total_descent"].includes(e)?"m":"km"}const s=(0,r.Fl)((()=>({labels:e.labels,datasets:JSON.parse(JSON.stringify(e.datasets))}))),i=(0,r.Fl)((()=>({responsive:!0,maintainAspectRatio:!0,animation:!1,layout:{padding:{top:e.fullStats?40:22}},scales:{x:{stacked:!0,grid:{drawOnChartArea:!1}},y:{stacked:"average_speed"!==e.displayedData,grid:{drawOnChartArea:!1},ticks:{maxTicksLimit:6,callback:function(t){return w(e.displayedData,+t,e.useImperialUnits,!1,o(e.displayedData))}},afterFit:function(t){t.width=e.fullStats?90:60}}},plugins:{datalabels:{anchor:"end",align:"end",color:function(t){return"average_speed"===e.displayedData&&t.dataset.backgroundColor?t.dataset.backgroundColor[0]:"#666666"},rotation:function(t){return e.fullStats&&t.chart.chartArea.width<580?310:0},display:function(t){return!(e.fullStats&&t.chart.chartArea.width<300)&&("average_speed"!==e.displayedData||1==e.displayedSportIds.length&&"auto")},formatter:function(t,n){if("average_speed"===e.displayedData)return w(e.displayedData,t,e.useImperialUnits,!1);{const t=n.chart.data.datasets.map((e=>e.data[n.dataIndex])).reduce(((e,t)=>a(e,t)),0);return n.datasetIndex===e.displayedSportIds.length-1&&t>0?w(e.displayedData,t,e.useImperialUnits,!1,o(e.displayedData)):null}}},legend:{display:!1},tooltip:{interaction:{intersect:!0,mode:"index",position:"average_speed"===e.displayedData?"nearest":"average"},filter:function(e){return"0"!==e.formattedValue},callbacks:{label:function(n){let r=t(`sports.${n.dataset.label}.LABEL`)||"";return r&&(r+=": "),null!==n.parsed.y&&(r+=w(e.displayedData,n.parsed.y,e.useImperialUnits,!0,o(e.displayedData))),r},footer:function(n){if("average_speed"===e.displayedData)return"";let r=0;return n.map((e=>{r+=e.parsed.y})),`${t("common.TOTAL")}: `+w(e.displayedData,r,e.useImperialUnits,!0,o(e.displayedData))}}}}}))),{barChartProps:l}=(0,g.xZ)({chartData:s,options:i});return{barChartProps:l}}}),v=n(3744);const C=(0,v.Z)(f,[["render",U]]);var D=C,k=n(5801),P=n(9917),L=n(9318),M=(0,r.aZ)({name:"UserMonthStats",components:{Chart:D},props:{sports:{type:Object,required:!0},user:{type:Object,required:!0},chartParams:{type:Object,required:!0},displayedSportIds:{type:Array,default:()=>[]},fullStats:{type:Boolean,default:!1},hideChartIfNoData:{type:Boolean,default:!1}},setup(e){const t=(0,P.o)(),n=(0,R.iH)("total_distance"),a=(0,r.Fl)((()=>t.getters[k.gu.GETTERS.USER_STATS])),o=(0,r.Fl)((()=>(0,L.v1)(e.chartParams,e.user.weekm,e.sports,e.displayedSportIds,a.value,e.user.imperial_units,e.user.date_format)));function s(n){t.dispatch(k.gu.ACTIONS.GET_USER_STATS,{username:e.user.username,filterType:"by_time",params:n})}function i(e){n.value=e.target.name}function l(e,t){return{from:(0,O.Z)(e.start,"yyyy-MM-dd"),to:(0,O.Z)(e.end,"yyyy-MM-dd"),time:"week"===e.duration?"week"+(t.weekm?"m":""):e.duration}}return(0,r.wF)((()=>s(l(e.chartParams,e.user)))),(0,r.YP)((()=>e.chartParams),(async t=>{s(l(t,e.user))})),{datasets:(0,r.Fl)((()=>o.value.datasets[n.value])),labels:(0,r.Fl)((()=>o.value.labels)),emptyStats:(0,r.Fl)((()=>0===Object.keys(a.value).length)),displayedData:n,updateDisplayData:i}}});const b=(0,v.Z)(M,[["render",A],["__scopeId","data-v-d5e9b348"]]);var y=b},2179:function(e,t,n){"use strict";n.d(t,{Z:function(){return N}});var r=n(6252),a=n(2262),o=n(3577),s=n(6595),i=n(5801),l=n(9917);const c={class:"box user-header"},u={class:"user-details"},d={class:"user-name"},m={class:"user-stats"},_={class:"user-stat"},E={class:"stat-number"},S={class:"stat-label"},T={class:"user-stat"},p={class:"stat-label"},A={class:"user-stat hide-small"},O={class:"stat-number"},R={class:"stat-label"};var I=(0,r.aZ)({__name:"UserHeader",props:{user:null},setup(e){const t=e,{user:n}=(0,a.BK)(t),I=(0,l.o)(),U=(0,r.Fl)((()=>I.getters[i.YN.GETTERS.AUTH_USER_PROFILE]));return(e,t)=>{const i=(0,r.up)("Distance");return(0,r.wg)(),(0,r.iD)("div",c,[(0,r.Wm)(s.Z,{user:(0,a.SU)(n)},null,8,["user"]),(0,r._)("div",u,[(0,r._)("div",d,(0,o.zw)((0,a.SU)(n).username),1),(0,r._)("div",m,[(0,r._)("div",_,[(0,r._)("span",E,(0,o.zw)((0,a.SU)(n).nb_workouts),1),(0,r._)("span",S,(0,o.zw)(e.$t("workouts.WORKOUT",(0,a.SU)(n).nb_workouts)),1)]),(0,r._)("div",T,[(0,r.Wm)(i,{distance:(0,a.SU)(n).total_distance,unitFrom:"km",digits:0,displayUnit:!1,useImperialUnits:(0,a.SU)(U).imperial_units},null,8,["distance","useImperialUnits"]),(0,r._)("span",p,(0,o.zw)((0,a.SU)(U).imperial_units?"miles":"km"),1)]),(0,r._)("div",A,[(0,r._)("span",O,(0,o.zw)((0,a.SU)(n).nb_sports),1),(0,r._)("span",R,(0,o.zw)(e.$t("workouts.SPORT",(0,a.SU)(n).nb_sports)),1)])])])])}}}),U=n(3744);const g=(0,U.Z)(I,[["__scopeId","data-v-20291951"]]);var N=g},1585:function(e,t,n){"use strict";n.d(t,{Z:function(){return f}});n(7658);var r=n(6252),a=n(2262),o=n(3577),s=n(9963),i=n(4850),l=n(5801),c=n(9917),u=n(6558),d=n(6287);const m={id:"user-infos",class:"description-list"},_={key:1,class:"info-box success-message"},E={key:4,class:"email-form form-box"},S={class:"form-items",for:"email"},T={class:"form-items",for:"email"},p={class:"form-buttons"},A={class:"confirm",type:"submit"},O=["onClick"],R={key:5},I={class:"user-bio"},U={key:0,class:"profile-buttons"},g=["onClick"],N={key:1,class:"profile-buttons"};var h=(0,r.aZ)({__name:"UserInfos",props:{user:null,fromAdmin:{type:Boolean,default:!1}},setup(e){const t=e,n=(0,c.o)(),{user:h,fromAdmin:z}=(0,a.BK)(t),w=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.LANGUAGE])),f=(0,r.Fl)((()=>n.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),v=(0,r.Fl)((()=>t.user.created_at?(0,u.p6)(t.user.created_at,f.value.timezone,f.value.date_format):"")),C=(0,r.Fl)((()=>t.user.birth_date?(0,i.Z)(new Date(t.user.birth_date),`${(0,u.mh)(f.value.date_format,w.value)}`,{locale:d.v1[w.value]}):"")),D=(0,r.Fl)((()=>n.getters[l.RT.GETTERS.USERS_IS_SUCCESS])),k=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),P=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.APP_CONFIG])),L=(0,a.iH)(""),M=(0,a.iH)(!1),b=(0,a.iH)(!1),y=(0,a.iH)(""),G=(0,a.iH)("");function F(e){L.value=e,""!==e&&n.commit(l.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1)}function W(e){n.dispatch(l.RT.ACTIONS.DELETE_USER_ACCOUNT,{username:e})}function K(e){G.value="password-reset",n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,resetPassword:!0})}function Y(e){n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,activate:!0})}function x(){Z(),y.value=h.value.email_to_confirm?h.value.email_to_confirm:"",b.value=!0,G.value="email-update"}function $(){y.value="",b.value=!1}function B(e){n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,new_email:y.value})}function Z(){n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),n.commit(l.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1),G.value=""}return(0,r.Ah)((()=>Z())),(0,r.YP)((()=>D.value),(e=>{e&&(F(""),$())})),(e,t)=>{const n=(0,r.up)("Modal"),i=(0,r.up)("AlertMessage"),l=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",m,[L.value?((0,r.wg)(),(0,r.j4)(n,{key:0,title:e.$t("common.CONFIRMATION"),message:"delete"===L.value?"admin.CONFIRM_USER_ACCOUNT_DELETION":"admin.CONFIRM_USER_PASSWORD_RESET",strongMessage:(0,a.SU)(h).username,onConfirmAction:t[0]||(t[0]=e=>"delete"===L.value?W((0,a.SU)(h).username):K((0,a.SU)(h).username)),onCancelAction:t[1]||(t[1]=e=>F(""))},null,8,["title","message","strongMessage"])):(0,r.kq)("",!0),(0,a.SU)(D)?((0,r.wg)(),(0,r.iD)("div",_,(0,o.zw)(e.$t(`admin.${"password-reset"===G.value?"PASSWORD_RESET":"USER_EMAIL_UPDATE"}_SUCCESSFUL`)),1)):(0,r.kq)("",!0),(0,a.SU)(h).is_active?(0,r.kq)("",!0):((0,r.wg)(),(0,r.j4)(i,{key:2,message:"user.THIS_USER_ACCOUNT_IS_INACTIVE"})),(0,a.SU)(k)?((0,r.wg)(),(0,r.j4)(l,{key:3,message:(0,a.SU)(k)},null,8,["message"])):(0,r.kq)("",!0),b.value?((0,r.wg)(),(0,r.iD)("div",E,[(0,r._)("form",{class:(0,o.C_)({errors:M.value}),onSubmit:t[4]||(t[4]=(0,s.iM)((e=>B((0,a.SU)(h).username)),["prevent"]))},[(0,r._)("label",S,[(0,r.Uk)((0,o.zw)(e.$t("admin.CURRENT_EMAIL"))+" ",1),(0,r.wy)((0,r._)("input",{id:"email",type:"email","onUpdate:modelValue":t[2]||(t[2]=e=>(0,a.SU)(h).email=e),disabled:""},null,512),[[s.nr,(0,a.SU)(h).email]])]),(0,r._)("label",T,[(0,r.Uk)((0,o.zw)(e.$t("admin.NEW_EMAIL"))+"* ",1),(0,r.wy)((0,r._)("input",{id:"new-email",type:"email",required:"","onUpdate:modelValue":t[3]||(t[3]=e=>y.value=e)},null,512),[[s.nr,y.value]])]),(0,r._)("div",p,[(0,r._)("button",A,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,r._)("button",{class:"cancel",onClick:(0,s.iM)($,["prevent"])},(0,o.zw)(e.$t("buttons.CANCEL")),9,O)])],34)])):((0,r.wg)(),(0,r.iD)("div",R,[(0,r._)("dl",null,[(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(v)),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.FIRST_NAME"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(h).first_name),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.LAST_NAME"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(h).last_name),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.BIRTH_DATE"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(C)),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.LOCATION"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(h).location),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.BIO"))+":",1),(0,r._)("dd",I,(0,o.zw)((0,a.SU)(h).bio),1)]),(0,a.SU)(z)?((0,r.wg)(),(0,r.iD)("div",U,[(0,a.SU)(f).username!==(0,a.SU)(h).username?((0,r.wg)(),(0,r.iD)("button",{key:0,class:"danger",onClick:t[5]||(t[5]=(0,s.iM)((e=>F("delete")),["prevent"]))},(0,o.zw)(e.$t("admin.DELETE_USER")),1)):(0,r.kq)("",!0),(0,a.SU)(h).is_active?(0,r.kq)("",!0):((0,r.wg)(),(0,r.iD)("button",{key:1,onClick:t[6]||(t[6]=(0,s.iM)((e=>Y((0,a.SU)(h).username)),["prevent"]))},(0,o.zw)(e.$t("admin.ACTIVATE_USER_ACCOUNT")),1)),(0,a.SU)(f).username!==(0,a.SU)(h).username?((0,r.wg)(),(0,r.iD)("button",{key:2,onClick:(0,s.iM)(x,["prevent"])},(0,o.zw)(e.$t("admin.UPDATE_USER_EMAIL")),9,g)):(0,r.kq)("",!0),(0,a.SU)(f).username!==(0,a.SU)(h).username&&(0,a.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("button",{key:3,onClick:t[7]||(t[7]=(0,s.iM)((e=>F("reset")),["prevent"]))},(0,o.zw)(e.$t("admin.RESET_USER_PASSWORD")),1)):(0,r.kq)("",!0),(0,r._)("button",{onClick:t[8]||(t[8]=t=>e.$router.go(-1))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,r.wg)(),(0,r.iD)("div",N,[(0,r._)("button",{onClick:t[9]||(t[9]=t=>e.$router.push("/profile/edit"))},(0,o.zw)(e.$t("user.PROFILE.EDIT")),1),(0,r._)("button",{onClick:t[10]||(t[10]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))]))])}}}),z=n(3744);const w=(0,z.Z)(h,[["__scopeId","data-v-217519af"]]);var f=w},2411:function(e,t,n){"use strict";n.d(t,{Z:function(){return C}});var r=n(6252),a=n(3577),o=n(2262),s=n(9963),i=n(2201),l=n(8403),c=n(5801),u=n(9917);const d=e=>((0,r.dD)("data-v-b3c885de"),e=e(),(0,r.Cn)(),e),m={id:"user-form"},_={key:2,class:"info-box success-message"},E={class:"form-items"},S=["disabled","placeholder"],T={key:1,class:"form-info"},p=d((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),A=["disabled","placeholder"],O={key:3,class:"form-info"},R=d((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),I=["disabled"],U={key:3},g={key:0},N={key:4},h={class:"account"},z={key:5};var w=(0,r.aZ)({__name:"UserAuthForm",props:{action:null,token:{default:""}},setup(e){const t=e,n=(0,i.yj)(),d=(0,u.o)(),{action:w}=(0,o.BK)(t),f=(0,o.qj)({username:"",email:"",password:""}),v=(0,r.Fl)((()=>G(t.action))),C=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.ERROR_MESSAGES])),D=(0,r.Fl)((()=>d.getters[c.YN.GETTERS.IS_REGISTRATION_SUCCESS])),k=(0,r.Fl)((()=>d.getters[c.YN.GETTERS.IS_SUCCESS])),P=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.APP_CONFIG])),L=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.LANGUAGE])),M=(0,r.Fl)((()=>"register"===t.action&&!P.value.is_registration_enabled)),b=(0,r.Fl)((()=>["reset-request","account-confirmation-resend"].includes(t.action)&&!P.value.is_email_sending_enabled)),y=(0,o.iH)(!1);function G(e){switch(e){case"reset-request":case"reset":return"buttons.SUBMIT";default:return`buttons.${t.action.toUpperCase()}`}}function F(){y.value=!0}function W(e){f.password=e}function K(e){switch(e){case"reset":return t.token?d.dispatch(c.YN.ACTIONS.RESET_USER_PASSWORD,{password:f.password,token:t.token}):d.commit(c.SY.MUTATIONS.SET_ERROR_MESSAGES,"user.INVALID_TOKEN");case"reset-request":return d.dispatch(c.YN.ACTIONS.SEND_PASSWORD_RESET_REQUEST,{email:f.email});case"account-confirmation-resend":return d.dispatch(c.YN.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL,{email:f.email});default:f["language"]=L.value,d.dispatch(c.YN.ACTIONS.LOGIN_OR_REGISTER,{actionType:e,formData:f,redirectUrl:n.query.from})}}function Y(){f.username="",f.email="",f.password=""}return(0,r.Ah)((()=>d.commit(c.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(0,r.YP)((()=>n.path),(async()=>{d.commit(c.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),d.commit(c.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),d.commit(c.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!1),y.value=!1,Y()})),(e,t)=>{const n=(0,r.up)("AlertMessage"),i=(0,r.up)("router-link"),c=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",{id:"user-auth-form",class:(0,a.C_)(`${["reset","reset-request"].includes((0,o.SU)(w))?(0,o.SU)(w):"user-form"}`)},[(0,r._)("div",m,[(0,r._)("div",{class:(0,a.C_)(["form-box",{disabled:(0,o.SU)(M)}])},[(0,o.SU)(M)?((0,r.wg)(),(0,r.j4)(n,{key:0,message:"user.REGISTER_DISABLED"})):(0,r.kq)("",!0),(0,o.SU)(b)?((0,r.wg)(),(0,r.j4)(n,{key:1,message:"admin.EMAIL_SENDING_DISABLED"})):(0,r.kq)("",!0),(0,o.SU)(k)||(0,o.SU)(D)?((0,r.wg)(),(0,r.iD)("div",_,(0,a.zw)(e.$t("user.PROFILE.SUCCESSFUL_"+((0,o.SU)(D)?"REGISTRATION"+((0,o.SU)(P).is_email_sending_enabled?"_WITH_EMAIL":""):"UPDATE"))),1)):(0,r.kq)("",!0),(0,r._)("form",{class:(0,a.C_)({errors:y.value}),onSubmit:t[2]||(t[2]=(0,s.iM)((e=>K((0,o.SU)(w))),["prevent"]))},[(0,r._)("div",E,["register"===(0,o.SU)(w)?(0,r.wy)(((0,r.wg)(),(0,r.iD)("input",{key:0,id:"username",disabled:(0,o.SU)(M),required:"",pattern:"[a-zA-Z0-9_]+",minlength:"3",maxlength:"30",onInvalid:F,"onUpdate:modelValue":t[0]||(t[0]=e=>f.username=e),placeholder:e.$t("user.USERNAME")},null,40,S)),[[s.nr,f.username]]):(0,r.kq)("",!0),"register"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",T,[p,(0,r.Uk)(" "+(0,a.zw)(e.$t("user.USERNAME_INFO")),1)])):(0,r.kq)("",!0),"reset"!==(0,o.SU)(w)?(0,r.wy)(((0,r.wg)(),(0,r.iD)("input",{key:2,id:"email",disabled:(0,o.SU)(M)||(0,o.SU)(b),required:"",onInvalid:F,type:"email","onUpdate:modelValue":t[1]||(t[1]=e=>f.email=e),placeholder:e.$t("user.EMAIL")},null,40,A)),[[s.nr,f.email]]):(0,r.kq)("",!0),["reset-request","register","account-confirmation-resend"].includes((0,o.SU)(w))?((0,r.wg)(),(0,r.iD)("div",O,[R,(0,r.Uk)(" "+(0,a.zw)(e.$t("user.EMAIL_INFO")),1)])):(0,r.kq)("",!0),["account-confirmation-resend","reset-request"].includes((0,o.SU)(w))?(0,r.kq)("",!0):((0,r.wg)(),(0,r.j4)(l.Z,{key:4,disabled:(0,o.SU)(M),required:!0,placeholder:"reset"===(0,o.SU)(w)?e.$t("user.ENTER_PASSWORD"):e.$t("user.PASSWORD"),password:f.password,checkStrength:["reset","register"].includes((0,o.SU)(w)),onUpdatePassword:W,onPasswordError:F},null,8,["disabled","placeholder","password","checkStrength"]))]),(0,r._)("button",{type:"submit",disabled:(0,o.SU)(M)||(0,o.SU)(b)},(0,a.zw)(e.$t((0,o.SU)(v))),9,I)],34),"login"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",U,[(0,r.Wm)(i,{class:"links",to:"/register"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.REGISTER")),1)])),_:1}),(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("span",g,"-")):(0,r.kq)("",!0),(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.j4)(i,{key:1,class:"links",to:"/password-reset/request"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.PASSWORD_FORGOTTEN")),1)])),_:1})):(0,r.kq)("",!0)])):(0,r.kq)("",!0),"register"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",N,[(0,r._)("span",h,(0,a.zw)(e.$t("user.ALREADY_HAVE_ACCOUNT")),1),(0,r.Wm)(i,{class:"links",to:"/login"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.LOGIN")),1)])),_:1})])):(0,r.kq)("",!0),["login","register"].includes((0,o.SU)(w))&&(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("div",z,[(0,r.Wm)(i,{class:"links",to:"/account-confirmation/resend"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.ACCOUNT_CONFIRMATION_NOT_RECEIVED")),1)])),_:1})])):(0,r.kq)("",!0),(0,o.SU)(C)?((0,r.wg)(),(0,r.j4)(c,{key:6,message:(0,o.SU)(C)},null,8,["message"])):(0,r.kq)("",!0)],2)])],2)}}}),f=n(3744);const v=(0,f.Z)(w,[["__scopeId","data-v-b3c885de"]]);var C=v},6595:function(e,t,n){"use strict";n.d(t,{Z:function(){return _}});var r=n(6252),a=n(2262),o=n(2024);const s={class:"user-picture"},i=["alt","src"],l={key:1,class:"no-picture"},c=(0,r._)("i",{class:"fa fa-user-circle-o","aria-hidden":"true"},null,-1),u=[c];var d=(0,r.aZ)({__name:"UserPicture",props:{user:null},setup(e){const t=e,n=(0,r.Fl)((()=>t.user.picture?`${(0,o.k)()}users/${t.user.username}/picture?${Date.now()}`:""));return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[""!==(0,a.SU)(n)?((0,r.wg)(),(0,r.iD)("img",{key:0,class:"profile-user-img",alt:e.$t("user.USER_PICTURE"),src:(0,a.SU)(n)},null,8,i)):((0,r.wg)(),(0,r.iD)("div",l,u))]))}});const m=d;var _=m},5630:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(6252),a=n(3577);const o={class:"no-workouts box"};function s(e,t){const n=(0,r.up)("router-link");return(0,r.wg)(),(0,r.iD)("div",o,[(0,r._)("div",null,[(0,r.Uk)((0,a.zw)(e.$t("workouts.NO_WORKOUTS"))+" ",1),(0,r.Wm)(n,{to:"/workouts/add"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("workouts.UPLOAD_FIRST_WORKOUT")),1)])),_:1})])])}var i=n(3744);const l={},c=(0,i.Z)(l,[["render",s],["__scopeId","data-v-4b4d15fb"]]);var u=c},4612:function(e,t,n){var r={"./de/de.ts":9923,"./en/en.ts":8757,"./fr/fr.ts":6625,"./nb/nb.ts":8891};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=4612}},t={};function n(r){var a=t[r];if(void 0!==a)return a.exports;var o=t[r]={exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.m=e,function(){var e=[];n.O=function(t,r,a,o){if(!r){var s=1/0;for(u=0;u=o)&&Object.keys(n.O).every((function(e){return n.O[e](r[l])}))?r.splice(l--,1):(i=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]}}(),function(){n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,{a:t}),t}}(),function(){var e,t=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__};n.t=function(r,a){if(1&a&&(r=this(r)),8&a)return r;if("object"===typeof r&&r){if(4&a&&r.__esModule)return r;if(16&a&&"function"===typeof r.then)return r}var o=Object.create(null);n.r(o);var s={};e=e||[null,t({}),t([]),t(t)];for(var i=2&a&&r;"object"==typeof i&&!~e.indexOf(i);i=t(i))Object.getOwnPropertyNames(i).forEach((function(e){s[e]=function(){return r[e]}}));return s["default"]=function(){return r},n.d(o,s),o}}(),function(){n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}}(),function(){n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce((function(t,r){return n.f[r](e,t),t}),[]))}}(),function(){n.u=function(e){return"static/js/"+({24:"reset",193:"statistics",328:"admin",401:"workouts",845:"profile",881:"password"}[e]||e)+"."+{24:"f6540a23",93:"02cf293c",193:"faaccb1e",243:"e551248f",328:"c8949458",401:"f1d6cc45",431:"e5102e07",633:"81a8ddc8",845:"ff8ee2f9",858:"3f2a93f2",881:"43430dfc"}[e]+".js"}}(),function(){n.miniCssF=function(e){return"static/css/"+{24:"reset",193:"statistics",328:"admin",401:"workouts",845:"profile"}[e]+"."+{24:"e2527ec6",193:"40e24e75",328:"73df498d",401:"41709693",845:"203e78e2"}[e]+".css"}}(),function(){n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){var e={},t="fittrackee_client:";n.l=function(r,a,o,s){if(e[r])e[r].push(a);else{var i,l;if(void 0!==o)for(var c=document.getElementsByTagName("script"),u=0;u {\n const controller = new AbortController()\n config.signal = controller.signal\n const requestKey = removeRequestIfPending(config)\n pendingRequests.set(requestKey, controller)\n\n const authToken = store.getters[AUTH_USER_STORE.GETTERS.AUTH_TOKEN]\n if (authToken) {\n const auth = `Bearer ${authToken}`\n if (config.headers && config.headers.Authorization !== auth) {\n config.headers.Authorization = `Bearer ${authToken}`\n }\n }\n return config\n },\n (error) => Promise.reject(error)\n)\n\nauthApi.interceptors.response.use(\n (response) => {\n removeRequestIfPending(response.config)\n return response\n },\n (error) => {\n if (error.message !== 'canceled') {\n removeRequestIfPending(error.response.config)\n }\n return Promise.reject(error)\n }\n)\n\nexport default authApi\n","import { AxiosRequestConfig } from 'axios'\n\nexport const pendingRequests = new Map()\n\nconst generateRequestKey = (config: AxiosRequestConfig): string => {\n const { method, url, params = {}, data = {} } = config\n return [method, url, JSON.stringify(params), JSON.stringify(data)].join('')\n}\n\nexport const removeRequestIfPending = (config: AxiosRequestConfig): string => {\n const requestKey = generateRequestKey(config)\n if (pendingRequests.has(requestKey)) {\n const controller = pendingRequests.get(requestKey) || {}\n controller?.abort()\n pendingRequests.delete(requestKey)\n }\n return requestKey\n}\n","import { createI18n, LocaleMessages, VueMessageType } from 'vue-i18n'\n\n/**\n * Load locale messages\n *\n * The loaded `JSON` locale messages is pre-compiled by `@intlify/vue-i18n-loader`, which is integrated into `vue-cli-plugin-i18n`.\n * See: https://github.com/intlify/vue-i18n-loader#rocket-i18n-resource-pre-compilation\n */\nconst disabledLanguages = ['nb'] // to remove after norwegian translations release\n\nfunction loadLocaleMessages(): Record> {\n const locales = require.context('./locales', true, /[A-Za-z0-9-_,\\s]+\\.ts$/i)\n const messages: Record> = {}\n locales.keys().forEach((key) => {\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i)\n if (\n matched &&\n matched.length > 1 &&\n !disabledLanguages.includes(matched[1])\n ) {\n const locale = matched[1]\n messages[locale] = locales(key).default\n }\n })\n return messages\n}\n\nexport default createI18n({\n legacy: false,\n locale: 'en',\n fallbackLocale: 'en',\n globalInjection: true,\n messages: loadLocaleMessages(),\n})\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontaktiere den Administrator\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee ist ein selbst-gehosteter Outdoor-Aktivitäts-Tracker.\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"unter \", _interpolate(_list(0)), \" Lizenz \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Quellkode\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktion\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiviere Konto\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiv\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hinzufügen/Entfernen von Administratorrechten, Lösche Nutzerkonto.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontakt-E-Mail des Administrators\"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Anzahl aktiver Nutzer\"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wenn 0, gibt es keine Registrierungslimitierung..\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Dateianzahl im zip Archiv\"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Kontakt-E-Mail\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Größe der hochgeladenen Dateien (in Mb)\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungskonfiguration\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Größe des zip Archives (in Mb)\"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück zu Admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Möchtest du wirklich das \", _interpolate(_list(0)), \" Konto löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Möchtest du wirklich das \", _interpolate(_list(0)), \" Passwort zurücksetzen?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktuelle E-Mail\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lösche Nutzer\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail-Versand ist deaktiviert.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktivieren/Deaktivieren von Sportarten.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Neue E-Mail\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Das wasswort wurde zurückgesetzt.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung ist derzeit deaktiviert.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung ist derzeit aktiviert.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiv\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainings existieren\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten Administration\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktualisiere Anwemdungskonfiguration (maximale Anzahl an registrierten Nutzern, maximale Dateigröße).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktualisiere E-Mail\"])},\n \"USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzer\"])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die E-Mail Adresse wurde aktualisiert.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administratorrechte hinzufügen\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administratorrechte entfernen\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Adminstatus\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierungsdatum\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accountstatus\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzername\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainingsanzahl\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail: Eine gültige E-Mail muss angegeben werden.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler bei der GPX-Verarbeitung.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Einlesen der GPX-Datei\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Abrufen der Konfiguration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Aktualisieren der Konfiguration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Die Registrierung ist deaktiviert.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dateierweiterung ist nicht erlaubt.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die Datei ist größer als erlaubt.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültige Anmeldedaten.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die bereitgestellten Daten sind ungültig.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte erneut anmelden.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte erneut anmelden.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Netzwerkfehler.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die neue E-Mail muss sich von der aktuellen E-Mail unterscheiden\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei angegeben.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei ausgewählt.\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort: Passwort und Passwortbestätigung stimmen nicht überein.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe ein gültiges Authentifizierungstoken an.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Es tut mir leid, der Benutzername ist schon vergeben.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportart existiert nicht.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die Signatur ist abgelaufen. Bitte melde dich erneut an.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung erfolgreich.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Der Nutzer existiert nicht.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Um den Administrator zu kontaktieren, muss eine gültige E-Mail-Adresse angegeben werden\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du kannst Dein Konto nicht löschen, da kein anderer Nutzer hat Administratorrechte besitzt.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du hast keine Berechtigung.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorhergehende\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächste\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bestätigungs-E-Mail erneut senden\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Autorisieren\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abbrechen\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter löschen\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mein Konto löschen\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Deaktivieren\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bearbeiten\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktivieren\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmelden\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nein\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrieren\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurücksetzen\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Speichern\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ja\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Über\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bestätigung\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontakt\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Tag\"]), _normalize([\"Tage\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Angezeigt\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dokumentation (en)\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hier\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Versteckt\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Startseite\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sortiert nach\"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sortieren\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"aufsteigend\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"absteigend\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pro Seite\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Insgesamt\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dashboard\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dieser Monat\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bei der Anwendung scheinen einige Probleme aufgetreten zu sein.
Bitte versuche es später noch einmal oder kontaktiere den Administrator.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Seite nicht gefunden\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training nicht gefunden\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Etwas lief schief\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Eine neue OAuth2-Anwendung hinzufügen\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ID\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geheimnis\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungsbeschreibung\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erstellt am\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungsname\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Weiterleitungs-URL\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geltungsbereich\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf auth-Endpunkte\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf auth-Endpunkte\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf users-Endpunkte\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf users-Endpunkte\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf workouts-Endpunkte\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf workouts-Endpunkte\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf die Anwendungskonfiguration\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungs-URL\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung erfolgreich erstellt. Stelle sicher, dass du das Geheimnis kopierst, du kannst es nicht erneut anzeigen.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist sicher, dass du diese App löschen willst?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Die Anwendung \", _interpolate(_list(0)), \" fragt an:\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OAuth2-Anwendungen\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" den Zugriff auf deinen Account erlauben?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"in Zwischenablage kopieren\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung löschen\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung hinzufügen\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung wurde nicht gefunden!\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Anwendungen\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Beschreibung\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alle Tokens zurückrufen\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist du sicher, dass du alle Tokens zurückrufen möchtest?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alle vorhandenen und vergebenen Tokens wurde zurückgerufen.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Pendeln)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Virtuell)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wandern\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountainbiken\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountainbiken (elektrisch)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Rudern\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Laufen\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skifahren (Alpin)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skifahren (Langlauf)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schneeschuhe\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gehen\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistik\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Woche\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Monat\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jahr\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hast du keine Anweisungen erhalten?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prüfe deine E-Mail. Eine neue Bestätigungs-E-Mail wurde an die angegebene Adresse geschickt.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hast du bereits ein Konto?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Möchtest du dein Konto wirklich löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktuelles Passwort\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe eine gültige E-Mail-Adresse an.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe ein Passwort ein\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nach Benutzernamen filtern\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort verbergen\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte fordere ein neues Passworts an.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sprache\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmelden\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmeldung\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abmelden\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Neues Passwort\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Nutzer gefunden.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mindestens 8 Zeichen sind erforderlich.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort vergessen?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prüfe Deine E-Mail. Wenn Deine Adresse in der Datenbank enthalten ist, wirst du eine E-Mail mit einem Link erhalten um Dein Passwort zurückzusetzen.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"schwach\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mittel\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"gut\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwortstärke\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide vorhersehbare Buchstabenersetzungen wie \", \"@\", \" für a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide umgekehrte Schreibweisen gebräuchlicher Wörter.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schreibe einige, aber nicht alle Buchstaben groß.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schreibe mehr als nur den ersten Buchstaben groß.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Daten und Jahreszahlen, die mit Dir in Verbindung gebracht werden.\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Angabe von letzten Jahreszahlen.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Jahreszahlen, die mit Dir in Verbindung gebracht werden.\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide gebräuchliche Zeichenfolgen.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide wiederholungen von Wörtern und Zeichen.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Verwende längere Tastaturmuster und ändere mehrmals die Schreibrichtung.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Füge weitere weniger gebräuchliche Wörter hinzu.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Verwenden Sie mehrere Wörter, aber vermeide gebräuchliche Ausdrücke.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du kannst sichere Passwörter erstellen, ohne Symbole, Zahlen oder Großbuchstaben zu verwenden.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wenn Sie dieses Passwort auch anderweitig verwenden, sollten Sie es ändern.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Dein Passwort wurde aktualisiert. Klicke \", _interpolate(_list(0)), \" um dich anzumelden.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontoausgabe\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anstiegs-bezogene Daten (Aufnahmen, gesamt)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück zum Profil\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Biographie\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geburtsdatum\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Datumsanzeigeformat\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil bearbeiten\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen ändern\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen für Sportarten ändern\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Bitte \", _interpolate(_list(0)), \" um Deine E-Mail Adresse nochmals zu ändern oder kontaktiere den Administrator\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorname\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erster Tag der Woche\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sprache\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nachname\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ort\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Montag\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bildausgabe\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild aktualisieren\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild entfernen\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungsausgabe\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil-Ausgabe\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Regirierungsdatum\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten-Einstellungsausgabe\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sontag\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Konto\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungen\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktion\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Farbe\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vom Admin deaktiviert\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"aktiv\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geschwindigkeitsschwellenwert für Stopp\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich aktualisiert. Bitte prüfe Deine E-Mail um die neue E-Mail Adresse zu bestätigen.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich erstellt.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ein Aktivierungslink für Dein Konto wurde an die angegebene E-Mail Adresse geschickt.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich aktualisiert.\"])},\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einheiten für die Distanz\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Imperiales System (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Metrisches System (m, km)\"])}\n },\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zeitzone\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrieren\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail zur Kontobestätigung erneut senden\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Entschuldigung, die Registrierung ist deaktiviert.\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort anzeigen\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dieser Account ist inaktiv.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Benutzerbild\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzername\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 bis 30 Zeichen sind erforderlich, nur alphanumerische Zeichen und der Unterstrich _ sind erlaubt.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training hinzufügen\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Analyse\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aufstieg\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschn. Geschwindigkeit\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschnittsgeschwindigkeit\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"zurück zum Training\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Datum\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abstieg\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"zeige Filter\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Entfernung\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dauer\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training bearbeiten\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höhe\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ende\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Von\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".gpx Datei\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"verberge Filter\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Letzte Trainings\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lade mehr Trainings\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"maximale Höhe\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Maximale Dateianzahl\"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Maximalgröße\"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Geschwindigkeit\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"minimale Höhe\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächstes Segment\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächstes Training\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Daten aus gpx, ohne Bereinigung\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei angegeben\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"enthält keinen Ordner\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Karte\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein nächstes Segment\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein nächstes Training\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Anmerkungen\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein vorheriges Segment\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein vorheriges Training\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Aufzeichnungen.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Trainings.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmerkungen\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pausen\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorheriges Segment\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorheriges Training\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Aufzeichnung\"]), _normalize([\"Aufzeichnungen\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschn. Geschwindigkeit\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Weiteste Entfernung\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höchster Anstieg\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Längste Dauer\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Geschwindigkeit\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"verbleibende Zeichen\"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Segment\"]), _normalize([\"Segmente\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geschwindigkeit\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Sportart\"]), _normalize([\"Sportarten\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start und Ziel\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höhenachse bei Null starten\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"bis\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gesamtdauer\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Füge erstes Training hinzu!\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Luftfeuchtigkeit\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Temperatur\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wind\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNO\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NO\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ONO\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"O\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OSO\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SO\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSO\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSW\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SW\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WSW\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"W\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WNW\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NW\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNW\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"klarer Tag\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"klare Nacht\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wolkig\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nebel\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"teilweise bewölkter Tag\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"teilweise bewölkte Nacht\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Regen\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schneeregen\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schnee\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wind\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mit .gpx Datei\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ohne .gpx Datei\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Training\"]), _normalize([\"Trainings\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainingsdatum\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist du sicher, dass du dieses Training löschen möchtest?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".zip Datei\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"oder .zip Datei mit .gpx Dateien\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Contact the administrator\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee is a self-hosted outdoor activity tracker.\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"under \", _interpolate(_list(0)), \" license \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Source code\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Action\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activate account\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Active\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add/remove admin rights, delete user account.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administrator email for contact\"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. number of active users\"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"If 0, no limitation on registration.\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. files of zip archive\"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no contact email\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. size of uploaded files (in Mb)\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application configuration\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. size of zip archive (in Mb)\"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back to admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Are you sure you want to delete \", _interpolate(_list(0)), \" account? All data will be deleted, this cannot be undone.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Are you sure you want to reset \", _interpolate(_list(0)), \" password?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Current email\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete user\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email sending is disabled.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enable/disable sports.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New email\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The password has been reset.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration is currently disabled.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration is currently enabled.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset password\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Active\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workouts exist\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Label\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sports administration\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update application configuration (maximum number of registered users, maximum files size).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update email\"])},\n \"USER\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"user\"]), _normalize([\"users\"])])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The email address has been updated.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add admin rights\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove admin rights\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"admin status\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"registration date\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"account status\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"username\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workout count\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error. Please try again or contact the administrator.\"])},\n \"at least one file in zip archive exceeds size limit, please check the archive\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"At least one file in zip archive exceeds size limit, please check the archive.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email: valid email must be provided.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error during gpx processing.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error during gpx file parsing.\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error on getting configuration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error when updating configuration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error, please try again or contact the administrator.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error, registration is disabled.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File extension not allowed.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File size is greater than the allowed size.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid credentials.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Provided data are invalid.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please log in again.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please log in again.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Network Error.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The new email must be different than curent email\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No file provided.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No selected file.\"])},\n \"the number of files in the archive exceeds the limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The number of files in the archive exceeds the limit.\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password: password and password confirmation don't match.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Provide a valid auth token.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sorry, that username is already taken.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sport does not exist.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Signature expired. Please log in again.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Successfully registered.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User does not exist.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"A valid email must be provided for administrator contact\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You can not delete your account, no other user has admin rights.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You do not have permissions.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"previous\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"next\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Resend confirmation email\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Authorize\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cancel\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Clear filters\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete my account\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disable\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enable\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Log in\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Register\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Submit\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Yes\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"about\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirmation\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"contact\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"day\"]), _normalize([\"days\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Displayed\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"here\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hidden\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Home\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"order by\"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sort\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascending\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descending\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"par page\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Total\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dashboard\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This month\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error. Please try again or contact the administrator.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The application seems to have encountered some issues.
Please try again later or contact the administrator.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Page not found\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Workout not found\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Something went wrong\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add a new OAuth2 application\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Id\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Secret\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application description\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Issue at\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application name\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Redirect URL\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scope\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to application configuration.\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to auth endpoints.\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to auth endpoints.\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to users endpoints.\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to users endpoints.\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to workouts endpoints.\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to workouts endpoints.\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application URL\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application created successfully. Make sure to copy the secret now, it won't show up again.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete this app?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"The application \", _interpolate(_list(0)), \" is requesting:\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OAuth2 applications\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Authorize \", _interpolate(_list(0)), \" to use your account?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"copy to the clipboard\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete application\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add an application\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application not found!\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no applications\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no description\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revoke all tokens\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to revoke all tokens?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"All existing associated tokens have been revoked.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Transport)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Virtual)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hiking\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountain Biking\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountain Biking (Electric)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Rowing\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Running\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skiing (Alpine)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skiing (Cross Country)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Snowshoes\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Walking\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistics\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"week\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"month\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"year\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Didn't received instructions?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Check your email. A new confirmation email has been sent to the address provided.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Already have an account?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete your account? All data will be deleted, this cannot be undone\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Current password\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter a valid email address.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter a password\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter on username\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hide password\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please request a new password reset.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Language\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"log in\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Login\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Logout\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New password\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No users found.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"At least 8 characters required.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Forgot password?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password reset\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Check your email. If your address is in our database, you'll received an email with a link to reset your password.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"weak\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"average\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"good\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"strong\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"password strength\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid predictable letter substitutions like \", \"@\", \" for a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid reversed spellings of common words.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalize some, but not all letters.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalize more than the first letter.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid dates and years that are associated with you.\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid recent years.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid years that are associated with you.\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid common character sequences.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid repeated words and characters.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Use longer keyboard patterns and change typing direction multiple times.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add more words that are less common.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Use multiple words, but avoid common phrases.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You can create strong passwords without using symbols, numbers, or uppercase letters.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"If you use this password elsewhere, you should change it.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Your password have been updated. Click \", _interpolate(_list(0)), \" to log in.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Account edition\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ascent-related data (records, total)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back to profile\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bio\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Birth date\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date display format\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit profile\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit preferences\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit sports preferences\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Please \", _interpolate(_list(0)), \" to change your email address again or contact the administrator\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"First name\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"First day of week\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Language\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Last name\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Location\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Monday\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Picture\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Picture edition\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update picture\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove picture\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preferences edition\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile edition\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration date\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sports preferences edition\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sunday\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"account\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"apps\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"picture\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"preferences\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"profile\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sports\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"action\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"color\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"disabled by admin\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"active\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"label\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"stopped speed threshold\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been updated successfully. Please check your email to confirm your new email address.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been created successfully.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"A link to activate your account has been emailed to the address provided.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been updated successfully.\"])},\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Units for distance\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Imperial system (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Metric system (m, km)\"])}\n },\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Timezone\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Register\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Resend account confirmation email\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sorry, registration is disabled.\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset your password\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"show password\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This user account is inactive.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"user picture\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Username\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 to 30 characters required, only alphanumeric characters and the underscore character \\\"_\\\" allowed.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add a workout\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"analysis\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascent\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ave. speed\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"average speed\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"back to workout\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descent\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"display filters\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"distance\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"duration\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit the workout\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"elevation\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"end\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"from\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".gpx file\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hide filters\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Latest workouts\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load more workouts\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max. altitude\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max files\"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max size\"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max. speed\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"min. altitude\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next segment\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Next workout\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"data from gpx, without any cleaning\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No file provided\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no folder inside\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No map\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next segment\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next workout\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No notes\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No previous segment\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No previous workout\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No records.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No workouts.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"notes\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pauses\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Previous segment\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Previous workout\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"record\"]), _normalize([\"records\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ave. speed\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Farthest distance\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Highest ascent\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Longest duration\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. speed\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"remaining characters\"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"segment\"]), _normalize([\"segments\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"speed\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"sport\"]), _normalize([\"sports\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start and finish\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start elevation axis at zero\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"title\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"to\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"total duration\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Upload one!\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"humidity\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"temperature\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wind\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNE\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NE\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ENE\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ESE\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SE\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSE\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSW\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SW\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WSW\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"W\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WNW\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NW\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNW\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"clear day\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"clear night\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cloudy\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fog\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partly cloudy day\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partly cloudy night\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"rain\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sleet\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"snow\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wind\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"with .gpx file\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"without .gpx file\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"workout\"]), _normalize([\"workouts\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workout date\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete this workout?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".zip file\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"or .zip file containing .gpx files\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Contacter l'administrateur\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee est un tracker d'activités sportives (en extérieur).\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"sous licence \", _interpolate(_list(0)), \" (en) \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Code source (en)\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Action\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer le compte\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Actif\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter/retirer des droits d'administration, supprimer des comptes utilisateurs.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email de l'administrateur pour contact \"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nombre maximum d'utilisateurs actifs \"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Si égal à 0, pas limite d'inscription\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nombre max. de fichiers dans une archive zip \"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"non renseigné\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Taille max. des fichiers (en Mo) \"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Configuration de l'application\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Taille max. des archives zip (en Mo) \"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revenir à l'admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Êtes-vous sûr de vouloir supprimer le compte de l'utilisateur \", _interpolate(_list(0)), \" ? Toutes les données seront définitivement.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Êtes-vous sûr de vouloir réinitialiser le mot de passe de l'utilisateur \", _interpolate(_list(0)), \" ?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Adresse email actuelle\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer l'utilisateur\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'envoi d'emails est désactivé.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer/désactiver des sports.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nouvelle adresse email\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Le mot de passe a été réinitialisé.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Les inscriptions sont actuellement désactivées.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Les inscriptions sont actuellement activées.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinit. le mot de passe\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Actif\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"des séances existent\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Label\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration - Sports\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Configurer l'application (nombre maximum d'utilisateurs inscrits, taille maximale des fichers).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Changer l'email\"])},\n \"USER\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"utilisateur\"]), _normalize([\"utilisateurs\"])])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'adresse email a été mise à jour.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter les droits d'admin\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Retirer les droits d'admin\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"status administrateur\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date d'inscription\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"statut du compte\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nom d'utilisateur\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nombre de séances\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur. Veuillez réessayer ou contacter l'administrateur.\"])},\n \"at least one file in zip archive exceeds size limit, please check the archive\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Au moins un fichier de l'archive zip dépasse la taille maximale, veuillez vérifier l'archive.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Courriel : une adresse électronique valide doit être fournie.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors du traitement du fichier gpx.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de l'analyse du fichier.\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de la récupération de la configuration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de la mise à jour de la configuration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur, veuillez réessayer ou contacter l'administrateur.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur, les inscriptions sont désactivées.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Extension de fichier non autorisée.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"La taille du fichier est supérieure à la limite autorisée.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Identifiants invalides.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Données fournies incorrectes.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton de connexion invalide, merci de vous reconnecter.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton de connexion, merci de vous reconnecter.\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier fourni.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier sélectionné.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur réseau.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"La nouvelle addresse électronique doit être differente de l'adresse actuelle\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe : les mots de passe saisis sont différents.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Merci de fournir un jeton de connexion valide.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ce sport n'existe pas.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Signature expirée. Merci de vous reconnecter.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désolé, ce nom d'utilisateur est déjà utilisé.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Inscription validée.\"])},\n \"the number of files in the archive exceeds the limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Le nombre de fichiers de l'archive dépasse la limite.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'utilisateur n'existe pas.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Une adresse électronique doit être fournie pour le contact de l'administrateur\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous ne pouvez pas supprimer votre compte, aucun autre utilisateur n'a des droits d'administration.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous n'avez pas les permissions nécessaires.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"précédent\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"suivant\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Renvoyer le message de confirmation\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Autoriser\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Retour\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Annuler\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialiser\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer mon compte\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désactiver\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filtrer\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se connecter\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Non\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S'inscrire\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinit.\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Valider\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Oui\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"à propos\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirmation\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"contact\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"jour\"]), _normalize([\"jours\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Affiché\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation (en)\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ici\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Masqué\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accueil\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"trier par \"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"tri\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascendant\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descendant\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"par page\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Total\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tableau de bord\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ce mois-ci\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur. Veuillez réessayer ou contacter l'administrateur.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'application semble rencontrer quelques problèmes.
Veuillez réessayer plus tard ou contacter l'administrateur.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Page introuvable\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance introuvable\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Une erreur s'est produite\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une nouvelle application OAuth2\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Identifiant\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Secret\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Description de l'application\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Créée le\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom de l'application\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"URL de redirection\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scope\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture à la configuration de l'application.\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes auth.\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes auth.\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes users.\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes users.\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes workouts.\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes workouts.\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"URL de l'application\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application créée avec succès. Assurez-vous de copier le secret maintenant, il ne s'affichera plus.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr de vouloir supprimer cette application ?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"L'application \", _interpolate(_list(0)), \" demande les accès suivants :\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Applications OAuth2\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Autoriser \", _interpolate(_list(0)), \" à utiliser votre compte ?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"copier dans le presse papier\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer l'application\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une application\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application introuvable !\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de applications\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de description\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Révoquer tous les jetons\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr de vouloir révoquer tous les jetons ?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tous les jetons associés existants ont été révoqués.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Transport)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Virtuel)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Randonnée\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"VTT\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"VTT (Électrique)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aviron\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Course\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ski (Alpin)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ski (Randonnée)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Raquettes\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Marche\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistiques\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"semaine\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mois\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"année\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous n'avez pas reçu les instructions ?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vérifiez vos courriels. Un nouveau courriel de confirmation a été envoyé à l'adresse électronique fournie.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous avez déjà un compte ?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr·e de vouloir supprimer votre compte ? Toutes les données seront définitivement effacés\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe actuel\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Courriel\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Saisissez une adresse électronique valide.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Saisissez un mot de passe\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filtrer sur le nom d'utilisateur\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"masquer le mot de passe\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton invalide, veuillez demander une nouvelle réinitialisation de mot de passe.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Langue\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"connecter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se connecter\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se déconnecter\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nouveau mot de passe\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aucun utilisateur trouvé.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"8 caractères minimum.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe oublié ?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialisation du mot de passe\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vérifiez vos courriels. Si vote adresse est dans notre base de données, vous recevrez un courriel avec un lien pour réinitialiser votre mot de passe.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"faible\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"moyenne\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"bonne\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"forte\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"robustesse du mot de passe\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les substitutions de lettres prévisibles comme \", \"@\", \" pour a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les orthographes inversées des mots courants.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mettez quelques lettres en majuscules, mais pas toutes.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalisez mais pas seulement la première lettre.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les dates et les années qui vous sont associées. (ex : date ou année de naissance).\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les dernières années.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les années qui vous sont associées. (ex : date de naissance).\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les séquences de caractères courantes.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les mots et les caractères répétés.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Utilisez des motifs de clavier plus longs et changez de sens de frappe plusieurs fois.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajoutez des mots moins courants.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Utilisez plusieurs mots, mais évitez les phrases courantes.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous pouvez créer des mots de passe forts sans utiliser de symboles, de chiffres ou de lettres majuscules.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Si vous utilisez ce mot de passe ailleurs, vous devriez le modifier.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Votre mot de passe a été mis à jour. Cliquez \", _interpolate(_list(0)), \" pour vous connecter.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour du compte\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Données relatives au dénivelé positif (records, total)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revenir au profil\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bio\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date de naissance\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Format d'affichage de la date\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier le profil\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier les préférences\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier les préférences des sports\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Veuillez vous \", _interpolate(_list(0)), \" pour changer de nouveau votre adresse électronique ou contacter l'administrateur\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Premier jour de la semaine\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prénom\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Langue\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lieu\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lundi\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image de profil\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour de l'image de profil\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mettre à jour l'image\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour des préférences\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour du profil\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date d'inscription\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour des préférences des sports\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dimanche\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"compte\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"apps\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"image\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"préférences\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"profil\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sports\"])}\n },\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unités pour les distances\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Système impérial (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Système métrique (m, km)\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"action\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"couleur\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"désactivé par l'administrateur\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"actif\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"label\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"seuil de vitesse arrêtée\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été modifié avec succès. Veuillez vérifier votre boîte de réception pour valider votre nouvelle adresse électronique.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été créé avec succès.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Un lien pour activer votre compte a été envoyé à l'adresse électronique fournie.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été modifié avec succès.\"])},\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fuseau horaire\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S'inscrire\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désolé, les inscriptions sont désactivées.\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Envoyer à nouveau le courriel de confirmation de compte\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialiser votre mot de passe\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"afficher le mot de passe\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Le compte de cet utilisateur est inactif.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"photo de l'utilisateur\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom d'utilisateur\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 à 30 caractères requis, seuls les caractères alphanumériques et le caractère _ sont autorisés.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une séance\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"analyse\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"dénivelé positif\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse moyenne\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse moy.\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"revenir à la séance\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"dénivelé négatif\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"afficher les filtres\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"distance\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"durée\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier la séance\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fin\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"à partir de\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fichier .gpx\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"masquer les filtres\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séances récentes\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Charger les séances suivantes\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude max\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fichiers max. \"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"taille max. \"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse max\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude min\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Segment suivant\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance suivante\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"données issues du fichier gpx, sans correction\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier fourni\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de répertoire\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de carte\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de segment suivant\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séance suivante\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de notes\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de segment précédent\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séance précédente\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de records.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séances.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"notes\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pauses\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Segment précédent\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance précédente\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"record\"]), _normalize([\"records\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vitesse moy.\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Distance la + longue\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dénivelé positif le + élevé\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durée la + longue\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vitesse max.\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nombre de caractères restants \"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"segment\"]), _normalize([\"segments\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"sport\"]), _normalize([\"sports\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"début\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Départ et arrivée\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"démarrer l'axe de l'altitude à 0\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"titre\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"jusqu'au\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"durée totale\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajoutez votre première séance !\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"humidité\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"température\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vent\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNE\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NE\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ENE\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ESE\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SE\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSE\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSO\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SO\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OSO\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"O\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ONO\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NO\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNO\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ensoleillé\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuit claire\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuageux\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"brouillard\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partiellement nuageux\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuit partiellement nuageuse\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pluie\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"neige fondue\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"neige\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"venteux\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"avec un fichier .gpx\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sans fichier .gpx\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"séance\"]), _normalize([\"séances\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date de la séance\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Etes-vous sûr de vouloir supprimer cette séance ?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"archive .zip\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ou une archive .zip contenant des fichiers .gpx\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","/* eslint-disable no-console */\n\nimport { register } from 'register-service-worker'\n\nif (process.env.NODE_ENV === 'production') {\n register(`${process.env.BASE_URL}service-worker.js`, {\n ready() {\n console.log(\n 'App is being served from cache by a service worker.\\n' +\n 'For more details, visit https://goo.gl/AFskqB'\n )\n },\n registered() {\n console.log('Service worker has been registered.')\n },\n cached() {\n console.log('Content has been cached for offline use.')\n },\n updatefound() {\n console.log('New content is downloading.')\n },\n updated() {\n console.log('New content is available; please refresh.')\n },\n offline() {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n )\n },\n error(error) {\n console.error('Error during service worker registration:', error)\n },\n })\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2c73279e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"footer\" }\nconst _hoisted_2 = { class: \"footer-items\" }\nconst _hoisted_3 = { class: \"footer-item\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"strong\", null, \"FitTrackee\", -1))\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"footer-item bullet\" }, \"•\", -1))\nconst _hoisted_6 = { class: \"footer-item\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"footer-item bullet\"\n}\nconst _hoisted_8 = {\n key: 1,\n class: \"footer-item\"\n}\nconst _hoisted_9 = [\"href\"]\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"footer-item bullet\" }, \"•\", -1))\nconst _hoisted_11 = { class: \"footer-item\" }\nconst _hoisted_12 = {\n href: \"https://samr1.github.io/FitTrackee/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\n\nimport { toRefs } from 'vue'\n\n interface Props {\n version: string\n adminContact?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Footer',\n props: {\n version: null,\n adminContact: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n version: string\n adminContact?: string\n }\n\n \n\n const { adminContact, version } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _hoisted_4,\n _createTextVNode(\" v\" + _toDisplayString(_unref(version)), 1)\n ]),\n _hoisted_5,\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_router_link, { to: \"/about\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('common.ABOUT')), 1)\n ]),\n _: 1\n })\n ]),\n (_unref(adminContact))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, \"•\"))\n : _createCommentVNode(\"\", true),\n (_unref(adminContact))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"a\", {\n href: `mailto:${_unref(adminContact)}`\n }, _toDisplayString(_ctx.$t('common.CONTACT')), 9, _hoisted_9)\n ]))\n : _createCommentVNode(\"\", true),\n _hoisted_10,\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"a\", _hoisted_12, _toDisplayString(_ctx.$t('common.DOCUMENTATION')), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./Footer.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Footer.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Footer.vue?vue&type=style&index=0&id=2c73279e&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2c73279e\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-95c1cc02\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"nav\" }\nconst _hoisted_2 = { class: \"nav-container\" }\nconst _hoisted_3 = { class: \"nav-app-name\" }\nconst _hoisted_4 = { class: \"nav-items-close\" }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"app-name\" }, \"FitTrackee\", -1))\nconst _hoisted_6 = {\n key: 0,\n class: \"nav-items-group\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"nav-item nav-separator\" }, null, -1))\nconst _hoisted_8 = { class: \"nav-items-user-menu\" }\nconst _hoisted_9 = {\n key: 0,\n class: \"nav-items-group\"\n}\nconst _hoisted_10 = { class: \"nav-item nav-profile-img\" }\nconst _hoisted_11 = {\n key: 1,\n class: \"nav-items-group\"\n}\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", { class: \"fa fa-language\" }, null, -1))\n\nimport { ComputedRef, computed, ref, capitalize } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IDropdownOption } from '@/types/forms'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { availableLanguages } from '@/utils/locales'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'NavBar',\n emits: ['menuInteraction'],\n setup(__props, { emit }) {\n\n \n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const isAuthenticated: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n )\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const isMenuOpen = ref(false)\n\n function openMenu() {\n isMenuOpen.value = true\n emit('menuInteraction', true)\n }\n function closeMenu() {\n isMenuOpen.value = false\n emit('menuInteraction', false)\n }\n function updateLanguage(option: IDropdownOption) {\n store.dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n option.value.toString()\n )\n }\n function logout() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.LOGOUT)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Dropdown = _resolveComponent(\"Dropdown\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: \"nav-item app-name\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/')))\n }, \" FitTrackee \")\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"nav-icon-open\", { 'menu-open': isMenuOpen.value }])\n }, [\n _createElementVNode(\"i\", {\n class: \"fa fa-bars hamburger-icon\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (openMenu()))\n })\n ], 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"nav-items\", { 'menu-open': isMenuOpen.value }])\n }, [\n _createElementVNode(\"div\", _hoisted_4, [\n _hoisted_5,\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa fa-close close-icon nav-item\", { 'menu-closed': !isMenuOpen.value }]),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (closeMenu()))\n }, null, 2)\n ]),\n _createElementVNode(\"div\", {\n class: \"nav-items-app-menu\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (closeMenu()))\n }, [\n (_unref(isAuthenticated))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('dashboard.DASHBOARD')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/workouts\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 2))), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/statistics\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('statistics.STATISTICS')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/workouts/add\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.ADD_WORKOUT')), 1)\n ]),\n _: 1\n }),\n (_unref(isAuthenticated) && _unref(authUser).admin)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"nav-item\",\n to: \"/admin\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.ADMIN')), 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n _hoisted_7\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n (_unref(isAuthenticated))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _createVNode(UserPicture, { user: _unref(authUser) }, null, 8, [\"user\"])\n ]),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/profile\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(authUser).username), 1)\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", {\n class: \"nav-item nav-link\",\n onClick: logout\n }, _toDisplayString(_ctx.$t('user.LOGOUT')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/login\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.LOGIN')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/register\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.REGISTER')), 1)\n ]),\n _: 1\n })\n ])),\n (_unref(availableLanguages) && _unref(language))\n ? (_openBlock(), _createBlock(_component_Dropdown, {\n key: 2,\n class: \"nav-item\",\n options: _unref(availableLanguages),\n selected: _unref(language),\n onSelected: updateLanguage\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }, 8, [\"options\", \"selected\"]))\n : _createCommentVNode(\"\", true)\n ])\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./NavBar.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NavBar.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./NavBar.vue?vue&type=style&index=0&id=95c1cc02&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-95c1cc02\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-47759238\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"no-config\" }\nconst _hoisted_2 = { class: \"error-page\" }\nconst _hoisted_3 = { class: \"error-img\" }\nconst _hoisted_4 = [\"innerHTML\"]\n\nimport ErrorImg from '@/components/Common/Images/ErrorImg.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'NoConfig',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(ErrorImg)\n ]),\n _createElementVNode(\"p\", {\n class: \"error-message\",\n innerHTML: _ctx.$t('error.APP_ERROR')\n }, null, 8, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./NoConfig.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./NoConfig.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./NoConfig.vue?vue&type=style&index=0&id=47759238&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-47759238\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, createVNode as _createVNode, unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, normalizeClass as _normalizeClass, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { id: \"top\" }, null, -1)\nconst _hoisted_2 = {\n key: 0,\n class: \"app-container\"\n}\nconst _hoisted_3 = { class: \"app-loading\" }\nconst _hoisted_4 = { class: \"container scroll\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-up\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_6 = [\n _hoisted_5\n]\n\nimport { ComputedRef, computed, ref, onBeforeMount, onMounted } from 'vue'\n\n import Footer from '@/components/Footer.vue'\n import NavBar from '@/components/NavBar.vue'\n import NoConfig from '@/components/NoConfig.vue'\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { useStore } from '@/use/useStore'\n import { localeFromLanguage } from '@/utils/locales'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'App',\n setup(__props) {\n\n const store = useStore()\n\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const appLoading: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_LOADING]\n )\n const hideScrollBar = ref(false)\n const displayScrollButton = ref(false)\n\n onBeforeMount(() => {\n initLanguage()\n store.dispatch(ROOT_STORE.ACTIONS.GET_APPLICATION_CONFIG)\n })\n onMounted(() => scroll())\n\n function updateHideScrollBar(isMenuOpen: boolean) {\n hideScrollBar.value = isMenuOpen\n }\n function isScrolledToBottom(element: Element): boolean {\n return (\n element.getBoundingClientRect().top < window.innerHeight &&\n element.getBoundingClientRect().bottom >= 0\n )\n }\n function scroll() {\n window.onscroll = () => {\n const bottom = document.querySelector('#bottom')\n displayScrollButton.value = bottom !== null && isScrolledToBottom(bottom)\n }\n }\n function scrollToTop() {\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n })\n setTimeout(() => {\n displayScrollButton.value = false\n }, 300)\n }\n function initLanguage() {\n let language = 'en'\n try {\n const navigatorLanguage = navigator.language.split('-')[0]\n if (navigatorLanguage in localeFromLanguage) {\n language = navigatorLanguage\n }\n } catch (e) {\n language = 'en'\n }\n store.dispatch(ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE, language)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Loader = _resolveComponent(\"Loader\")!\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _hoisted_1,\n _createVNode(NavBar, { onMenuInteraction: updateHideScrollBar }),\n (_unref(appLoading))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Loader)\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([\"app-container\", { 'hide-scroll': hideScrollBar.value }])\n }, [\n (_unref(appConfig))\n ? (_openBlock(), _createBlock(_component_router_view, { key: 0 }))\n : (_openBlock(), _createBlock(NoConfig, { key: 1 }))\n ], 2)),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"scroll-button\", { 'display-button': displayScrollButton.value }]),\n onClick: scrollToTop\n }, _hoisted_6, 2)\n ]),\n (_unref(appConfig))\n ? (_openBlock(), _createBlock(Footer, {\n key: 2,\n version: _unref(appConfig) ? _unref(appConfig).version : '',\n adminContact: _unref(appConfig).admin_contact\n }, null, 8, [\"version\", \"adminContact\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n}\n}\n\n})","import script from \"./App.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./App.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./App.vue?vue&type=style&index=0&id=2930d5e0&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-69d7e4ff\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"alert-message\" }\nconst _hoisted_2 = [\"innerHTML\"]\n\nimport { toRefs } from 'vue'\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AlertMessage',\n props: {\n message: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n message: string\n }\n\n \n const { message } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n innerHTML: _ctx.$t(_unref(message))\n }, null, 8, _hoisted_2)\n ]))\n}\n}\n\n})","import script from \"./AlertMessage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AlertMessage.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AlertMessage.vue?vue&type=style&index=0&id=69d7e4ff&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-69d7e4ff\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8cf5cc64\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"custom-textarea\" }\nconst _hoisted_2 = [\"id\", \"name\", \"maxLenght\", \"disabled\"]\nconst _hoisted_3 = { class: \"remaining-chars\" }\n\nimport { ref, watch, withDefaults } from 'vue'\n\n interface Props {\n name: string\n charLimit?: number\n disabled?: boolean\n input?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CustomTextArea',\n props: {\n name: null,\n charLimit: { default: 500 },\n disabled: { type: Boolean, default: false },\n input: { default: '' }\n },\n emits: ['updateValue'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { name: string, charLimit: number, disabled: boolean, input: string | null }\n\n \n\n \n\n const text = ref('')\n\n function updateText(event: Event & { target: HTMLInputElement }) {\n emit('updateValue', event.target.value)\n }\n\n watch(\n () => props.input,\n (value) => {\n text.value = value === null ? '' : value\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _withDirectives(_createElementVNode(\"textarea\", {\n id: __props.name,\n name: __props.name,\n maxLenght: __props.charLimit,\n disabled: __props.disabled,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((text).value = $event)),\n onInput: updateText\n }, null, 40, _hoisted_2), [\n [_vModelText, text.value]\n ]),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('workouts.REMAINING_CHARS')) + \": \" + _toDisplayString(text.value.length) + \"/\" + _toDisplayString(__props.charLimit), 1)\n ]))\n}\n}\n\n})","import script from \"./CustomTextArea.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CustomTextArea.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CustomTextArea.vue?vue&type=style&index=0&id=8cf5cc64&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8cf5cc64\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, Fragment as _Fragment } from \"vue\"\n\nimport { ComputedRef, computed, toRefs, withDefaults } from 'vue'\n\n import { TUnit } from '@/types/units'\n import { units, convertDistance } from '@/utils/units'\n\n interface Props {\n distance: number\n unitFrom: TUnit\n useImperialUnits: boolean\n digits?: number\n displayUnit?: boolean\n speed?: boolean\n strong?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Distance',\n props: {\n distance: null,\n unitFrom: null,\n useImperialUnits: { type: Boolean },\n digits: { default: 2 },\n displayUnit: { type: Boolean, default: true },\n speed: { type: Boolean, default: false },\n strong: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { distance: number, unitFrom: TUnit, useImperialUnits: boolean, digits: number, displayUnit: boolean, speed: boolean, strong: boolean }\n\n \n\n const {\n digits,\n displayUnit,\n distance,\n speed,\n strong,\n unitFrom,\n useImperialUnits,\n } = toRefs(props)\n const unitTo: ComputedRef = computed(() =>\n useImperialUnits.value\n ? units[unitFrom.value].defaultTarget\n : unitFrom.value\n )\n const convertedDistance = computed(() =>\n useImperialUnits.value\n ? convertDistance(\n distance.value,\n unitFrom.value,\n unitTo.value,\n digits.value\n )\n : parseFloat(distance.value.toFixed(digits.value))\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"distance\", { strong: _unref(strong) }])\n }, _toDisplayString(_unref(convertedDistance)), 3),\n _createTextVNode(\" \" + _toDisplayString(' ') + \" \"),\n (_unref(displayUnit))\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n class: _normalizeClass([\"unit\", { strong: _unref(strong) }])\n }, _toDisplayString(_unref(unitTo)) + _toDisplayString(_unref(speed) ? '/h' : ''), 3))\n : _createCommentVNode(\"\", true)\n ], 64))\n}\n}\n\n})","import script from \"./Distance.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Distance.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Distance.vue?vue&type=style&index=0&id=f46ff1d6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-f46ff1d6\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2d3b4eac\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"dropdown-wrapper\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"dropdown-list\"\n}\nconst _hoisted_3 = [\"onClick\"]\n\nimport { ref, watch } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { IDropdownOption, TDropdownOptions } from '@/types/forms'\n interface Props {\n options: TDropdownOptions\n selected: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Dropdown',\n props: {\n options: null,\n selected: null\n },\n emits: {\n selected: (option: IDropdownOption) => option,\n },\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n options: TDropdownOptions\n selected: string\n }\n\n \n\n \n\n const route = useRoute()\n const isOpen = ref(false)\n const dropdownOptions = props.options.map((option) => option)\n\n function toggleDropdown() {\n isOpen.value = !isOpen.value\n }\n function updateSelected(option: IDropdownOption) {\n emit('selected', option)\n isOpen.value = false\n }\n\n watch(\n () => route.path,\n () => (isOpen.value = false)\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"dropdown-selected\",\n onClick: toggleDropdown\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n (isOpen.value)\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(dropdownOptions), (option, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n class: _normalizeClass([\"dropdown-item\", { selected: option.value === __props.selected }]),\n key: index,\n onClick: ($event: any) => (updateSelected(option))\n }, _toDisplayString(option.label), 11, _hoisted_3))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./Dropdown.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Dropdown.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Dropdown.vue?vue&type=style&index=0&id=2d3b4eac&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2d3b4eac\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2659a79a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"error-message\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { key: 1 }\n\nimport { toRefs } from 'vue'\n\n interface Props {\n message: string | string[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'ErrorMessage',\n props: {\n message: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n message: string | string[]\n }\n\n \n const { message } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (Array.isArray(_unref(message)))\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(message), (subMessage, index) => {\n return (_openBlock(), _createElementBlock(\"li\", { key: index }, _toDisplayString(_ctx.$t(subMessage)), 1))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(_unref(message))), 1))\n ]))\n}\n}\n\n})","import script from \"./ErrorMessage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ErrorMessage.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./ErrorMessage.vue?vue&type=style&index=0&id=2659a79a&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2659a79a\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingSport.vue?vue&type=template&id=be8023a2\"\nimport script from \"./CyclingSport.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingSport.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingTransport.vue?vue&type=template&id=97af5148\"\nimport script from \"./CyclingTransport.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingTransport.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingVirtual.vue?vue&type=template&id=ec8f7bb6\"\nimport script from \"./CyclingVirtual.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingVirtual.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Hiking.vue?vue&type=template&id=40903dc4\"\nimport script from \"./Hiking.vue?vue&type=script&lang=js\"\nexport * from \"./Hiking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./MountainBiking.vue?vue&type=template&id=5bdbc6e8\"\nimport script from \"./MountainBiking.vue?vue&type=script&lang=js\"\nexport * from \"./MountainBiking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./MountainBikingElectric.vue?vue&type=template&id=21e72aec\"\nimport script from \"./MountainBikingElectric.vue?vue&type=script&lang=js\"\nexport * from \"./MountainBikingElectric.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Rowing.vue?vue&type=template&id=31ae2dd5\"\nimport script from \"./Rowing.vue?vue&type=script&lang=js\"\nexport * from \"./Rowing.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Running.vue?vue&type=template&id=4d47a4fe\"\nimport script from \"./Running.vue?vue&type=script&lang=js\"\nexport * from \"./Running.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./SkiingAlpine.vue?vue&type=template&id=3ebf3bca\"\nimport script from \"./SkiingAlpine.vue?vue&type=script&lang=js\"\nexport * from \"./SkiingAlpine.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./SkiingCrossCountry.vue?vue&type=template&id=1561bbe6\"\nimport script from \"./SkiingCrossCountry.vue?vue&type=script&lang=js\"\nexport * from \"./SkiingCrossCountry.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Snowshoes.vue?vue&type=template&id=67df2761\"\nimport script from \"./Snowshoes.vue?vue&type=script&lang=js\"\nexport * from \"./Snowshoes.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Trail.vue?vue&type=template&id=32a14156\"\nimport script from \"./Trail.vue?vue&type=script&lang=js\"\nexport * from \"./Trail.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Walking.vue?vue&type=template&id=2ed4f5f4\"\nimport script from \"./Walking.vue?vue&type=script&lang=js\"\nexport * from \"./Walking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"title\"]\n\nimport { inject, toRefs, withDefaults } from 'vue'\n\n import CyclingSport from '@/components/Common/Images/SportImage/CyclingSport.vue'\n import CyclingTransport from '@/components/Common/Images/SportImage/CyclingTransport.vue'\n import CyclingVirtual from '@/components/Common/Images/SportImage/CyclingVirtual.vue'\n import Hiking from '@/components/Common/Images/SportImage/Hiking.vue'\n import MountainBiking from '@/components/Common/Images/SportImage/MountainBiking.vue'\n import MountainBikingElectric from '@/components/Common/Images/SportImage/MountainBikingElectric.vue'\n import Rowing from '@/components/Common/Images/SportImage/Rowing.vue'\n import Running from '@/components/Common/Images/SportImage/Running.vue'\n import SkiingAlpine from '@/components/Common/Images/SportImage/SkiingAlpine.vue'\n import SkiingCrossCountry from '@/components/Common/Images/SportImage/SkiingCrossCountry.vue'\n import Snowshoes from '@/components/Common/Images/SportImage/Snowshoes.vue'\n import Trail from '@/components/Common/Images/SportImage/Trail.vue'\n import Walking from '@/components/Common/Images/SportImage/Walking.vue'\n\n interface Props {\n sportLabel: string\n color: string | null\n title?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sportLabel: null,\n color: null,\n title: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { sportLabel: string, color: string | null, title: string }\n\n \n\n const { color, sportLabel, title } = toRefs(props)\n const sportColors = inject('sportColors')\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"sport-img\",\n style: _normalizeStyle({ fill: _unref(color) ? _unref(color) : _unref(sportColors)[_unref(sportLabel)] }),\n title: _unref(title) ? _unref(title) : _ctx.$t(`sports.${_unref(sportLabel)}.LABEL`)\n }, [\n (_unref(sportLabel) === 'Cycling (Sport)')\n ? (_openBlock(), _createBlock(CyclingSport, { key: 0 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Cycling (Transport)')\n ? (_openBlock(), _createBlock(CyclingTransport, { key: 1 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Cycling (Virtual)')\n ? (_openBlock(), _createBlock(CyclingVirtual, { key: 2 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Hiking')\n ? (_openBlock(), _createBlock(Hiking, { key: 3 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Mountain Biking')\n ? (_openBlock(), _createBlock(MountainBiking, { key: 4 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Mountain Biking (Electric)')\n ? (_openBlock(), _createBlock(MountainBikingElectric, { key: 5 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Rowing')\n ? (_openBlock(), _createBlock(Rowing, { key: 6 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Running')\n ? (_openBlock(), _createBlock(Running, { key: 7 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Skiing (Alpine)')\n ? (_openBlock(), _createBlock(SkiingAlpine, { key: 8 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Skiing (Cross Country)')\n ? (_openBlock(), _createBlock(SkiingCrossCountry, { key: 9 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Snowshoes')\n ? (_openBlock(), _createBlock(Snowshoes, { key: 10 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Trail')\n ? (_openBlock(), _createBlock(Trail, { key: 11 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Walking')\n ? (_openBlock(), _createBlock(Walking, { key: 12 }))\n : _createCommentVNode(\"\", true)\n ], 12, _hoisted_1))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","\n\n\n","import { render } from \"./Loader.vue?vue&type=template&id=4c9921ee&scoped=true\"\nconst script = {}\n\nimport \"./Loader.vue?vue&type=style&index=0&id=4c9921ee&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4c9921ee\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-e8fcfaba\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"modal\" }\nconst _hoisted_2 = { class: \"custom-modal\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"modal-message\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"modal-message\"\n}\nconst _hoisted_5 = { class: \"modal-buttons\" }\n\nimport { ComputedRef, computed, toRefs, withDefaults, onUnmounted } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n title: string\n message: string\n strongMessage?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Modal',\n props: {\n title: null,\n message: null,\n strongMessage: { default: () => null }\n },\n emits: ['cancelAction', 'confirmAction'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { title: string, message: string, strongMessage: string | null }\n\n \n\n \n\n const store = useStore()\n\n const { title, message, strongMessage } = toRefs(props)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\nreturn (_ctx: any,_cache: any) => {\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(title)), 1)\n ]),\n content: _withCtx(() => [\n (_unref(strongMessage))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createVNode(_component_i18n_t, { keypath: _unref(message) }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(strongMessage)), 1)\n ]),\n _: 1\n }, 8, [\"keypath\"])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, _toDisplayString(_unref(message)), 1)),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 2,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_5, [\n (!_unref(errorMessages))\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"confirm\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('confirmAction')))\n }, _toDisplayString(_ctx.$t('buttons.YES')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('cancelAction')))\n }, _toDisplayString(_ctx.$t(`buttons.${_unref(errorMessages) ? 'CANCEL' : 'NO'}`)), 1)\n ])\n ]),\n _: 1\n })\n ])\n ]))\n}\n}\n\n})","import script from \"./Modal.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Modal.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Modal.vue?vue&type=style&index=0&id=e8fcfaba&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-e8fcfaba\"]])\n\nexport default __exports__","import AlertMessage from '@/components/Common/AlertMessage.vue'\nimport Card from '@/components/Common/Card.vue'\nimport CustomTextArea from '@/components/Common/CustomTextArea.vue'\nimport Distance from '@/components/Common/Distance.vue'\nimport Dropdown from '@/components/Common/Dropdown.vue'\nimport ErrorMessage from '@/components/Common/ErrorMessage.vue'\nimport SportImage from '@/components/Common/Images/SportImage/index.vue'\nimport Loader from '@/components/Common/Loader.vue'\nimport Modal from '@/components/Common/Modal.vue'\n\nexport const customComponents = [\n { target: AlertMessage, name: 'AlertMessage' },\n { target: Card, name: 'Card' },\n { target: CustomTextArea, name: 'CustomTextArea' },\n { target: Distance, name: 'Distance' },\n { target: Dropdown, name: 'Dropdown' },\n { target: ErrorMessage, name: 'ErrorMessage' },\n { target: Loader, name: 'Loader' },\n { target: Modal, name: 'Modal' },\n { target: SportImage, name: 'SportImage' },\n]\n","import { Directive, DirectiveBinding } from 'vue'\n\ninterface ClickOutsideHTMLElement extends HTMLElement {\n clickOutsideEvent?: (event: MouseEvent | TouchEvent) => void\n}\n\nexport const clickOutsideDirective: Directive = {\n mounted: (\n element: ClickOutsideHTMLElement,\n binding: DirectiveBinding\n ): void => {\n element.clickOutsideEvent = function (event) {\n if (!(element === event.target || element.contains(event.target))) {\n binding.value(event)\n }\n }\n document.body.addEventListener('click', element.clickOutsideEvent)\n document.body.addEventListener('touchstart', element.clickOutsideEvent)\n },\n unmounted: function (element: ClickOutsideHTMLElement): void {\n if (element.clickOutsideEvent) {\n document.body.removeEventListener('click', element.clickOutsideEvent)\n document.body.removeEventListener('touchstart', element.clickOutsideEvent)\n element.clickOutsideEvent = undefined\n }\n },\n}\n","import {\n Chart,\n BarElement,\n LineElement,\n PointElement,\n Legend,\n Title,\n Tooltip,\n Filler,\n BarController,\n CategoryScale,\n LineController,\n LinearScale,\n} from 'chart.js'\nimport ChartDataLabels from 'chartjs-plugin-datalabels'\nimport { createApp } from 'vue'\nimport VueFullscreen from 'vue-fullscreen'\n\nimport './registerServiceWorker'\nimport App from './App.vue'\nimport i18n from './i18n'\nimport router from './router'\nimport store from './store'\n\nimport { customComponents } from '@/custom-components'\nimport { clickOutsideDirective } from '@/directives'\nimport { sportColors } from '@/utils/sports'\n\nChart.register(\n BarElement,\n LineElement,\n PointElement,\n Legend,\n Title,\n Tooltip,\n Filler,\n BarController,\n CategoryScale,\n LineController,\n LinearScale,\n ChartDataLabels\n)\n\nconst app = createApp(App)\n .provide('sportColors', sportColors)\n .use(i18n)\n .use(store)\n .use(router)\n .use(VueFullscreen, { name: 'VFullscreen' })\n .directive('click-outside', clickOutsideDirective)\n\ncustomComponents.forEach((component) => {\n app.component(component.name, component.target)\n})\n\napp.mount('#app')\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, vModelText as _vModelText, withDirectives as _withDirectives, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, withModifiers as _withModifiers, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-24ec93e2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-app\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = [\"onSubmit\"]\nconst _hoisted_3 = { for: \"admin_contact\" }\nconst _hoisted_4 = [\"value\"]\nconst _hoisted_5 = [\"disabled\"]\nconst _hoisted_6 = { for: \"max_users\" }\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = { class: \"user-limit-help\" }\nconst _hoisted_9 = { class: \"info-box\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { for: \"max_single_file_size\" }\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = { for: \"max_zip_file_size\" }\nconst _hoisted_14 = [\"disabled\"]\nconst _hoisted_15 = { for: \"gpx_limit_import\" }\nconst _hoisted_16 = [\"disabled\"]\nconst _hoisted_17 = {\n key: 1,\n class: \"form-buttons\"\n}\nconst _hoisted_18 = {\n class: \"confirm\",\n type: \"submit\"\n}\nconst _hoisted_19 = [\"onClick\"]\nconst _hoisted_20 = {\n key: 2,\n class: \"form-buttons\"\n}\n\nimport {\n ComputedRef,\n computed,\n reactive,\n withDefaults,\n onBeforeMount,\n toRefs,\n } from 'vue'\n import { useRouter } from 'vue-router'\n\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig, TAppConfigForm } from '@/types/application'\n import { useStore } from '@/use/useStore'\n import { getFileSizeInMB } from '@/utils/files'\n\n interface Props {\n appConfig: TAppConfig\n edition?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminApplication',\n props: {\n appConfig: null,\n edition: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { appConfig: TAppConfig, edition: boolean }\n\n \n const { edition } = toRefs(props)\n\n const store = useStore()\n const router = useRouter()\n\n const appData: TAppConfigForm = reactive({\n admin_contact: '',\n max_users: 0,\n max_single_file_size: 0,\n max_zip_file_size: 0,\n gpx_limit_import: 0,\n })\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => {\n if (props.appConfig) {\n updateForm(props.appConfig)\n }\n })\n\n function updateForm(appConfig: TAppConfig) {\n Object.keys(appData).map((key) => {\n ['max_single_file_size', 'max_zip_file_size'].includes(key)\n ? // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (appData[key] = getFileSizeInMB(appConfig[key]))\n : // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (appData[key] = appConfig[key])\n })\n }\n function onCancel() {\n updateForm(props.appConfig)\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n router.push('/admin/application')\n }\n function onSubmit() {\n const formData: TAppConfigForm = Object.assign({}, appData)\n formData.max_single_file_size *= 1048576\n formData.max_zip_file_size *= 1048576\n store.dispatch(ROOT_STORE.ACTIONS.UPDATE_APPLICATION_CONFIG, formData)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.TITLE')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"form\", {\n class: \"admin-form\",\n onSubmit: _withModifiers(onSubmit, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_3, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.ADMIN_CONTACT')) + \": \", 1),\n (!_unref(edition) && !appData.admin_contact)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"no-contact\",\n value: _ctx.$t('admin.APP_CONFIG.NO_CONTACT_EMAIL'),\n disabled: \"\"\n }, null, 8, _hoisted_4))\n : _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 1,\n id: \"admin_contact\",\n name: \"admin_contact\",\n type: \"email\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((appData.admin_contact) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_5)), [\n [_vModelText, appData.admin_contact]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_USERS_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_users\",\n name: \"max_users\",\n type: \"number\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((appData.max_users) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_7), [\n [_vModelText, appData.max_users]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"span\", _hoisted_9, [\n _hoisted_10,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_USERS_HELP')), 1)\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.SINGLE_UPLOAD_MAX_SIZE_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_single_file_size\",\n name: \"max_single_file_size\",\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((appData.max_single_file_size) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_12), [\n [_vModelText, appData.max_single_file_size]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_13, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.ZIP_UPLOAD_MAX_SIZE_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_zip_file_size\",\n name: \"max_zip_file_size\",\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((appData.max_zip_file_size) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_14), [\n [_vModelText, appData.max_zip_file_size]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_15, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_FILES_IN_ZIP_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"gpx_limit_import\",\n name: \"gpx_limit_import\",\n type: \"number\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((appData.gpx_limit_import) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_16), [\n [_vModelText, appData.gpx_limit_import]\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(edition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createElementVNode(\"button\", _hoisted_18, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(onCancel, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_19)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: _cache[5] || (_cache[5] = _withModifiers(($event: any) => (_ctx.$router.push('/admin/application/edit')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.EDIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[6] || (_cache[6] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ]))\n ], 40, _hoisted_2)\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminApplication.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminApplication.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminApplication.vue?vue&type=style&index=0&id=24ec93e2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-24ec93e2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"stat-card\" }\nconst _hoisted_2 = { class: \"stat-content box\" }\nconst _hoisted_3 = { class: \"stat-icon\" }\nconst _hoisted_4 = { class: \"stat-details\" }\nconst _hoisted_5 = { class: \"stat-huge\" }\nconst _hoisted_6 = { class: \"stat\" }\n\nimport { toRefs } from 'vue'\n\n interface Props {\n icon: string\n text: string\n value: string | number\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatCard',\n props: {\n icon: null,\n text: null,\n value: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n icon: string\n text: string\n value: string | number\n }\n\n \n const { icon, text, value } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa\", `fa-${_unref(icon)}`])\n }, null, 2)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, _toDisplayString(_unref(value)), 1),\n _createElementVNode(\"div\", _hoisted_6, _toDisplayString(_unref(text)), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./StatCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatCard.vue?vue&type=style&index=0&id=6cbb3351&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-stats\" }\n\nimport { computed, toRefs } from 'vue'\n\n import StatCard from '@/components/Common/StatCard.vue'\n import { IAppStatistics } from '@/types/application'\n import { getReadableFileSize } from '@/utils/files'\n\n interface Props {\n appStatistics: IAppStatistics\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AppStatsCards',\n props: {\n appStatistics: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n appStatistics: IAppStatistics\n }\n\n \n\n const { appStatistics } = toRefs(props)\n const uploadDirSize = computed(() =>\n getReadableFileSize(appStatistics.value.uploads_dir_size, false)\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatCard, {\n icon: \"users\",\n value: _unref(appStatistics).users,\n text: _ctx.$t('admin.USER', _unref(appStatistics).users)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"tags\",\n value: _unref(appStatistics).sports,\n text: _ctx.$t('workouts.SPORT', _unref(appStatistics).sports)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"calendar\",\n value: _unref(appStatistics).workouts,\n text: _ctx.$t('workouts.WORKOUT', _unref(appStatistics).workouts)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"folder-open\",\n value: _unref(uploadDirSize).size,\n text: _unref(uploadDirSize).suffix\n }, null, 8, [\"value\", \"text\"])\n ]))\n}\n}\n\n})","import script from \"./AppStatsCards.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStatsCards.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AppStatsCards.vue?vue&type=style&index=0&id=61c5053e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0dd66f89\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-menu\",\n class: \"center-card\"\n}\nconst _hoisted_2 = { class: \"admin-menu description-list\" }\nconst _hoisted_3 = { class: \"application-config-details\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_5 = { class: \"registration-status\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"email-sending-status\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-exclamation-triangle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { capitalize, toRefs, withDefaults } from 'vue'\n\n import AppStatsCards from '@/components/Administration/AppStatsCards.vue'\n import Card from '@/components/Common/Card.vue'\n import { IAppStatistics, TAppConfig } from '@/types/application'\n\n interface Props {\n appConfig: TAppConfig\n appStatistics?: IAppStatistics\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminMenu',\n props: {\n appConfig: null,\n appStatistics: { default: () => ({} as IAppStatistics) }\n },\n setup(__props: any) {\n\nconst props = __props as { appConfig: TAppConfig, appStatistics: IAppStatistics }\n\n \n\n const { appConfig, appStatistics } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.ADMINISTRATION')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(AppStatsCards, { appStatistics: _unref(appStatistics) }, null, 8, [\"appStatistics\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/application\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APPLICATION')), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", _hoisted_3, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.UPDATE_APPLICATION_DESCRIPTION')), 1),\n _hoisted_4,\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.$t(\n `admin.REGISTRATION_${\n _unref(appConfig).is_registration_enabled ? 'ENABLED' : 'DISABLED'\n }`\n )), 1),\n (!_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_6, [\n _hoisted_7,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.EMAIL_SENDING_DISABLED')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/sports\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('workouts.SPORT', 0))), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t('admin.ENABLE_DISABLE_SPORTS')), 1),\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/users\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('admin.USER', 0))), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t('admin.ADMIN_RIGHTS_DELETE_USER_ACCOUNT')), 1)\n ])\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminMenu.vue?vue&type=style&index=0&id=0dd66f89&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0dd66f89\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withModifiers as _withModifiers, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, createBlock as _createBlock, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6d62af67\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-sports\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = { class: \"responsive-table\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, \"#\", -1))\nconst _hoisted_4 = { class: \"text-left\" }\nconst _hoisted_5 = { class: \"text-left sport-action\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, null, -1))\nconst _hoisted_7 = { class: \"text-center\" }\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"cell-heading\" }, \"id\", -1))\nconst _hoisted_9 = { class: \"cell-heading\" }\nconst _hoisted_10 = { class: \"sport-label\" }\nconst _hoisted_11 = { class: \"cell-heading\" }\nconst _hoisted_12 = { class: \"text-center\" }\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"sport-action\" }\nconst _hoisted_15 = { class: \"cell-heading\" }\nconst _hoisted_16 = { class: \"action-button\" }\nconst _hoisted_17 = [\"onClick\"]\nconst _hoisted_18 = {\n key: 0,\n class: \"has-workouts\"\n}\nconst _hoisted_19 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-warning\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { ComputedRef, computed } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ROOT_STORE, SPORTS_STORE } from '@/store/constants'\n import { ITranslatedSport } from '@/types/sports'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminSports',\n setup(__props) {\n\n const { t } = useI18n()\n const store = useStore()\n\n const translatedSports: ComputedRef = computed(() =>\n translateSports(store.getters[SPORTS_STORE.GETTERS.SPORTS], t)\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n function updateSportStatus(id: number, isActive: boolean) {\n store.dispatch(SPORTS_STORE.ACTIONS.UPDATE_SPORTS, {\n id,\n isActive,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.SPORTS.TITLE')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"button\", {\n class: \"top-button\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_3,\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.IMAGE')), 1),\n _createElementVNode(\"th\", _hoisted_4, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.LABEL')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.ACTIVE')), 1),\n _createElementVNode(\"th\", _hoisted_5, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _hoisted_6\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: sport.id\n }, [\n _createElementVNode(\"td\", _hoisted_7, [\n _hoisted_8,\n _createTextVNode(\" \" + _toDisplayString(sport.id), 1)\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.IMAGE')), 1),\n _createVNode(_component_SportImage, {\n title: sport.translatedLabel,\n \"sport-label\": sport.label,\n color: sport.color\n }, null, 8, [\"title\", \"sport-label\", \"color\"])\n ]),\n _createElementVNode(\"td\", _hoisted_10, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.LABEL')), 1),\n _createTextVNode(\" \" + _toDisplayString(sport.translatedLabel), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_12, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.ACTIVE')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${sport.is_active ? '-check' : ''}`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_14, [\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"button\", {\n class: _normalizeClass({ danger: sport.is_active }),\n onClick: ($event: any) => (updateSportStatus(sport.id, !sport.is_active))\n }, _toDisplayString(_ctx.$t(`buttons.${sport.is_active ? 'DIS' : 'EN'}ABLE`)), 11, _hoisted_17),\n (sport.has_workouts)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_18, [\n _hoisted_19,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.HAS_WORKOUTS')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ]))\n }), 128))\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminSports.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminSports.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminSports.vue?vue&type=style&index=0&id=6d62af67&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6d62af67\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { vModelText as _vModelText, withKeys as _withKeys, createElementVNode as _createElementVNode, withDirectives as _withDirectives, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-627a8e91\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"users-filters\" }\nconst _hoisted_2 = { class: \"search-username\" }\nconst _hoisted_3 = [\"onKeyup\", \"placeholder\"]\n\nimport { ref } from 'vue'\n import { useRoute } from 'vue-router'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UsersNameFilter',\n emits: ['filterOnUsername'],\n setup(__props, { emit }) {\n\n const route = useRoute()\n const username = ref(route.query.q ? route.query.q : '')\n\n \n function searchUsers() {\n if (username.value !== '') {\n emit('filterOnUsername', username)\n }\n }\n function resetFilter() {\n username.value = ''\n emit('filterOnUsername', username.value)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"username\",\n name: \"username\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((username).value = $event)),\n onKeyup: _withKeys(searchUsers, [\"enter\"]),\n placeholder: _ctx.$t('user.FILTER_ON_USERNAME')\n }, null, 40, _hoisted_3), [\n [\n _vModelText,\n username.value,\n void 0,\n { trim: true }\n ]\n ]),\n (username.value !== '')\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-times\",\n \"aria-hidden\": \"true\",\n onClick: resetFilter\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa fa-search\", { 'fa-disabled': username.value === '' }]),\n \"aria-hidden\": \"true\",\n onClick: searchUsers\n }, null, 2)\n ]))\n}\n}\n\n})","import script from \"./UsersNameFilter.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./UsersNameFilter.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./UsersNameFilter.vue?vue&type=style&index=0&id=627a8e91&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-627a8e91\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withModifiers as _withModifiers, createElementVNode as _createElementVNode, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, withCtx as _withCtx, normalizeClass as _normalizeClass, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-dc12ff78\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-users\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"no-users\"\n}\nconst _hoisted_3 = {\n key: 1,\n class: \"responsive-table\"\n}\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, \"#\", -1))\nconst _hoisted_5 = { class: \"left-text\" }\nconst _hoisted_6 = { class: \"left-text\" }\nconst _hoisted_7 = { class: \"left-text\" }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = { class: \"cell-heading\" }\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = { class: \"cell-heading\" }\nconst _hoisted_12 = { class: \"text-center\" }\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"text-center\" }\nconst _hoisted_15 = { class: \"cell-heading\" }\nconst _hoisted_16 = { class: \"text-center\" }\nconst _hoisted_17 = { class: \"cell-heading\" }\nconst _hoisted_18 = { class: \"text-center\" }\nconst _hoisted_19 = { class: \"cell-heading\" }\nconst _hoisted_20 = [\"disabled\", \"onClick\"]\n\nimport {\n ComputedRef,\n Ref,\n computed,\n reactive,\n watch,\n capitalize,\n onBeforeMount,\n onUnmounted,\n } from 'vue'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import FilterSelects from '@/components/Common/FilterSelects.vue'\n import Pagination from '@/components/Common/Pagination.vue'\n import UserPicture from '@/components/User/UserPicture.vue'\n import UsersNameFilter from '@/components/Users/UsersNameFilter.vue'\n import { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\n import { IPagination, TPaginationPayload } from '@/types/api'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getQuery, sortList } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminUsers',\n setup(__props) {\n\n const store = useStore()\n const route = useRoute()\n const router = useRouter()\n\n const orderByList: string[] = [\n 'is_active',\n 'admin',\n 'created_at',\n 'username',\n 'workouts_count',\n ]\n const defaultOrderBy = 'created_at'\n let query: TPaginationPayload = reactive(\n getQuery(route.query, orderByList, defaultOrderBy)\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const users: ComputedRef = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS]\n )\n const pagination: ComputedRef = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS_PAGINATION]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => loadUsers(query))\n\n function loadUsers(queryParams: TPaginationPayload) {\n store.dispatch(USERS_STORE.ACTIONS.GET_USERS, queryParams)\n }\n function searchUsers(username: Ref) {\n reloadUsers('q', username.value)\n }\n\n function updateUser(username: string, admin: boolean) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n admin,\n })\n }\n function reloadUsers(queryParam: string, queryValue: string) {\n query[queryParam] = queryValue\n if (queryParam === 'per_page') {\n query.page = 1\n }\n router.push({ path: '/admin/users', query })\n }\n\n onUnmounted(() => {\n store.dispatch(USERS_STORE.ACTIONS.EMPTY_USERS)\n })\n\n watch(\n () => route.query,\n (newQuery: LocationQuery) => {\n query = getQuery(newQuery, orderByList, defaultOrderBy, { query })\n loadUsers(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('admin.USER', 0))), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"button\", {\n class: \"top-button\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1),\n _createVNode(UsersNameFilter, { onFilterOnUsername: searchUsers }),\n _createVNode(FilterSelects, {\n sort: _unref(sortList),\n order_by: orderByList,\n query: _unref(query),\n message: \"admin.USERS.SELECTS.ORDER_BY\",\n onUpdateSelect: reloadUsers\n }, null, 8, [\"sort\", \"query\"]),\n (_unref(users).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('user.NO_USERS_FOUND')), 1))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_4,\n _createElementVNode(\"th\", _hoisted_5, _toDisplayString(_ctx.$t('user.USERNAME')), 1),\n _createElementVNode(\"th\", _hoisted_6, _toDisplayString(_ctx.$t('user.EMAIL')), 1),\n _createElementVNode(\"th\", _hoisted_7, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 0))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.ACTIVE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.ADMIN')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.ACTION')), 1)\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(users), (user) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: user.username\n }, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE')), 1),\n _createVNode(UserPicture, { user: user }, null, 8, [\"user\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_ctx.$t('user.USERNAME')), 1),\n _createVNode(_component_router_link, {\n to: `/admin/users/${user.username}`\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(user.username), 1)\n ]),\n _: 2\n }, 1032, [\"to\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('user.EMAIL')), 1),\n _createTextVNode(\" \" + _toDisplayString(user.email), 1)\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')), 1),\n _createTextVNode(\" \" + _toDisplayString(_unref(formatDate)(\n user.created_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_12, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 0))), 1),\n _createTextVNode(\" \" + _toDisplayString(user.nb_workouts), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_14, [\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('admin.ACTIVE')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${user.is_active ? '-check' : ''}-square-o`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_16, [\n _createElementVNode(\"span\", _hoisted_17, _toDisplayString(_ctx.$t('user.ADMIN')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${user.admin ? '-check' : ''}-square-o`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_18, [\n _createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _createElementVNode(\"button\", {\n class: _normalizeClass({ danger: user.admin }),\n disabled: user.username === _unref(authUser).username,\n onClick: ($event: any) => (updateUser(user.username, !user.admin))\n }, _toDisplayString(_ctx.$t(\n `admin.USERS.TABLE.${\n user.admin ? 'REMOVE' : 'ADD'\n }_ADMIN_RIGHTS`\n )), 11, _hoisted_20)\n ])\n ]))\n }), 128))\n ])\n ]),\n (_unref(pagination).page)\n ? (_openBlock(), _createBlock(Pagination, {\n key: 0,\n path: \"/admin/users\",\n pagination: _unref(pagination),\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 1,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ]))\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminUsers.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminUsers.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminUsers.vue?vue&type=style&index=0&id=dc12ff78&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-dc12ff78\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = { class: \"profile-tabs custom-checkboxes-group\" }\nconst _hoisted_2 = { class: \"profile-tabs-checkboxes custom-checkboxes\" }\nconst _hoisted_3 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n tabs: string[]\n selectedTab: string\n edition: boolean\n disabled?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserProfileTabs',\n props: {\n tabs: null,\n selectedTab: null,\n edition: { type: Boolean },\n disabled: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { tabs: string[], selectedTab: string, edition: boolean, disabled: boolean }\n\n \n\n const { tabs, selectedTab, disabled } = toRefs(props)\n\n function getPath(tab: string) {\n switch (tab) {\n case 'ACCOUNT':\n case 'PICTURE':\n return `/profile/edit/${tab.toLocaleLowerCase()}`\n case 'APPS':\n case 'PREFERENCES':\n case 'SPORTS':\n return `/profile${\n props.edition ? '/edit' : ''\n }/${tab.toLocaleLowerCase()}`\n default:\n case 'PROFILE':\n return `/profile${props.edition ? '/edit' : ''}`\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(tabs), (tab) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"profile-tab custom-checkbox\",\n key: tab\n }, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: tab,\n name: tab,\n checked: _unref(selectedTab).split('/')[0] === tab,\n disabled: _unref(disabled),\n onInput: ($event: any) => (_ctx.$router.push(getPath(tab)))\n }, null, 40, _hoisted_3),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`user.PROFILE.TABS.${tab}`)), 1)\n ])\n ]))\n }), 128))\n ])\n ]))\n}\n}\n\n})","import script from \"./UserProfileTabs.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserProfileTabs.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserProfileTabs.vue?vue&type=style&index=0&id=01b05f01&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9729cba4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-profile\" }\nconst _hoisted_2 = { class: \"box\" }\n\nimport { toRefs } from 'vue'\n\n import UserHeader from '@/components/User/ProfileDisplay/UserHeader.vue'\n import UserProfileTabs from '@/components/User/UserProfileTabs.vue'\n import { IUserProfile } from '@/types/user'\n\n interface Props {\n user: IUserProfile\n tab: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null,\n tab: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n tab: string\n }\n\n \n\n const { user, tab } = toRefs(props)\n const tabs = ['PROFILE', 'PREFERENCES', 'SPORTS', 'APPS']\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(UserHeader, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(UserProfileTabs, {\n tabs: tabs,\n selectedTab: _unref(tab),\n edition: false\n }, null, 8, [\"selectedTab\"]),\n _createVNode(_component_router_view, { user: _unref(user) }, null, 8, [\"user\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=9729cba4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9729cba4\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"user-preferences\",\n class: \"description-list\"\n}\nconst _hoisted_2 = { class: \"profile-buttons\" }\n\nimport { computed, ComputedRef } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getDateFormat } from '@/utils/dates'\n import { languageLabels } from '@/utils/locales'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPreferences',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const appLanguage: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const userLanguage = computed(() =>\n props.user.language\n ? languageLabels[props.user.language]\n : languageLabels['en']\n )\n const fistDayOfWeek = computed(() => (props.user.weekm ? 'MONDAY' : 'SUNDAY'))\n const timezone = computed(() =>\n props.user.timezone ? props.user.timezone : 'Europe/Paris'\n )\n const date_format = computed(() =>\n props.user.date_format ? props.user.date_format : 'MM/dd/yyyy'\n )\n const display_ascent = computed(() =>\n props.user.display_ascent ? 'DISPLAYED' : 'HIDDEN'\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LANGUAGE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(userLanguage)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.TIMEZONE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(timezone)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.DATE_FORMAT')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(getDateFormat)(_unref(date_format), _unref(appLanguage))), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_DAY_OF_WEEK')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(`user.PROFILE.${_unref(fistDayOfWeek)}`)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.UNITS.LABEL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(\n `user.PROFILE.UNITS.${__props.user.imperial_units ? 'IMPERIAL' : 'METRIC'}`\n )), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.ASCENT_DATA')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(`common.${_unref(display_ascent)}`)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"button\", {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/edit/preferences')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPreferences.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPreferences.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"user-profile-edition\",\n class: \"center-card\"\n}\n\nimport { computed, toRefs } from 'vue'\n\n import UserProfileTabs from '@/components/User/UserProfileTabs.vue'\n import { AUTH_USER_STORE } from '@/store/constants'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n tab: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null,\n tab: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n tab: string\n }\n\n \n\n const store = useStore()\n\n const { user, tab } = toRefs(props)\n const tabs = ['PROFILE', 'ACCOUNT', 'PICTURE', 'PREFERENCES', 'SPORTS']\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(`user.PROFILE.${_unref(tab)}_EDITION`)), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserProfileTabs, {\n tabs: tabs,\n selectedTab: _unref(tab),\n edition: true,\n disabled: _unref(loading)\n }, null, 8, [\"selectedTab\", \"disabled\"]),\n _createVNode(_component_router_view, { user: _unref(user) }, null, 8, [\"user\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, createVNode as _createVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-37b8c4c8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-infos-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = {\n key: 1,\n class: \"info-box success-message\"\n}\nconst _hoisted_4 = [\"onSubmit\"]\nconst _hoisted_5 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_6 = [\"disabled\"]\nconst _hoisted_7 = {\n class: \"form-items\",\n for: \"password-field\"\n}\nconst _hoisted_8 = {\n class: \"form-items\",\n for: \"new-password-field\"\n}\nconst _hoisted_9 = { class: \"form-buttons\" }\nconst _hoisted_10 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport {\n ComputedRef,\n Ref,\n computed,\n reactive,\n ref,\n toRefs,\n onMounted,\n watch,\n onUnmounted,\n } from 'vue'\n\n import PasswordInput from '@/components/Common/PasswordInput.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IUserProfile, IUserAccountPayload } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAccountEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n const { user } = toRefs(props)\n\n const store = useStore()\n const userForm: IUserAccountPayload = reactive({\n email: '',\n password: '',\n new_password: '',\n })\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const emailUpdate = ref(false)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const formErrors = ref(false)\n const displayModal: Ref = ref(false)\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function invalidateForm() {\n formErrors.value = true\n }\n function updateUserForm(user: IUserProfile) {\n userForm.email = user.email\n }\n function updatePassword(password: string) {\n userForm.password = password\n }\n function updateNewPassword(new_password: string) {\n userForm.new_password = new_password\n }\n function updateProfile() {\n const payload: IUserAccountPayload = {\n email: userForm.email,\n password: userForm.password,\n }\n if (userForm.new_password) {\n payload.new_password = userForm.new_password\n }\n emailUpdate.value = userForm.email !== user.value.email\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_ACCOUNT, payload)\n }\n function updateDisplayModal(value: boolean) {\n displayModal.value = value\n }\n function deleteAccount(username: string) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.DELETE_ACCOUNT, { username })\n }\n\n onUnmounted(() => {\n store.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\n watch(\n () => isSuccess.value,\n async (isSuccessValue) => {\n if (isSuccessValue) {\n updatePassword('')\n updateNewPassword('')\n updateUserForm(user.value)\n formErrors.value = false\n }\n }\n )\n watch(\n () => user.value.email,\n async () => {\n updateUserForm(user.value)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t('user.CONFIRM_ACCOUNT_DELETION'),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (deleteAccount(_unref(user).username))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\n `user.PROFILE.SUCCESSFUL_${\n emailUpdate.value && _unref(appConfig).is_email_sending_enabled ? 'EMAIL_' : ''\n }UPDATE`\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_5, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.EMAIL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"email\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((userForm.email) = $event)),\n disabled: _unref(loading),\n required: true,\n onInvalid: invalidateForm\n }, null, 40, _hoisted_6), [\n [_vModelText, userForm.email]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.CURRENT_PASSWORD')) + \"* \", 1),\n _createVNode(PasswordInput, {\n id: \"password-field\",\n disabled: _unref(loading),\n password: userForm.password,\n required: true,\n onUpdatePassword: updatePassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"password\"])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.NEW_PASSWORD')) + \" \", 1),\n _createVNode(PasswordInput, {\n id: \"new-password-field\",\n disabled: _unref(loading),\n checkStrength: true,\n password: userForm.new_password,\n isSuccess: false,\n onUpdatePassword: updateNewPassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"password\"])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"button\", _hoisted_10, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[3] || (_cache[3] = _withModifiers(($event: any) => (_ctx.$router.push('/profile')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1),\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (updateDisplayModal(true)), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.DELETE_MY_ACCOUNT')), 1)\n ])\n ], 42, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserAccountEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAccountEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAccountEdition.vue?vue&type=style&index=0&id=37b8c4c8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-37b8c4c8\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, vModelText as _vModelText, withDirectives as _withDirectives, createVNode as _createVNode, withModifiers as _withModifiers, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5e5a4552\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-infos-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = {\n class: \"form-items\",\n for: \"registrationDate\"\n}\nconst _hoisted_5 = [\"value\"]\nconst _hoisted_6 = {\n class: \"form-items\",\n for: \"first_name\"\n}\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = {\n class: \"form-items\",\n for: \"last_name\"\n}\nconst _hoisted_9 = {\n class: \"form-items\",\n for: \"birth_date\"\n}\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = {\n class: \"form-items\",\n for: \"location\"\n}\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = { class: \"form-items\" }\nconst _hoisted_14 = { class: \"form-buttons\" }\nconst _hoisted_15 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport { format } from 'date-fns'\n import { ComputedRef, computed, reactive, onMounted, onUnmounted } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IUserProfile, IUserPayload, IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserInfosEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const userForm: IUserPayload = reactive({\n first_name: '',\n last_name: '',\n birth_date: '',\n location: '',\n bio: '',\n })\n const registrationDate = computed(() =>\n props.user.created_at\n ? formatDate(\n props.user.created_at,\n props.user.timezone,\n props.user.date_format\n )\n : ''\n )\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function updateUserForm(user: IUserProfile) {\n userForm.first_name = user.first_name ? user.first_name : ''\n userForm.last_name = user.last_name ? user.last_name : ''\n userForm.birth_date = user.birth_date\n ? format(new Date(user.birth_date), 'yyyy-MM-dd')\n : ''\n userForm.location = user.location ? user.location : ''\n userForm.bio = user.bio ? user.bio : ''\n }\n function updateBio(value: string) {\n userForm.bio = value\n }\n function updateProfile() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PROFILE, userForm)\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')) + \" \", 1),\n _createElementVNode(\"input\", {\n id: \"registrationDate\",\n value: _unref(registrationDate),\n disabled: \"\"\n }, null, 8, _hoisted_5)\n ]),\n _createElementVNode(\"label\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.FIRST_NAME')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"first_name\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((userForm.first_name) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_7), [\n [_vModelText, userForm.first_name]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LAST_NAME')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"last_name\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((userForm.last_name) = $event))\n }, null, 512), [\n [_vModelText, userForm.last_name]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_9, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.BIRTH_DATE')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"birth_date\",\n type: \"date\",\n class: \"birth-date\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((userForm.birth_date) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_10), [\n [_vModelText, userForm.birth_date]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LOCATION')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"location\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((userForm.location) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_12), [\n [_vModelText, userForm.location]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_13, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.BIO')) + \" \", 1),\n _createVNode(_component_CustomTextArea, {\n name: \"bio\",\n charLimit: 200,\n input: userForm.bio,\n disabled: _unref(loading),\n onUpdateValue: updateBio\n }, null, 8, [\"input\", \"disabled\"])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"button\", _hoisted_15, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (_ctx.$router.push('/profile')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserInfosEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserInfosEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserInfosEdition.vue?vue&type=style&index=0&id=5e5a4552&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5e5a4552\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-687e9604\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-picture-edition\" }\nconst _hoisted_2 = { class: \"user-picture-form\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = { class: \"picture-help\" }\nconst _hoisted_5 = { class: \"info-box\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = { class: \"picture-buttons\" }\nconst _hoisted_8 = [\"disabled\"]\n\nimport { ComputedRef, Ref, computed, ref, toRefs, onUnmounted } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getReadableFileSize } from '@/utils/files'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPictureEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const store = useStore()\n\n const { user } = toRefs(props)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const appConfig: ComputedRef = 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 pictureFile: Ref = ref(null)\n\n function deleteUserPicture() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.DELETE_PICTURE)\n }\n function updatePictureFile(event: Event & { target: HTMLInputElement }) {\n if (event.target.files) {\n pictureFile.value = event.target.files[0]\n }\n }\n function updateUserPicture() {\n if (pictureFile.value) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PICTURE, {\n picture: pictureFile.value,\n })\n }\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateUserPicture, [\"prevent\"])\n }, [\n _createElementVNode(\"input\", {\n type: \"file\",\n name: \"picture\",\n accept: \".png,.jpg,.gif\",\n onInput: updatePictureFile\n }, null, 32),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"span\", _hoisted_5, [\n _hoisted_6,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(fileSizeLimit)), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"button\", {\n type: \"submit\",\n disabled: !pictureFile.value\n }, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE_UPDATE')), 9, _hoisted_8),\n (_unref(user).picture)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"danger\",\n onClick: deleteUserPicture\n }, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE_REMOVE')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.BACK_TO_PROFILE')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPictureEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPictureEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPictureEdition.vue?vue&type=style&index=0&id=687e9604&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-687e9604\"]])\n\nexport default __exports__","export const timeZones = [\n 'Africa/Abidjan',\n 'Africa/Accra',\n 'Africa/Algiers',\n 'Africa/Bissau',\n 'Africa/Cairo',\n 'Africa/Casablanca',\n 'Africa/Ceuta',\n 'Africa/El_Aaiun',\n 'Africa/Johannesburg',\n 'Africa/Juba',\n 'Africa/Khartoum',\n 'Africa/Lagos',\n 'Africa/Maputo',\n 'Africa/Monrovia',\n 'Africa/Nairobi',\n 'Africa/Ndjamena',\n 'Africa/Sao_Tome',\n 'Africa/Tripoli',\n 'Africa/Tunis',\n 'Africa/Windhoek',\n 'America/Adak',\n 'America/Anchorage',\n 'America/Araguaina',\n 'America/Argentina/Buenos_Aires',\n 'America/Argentina/Catamarca',\n 'America/Argentina/Cordoba',\n 'America/Argentina/Jujuy',\n 'America/Argentina/La_Rioja',\n 'America/Argentina/Mendoza',\n 'America/Argentina/Rio_Gallegos',\n 'America/Argentina/Salta',\n 'America/Argentina/San_Juan',\n 'America/Argentina/San_Luis',\n 'America/Argentina/Tucuman',\n 'America/Argentina/Ushuaia',\n 'America/Asuncion',\n 'America/Atikokan',\n 'America/Bahia',\n 'America/Bahia_Banderas',\n 'America/Barbados',\n 'America/Belem',\n 'America/Belize',\n 'America/Blanc-Sablon',\n 'America/Boa_Vista',\n 'America/Bogota',\n 'America/Boise',\n 'America/Cambridge_Bay',\n 'America/Campo_Grande',\n 'America/Cancun',\n 'America/Caracas',\n 'America/Cayenne',\n 'America/Chicago',\n 'America/Chihuahua',\n 'America/Costa_Rica',\n 'America/Creston',\n 'America/Cuiaba',\n 'America/Curacao',\n 'America/Danmarkshavn',\n 'America/Dawson',\n 'America/Dawson_Creek',\n 'America/Denver',\n 'America/Detroit',\n 'America/Edmonton',\n 'America/Eirunepe',\n 'America/El_Salvador',\n 'America/Fortaleza',\n 'America/Fort_Nelson',\n 'America/Glace_Bay',\n 'America/Godthab',\n 'America/Goose_Bay',\n 'America/Grand_Turk',\n 'America/Guatemala',\n 'America/Guayaquil',\n 'America/Guyana',\n 'America/Halifax',\n 'America/Havana',\n 'America/Hermosillo',\n 'America/Indiana/Indianapolis',\n 'America/Indiana/Knox',\n 'America/Indiana/Marengo',\n 'America/Indiana/Petersburg',\n 'America/Indiana/Tell_City',\n 'America/Indiana/Vevay',\n 'America/Indiana/Vincennes',\n 'America/Indiana/Winamac',\n 'America/Inuvik',\n 'America/Iqaluit',\n 'America/Jamaica',\n 'America/Juneau',\n 'America/Kentucky/Louisville',\n 'America/Kentucky/Monticello',\n 'America/La_Paz',\n 'America/Lima',\n 'America/Los_Angeles',\n 'America/Maceio',\n 'America/Managua',\n 'America/Manaus',\n 'America/Martinique',\n 'America/Matamoros',\n 'America/Mazatlan',\n 'America/Menominee',\n 'America/Merida',\n 'America/Metlakatla',\n 'America/Mexico_City',\n 'America/Miquelon',\n 'America/Moncton',\n 'America/Monterrey',\n 'America/Montevideo',\n 'America/Nassau',\n 'America/New_York',\n 'America/Nipigon',\n 'America/Nome',\n 'America/Noronha',\n 'America/North_Dakota/Beulah',\n 'America/North_Dakota/Center',\n 'America/North_Dakota/New_Salem',\n 'America/Ojinaga',\n 'America/Panama',\n 'America/Pangnirtung',\n 'America/Paramaribo',\n 'America/Phoenix',\n 'America/Port-au-Prince',\n 'America/Port_of_Spain',\n 'America/Porto_Velho',\n 'America/Puerto_Rico',\n 'America/Punta_Arenas',\n 'America/Rainy_River',\n 'America/Rankin_Inlet',\n 'America/Recife',\n 'America/Regina',\n 'America/Resolute',\n 'America/Rio_Branco',\n 'America/Santarem',\n 'America/Santiago',\n 'America/Santo_Domingo',\n 'America/Sao_Paulo',\n 'America/Scoresbysund',\n 'America/Sitka',\n 'America/St_Johns',\n 'America/Swift_Current',\n 'America/Tegucigalpa',\n 'America/Thule',\n 'America/Thunder_Bay',\n 'America/Tijuana',\n 'America/Toronto',\n 'America/Vancouver',\n 'America/Whitehorse',\n 'America/Winnipeg',\n 'America/Yakutat',\n 'America/Yellowknife',\n 'Antarctica/Casey',\n 'Antarctica/Davis',\n 'Antarctica/DumontDUrville',\n 'Antarctica/Macquarie',\n 'Antarctica/Mawson',\n 'Antarctica/Palmer',\n 'Antarctica/Rothera',\n 'Antarctica/Syowa',\n 'Antarctica/Troll',\n 'Antarctica/Vostok',\n 'Asia/Almaty',\n 'Asia/Amman',\n 'Asia/Anadyr',\n 'Asia/Aqtau',\n 'Asia/Aqtobe',\n 'Asia/Ashgabat',\n 'Asia/Atyrau',\n 'Asia/Baghdad',\n 'Asia/Baku',\n 'Asia/Bangkok',\n 'Asia/Barnaul',\n 'Asia/Beirut',\n 'Asia/Bishkek',\n 'Asia/Brunei',\n 'Asia/Chita',\n 'Asia/Choibalsan',\n 'Asia/Colombo',\n 'Asia/Damascus',\n 'Asia/Dhaka',\n 'Asia/Dili',\n 'Asia/Dubai',\n 'Asia/Dushanbe',\n 'Asia/Famagusta',\n 'Asia/Gaza',\n 'Asia/Hebron',\n 'Asia/Ho_Chi_Minh',\n 'Asia/Hong_Kong',\n 'Asia/Hovd',\n 'Asia/Irkutsk',\n 'Asia/Jakarta',\n 'Asia/Jayapura',\n 'Asia/Jerusalem',\n 'Asia/Kabul',\n 'Asia/Kamchatka',\n 'Asia/Karachi',\n 'Asia/Kathmandu',\n 'Asia/Khandyga',\n 'Asia/Kolkata',\n 'Asia/Krasnoyarsk',\n 'Asia/Kuala_Lumpur',\n 'Asia/Kuching',\n 'Asia/Macau',\n 'Asia/Magadan',\n 'Asia/Makassar',\n 'Asia/Manila',\n 'Asia/Nicosia',\n 'Asia/Novokuznetsk',\n 'Asia/Novosibirsk',\n 'Asia/Omsk',\n 'Asia/Oral',\n 'Asia/Pontianak',\n 'Asia/Pyongyang',\n 'Asia/Qatar',\n 'Asia/Qostanay',\n 'Asia/Qyzylorda',\n 'Asia/Riyadh',\n 'Asia/Sakhalin',\n 'Asia/Samarkand',\n 'Asia/Seoul',\n 'Asia/Shanghai',\n 'Asia/Singapore',\n 'Asia/Srednekolymsk',\n 'Asia/Taipei',\n 'Asia/Tashkent',\n 'Asia/Tbilisi',\n 'Asia/Tehran',\n 'Asia/Thimphu',\n 'Asia/Tokyo',\n 'Asia/Tomsk',\n 'Asia/Ulaanbaatar',\n 'Asia/Urumqi',\n 'Asia/Ust-Nera',\n 'Asia/Vladivostok',\n 'Asia/Yakutsk',\n 'Asia/Yangon',\n 'Asia/Yekaterinburg',\n 'Asia/Yerevan',\n 'Atlantic/Azores',\n 'Atlantic/Bermuda',\n 'Atlantic/Canary',\n 'Atlantic/Cape_Verde',\n 'Atlantic/Faroe',\n 'Atlantic/Madeira',\n 'Atlantic/Reykjavik',\n 'Atlantic/South_Georgia',\n 'Atlantic/Stanley',\n 'Australia/Adelaide',\n 'Australia/Brisbane',\n 'Australia/Broken_Hill',\n 'Australia/Currie',\n 'Australia/Darwin',\n 'Australia/Eucla',\n 'Australia/Hobart',\n 'Australia/Lindeman',\n 'Australia/Lord_Howe',\n 'Australia/Melbourne',\n 'Australia/Perth',\n 'Australia/Sydney',\n 'Europe/Amsterdam',\n 'Europe/Andorra',\n 'Europe/Astrakhan',\n 'Europe/Athens',\n 'Europe/Belgrade',\n 'Europe/Berlin',\n 'Europe/Brussels',\n 'Europe/Bucharest',\n 'Europe/Budapest',\n 'Europe/Chisinau',\n 'Europe/Copenhagen',\n 'Europe/Dublin',\n 'Europe/Gibraltar',\n 'Europe/Helsinki',\n 'Europe/Istanbul',\n 'Europe/Kaliningrad',\n 'Europe/Kiev',\n 'Europe/Kirov',\n 'Europe/Lisbon',\n 'Europe/London',\n 'Europe/Luxembourg',\n 'Europe/Madrid',\n 'Europe/Malta',\n 'Europe/Minsk',\n 'Europe/Monaco',\n 'Europe/Moscow',\n 'Europe/Oslo',\n 'Europe/Paris',\n 'Europe/Prague',\n 'Europe/Riga',\n 'Europe/Rome',\n 'Europe/Samara',\n 'Europe/Saratov',\n 'Europe/Simferopol',\n 'Europe/Sofia',\n 'Europe/Stockholm',\n 'Europe/Tallinn',\n 'Europe/Tirane',\n 'Europe/Ulyanovsk',\n 'Europe/Uzhgorod',\n 'Europe/Vienna',\n 'Europe/Vilnius',\n 'Europe/Volgograd',\n 'Europe/Warsaw',\n 'Europe/Zaporozhye',\n 'Europe/Zurich',\n 'Indian/Chagos',\n 'Indian/Christmas',\n 'Indian/Cocos',\n 'Indian/Kerguelen',\n 'Indian/Mahe',\n 'Indian/Maldives',\n 'Indian/Mauritius',\n 'Indian/Reunion',\n 'Pacific/Apia',\n 'Pacific/Auckland',\n 'Pacific/Bougainville',\n 'Pacific/Chatham',\n 'Pacific/Chuuk',\n 'Pacific/Easter',\n 'Pacific/Efate',\n 'Pacific/Enderbury',\n 'Pacific/Fakaofo',\n 'Pacific/Fiji',\n 'Pacific/Funafuti',\n 'Pacific/Galapagos',\n 'Pacific/Gambier',\n 'Pacific/Guadalcanal',\n 'Pacific/Guam',\n 'Pacific/Honolulu',\n 'Pacific/Kiritimati',\n 'Pacific/Kosrae',\n 'Pacific/Kwajalein',\n 'Pacific/Majuro',\n 'Pacific/Marquesas',\n 'Pacific/Nauru',\n 'Pacific/Niue',\n 'Pacific/Norfolk',\n 'Pacific/Noumea',\n 'Pacific/Pago_Pago',\n 'Pacific/Palau',\n 'Pacific/Pitcairn',\n 'Pacific/Pohnpei',\n 'Pacific/Port_Moresby',\n 'Pacific/Rarotonga',\n 'Pacific/Tahiti',\n 'Pacific/Tarawa',\n 'Pacific/Tongatapu',\n 'Pacific/Wake',\n 'Pacific/Wallis',\n]\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, withKeys as _withKeys, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-47ea2903\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"tz-dropdown\" }\nconst _hoisted_2 = [\"value\", \"disabled\", \"onKeydown\"]\nconst _hoisted_3 = [\"onClick\", \"onMouseover\", \"autofocus\"]\n\nimport { Ref, ref, toRefs, watch, withDefaults } from 'vue'\n\n import { timeZones } from '@/utils/timezone'\n\n interface Props {\n input: string\n disabled?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'TimezoneDropdown',\n props: {\n input: null,\n disabled: { type: Boolean, default: false }\n },\n emits: ['updateTimezone'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { input: string, disabled: boolean }\n\n \n\n \n\n const { input, disabled } = toRefs(props)\n const timezone: Ref = ref(props.input)\n const isOpen: Ref = ref(false)\n const tzList: Ref = ref(null)\n const focusItemIndex: Ref = ref(0)\n\n function matchTimezone(t: string): RegExpMatchArray | null {\n return t.toLowerCase().match(timezone.value.toLowerCase())\n }\n function onMouseOver(index: number) {\n focusItemIndex.value = index\n }\n function onUpdateTimezone(value: string) {\n timezone.value = value\n isOpen.value = false\n emit('updateTimezone', value)\n }\n function onEnter(event: Event & { target: HTMLInputElement }) {\n event.preventDefault()\n if (tzList.value?.firstElementChild?.innerHTML) {\n onUpdateTimezone(tzList.value?.firstElementChild?.innerHTML)\n }\n }\n function openDropdown(event: Event & { target: HTMLInputElement }) {\n event.preventDefault()\n isOpen.value = true\n timezone.value = event.target.value.trim()\n }\n\n watch(\n () => props.input,\n (value) => {\n timezone.value = value\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"input\", {\n class: \"tz-dropdown-input\",\n id: \"timezone\",\n name: \"timezone\",\n value: timezone.value,\n disabled: _unref(disabled),\n required: \"\",\n onKeydown: [\n _cache[0] || (_cache[0] = _withKeys(($event: any) => (onUpdateTimezone(_unref(input))), [\"esc\"])),\n _withKeys(onEnter, [\"enter\"])\n ],\n onInput: openDropdown\n }, null, 40, _hoisted_2),\n (isOpen.value)\n ? (_openBlock(), _createElementBlock(\"ul\", {\n key: 0,\n class: \"tz-dropdown-list\",\n ref_key: \"tzList\",\n ref: tzList\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(timeZones).filter((t) => matchTimezone(t)), (tz, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: tz,\n class: _normalizeClass([\"tz-dropdown-item\", { focus: index === focusItemIndex.value }]),\n onClick: ($event: any) => (onUpdateTimezone(tz)),\n onMouseover: ($event: any) => (onMouseOver(index)),\n autofocus: index === focusItemIndex.value\n }, _toDisplayString(tz), 43, _hoisted_3))\n }), 128))\n ], 512))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./TimezoneDropdown.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./TimezoneDropdown.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./TimezoneDropdown.vue?vue&type=style&index=0&id=47ea2903&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-47ea2903\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, vModelSelect as _vModelSelect, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, createVNode as _createVNode, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-065d5e6c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-preferences-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = { class: \"form-items\" }\nconst _hoisted_5 = [\"disabled\"]\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = { class: \"form-items\" }\nconst _hoisted_8 = { class: \"form-items\" }\nconst _hoisted_9 = [\"disabled\"]\nconst _hoisted_10 = [\"value\"]\nconst _hoisted_11 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_12 = { class: \"checkboxes-label\" }\nconst _hoisted_13 = { class: \"checkboxes\" }\nconst _hoisted_14 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_15 = { class: \"checkbox-label\" }\nconst _hoisted_16 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_17 = { class: \"checkboxes-label\" }\nconst _hoisted_18 = { class: \"checkboxes\" }\nconst _hoisted_19 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_20 = { class: \"checkbox-label\" }\nconst _hoisted_21 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_22 = { class: \"checkboxes-label\" }\nconst _hoisted_23 = { class: \"checkboxes\" }\nconst _hoisted_24 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_25 = { class: \"checkbox-label\" }\nconst _hoisted_26 = { class: \"form-buttons\" }\nconst _hoisted_27 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport { ComputedRef, computed, reactive, onMounted, onUnmounted } from 'vue'\n\n import TimezoneDropdown from '@/components/User/ProfileEdition/TimezoneDropdown.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IUserPreferencesPayload, IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { availableDateFormatOptions } from '@/utils/dates'\n import { availableLanguages } from '@/utils/locales'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPreferencesEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const userForm: IUserPreferencesPayload = reactive({\n display_ascent: true,\n imperial_units: false,\n language: '',\n timezone: 'Europe/Paris',\n date_format: 'dd/MM/yyyy',\n weekm: false,\n })\n const weekStart = [\n {\n label: 'SUNDAY',\n value: false,\n },\n {\n label: 'MONDAY',\n value: true,\n },\n ]\n const imperialUnits = [\n {\n label: 'METRIC',\n value: false,\n },\n {\n label: 'IMPERIAL',\n value: true,\n },\n ]\n const ascentData = [\n {\n label: 'DISPLAYED',\n value: true,\n },\n {\n label: 'HIDDEN',\n value: false,\n },\n ]\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const dateFormatOptions = computed(() =>\n availableDateFormatOptions(\n new Date().toUTCString(),\n props.user.timezone,\n userForm.language\n )\n )\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function updateUserForm(user: IAuthUserProfile) {\n userForm.display_ascent = user.display_ascent\n userForm.imperial_units = user.imperial_units ? user.imperial_units : false\n userForm.language = user.language ? user.language : 'en'\n userForm.timezone = user.timezone ? user.timezone : 'Europe/Paris'\n userForm.date_format = user.date_format ? user.date_format : 'dd/MM/yyyy'\n userForm.weekm = user.weekm ? user.weekm : false\n }\n function updateProfile() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PREFERENCES, userForm)\n }\n function updateTZ(value: string) {\n userForm.timezone = value\n }\n function updateAscentDisplay(value: boolean) {\n userForm.display_ascent = value\n }\n function updateImperialUnit(value: boolean) {\n userForm.imperial_units = value\n }\n function updateWeekM(value: boolean) {\n userForm.weekm = value\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LANGUAGE')) + \" \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"language\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((userForm.language) = $event)),\n disabled: _unref(loading)\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(availableLanguages), (lang) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: lang.value,\n key: lang.value\n }, _toDisplayString(lang.label), 9, _hoisted_6))\n }), 128))\n ], 8, _hoisted_5), [\n [_vModelSelect, userForm.language]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.TIMEZONE')) + \" \", 1),\n _createVNode(TimezoneDropdown, {\n input: userForm.timezone,\n disabled: _unref(loading),\n onUpdateTimezone: updateTZ\n }, null, 8, [\"input\", \"disabled\"])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.DATE_FORMAT')) + \" \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"date_format\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((userForm.date_format) = $event)),\n disabled: _unref(loading)\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(dateFormatOptions), (dateFormat) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: dateFormat.value,\n key: dateFormat.value\n }, _toDisplayString(dateFormat.label), 9, _hoisted_10))\n }), 128))\n ], 8, _hoisted_9), [\n [_vModelSelect, userForm.date_format]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_DAY_OF_WEEK')), 1),\n _createElementVNode(\"div\", _hoisted_13, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(weekStart, (start) => {\n return _createElementVNode(\"label\", {\n key: start.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: start.label,\n name: start.label,\n checked: start.value === userForm.weekm,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateWeekM(start.value))\n }, null, 40, _hoisted_14),\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t(`user.PROFILE.${start.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"span\", _hoisted_17, _toDisplayString(_ctx.$t('user.PROFILE.UNITS.LABEL')), 1),\n _createElementVNode(\"div\", _hoisted_18, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(imperialUnits, (unit) => {\n return _createElementVNode(\"label\", {\n key: unit.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: unit.label,\n name: unit.label,\n checked: unit.value === userForm.imperial_units,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateImperialUnit(unit.value))\n }, null, 40, _hoisted_19),\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t(`user.PROFILE.UNITS.${unit.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"span\", _hoisted_22, _toDisplayString(_ctx.$t('user.PROFILE.ASCENT_DATA')), 1),\n _createElementVNode(\"div\", _hoisted_23, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(ascentData, (status) => {\n return _createElementVNode(\"label\", {\n key: status.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: status.label,\n name: status.label,\n checked: status.value === userForm.display_ascent,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateAscentDisplay(status.value))\n }, null, 40, _hoisted_24),\n _createElementVNode(\"span\", _hoisted_25, _toDisplayString(_ctx.$t(`common.${status.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_26, [\n _createElementVNode(\"button\", _hoisted_27, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/preferences')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPreferencesEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPreferencesEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPreferencesEdition.vue?vue&type=style&index=0&id=065d5e6c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-065d5e6c\"]])\n\nexport default __exports__","export const oauth2_scopes = [\n 'profile:read',\n 'profile:write',\n 'users:read',\n 'users:write',\n 'workouts:read',\n 'workouts:write',\n]\n\nexport const admin_oauth2_scopes = ['application:write']\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, vModelText as _vModelText, withDirectives as _withDirectives, resolveComponent as _resolveComponent, createVNode as _createVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0657ee77\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"new-oauth2-app\" }\nconst _hoisted_2 = { id: \"new-oauth2-title\" }\nconst _hoisted_3 = { id: \"apps-form\" }\nconst _hoisted_4 = [\"onSubmit\"]\nconst _hoisted_5 = { class: \"form-items\" }\nconst _hoisted_6 = { class: \"form-item\" }\nconst _hoisted_7 = { for: \"app-name\" }\nconst _hoisted_8 = { class: \"form-item\" }\nconst _hoisted_9 = { for: \"app-description\" }\nconst _hoisted_10 = { class: \"form-item\" }\nconst _hoisted_11 = { for: \"app-url\" }\nconst _hoisted_12 = { class: \"form-item\" }\nconst _hoisted_13 = { for: \"app-redirect-uri\" }\nconst _hoisted_14 = { class: \"form-item-scope\" }\nconst _hoisted_15 = { class: \"form-item-scope-label\" }\nconst _hoisted_16 = { class: \"scope-label\" }\nconst _hoisted_17 = [\"name\", \"checked\", \"onChange\"]\nconst _hoisted_18 = [\"innerHTML\"]\nconst _hoisted_19 = { class: \"form-buttons\" }\nconst _hoisted_20 = [\"disabled\"]\n\nimport { computed, reactive } from 'vue'\n\n import { OAUTH2_STORE } from '@/store/constants'\n import { IOAuth2ClientPayload } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { admin_oauth2_scopes, oauth2_scopes } from '@/utils/oauth'\n\n interface Props {\n authUser: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AddUserApp',\n props: {\n authUser: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n const appForm = reactive({\n client_name: '',\n client_uri: '',\n client_description: '',\n redirect_uri: '',\n })\n const scopes: string[] = reactive([])\n const filtered_scopes = computed(() =>\n getScopes(props.authUser, admin_oauth2_scopes, oauth2_scopes)\n )\n\n function createApp() {\n const payload: IOAuth2ClientPayload = {\n client_name: appForm.client_name,\n client_description: appForm.client_description,\n client_uri: appForm.client_uri,\n redirect_uris: [appForm.redirect_uri],\n scope: scopes.sort().join(' '),\n }\n store.dispatch(OAUTH2_STORE.ACTIONS.CREATE_CLIENT, payload)\n }\n function updateDescription(value: string) {\n appForm.client_description = value\n }\n function updateScopes(scope: string) {\n const index = scopes.indexOf(scope)\n if (index > -1) {\n scopes.splice(index, 1)\n } else {\n scopes.push(scope)\n }\n }\n function getScopes(\n authUser: IAuthUserProfile,\n admin_scopes: string[],\n scopes: string[]\n ) {\n const filtered_scopes = [...scopes]\n if (authUser.admin) {\n filtered_scopes.push(...admin_scopes)\n }\n return filtered_scopes.sort()\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"h1\", _hoisted_2, _toDisplayString(_ctx.$t('oauth2.ADD_A_NEW_APP')), 1),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(createApp, [\"prevent\"])\n }, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"label\", _hoisted_7, _toDisplayString(_ctx.$t('oauth2.APP.NAME')) + \"*\", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-name\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((appForm.client_name) = $event))\n }, null, 512), [\n [_vModelText, appForm.client_name]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"label\", _hoisted_9, _toDisplayString(_ctx.$t('oauth2.APP.DESCRIPTION')), 1),\n _createVNode(_component_CustomTextArea, {\n name: \"app-description\",\n charLimit: 200,\n input: appForm.description,\n onUpdateValue: updateDescription\n }, null, 8, [\"input\"])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"label\", _hoisted_11, _toDisplayString(_ctx.$t('oauth2.APP.URL')) + \"*\", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-url\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((appForm.client_uri) = $event))\n }, null, 512), [\n [_vModelText, appForm.client_uri]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"label\", _hoisted_13, _toDisplayString(_ctx.$t('oauth2.APP.REDIRECT_URL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-redirect-uri\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((appForm.redirect_uri) = $event))\n }, null, 512), [\n [_vModelText, appForm.redirect_uri]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", _hoisted_15, _toDisplayString(_ctx.$t('oauth2.APP.SCOPE.LABEL')) + \"* \", 1),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(filtered_scopes), (scope) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"form-item-scope-checkboxes\",\n key: scope\n }, [\n _createElementVNode(\"label\", _hoisted_16, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n name: scope,\n checked: scopes.includes(scope),\n onChange: ($event: any) => (updateScopes(scope))\n }, null, 40, _hoisted_17),\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]),\n _createElementVNode(\"p\", {\n class: \"scope-description\",\n innerHTML: _ctx.$t(`oauth2.APP.SCOPE.${scope}_DESCRIPTION`)\n }, null, 8, _hoisted_18)\n ]))\n }), 128))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n type: \"submit\",\n disabled: scopes.length === 0\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_20),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[3] || (_cache[3] = _withModifiers(() => _ctx.$router.push('/profile/apps'), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./AddUserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AddUserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AddUserApp.vue?vue&type=style&index=0&id=0657ee77&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0657ee77\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3b2fe9ed\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"authorize-oauth2-app\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { id: \"authorize-oauth2-title\" }\nconst _hoisted_4 = { class: \"oauth2-access description-list\" }\nconst _hoisted_5 = { class: \"client-scope\" }\nconst _hoisted_6 = [\"innerHTML\"]\nconst _hoisted_7 = { class: \"authorize-oauth2-buttons\" }\nconst _hoisted_8 = { key: 1 }\nconst _hoisted_9 = { class: \"no-app\" }\n\nimport { computed, ComputedRef, onBeforeMount } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IOAuth2Client } from '@/types/oauth'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AuthorizeUserApp',\n setup(__props) {\n\n const route = useRoute()\n const store = useStore()\n\n const client: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENT]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => loadApp())\n\n function loadApp() {\n if (route.query.client_id && typeof route.query.client_id === 'string') {\n store.dispatch(\n OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_CLIENT_ID,\n route.query.client_id\n )\n }\n }\n\n function authorizeApp() {\n store.dispatch(OAUTH2_STORE.ACTIONS.AUTHORIZE_CLIENT, {\n client_id: `${route.query.client_id}`,\n redirect_uri: `${route.query.redirect_uri}`,\n response_type: `${route.query.response_type}`,\n scope: `${route.query.scope}`,\n state: `${route.query.state ? route.query.state : ''}`,\n code_challenge: `${\n route.query.code_challenge ? route.query.code_challenge : ''\n }`,\n code_challenge_method: `${\n route.query.code_challenge_method\n ? route.query.code_challenge_method\n : ''\n }`,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(client).client_id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"h1\", _hoisted_3, [\n _createVNode(_component_i18n_t, { keypath: \"oauth2.AUTHORIZE_APP\" }, {\n default: _withCtx(() => [\n _createVNode(_component_router_link, {\n to: { name: 'UserApp', params: { id: _unref(client).id } }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(client).name), 1)\n ]),\n _: 1\n }, 8, [\"to\"])\n ]),\n _: 1\n })\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t('oauth2.APP_REQUESTING_ACCESS')), 1),\n _createElementVNode(\"dl\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(client).scope.split(' '), (scope) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: scope }, [\n _createElementVNode(\"dt\", _hoisted_5, [\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]),\n _createElementVNode(\"dd\", {\n innerHTML: _ctx.$t(`oauth2.APP.SCOPE.${scope}_DESCRIPTION`)\n }, null, 8, _hoisted_6)\n ], 64))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: authorizeApp\n }, _toDisplayString(_ctx.$t('buttons.AUTHORIZE')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"p\", _hoisted_9, _toDisplayString(_ctx.$t('oauth2.NO_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n ]))\n}\n}\n\n})","import script from \"./AuthorizeUserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AuthorizeUserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AuthorizeUserApp.vue?vue&type=style&index=0&id=3b2fe9ed&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3b2fe9ed\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"oauth2-apps\" }\n\nimport { onUnmounted, toRefs } from 'vue'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const { user } = toRefs(props)\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(OAUTH2_STORE.MUTATIONS.SET_CLIENTS, [])\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_router_view, { authUser: _unref(user) }, null, 8, [\"authUser\"])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3a844fa2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"oauth2-app\",\n class: \"description-list\"\n}\nconst _hoisted_2 = { key: 1 }\nconst _hoisted_3 = {\n key: 0,\n class: \"info-box success-message\"\n}\nconst _hoisted_4 = [\"title\"]\nconst _hoisted_5 = { key: 0 }\nconst _hoisted_6 = {\n key: 1,\n class: \"app-secret\"\n}\nconst _hoisted_7 = [\"title\"]\nconst _hoisted_8 = { class: \"client-scopes\" }\nconst _hoisted_9 = { class: \"app-buttons\" }\nconst _hoisted_10 = { key: 2 }\nconst _hoisted_11 = { class: \"no-app\" }\n\nimport {\n ComputedRef,\n Ref,\n capitalize,\n computed,\n onBeforeMount,\n toRefs,\n ref,\n onUnmounted,\n withDefaults,\n watch,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IOAuth2Client } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n authUser: IAuthUserProfile\n afterCreation?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserApp',\n props: {\n authUser: null,\n afterCreation: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, afterCreation: boolean }\n\n \n const route = useRoute()\n const store = useStore()\n\n const { afterCreation, authUser } = toRefs(props)\n const client: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENT]\n )\n const revocationSuccessful: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.REVOCATION_SUCCESSFUL]\n )\n const displayModal: Ref = ref(false)\n const messageToDisplay: Ref = ref(null)\n const idCopied: Ref = ref(false)\n const secretCopied: Ref = ref(false)\n const clipboardSupport: Ref = ref(false)\n\n onBeforeMount(() => {\n loadClient()\n if (navigator.clipboard) {\n clipboardSupport.value = true\n }\n })\n\n function loadClient() {\n // after creation, client is already in store\n if (\n !afterCreation.value &&\n route.params.id &&\n typeof route.params.id === 'string'\n ) {\n store.dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_ID, +route.params.id)\n }\n }\n function updateMessageToDisplay(forDelete: boolean) {\n messageToDisplay.value = forDelete\n ? 'oauth2.APP_DELETION_CONFIRMATION'\n : 'oauth2.TOKENS_REVOCATION_CONFIRMATION'\n updateDisplayModal(true)\n }\n function updateDisplayModal(value: boolean) {\n displayModal.value = value\n if (!value) {\n messageToDisplay.value = null\n }\n }\n function confirmAction(clientId: number) {\n if (messageToDisplay.value === 'oauth2.APP_DELETION_CONFIRMATION') {\n store.dispatch(OAUTH2_STORE.ACTIONS.DELETE_CLIENT, clientId)\n } else {\n store.dispatch(OAUTH2_STORE.ACTIONS.REVOKE_ALL_TOKENS, clientId)\n }\n }\n function copyIdToClipboard() {\n navigator.clipboard.writeText(client.value.client_id)\n idCopied.value = true\n secretCopied.value = false\n setTimeout(() => {\n idCopied.value = false\n }, 3000)\n }\n function copySecretToClipboard() {\n if (client.value.client_secret) {\n navigator.clipboard.writeText(client.value.client_secret)\n secretCopied.value = true\n idCopied.value = false\n setTimeout(() => {\n secretCopied.value = false\n }, 3000)\n }\n }\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(OAUTH2_STORE.MUTATIONS.EMPTY_CLIENT)\n store.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, false)\n })\n\n watch(\n () => revocationSuccessful.value,\n (newValue) => {\n if (newValue) {\n updateDisplayModal(false)\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t(messageToDisplay.value),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (confirmAction(_unref(client).id))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(client) && _unref(client).client_id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (_unref(afterCreation) || _unref(revocationSuccessful))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\n _unref(afterCreation)\n ? 'oauth2.APP_CREATED_SUCCESSFULLY'\n : 'oauth2.TOKENS_REVOKED'\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.CLIENT_ID')) + \":\", 1),\n _createElementVNode(\"dd\", null, [\n _createTextVNode(_toDisplayString(_unref(client).client_id) + \" \", 1),\n (_unref(afterCreation) && clipboardSupport.value)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: _normalizeClass(`fa fa-${idCopied.value ? 'check' : 'copy'}`),\n \"aria-hidden\": \"true\",\n title: _ctx.$t('oauth2.COPY_TO_CLIPBOARD'),\n onClick: copyIdToClipboard\n }, null, 10, _hoisted_4))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(afterCreation) && _unref(client).client_secret)\n ? (_openBlock(), _createElementBlock(\"dt\", _hoisted_5, _toDisplayString(_ctx.$t('oauth2.APP.CLIENT_SECRET')) + \": \", 1))\n : _createCommentVNode(\"\", true),\n (_unref(afterCreation) && _unref(client).client_secret)\n ? (_openBlock(), _createElementBlock(\"dd\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_unref(client).client_secret) + \" \", 1),\n (clipboardSupport.value)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: _normalizeClass(`fa fa-${secretCopied.value ? 'check' : 'copy'}`),\n \"aria-hidden\": \"true\",\n title: _ctx.$t('oauth2.COPY_TO_CLIPBOARD'),\n onClick: copySecretToClipboard\n }, null, 10, _hoisted_7))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"dt\", null, _toDisplayString(capitalize(_ctx.$t('oauth2.APP.ISSUE_AT'))) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(formatDate)(\n _unref(client).issued_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.DESCRIPTION')) + \":\", 1),\n _createElementVNode(\"dd\", {\n class: _normalizeClass({ 'no-description': !_unref(client).client_description })\n }, _toDisplayString(_unref(client).client_description\n ? _unref(client).client_description\n : _ctx.$t('oauth2.NO_DESCRIPTION')), 3),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.URL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).website), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.REDIRECT_URL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).redirect_uris.length > 0 ? _unref(client).redirect_uris[0] : ''), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.SCOPE.LABEL')) + \":\", 1),\n _createElementVNode(\"dd\", _hoisted_8, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(client).scope.split(' '), (scope) => {\n return (_openBlock(), _createElementBlock(\"span\", {\n class: \"client-scope\",\n key: scope\n }, [\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]))\n }), 128))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (updateMessageToDisplay(false)))\n }, _toDisplayString(_ctx.$t('oauth2.REVOKE_ALL_TOKENS')), 1),\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateMessageToDisplay(true)))\n }, _toDisplayString(_ctx.$t('oauth2.DELETE_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [\n _createElementVNode(\"p\", _hoisted_11, _toDisplayString(_ctx.$t('oauth2.NO_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n ]))\n}\n}\n\n})","import script from \"./UserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserApp.vue?vue&type=style&index=0&id=3a844fa2&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3a844fa2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-efa45ea0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"oauth2-apps-list\" }\nconst _hoisted_2 = { class: \"apps-list\" }\nconst _hoisted_3 = { key: 0 }\nconst _hoisted_4 = { class: \"app-issued-at\" }\nconst _hoisted_5 = {\n key: 1,\n class: \"no-apps\"\n}\nconst _hoisted_6 = { class: \"app-list-buttons\" }\n\nimport { ComputedRef, computed, onBeforeMount, toRefs, watch } from 'vue'\n import { LocationQuery, useRoute } from 'vue-router'\n\n import Pagination from '@/components/Common/Pagination.vue'\n import { OAUTH2_STORE } from '@/store/constants'\n import { IPagination } from '@/types/api'\n import { IOAuth2Client, IOauth2ClientsPayload } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { defaultPage, getNumberQueryValue } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n authUser: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAppsList',\n props: {\n authUser: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n const route = useRoute()\n\n const { authUser } = toRefs(props)\n const clients: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENTS]\n )\n\n const pagination: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENTS_PAGINATION]\n )\n let query: IOauth2ClientsPayload = getClientsQuery(route.query)\n\n onBeforeMount(() => {\n loadClients(query)\n })\n\n function getClientsQuery(newQuery: LocationQuery): IOauth2ClientsPayload {\n const clientsQuery: IOauth2ClientsPayload = {}\n if (newQuery.page) {\n clientsQuery.page = getNumberQueryValue(newQuery.page, defaultPage)\n }\n return clientsQuery\n }\n function loadClients(payload: IOauth2ClientsPayload) {\n store.dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENTS, payload)\n }\n\n watch(\n () => route.query,\n async (newQuery) => {\n query = getClientsQuery(newQuery)\n loadClients(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"p\", _hoisted_2, _toDisplayString(_ctx.$t('oauth2.APPS_LIST')), 1),\n (_unref(clients).length > 0)\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(clients), (client) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: client.client_id\n }, [\n _createVNode(_component_router_link, {\n to: { name: 'UserApp', params: { id: client.id } }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(client.name), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('oauth2.APP.ISSUE_AT')) + \" \" + _toDisplayString(_unref(formatDate)(\n client.issued_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1)\n ]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('oauth2.NO_APPS')), 1)),\n (_unref(clients).length > 0)\n ? (_openBlock(), _createBlock(Pagination, {\n key: 2,\n pagination: _unref(pagination),\n path: \"/profile/apps\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"button\", {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/apps/new')))\n }, _toDisplayString(_ctx.$t('oauth2.NEW_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserAppsList.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAppsList.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAppsList.vue?vue&type=style&index=0&id=efa45ea0&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-efa45ea0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, withModifiers as _withModifiers, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createBlock as _createBlock, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74e52489\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-sport-preferences\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"responsive-table\"\n}\nconst _hoisted_3 = { class: \"mobile-display\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"profile-buttons mobile-display\"\n}\nconst _hoisted_5 = {\n key: 1,\n class: \"profile-buttons\"\n}\nconst _hoisted_6 = { class: \"text-left\" }\nconst _hoisted_7 = { key: 0 }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = [\"value\"]\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"disabled-message\"\n}\nconst _hoisted_12 = {\n key: 1,\n class: \"fa fa-refresh fa-spin fa-fw\"\n}\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"cell-heading\" }\nconst _hoisted_15 = [\"checked\"]\nconst _hoisted_16 = { class: \"cell-heading\" }\nconst _hoisted_17 = [\"value\"]\nconst _hoisted_18 = { key: 1 }\nconst _hoisted_19 = {\n key: 0,\n class: \"action-buttons\"\n}\nconst _hoisted_20 = { class: \"cell-heading\" }\nconst _hoisted_21 = [\"onClick\"]\nconst _hoisted_22 = {\n key: 1,\n class: \"edition-buttons\"\n}\nconst _hoisted_23 = [\"disabled\"]\nconst _hoisted_24 = [\"disabled\", \"onClick\"]\nconst _hoisted_25 = [\"disabled\"]\nconst _hoisted_26 = {\n key: 0,\n class: \"profile-buttons\"\n}\nconst _hoisted_27 = {\n key: 1,\n class: \"profile-buttons\"\n}\n\nimport { ComputedRef, computed, inject, reactive, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { AUTH_USER_STORE, ROOT_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IUserProfile, IUserSportPreferencesPayload } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n user: IUserProfile\n isEdition: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserSportPreferences',\n props: {\n user: null,\n isEdition: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n isEdition: boolean\n }\n\n \n\n const store = useStore()\n const { t } = useI18n()\n\n const { isEdition, user } = toRefs(props)\n const defaultColor = '#838383'\n const sportColors: Record | undefined = inject('sportColors')\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(sports.value, t, 'is_active', user.value.sports_list)\n )\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const sportPayload: IUserSportPreferencesPayload = reactive({\n sport_id: 0,\n color: null,\n is_active: true,\n stopped_speed_threshold: 1,\n })\n\n function updateSportInEdition(sport: ISport | null) {\n if (sport !== null) {\n sportPayload.sport_id = sport.id\n sportPayload.color = sport.color\n ? sport.color\n : sportColors\n ? sportColors[sport.label]\n : defaultColor\n sportPayload.is_active = sport.is_active_for_user\n sportPayload.stopped_speed_threshold = sport.stopped_speed_threshold\n } else {\n resetSportPayload()\n }\n }\n function isSportInEdition(sportId: number) {\n return sportPayload.sport_id === sportId\n }\n function updateColor(event: Event & { target: HTMLInputElement }) {\n sportPayload.color = event.target.value\n }\n function updateThreshold(event: Event & { target: HTMLInputElement }) {\n sportPayload.stopped_speed_threshold = parseFloat(event.target.value)\n }\n function updateIsActive(event: Event & { target: HTMLInputElement }) {\n sportPayload.is_active = event.target.checked\n }\n function resetSportPayload() {\n sportPayload.sport_id = 0\n sportPayload.color = null\n sportPayload.is_active = true\n sportPayload.stopped_speed_threshold = 1\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n }\n function updateSport(event: Event) {\n event.preventDefault()\n store.dispatch(\n AUTH_USER_STORE.ACTIONS.UPDATE_USER_SPORT_PREFERENCES,\n sportPayload\n )\n }\n function resetSport(event: Event, sportId: number) {\n event.preventDefault()\n store.dispatch(\n AUTH_USER_STORE.ACTIONS.RESET_USER_SPORT_PREFERENCES,\n sportId\n )\n }\n\n watch(\n () => loading.value,\n (newIsLoading) => {\n if (!newIsLoading && !errorMessages.value) {\n resetSportPayload()\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/sports')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/profile/edit/sports')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_SPORTS_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]),\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.COLOR')), 1),\n _createElementVNode(\"th\", _hoisted_6, _toDisplayString(_ctx.$t('workouts.SPORT', 0)), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('workouts.WORKOUT', 0)), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.IS_ACTIVE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD')), 1),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"th\", _hoisted_7, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.ACTION')), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: sport.id\n }, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.COLOR')), 1),\n (isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"sport-color\",\n type: \"color\",\n value: sportPayload.color,\n onInput: updateColor\n }, null, 40, _hoisted_9))\n : (_openBlock(), _createBlock(_component_SportImage, {\n key: 1,\n title: sport.translatedLabel,\n \"sport-label\": sport.label,\n color: sport.color ? sport.color : _unref(sportColors)[sport.label]\n }, null, 8, [\"title\", \"sport-label\", \"color\"]))\n ]),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"sport-label\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.LABEL')), 1),\n _createTextVNode(\" \" + _toDisplayString(sport.translatedLabel) + \" \", 1),\n (!sport.is_active)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, \" (\" + _toDisplayString(_ctx.$t('user.PROFILE.SPORT.DISABLED_BY_ADMIN')) + \") \", 1))\n : _createCommentVNode(\"\", true),\n (_unref(loading) && isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"i\", _hoisted_12))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages) && sportPayload.sport_id === sport.id)\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 2,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('workouts.WORKOUT', 0)), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${\n _unref(user).sports_list.includes(sport.id) ? '-check' : ''\n }`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.IS_ACTIVE')), 1),\n (isSportInEdition(sport.id) && sport.is_active)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n type: \"checkbox\",\n checked: sport.is_active_for_user,\n onChange: updateIsActive\n }, null, 40, _hoisted_15))\n : (_openBlock(), _createElementBlock(\"i\", {\n key: 1,\n class: _normalizeClass(`fa fa${sport.is_active_for_user ? '-check' : ''}`),\n \"aria-hidden\": \"true\"\n }, null, 2))\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD')), 1),\n (isSportInEdition(sport.id) && sport.is_active)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"threshold-input\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: sportPayload.stopped_speed_threshold,\n onInput: updateThreshold\n }, null, 40, _hoisted_17))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_18, _toDisplayString(sport.stopped_speed_threshold), 1))\n ], 2),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"td\", _hoisted_19, [\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.ACTION')), 1),\n (sportPayload.sport_id === 0)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n onClick: ($event: any) => (updateSportInEdition(sport))\n }, _toDisplayString(_ctx.$t('buttons.EDIT')), 9, _hoisted_21))\n : _createCommentVNode(\"\", true),\n (isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_22, [\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: updateSport\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_23),\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: (e) => resetSport(e, sport.id)\n }, _toDisplayString(_ctx.$t('buttons.RESET')), 9, _hoisted_24),\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateSportInEdition(null)))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_25)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n }), 128))\n ])\n ]),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_26, [\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/sports')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_27, [\n _createElementVNode(\"button\", {\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.$router.push('/profile/edit/sports')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_SPORTS_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./UserSportPreferences.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserSportPreferences.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserSportPreferences.vue?vue&type=style&index=0&id=74e52489&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74e52489\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74257266\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"about-text\" }\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-book fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = {\n href: \"https://samr1.github.io/FitTrackee/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-github fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_6 = {\n href: \"https://github.com/SamR1/FitTrackee\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-balance-scale fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://choosealicense.com/licenses/agpl-3.0/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}, \" AGPLv3 \", -1))\nconst _hoisted_9 = { key: 0 }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-envelope-o fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = [\"href\"]\n\nimport { ComputedRef, computed, capitalize } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'About',\n setup(__props) {\n\n const store = useStore()\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"p\", {\n class: \"error-message\",\n innerHTML: _ctx.$t('about.FITTRACKEE_DESCRIPTION')\n }, null, 8, _hoisted_2),\n _createElementVNode(\"p\", null, [\n _hoisted_3,\n _createElementVNode(\"a\", _hoisted_4, _toDisplayString(capitalize(_ctx.$t('common.DOCUMENTATION'))), 1)\n ]),\n _createElementVNode(\"p\", null, [\n _hoisted_5,\n _createElementVNode(\"a\", _hoisted_6, _toDisplayString(_ctx.$t('about.SOURCE_CODE')), 1)\n ]),\n _createElementVNode(\"p\", null, [\n _hoisted_7,\n _createVNode(_component_i18n_t, { keypath: \"about.FITTRACKEE_LICENSE\" }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n })\n ]),\n (_unref(appConfig).admin_contact)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _hoisted_10,\n _createElementVNode(\"a\", {\n href: `mailto:${_unref(appConfig).admin_contact}`\n }, _toDisplayString(_ctx.$t('about.CONTACT_ADMIN')), 9, _hoisted_11)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./About.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./About.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./About.vue?vue&type=style&index=0&id=74257266&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74257266\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./BikePic.vue?vue&type=template&id=795f7f5f&scoped=true\"\nconst script = {}\n\nimport \"./BikePic.vue?vue&type=style&index=0&id=795f7f5f&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-795f7f5f\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-bffb50d0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"about\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = { class: \"container-sub\" }\nconst _hoisted_4 = { class: \"container-sub about-details\" }\n\nimport About from '@/components/About.vue'\n import BikePic from '@/components/BikePic.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'AboutView',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(BikePic)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(About)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./AboutView.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./AboutView.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./AboutView.vue?vue&type=style&index=0&id=bffb50d0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-bffb50d0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-96abcc38\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"timeline-workout\" }\nconst _hoisted_2 = { class: \"box\" }\nconst _hoisted_3 = { class: \"workout-user-date\" }\nconst _hoisted_4 = { class: \"workout-user\" }\nconst _hoisted_5 = [\"title\"]\nconst _hoisted_6 = { key: 0 }\nconst _hoisted_7 = {\n key: 1,\n class: \"no-map\"\n}\nconst _hoisted_8 = { class: \"img\" }\nconst _hoisted_9 = { class: \"data\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-clock-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { key: 0 }\nconst _hoisted_12 = { class: \"data\" }\nconst _hoisted_13 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-road\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_14 = {\n key: 0,\n class: \"data elevation\"\n}\nconst _hoisted_15 = [\"alt\"]\nconst _hoisted_16 = { class: \"data-values\" }\nconst _hoisted_17 = {\n key: 1,\n class: \"data altitude\"\n}\nconst _hoisted_18 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-location-arrow\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_19 = { class: \"data-values\" }\n\nimport { Locale, formatDistance } from 'date-fns'\n import { ComputedRef, computed, toRefs, withDefaults } from 'vue'\n\n import StaticMap from '@/components/Common/StaticMap.vue'\n import UserPicture from '@/components/User/UserPicture.vue'\n import { ROOT_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkout } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n user: IUserProfile\n useImperialUnits: boolean\n workout?: IWorkout\n sport?: ISport\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutCard',\n props: {\n user: null,\n useImperialUnits: { type: Boolean },\n workout: { default: () => ({} as IWorkout) },\n sport: { default: () => ({} as ISport) }\n },\n setup(__props: any) {\n\nconst props = __props as { user: IUserProfile, useImperialUnits: boolean, workout: IWorkout, sport: ISport }\n\n \n\n const store = useStore()\n\n const { user, workout, sport, useImperialUnits } = toRefs(props)\n const locale: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LOCALE]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n (_unref(user).username)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"workout-user-name\",\n to: {\n name: 'User',\n params: { username: _unref(user).username },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(user).username), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"workout-title\",\n to: {\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(workout).title), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true),\n (_unref(workout).workout_date && _unref(user))\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"workout-date\",\n title: \n _unref(formatDate)(_unref(workout).workout_date, _unref(user).timezone, _unref(user).date_format)\n \n }, _toDisplayString(_unref(formatDistance)(new Date(_unref(workout).workout_date), new Date(), {\n addSuffix: true,\n locale: _unref(locale),\n })), 9, _hoisted_5))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-map\", { 'no-cursor': !_unref(workout) }]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _unref(workout).id\n ? _ctx.$router.push({\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n })\n : null\n ))\n }, [\n (_unref(workout))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n (_unref(workout).with_gpx)\n ? (_openBlock(), _createBlock(StaticMap, {\n key: 0,\n workout: _unref(workout)\n }, null, 8, [\"workout\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.NO_MAP')), 1))\n ]))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-data\", { 'without-gpx': _unref(workout) && !_unref(workout).with_gpx }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (\n _unref(workout).id\n ? _ctx.$router.push({\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n })\n : null\n ))\n }, [\n _createElementVNode(\"div\", _hoisted_8, [\n (_unref(sport).label)\n ? (_openBlock(), _createBlock(_component_SportImage, {\n key: 0,\n \"sport-label\": _unref(sport).label,\n color: _unref(sport).color\n }, null, 8, [\"sport-label\", \"color\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n (_unref(workout))\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, _toDisplayString(_unref(workout).moving), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _hoisted_13,\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).distance,\n digits: 3,\n unitFrom: \"km\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(workout) && _unref(workout).with_gpx)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n _createElementVNode(\"img\", {\n class: \"mountains\",\n src: \"/img/workouts/mountains.svg\",\n alt: _ctx.$t('workouts.ELEVATION')\n }, null, 8, _hoisted_15),\n _createElementVNode(\"div\", _hoisted_16, [\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).min_alt,\n unitFrom: \"m\",\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\"/ \"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 1,\n distance: _unref(workout).max_alt,\n unitFrom: \"m\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(workout) && _unref(workout).with_gpx)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _hoisted_18,\n _createElementVNode(\"div\", _hoisted_19, [\n _createTextVNode(\" +\"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).ascent,\n unitFrom: \"m\",\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\"/- \"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 1,\n distance: _unref(workout).descent,\n unitFrom: \"m\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./WorkoutCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutCard.vue?vue&type=style&index=0&id=96abcc38&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-96abcc38\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-35567bf2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"timeline\" }\nconst _hoisted_2 = { class: \"section-title\" }\nconst _hoisted_3 = { key: 0 }\nconst _hoisted_4 = { key: 1 }\nconst _hoisted_5 = {\n key: 1,\n class: \"more-workouts\"\n}\n\nimport { ComputedRef, computed, ref, onBeforeMount, toRefs } from 'vue'\n\n import WorkoutCard from '@/components/Workout/WorkoutCard.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkout } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n sports: ISport[]\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Timeline',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IUserProfile\n }\n\n \n\n const store = useStore()\n\n const { sports, user } = toRefs(props)\n const page = ref(1)\n const per_page = 5\n const initWorkoutsCount =\n props.user.nb_workouts >= per_page ? per_page : props.user.nb_workouts\n onBeforeMount(() => loadWorkouts())\n const workouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.TIMELINE_WORKOUTS]\n )\n const moreWorkoutsExist: ComputedRef = computed(() =>\n workouts.value.length > 0\n ? workouts.value[workouts.value.length - 1].previous_workout !== null\n : false\n )\n\n function loadWorkouts() {\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_TIMELINE_WORKOUTS, {\n page: page.value,\n per_page,\n ...defaultOrder,\n })\n }\n function loadMoreWorkouts() {\n page.value += 1\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_MORE_TIMELINE_WORKOUTS, {\n page: page.value,\n per_page,\n ...defaultOrder,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('workouts.LATEST_WORKOUTS')), 1),\n (_unref(user).nb_workouts > 0 && _unref(workouts).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList([...Array(_unref(initWorkoutsCount)).keys()], (index) => {\n return (_openBlock(), _createBlock(WorkoutCard, {\n user: _unref(user),\n useImperialUnits: _unref(user).imperial_units,\n key: index\n }, null, 8, [\"user\", \"useImperialUnits\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout) => {\n return (_openBlock(), _createBlock(WorkoutCard, {\n workout: workout,\n sport: \n _unref(workouts).length > 0\n ? _unref(sports).filter((s) => s.id === workout.sport_id)[0]\n : null\n ,\n user: _unref(user),\n useImperialUnits: _unref(user).imperial_units,\n key: workout.id\n }, null, 8, [\"workout\", \"sport\", \"user\", \"useImperialUnits\"]))\n }), 128)),\n (_unref(workouts).length === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true),\n (_unref(moreWorkoutsExist))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"button\", { onClick: loadMoreWorkouts }, _toDisplayString(_ctx.$t('workouts.LOAD_MORE_WORKOUT')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n}\n}\n\n})","import script from \"./Timeline.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Timeline.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Timeline.vue?vue&type=style&index=0&id=35567bf2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-35567bf2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = [\"title\"]\n\nimport { toRefs } from 'vue'\n\n import { IWorkout } from '@/types/workouts'\n interface Props {\n displayHARecord: boolean\n workout: IWorkout\n sportLabel: string\n sportColor: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkout',\n props: {\n displayHARecord: { type: Boolean },\n workout: null,\n sportLabel: null,\n sportColor: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n displayHARecord: boolean\n workout: IWorkout\n sportLabel: string\n sportColor: string | null\n }\n\n \n\n const { displayHARecord, workout, sportLabel, sportColor } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"calendar-workout\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _ctx.$router.push({ name: 'Workout', params: { workoutId: _unref(workout).id } })\n ))\n }, [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(sportLabel),\n title: _unref(workout).title,\n color: _unref(sportColor)\n }, null, 8, [\"sport-label\", \"title\", \"color\"]),\n _createElementVNode(\"sup\", null, [\n (_unref(workout).records.length > 0)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-trophy custom-fa-small\",\n \"aria-hidden\": \"true\",\n title: \n _unref(workout).records\n .filter((record) =>\n _unref(displayHARecord) ? true : record.record_type !== 'HA'\n )\n .map((record) => ` ${_ctx.$t(`workouts.RECORD_${record.record_type}`)}`)\n \n }, null, 8, _hoisted_1))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkout.vue?vue&type=style&index=0&id=331e1c8b&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"donut-chart\" }\nconst _hoisted_2 = {\n height: \"34\",\n width: \"34\",\n viewBox: \"0 0 34 34\"\n}\nconst _hoisted_3 = [\"stroke\", \"stroke-dashoffset\", \"transform\"]\n\nimport { toRefs } from 'vue'\n\n interface Props {\n colors: Record\n datasets: Record>\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'DonutChart',\n props: {\n colors: null,\n datasets: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n colors: Record\n datasets: Record>\n }\n\n \n\n const { colors, datasets } = toRefs(props)\n let angleOffset = -90\n const cx = 16\n const cy = 16\n const radius = 14\n const circumference = 2 * Math.PI * radius\n\n function calculateStrokeDashOffset(\n percentage: number,\n circumference: number\n ): number {\n return circumference - percentage * circumference\n }\n function returnCircleTransformValue(\n index: number,\n percentage: number\n ): string {\n const rotation = `rotate(${angleOffset}, ${cx}, ${cy})`\n angleOffset = percentage * 360 + angleOffset\n return rotation\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(Object.entries(_unref(datasets)), (data, index) => {\n return (_openBlock(), _createElementBlock(\"g\", { key: index }, [\n _createElementVNode(\"circle\", {\n cx: cx,\n cy: cy,\n r: radius,\n fill: \"transparent\",\n stroke: _unref(colors)[+data[0]],\n \"stroke-dashoffset\": \n calculateStrokeDashOffset(data[1].percentage, circumference)\n ,\n \"stroke-dasharray\": circumference,\n \"stroke-width\": \"3\",\n \"stroke-opacity\": \"0.8\",\n transform: returnCircleTransformValue(index, data[1].percentage)\n }, null, 8, _hoisted_3)\n ]))\n }), 128))\n ]))\n ]))\n}\n}\n\n})","import script from \"./DonutChart.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./DonutChart.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-52d4310a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"calendar-workouts-chart\" }\nconst _hoisted_2 = { class: \"workouts-count\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workouts-pane\"\n}\nconst _hoisted_4 = { class: \"more-workouts\" }\n\nimport { ref, toRefs } from 'vue'\n\n import CalendarWorkout from '@/components/Dashboard/UserCalendar/CalendarWorkout.vue'\n import DonutChart from '@/components/Dashboard/UserCalendar/DonutChart.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getSportColor, getSportLabel } from '@/utils/sports'\n\n interface Props {\n colors: Record\n datasets: Record>\n sports: ISport[]\n workouts: IWorkout[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkoutsChart',\n props: {\n colors: null,\n datasets: null,\n sports: null,\n workouts: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n colors: Record\n datasets: Record>\n sports: ISport[]\n workouts: IWorkout[]\n }\n\n \n\n const { colors, datasets, sports, workouts } = toRefs(props)\n const isHidden = ref(true)\n\n function togglePane(event: Event & { target: HTMLElement }) {\n event.stopPropagation()\n isHidden.value = !isHidden.value\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _directive_click_outside = _resolveDirective(\"click-outside\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"workouts-chart\",\n onClick: togglePane\n }, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_unref(workouts).length), 1),\n _createVNode(DonutChart, {\n datasets: _unref(datasets),\n colors: _unref(colors)\n }, null, 8, [\"datasets\", \"colors\"])\n ]),\n (!isHidden.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"i\", {\n class: \"fa fa-times calendar-more\",\n \"aria-hidden\": \"true\",\n onClick: togglePane\n }),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout, index) => {\n return (_openBlock(), _createBlock(CalendarWorkout, {\n key: index,\n workout: workout,\n sportLabel: _unref(getSportLabel)(workout, _unref(sports)),\n sportColor: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"workout\", \"sportLabel\", \"sportColor\"]))\n }), 128))\n ])), [\n [_directive_click_outside, togglePane]\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkoutsChart.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkoutsChart.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkoutsChart.vue?vue&type=style&index=0&id=52d4310a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-52d4310a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-workouts\" }\nconst _hoisted_2 = { class: \"desktop-display\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workouts-display\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"donut-display\"\n}\nconst _hoisted_5 = { class: \"mobile-display\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"donut-display\"\n}\n\nimport { computed, toRefs } from 'vue'\n\n import CalendarWorkout from '@/components/Dashboard/UserCalendar/CalendarWorkout.vue'\n import CalendarWorkoutsChart from '@/components/Dashboard/UserCalendar/CalendarWorkoutsChart.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getSportColor, getSportLabel, sportIdColors } from '@/utils/sports'\n import { getDonutDatasets } from '@/utils/workouts'\n\n interface Props {\n displayHARecord: boolean\n workouts: IWorkout[]\n sports: ISport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkouts',\n props: {\n displayHARecord: { type: Boolean },\n workouts: null,\n sports: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n displayHARecord: boolean\n workouts: IWorkout[]\n sports: ISport[]\n }\n\n \n\n const { displayHARecord, workouts, sports } = toRefs(props)\n const chartDatasets = computed(() => getDonutDatasets(props.workouts))\n const colors = computed(() => sportIdColors(props.sports))\n const displayedWorkoutCount = 6\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(workouts).length <= displayedWorkoutCount)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts).slice(0, displayedWorkoutCount), (workout, index) => {\n return (_openBlock(), _createBlock(CalendarWorkout, {\n key: index,\n displayHARecord: _unref(displayHARecord),\n workout: workout,\n sportLabel: _unref(getSportLabel)(workout, _unref(sports)),\n sportColor: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"displayHARecord\", \"workout\", \"sportLabel\", \"sportColor\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(CalendarWorkoutsChart, {\n workouts: _unref(workouts),\n sports: _unref(sports),\n datasets: _unref(chartDatasets),\n colors: _unref(colors)\n }, null, 8, [\"workouts\", \"sports\", \"datasets\", \"colors\"])\n ]))\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n (_unref(workouts).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(CalendarWorkoutsChart, {\n workouts: _unref(workouts),\n sports: _unref(sports),\n datasets: _unref(chartDatasets),\n colors: _unref(colors)\n }, null, 8, [\"workouts\", \"sports\", \"datasets\", \"colors\"])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkouts.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkouts.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkouts.vue?vue&type=style&index=0&id=5aab7455&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-cells\" }\nconst _hoisted_2 = { class: \"calendar-cell-day\" }\n\nimport { addDays, format, isSameDay, isSameMonth, isToday } from 'date-fns'\n import { Ref, ref, toRefs, watch, onMounted } from 'vue'\n\n import CalendarWorkouts from '@/components/Dashboard/UserCalendar/CalendarWorkouts.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getDateWithTZ } from '@/utils/dates'\n\n interface Props {\n currentDay: Date\n displayHARecord: boolean\n endDate: Date\n sports: ISport[]\n startDate: Date\n timezone: string\n weekStartingMonday: boolean\n workouts: IWorkout[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarCells',\n props: {\n currentDay: null,\n displayHARecord: { type: Boolean },\n endDate: null,\n sports: null,\n startDate: null,\n timezone: null,\n weekStartingMonday: { type: Boolean },\n workouts: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n currentDay: Date\n displayHARecord: boolean\n endDate: Date\n sports: ISport[]\n startDate: Date\n timezone: string\n weekStartingMonday: boolean\n workouts: IWorkout[]\n }\n\n \n\n const {\n currentDay,\n displayHARecord,\n endDate,\n sports,\n startDate,\n timezone,\n weekStartingMonday,\n workouts,\n } = toRefs(props)\n const rows: Ref = ref([])\n\n onMounted(() => getDays())\n\n function getDays() {\n rows.value = []\n let day = startDate.value\n while (day <= endDate.value) {\n const days: Date[] = []\n for (let i = 0; i < 7; i++) {\n days.push(day)\n day = addDays(day, 1)\n }\n rows.value.push(days)\n }\n }\n function isWeekEnd(day: number): boolean {\n return weekStartingMonday.value\n ? [5, 6].includes(day)\n : [0, 6].includes(day)\n }\n function filterWorkouts(day: Date, workouts: IWorkout[]) {\n if (workouts) {\n return workouts\n .filter((workout) =>\n isSameDay(getDateWithTZ(workout.workout_date, timezone.value), day)\n )\n .reverse()\n }\n return []\n }\n\n watch(\n () => props.currentDay,\n () => getDays()\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(rows.value, (row, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"calendar-row\",\n key: index\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(row, (day, i) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"calendar-cell\", {\n 'disabled-cell': !_unref(isSameMonth)(day, _unref(currentDay)),\n 'week-end': isWeekEnd(i),\n today: _unref(isToday)(day),\n }]),\n key: i\n }, [\n _createVNode(CalendarWorkouts, {\n workouts: filterWorkouts(day, _unref(workouts)),\n sports: _unref(sports),\n displayHARecord: _unref(displayHARecord)\n }, null, 8, [\"workouts\", \"sports\", \"displayHARecord\"]),\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_unref(format)(day, 'd')), 1)\n ], 2))\n }), 128))\n ]))\n }), 128))\n ]))\n}\n}\n\n})","import script from \"./CalendarCells.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarCells.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarCells.vue?vue&type=style&index=0&id=34b99f0e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-days\" }\n\nimport { Locale, format, addDays } from 'date-fns'\n\n interface Props {\n startDate: Date\n localeOptions: Locale\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarDays',\n props: {\n startDate: null,\n localeOptions: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n startDate: Date\n localeOptions: Locale\n }\n\n \n\n const days = []\n for (let i = 0; i < 7; i++) {\n days.push(addDays(props.startDate, i))\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(days, (day, index) => {\n return _createElementVNode(\"div\", {\n class: \"calendar-day\",\n key: index\n }, _toDisplayString(_unref(format)(day, 'EEE', { locale: __props.localeOptions })), 1)\n }), 64))\n ]))\n}\n}\n\n})","import script from \"./CalendarDays.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarDays.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarDays.vue?vue&type=style&index=0&id=4f3dc99e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, unref as _unref, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-header\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\nconst _hoisted_4 = { class: \"calendar-month\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_6 = [\n _hoisted_5\n]\n\nimport { Locale, format } from 'date-fns'\n import { toRefs } from 'vue'\n\n interface Props {\n day: Date\n localeOptions: Locale\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarHeader',\n props: {\n day: null,\n localeOptions: null\n },\n emits: ['displayNextMonth', 'displayPreviousMonth'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n day: Date\n localeOptions: Locale\n }\n\n \n\n \n\n const { day, localeOptions } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"calendar-arrow calendar-arrow-left\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('displayPreviousMonth')))\n }, _hoisted_3),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(format)(_unref(day), 'MMM yyyy', { locale: _unref(localeOptions) })), 1)\n ]),\n _createElementVNode(\"div\", {\n class: \"calendar-arrow calendar-arrow-right\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('displayNextMonth')))\n }, _hoisted_6)\n ]))\n}\n}\n\n})","import script from \"./CalendarHeader.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarHeader.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarHeader.vue?vue&type=style&index=0&id=79a65a70&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-calendar\" }\nconst _hoisted_2 = { class: \"calendar-card box\" }\n\nimport { Locale, addMonths, format, subMonths } from 'date-fns'\n import { ComputedRef, computed, ref, toRefs, onBeforeMount } from 'vue'\n\n import CalendarCells from '@/components/Dashboard/UserCalendar/CalendarCells.vue'\n import CalendarDays from '@/components/Dashboard/UserCalendar/CalendarDays.vue'\n import CalendarHeader from '@/components/Dashboard/UserCalendar/CalendarHeader.vue'\n import { ROOT_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkout, TWorkoutsPayload } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { getCalendarStartAndEnd } from '@/utils/dates'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const { sports, user } = toRefs(props)\n const dateFormat = 'yyyy-MM-dd'\n const day = ref(new Date())\n const calendarDates = ref(getCalendarStartAndEnd(day.value, props.user.weekm))\n const calendarWorkouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.CALENDAR_WORKOUTS]\n )\n const localeOptions: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LOCALE]\n )\n\n onBeforeMount(() => getCalendarWorkouts())\n\n function getCalendarWorkouts() {\n calendarDates.value = getCalendarStartAndEnd(day.value, props.user.weekm)\n const apiParams: TWorkoutsPayload = {\n from: format(calendarDates.value.start, dateFormat),\n to: format(calendarDates.value.end, dateFormat),\n page: 1,\n per_page: 100,\n ...defaultOrder,\n }\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_CALENDAR_WORKOUTS, apiParams)\n }\n function displayNextMonth() {\n day.value = addMonths(day.value, 1)\n getCalendarWorkouts()\n }\n function displayPreviousMonth() {\n day.value = subMonths(day.value, 1)\n getCalendarWorkouts()\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(CalendarHeader, {\n day: day.value,\n \"locale-options\": _unref(localeOptions),\n onDisplayNextMonth: displayNextMonth,\n onDisplayPreviousMonth: displayPreviousMonth\n }, null, 8, [\"day\", \"locale-options\"]),\n _createVNode(CalendarDays, {\n \"start-date\": calendarDates.value.start,\n \"locale-options\": _unref(localeOptions)\n }, null, 8, [\"start-date\", \"locale-options\"]),\n _createVNode(CalendarCells, {\n currentDay: day.value,\n displayHARecord: _unref(user).display_ascent,\n \"end-date\": calendarDates.value.end,\n sports: _unref(sports),\n \"start-date\": calendarDates.value.start,\n timezone: _unref(user).timezone,\n workouts: _unref(calendarWorkouts),\n weekStartingMonday: _unref(user).weekm\n }, null, 8, [\"currentDay\", \"displayHARecord\", \"end-date\", \"sports\", \"start-date\", \"timezone\", \"workouts\", \"weekStartingMonday\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=3e7444d9&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1bcddc12\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"user-month-stats\" }\n\nimport { endOfMonth, startOfMonth } from 'date-fns'\n import { toRefs } from 'vue'\n\n import StatChart from '@/components/Common/StatsChart/index.vue'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n\n interface Props {\n sports: ISport[]\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserMonthStats',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IUserProfile\n }\n\n \n\n const { sports, user } = toRefs(props)\n const date = new Date()\n const chartParams = {\n duration: 'week',\n start: startOfMonth(date),\n end: endOfMonth(date),\n }\n const selectedSportIds = props.sports.map((sport) => sport.id)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('dashboard.THIS_MONTH')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(StatChart, {\n sports: _unref(sports),\n user: _unref(user),\n \"chart-params\": chartParams,\n \"displayed-sport-ids\": _unref(selectedSportIds),\n \"hide-chart-if-no-data\": true\n }, null, 8, [\"sports\", \"user\", \"displayed-sport-ids\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./UserMonthStats.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserMonthStats.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserMonthStats.vue?vue&type=style&index=0&id=1bcddc12&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1bcddc12\"]])\n\nexport default __exports__","import createI18n from '@/i18n'\nimport { ITranslatedSport } from '@/types/sports'\nimport { TUnit } from '@/types/units'\nimport { ICardRecord, IRecord, IRecordsBySports } from '@/types/workouts'\nimport { formatDate, getDateFormat } from '@/utils/dates'\nimport { convertDistance, units } from '@/utils/units'\n\nconst { locale } = createI18n.global\n\nexport const formatRecord = (\n record: IRecord,\n tz: string,\n useImperialUnits: boolean,\n date_format: string\n): Record => {\n const distanceUnitFrom: TUnit = 'km'\n const distanceUnitTo: TUnit = useImperialUnits\n ? units[distanceUnitFrom].defaultTarget\n : distanceUnitFrom\n const ascentUnitFrom: TUnit = 'm'\n const ascentUnitTo: TUnit = useImperialUnits\n ? units[ascentUnitFrom].defaultTarget\n : ascentUnitFrom\n let value\n switch (record.record_type) {\n case 'AS':\n case 'MS':\n value = `${convertDistance(\n +record.value,\n distanceUnitFrom,\n distanceUnitTo,\n 2\n )} ${distanceUnitTo}/h`\n break\n case 'FD':\n value = `${convertDistance(\n +record.value,\n distanceUnitFrom,\n distanceUnitTo,\n 3\n )} ${distanceUnitTo}`\n break\n case 'HA':\n value = `${convertDistance(\n +record.value,\n ascentUnitFrom,\n ascentUnitTo,\n 2\n )} ${ascentUnitTo}`\n break\n case 'LD':\n value = record.value\n break\n default:\n throw new Error(\n `Invalid record type, expected: \"AS\", \"FD\", \"HA\", \"LD\", \"MD\", got: \"${record.record_type}\"`\n )\n }\n return {\n workout_date: formatDate(record.workout_date, tz, date_format, false),\n workout_id: record.workout_id,\n id: record.id,\n record_type: record.record_type,\n value: value,\n }\n}\n\nexport const sortRecords = (a: ICardRecord, b: ICardRecord): number => {\n const recordALabel = a.label.toLowerCase()\n const recordBLabel = b.label.toLowerCase()\n return recordALabel > recordBLabel ? 1 : recordALabel < recordBLabel ? -1 : 0\n}\n\nexport const getRecordsBySports = (\n records: IRecord[],\n translatedSports: ITranslatedSport[],\n tz: string,\n useImperialUnits: boolean,\n display_ascent: boolean,\n date_format: string\n): IRecordsBySports => {\n date_format = getDateFormat(date_format, locale.value)\n return records\n .filter((r) => (display_ascent ? true : r.record_type !== 'HA'))\n .reduce((sportList: IRecordsBySports, record) => {\n const sport = translatedSports.find((s) => s.id === record.sport_id)\n if (sport && sport.label) {\n if (sportList[sport.translatedLabel] === void 0) {\n sportList[sport.translatedLabel] = {\n label: sport.label,\n color: sport.color,\n records: [],\n }\n }\n sportList[sport.translatedLabel].records.push(\n formatRecord(record, tz, useImperialUnits, date_format)\n )\n }\n return sportList\n }, {})\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8d17c606\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"records-card\" }\nconst _hoisted_2 = { class: \"record-type\" }\nconst _hoisted_3 = { class: \"record-value\" }\nconst _hoisted_4 = { class: \"record-date\" }\n\nimport { toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ICardRecord, IRecord, IRecordsBySports } from '@/types/workouts'\n import { sortRecords } from '@/utils/records'\n\n interface Props {\n records: IRecordsBySports\n sportTranslatedLabel: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'RecordsCard',\n props: {\n records: null,\n sportTranslatedLabel: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n records: IRecordsBySports\n sportTranslatedLabel: string\n }\n\n \n\n const { records, sportTranslatedLabel } = toRefs(props)\n\n const { t } = useI18n()\n\n function getTranslatedRecords(records: IRecord[]): ICardRecord[] {\n const translatedRecords: ICardRecord[] = []\n records.map((record) => {\n translatedRecords.push({\n ...record,\n label: t(`workouts.RECORD_${record.record_type}`),\n })\n })\n return translatedRecords.sort(sortRecords)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(records).label,\n color: _unref(records).color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createTextVNode(\" \" + _toDisplayString(_unref(sportTranslatedLabel)), 1)\n ]),\n content: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(getTranslatedRecords(_unref(records).records), (record) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"record\",\n key: record.id\n }, [\n _createElementVNode(\"span\", _hoisted_2, _toDisplayString(record.label), 1),\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(record.value), 1),\n _createElementVNode(\"span\", _hoisted_4, [\n _createVNode(_component_router_link, {\n to: {\n name: 'Workout',\n params: { workoutId: record.workout_id },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(record.workout_date), 1)\n ]),\n _: 2\n }, 1032, [\"to\"])\n ])\n ]))\n }), 128))\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./RecordsCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RecordsCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./RecordsCard.vue?vue&type=style&index=0&id=8d17c606&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8d17c606\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-f0c85cb8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"user-records-section\" }\nconst _hoisted_2 = { class: \"section-title\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy custom-fa-small\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { class: \"user-records\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"no-records\"\n}\n\nimport { computed } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import RecordsCard from '@/components/Dashboard/UserRecords/RecordsCard.vue'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { getRecordsBySports } from '@/utils/records'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const recordsBySport = computed(() =>\n getRecordsBySports(\n props.user.records,\n translateSports(props.sports, t),\n props.user.timezone,\n props.user.imperial_units,\n props.user.display_ascent,\n props.user.date_format\n )\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.RECORD', 2)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n (Object.keys(_unref(recordsBySport)).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('workouts.NO_RECORDS')), 1))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(Object.keys(_unref(recordsBySport)).sort(), (sportTranslatedLabel) => {\n return (_openBlock(), _createBlock(RecordsCard, {\n sportTranslatedLabel: sportTranslatedLabel,\n records: _unref(recordsBySport)[sportTranslatedLabel],\n key: sportTranslatedLabel,\n useImperialUnits: __props.user.imperial_units\n }, null, 8, [\"sportTranslatedLabel\", \"records\", \"useImperialUnits\"]))\n }), 128))\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=f0c85cb8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-f0c85cb8\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-stats\" }\n\nimport { ComputedRef, computed, toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import StatCard from '@/components/Common/StatCard.vue'\n import { TUnit } from '@/types/units'\n import { IAuthUserProfile } from '@/types/user'\n import { convertDistance, units } from '@/utils/units'\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const { user } = toRefs(props)\n const userTotalDuration: ComputedRef = computed(\n () => props.user.total_duration\n )\n const totalDuration = computed(() => get_duration(userTotalDuration))\n const distanceUnitFrom: TUnit = 'km'\n const distanceUnitTo: TUnit = user.value.imperial_units\n ? units[distanceUnitFrom].defaultTarget\n : distanceUnitFrom\n const totalDistance: ComputedRef = computed(() =>\n user.value.imperial_units\n ? convertDistance(user.value.total_distance, distanceUnitFrom, distanceUnitTo, 2)\n : parseFloat(user.value.total_distance.toFixed(2)))\n const ascentUnitFrom: TUnit = 'm'\n const ascentUnitTo: TUnit = user.value.imperial_units\n ? units[ascentUnitFrom].defaultTarget\n : ascentUnitFrom\n const totalAscent: ComputedRef = computed(() =>\n user.value.imperial_units\n ? convertDistance(user.value.total_ascent, ascentUnitFrom, ascentUnitTo, 2)\n : parseFloat(user.value.total_ascent.toFixed(2)))\n\n\n function get_duration(total_duration: ComputedRef) {\n const duration = total_duration.value.match(/day/g)\n ? total_duration.value.split(', ')[1]\n : total_duration.value\n return {\n days: total_duration.value.match(/day/g)\n ? `${total_duration.value.split(' ')[0]} ${\n total_duration.value.match(/days/g)\n ? t('common.DAY', 2)\n : t('common.DAY', 1)\n }`\n : `0 ${t('common.DAY', 2)},`,\n duration: `${duration.split(':')[0]}h ${duration.split(':')[1]}min`,\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatCard, {\n icon: \"calendar\",\n value: _unref(user).nb_workouts,\n text: _ctx.$t('workouts.WORKOUT', _unref(user).nb_workouts)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"road\",\n value: _unref(totalDistance),\n text: _unref(distanceUnitTo) === 'mi' ? 'miles' : _unref(distanceUnitTo)\n }, null, 8, [\"value\", \"text\"]),\n (_unref(user).display_ascent)\n ? (_openBlock(), _createBlock(StatCard, {\n key: 0,\n icon: \"location-arrow\",\n value: _unref(totalAscent),\n text: _unref(ascentUnitTo) === 'ft' ? 'feet' : _unref(ascentUnitTo)\n }, null, 8, [\"value\", \"text\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(StatCard, {\n icon: \"clock-o\",\n value: _unref(totalDuration).days,\n text: _unref(totalDuration).duration\n }, null, 8, [\"value\", \"text\"]),\n (!_unref(user).display_ascent)\n ? (_openBlock(), _createBlock(StatCard, {\n key: 1,\n icon: \"tags\",\n value: _unref(user).nb_sports,\n text: _ctx.$t('workouts.SPORT', _unref(user).nb_sports)\n }, null, 8, [\"value\", \"text\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=22dcb990&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4c0893c1\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"dashboard\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container mobile-menu\" }\nconst _hoisted_3 = { class: \"box\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-calendar\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_5 = [\n _hoisted_4\n]\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-bar-chart\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = [\n _hoisted_6\n]\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-map-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_9 = [\n _hoisted_8\n]\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = [\n _hoisted_10\n]\nconst _hoisted_12 = { class: \"container\" }\nconst _hoisted_13 = { class: \"container dashboard-container\" }\nconst _hoisted_14 = { class: \"left-container dashboard-sub-container\" }\nconst _hoisted_15 = { class: \"right-container dashboard-sub-container\" }\nconst _hoisted_16 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\nconst _hoisted_17 = {\n key: 1,\n class: \"app-loading\"\n}\n\nimport { ComputedRef, Ref, computed, onBeforeMount, ref } from 'vue'\n\n import Timeline from '@/components/Dashboard/Timeline.vue'\n import UserCalendar from '@/components/Dashboard/UserCalendar/index.vue'\n import UserMonthStats from '@/components/Dashboard/UserMonthStats.vue'\n import UserRecords from '@/components/Dashboard/UserRecords/index.vue'\n import UserStatsCards from '@/components/Dashboard/UserStatsCards/index.vue'\n import { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Dashboard',\n setup(__props) {\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const isSelected: Ref = ref('calendar')\n\n onBeforeMount(() => store.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE))\n\n function updateDisplayColumn(target: string) {\n isSelected.value = target\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Loader = _resolveComponent(\"Loader\")!\n\n return (_unref(authUser).username && _unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'calendar' }]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (updateDisplayColumn('calendar')))\n }, _hoisted_5, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'chart' }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayColumn('chart')))\n }, _hoisted_7, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'timeline' }]),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (updateDisplayColumn('timeline')))\n }, _hoisted_9, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'records' }]),\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateDisplayColumn('records')))\n }, _hoisted_11, 2)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createVNode(UserStatsCards, { user: _unref(authUser) }, null, 8, [\"user\"])\n ]),\n _createElementVNode(\"div\", _hoisted_13, [\n _createElementVNode(\"div\", _hoisted_14, [\n _createVNode(UserMonthStats, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'chart') })\n }, null, 8, [\"sports\", \"user\", \"class\"]),\n _createVNode(UserRecords, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'records') })\n }, null, 8, [\"sports\", \"user\", \"class\"])\n ]),\n _createElementVNode(\"div\", _hoisted_15, [\n _createVNode(UserCalendar, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'calendar') })\n }, null, 8, [\"sports\", \"user\", \"class\"]),\n _createVNode(Timeline, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'timeline') })\n }, null, 8, [\"sports\", \"user\", \"class\"])\n ])\n ]),\n _hoisted_16\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createVNode(_component_Loader)\n ]))\n}\n}\n\n})","import script from \"./Dashboard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Dashboard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Dashboard.vue?vue&type=style&index=0&id=4c0893c1&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4c0893c1\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"not-found view\" }\n\nimport NotFound from '@/components/Common/NotFound.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'NotFoundView',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(NotFound)\n ]))\n}\n}\n\n})","import script from \"./NotFoundView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NotFoundView.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6a38125b\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"loginOrRegister\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = { class: \"container-sub\" }\nconst _hoisted_4 = { class: \"container-sub\" }\n\nimport { toRefs } from 'vue'\n\n import BikePic from '@/components/BikePic.vue'\n import LoginOrRegisterForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'LoginOrRegister',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(BikePic)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(LoginOrRegisterForm, { action: _unref(action) }, null, 8, [\"action\"])\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./LoginOrRegister.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./LoginOrRegister.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./LoginOrRegister.vue?vue&type=style&index=0&id=6a38125b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6a38125b\"]])\n\nexport default __exports__","import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'\n\nimport AdminApplication from '@/components/Administration/AdminApplication.vue'\nimport AdminMenu from '@/components/Administration/AdminMenu.vue'\nimport AdminSports from '@/components/Administration/AdminSports.vue'\nimport AdminUsers from '@/components/Administration/AdminUsers.vue'\nimport Profile from '@/components/User/ProfileDisplay/index.vue'\nimport UserInfos from '@/components/User/ProfileDisplay/UserInfos.vue'\nimport UserPreferences from '@/components/User/ProfileDisplay/UserPreferences.vue'\nimport ProfileEdition from '@/components/User/ProfileEdition/index.vue'\nimport UserAccountEdition from '@/components/User/ProfileEdition/UserAccountEdition.vue'\nimport UserInfosEdition from '@/components/User/ProfileEdition/UserInfosEdition.vue'\nimport UserPictureEdition from '@/components/User/ProfileEdition/UserPictureEdition.vue'\nimport UserPreferencesEdition from '@/components/User/ProfileEdition/UserPreferencesEdition.vue'\nimport AddUserApp from '@/components/User/UserApps/AddUserApp.vue'\nimport AuthorizeUserApp from '@/components/User/UserApps/AuthorizeUserApp.vue'\nimport UserApps from '@/components/User/UserApps/index.vue'\nimport UserApp from '@/components/User/UserApps/UserApp.vue'\nimport UserAppsList from '@/components/User/UserApps/UserAppsList.vue'\nimport UserSportPreferences from '@/components/User/UserSportPreferences.vue'\nimport store from '@/store'\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport AboutView from '@/views/AboutView.vue'\nimport Dashboard from '@/views/Dashboard.vue'\nimport NotFoundView from '@/views/NotFoundView.vue'\nimport LoginOrRegister from '@/views/user/LoginOrRegister.vue'\n\nconst getTabFromPath = (path: string): string => {\n const regex = /(\\/profile)(\\/edit)*(\\/*)/\n const tag = path.replace(regex, '').toUpperCase()\n return tag === '' ? 'PROFILE' : tag.toUpperCase()\n}\n\nconst routes: Array = [\n {\n path: '/',\n name: 'Dashboard',\n component: Dashboard,\n },\n {\n path: '/login',\n name: 'Login',\n component: LoginOrRegister,\n props: { action: 'login' },\n },\n {\n path: '/register',\n name: 'Register',\n component: LoginOrRegister,\n props: { action: 'register' },\n },\n {\n path: '/account-confirmation',\n name: 'AccountConfirmation',\n component: () =>\n import(\n /* webpackChunkName: 'profile' */ '@/views/user/AccountConfirmationView.vue'\n ),\n },\n {\n path: '/account-confirmation/resend',\n name: 'AccountConfirmationResend',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/AccountConfirmationResendView.vue'\n ),\n props: { action: 'account-confirmation-resend' },\n },\n {\n path: '/account-confirmation/email-sent',\n name: 'AccountConfirmationEmailSend',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/AccountConfirmationResendView.vue'\n ),\n props: { action: 'email-sent' },\n },\n {\n path: '/password-reset/sent',\n name: 'PasswordEmailSent',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'request-sent' },\n },\n {\n path: '/password-reset/request',\n name: 'PasswordResetRequest',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'reset-request' },\n },\n {\n path: '/password-reset/password-updated',\n name: 'PasswordUpdated',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'password-updated' },\n },\n {\n path: '/password-reset',\n name: 'PasswordReset',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'reset' },\n },\n {\n path: '/email-update',\n name: 'EmailUpdate',\n component: () =>\n import(\n /* webpackChunkName: 'profile' */ '@/views/user/EmailUpdateView.vue'\n ),\n },\n {\n path: '/profile',\n name: 'Profile',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/ProfileView.vue'),\n children: [\n {\n path: '',\n name: 'UserProfile',\n component: Profile,\n props: (route) => ({\n tab: getTabFromPath(route.path),\n }),\n children: [\n {\n path: '',\n name: 'UserInfos',\n component: UserInfos,\n },\n {\n path: 'preferences',\n name: 'UserPreferences',\n component: UserPreferences,\n },\n {\n path: 'sports',\n name: 'UserSportPreferences',\n component: UserSportPreferences,\n props: { isEdition: false },\n },\n {\n path: 'apps',\n name: 'UserApps',\n component: UserApps,\n children: [\n {\n path: '',\n name: 'UserAppsList',\n component: UserAppsList,\n },\n {\n path: ':id',\n name: 'UserApp',\n component: UserApp,\n },\n {\n path: ':id/created',\n name: 'CreatedUserApp',\n component: UserApp,\n props: { afterCreation: true },\n },\n {\n path: 'new',\n name: 'AddUserApp',\n component: AddUserApp,\n },\n {\n path: 'authorize',\n name: 'AuthorizeUserApp',\n component: AuthorizeUserApp,\n },\n ],\n },\n ],\n },\n {\n path: 'edit',\n name: 'UserProfileEdition',\n component: ProfileEdition,\n props: (route) => ({\n tab: getTabFromPath(route.path),\n }),\n children: [\n {\n path: '',\n name: 'UserInfosEdition',\n component: UserInfosEdition,\n },\n {\n path: 'account',\n name: 'UserAccountEdition',\n component: UserAccountEdition,\n },\n {\n path: 'picture',\n name: 'UserPictureEdition',\n component: UserPictureEdition,\n },\n {\n path: 'preferences',\n name: 'UserPreferencesEdition',\n component: UserPreferencesEdition,\n },\n {\n path: 'sports',\n name: 'UserSportPreferencesEdition',\n component: UserSportPreferences,\n props: { isEdition: true },\n },\n ],\n },\n ],\n },\n {\n path: '/statistics',\n name: 'Statistics',\n component: () =>\n import(/* webpackChunkName: 'statistics' */ '@/views/StatisticsView.vue'),\n },\n {\n path: '/users/:username',\n name: 'User',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/UserView.vue'),\n },\n {\n path: '/workouts',\n name: 'Workouts',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/WorkoutsView.vue'\n ),\n },\n {\n path: '/workouts/:workoutId',\n name: 'Workout',\n component: () =>\n import(/* webpackChunkName: 'workouts' */ '@/views/workouts/Workout.vue'),\n props: { displaySegment: false },\n },\n {\n path: '/workouts/:workoutId/edit',\n name: 'EditWorkout',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/EditWorkout.vue'\n ),\n },\n {\n path: '/workouts/:workoutId/segment/:segmentId',\n name: 'WorkoutSegment',\n component: () =>\n import(/* webpackChunkName: 'workouts' */ '@/views/workouts/Workout.vue'),\n props: { displaySegment: true },\n },\n {\n path: '/workouts/add',\n name: 'AddWorkout',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/AddWorkout.vue'\n ),\n },\n {\n path: '/admin',\n name: 'Administration',\n component: () =>\n import(/* webpackChunkName: 'admin' */ '@/views/AdminView.vue'),\n children: [\n {\n path: '',\n name: 'AdministrationMenu',\n component: AdminMenu,\n },\n {\n path: 'application',\n name: 'ApplicationAdministration',\n component: AdminApplication,\n },\n {\n path: 'application/edit',\n name: 'ApplicationAdministrationEdition',\n component: AdminApplication,\n props: { edition: true },\n },\n {\n path: 'sports',\n name: 'SportsAdministration',\n component: AdminSports,\n },\n {\n path: 'users/:username',\n name: 'UserFromAdmin',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/UserView.vue'),\n props: { fromAdmin: true },\n },\n {\n path: 'users',\n name: 'UsersAdministration',\n component: AdminUsers,\n },\n ],\n },\n {\n path: '/about',\n name: 'About',\n component: AboutView,\n },\n {\n path: '/:pathMatch(.*)*',\n name: 'not-found',\n component: NotFoundView,\n },\n]\n\nconst router = createRouter({\n history: createWebHistory(process.env.BASE_URL),\n routes,\n})\n\nconst pathsWithoutAuthentication = [\n '/login',\n '/password-reset',\n '/password-reset/password-updated',\n '/password-reset/request',\n '/password-reset/sent',\n '/register',\n '/account-confirmation',\n '/account-confirmation/resend',\n '/account-confirmation/email-sent',\n]\n\nconst pathsWithoutChecks = ['/email-update', '/about']\n\nrouter.beforeEach((to, from, next) => {\n store\n .dispatch(AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER)\n .then(() => {\n if (pathsWithoutChecks.includes(to.path)) {\n return next()\n }\n if (\n store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED] &&\n pathsWithoutAuthentication.includes(to.path)\n ) {\n return next('/')\n }\n if (\n !store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED] &&\n !pathsWithoutAuthentication.includes(to.path)\n ) {\n const path =\n to.path === '/'\n ? { path: '/login' }\n : { path: '/login', query: { from: to.fullPath } }\n next(path)\n } else {\n next()\n }\n })\n .catch((error) => {\n console.error(error)\n next()\n })\n})\n\nexport default router\n","export enum AuthUserActions {\n CHECK_AUTH_USER = 'CHECK_AUTH_USER',\n CONFIRM_ACCOUNT = 'CONFIRM_ACCOUNT',\n CONFIRM_EMAIL = 'CONFIRM_EMAIL',\n DELETE_ACCOUNT = 'DELETE_ACCOUNT',\n DELETE_PICTURE = 'DELETE_PICTURE',\n GET_USER_PROFILE = 'GET_USER_PROFILE',\n LOGIN_OR_REGISTER = 'LOGIN_OR_REGISTER',\n LOGOUT = 'LOGOUT',\n SEND_PASSWORD_RESET_REQUEST = 'SEND_PASSWORD_RESET_REQUEST',\n RESEND_ACCOUNT_CONFIRMATION_EMAIL = 'RESEND_ACCOUNT_CONFIRMATION_EMAIL',\n RESET_USER_PASSWORD = 'RESET_USER_PASSWORD',\n RESET_USER_SPORT_PREFERENCES = 'RESET_USER_SPORT_PREFERENCES',\n UPDATE_USER_ACCOUNT = 'UPDATE_USER_ACCOUNT',\n UPDATE_USER_PICTURE = 'UPDATE_USER_PICTURE',\n UPDATE_USER_PROFILE = 'UPDATE_USER_PROFILE',\n UPDATE_USER_PREFERENCES = 'UPDATE_USER_PREFERENCES',\n UPDATE_USER_SPORT_PREFERENCES = 'UPDATE_USER_SPORT_PREFERENCES',\n}\n\nexport enum AuthUserGetters {\n AUTH_TOKEN = 'AUTH_TOKEN',\n AUTH_USER_PROFILE = 'AUTH_USER_PROFILE',\n IS_ADMIN = 'IS_ADMIN',\n IS_AUTHENTICATED = 'IS_AUTHENTICATED',\n IS_SUCCESS = 'IS_SUCCESS',\n IS_REGISTRATION_SUCCESS = 'IS_REGISTRATION_SUCCESS',\n USER_LOADING = 'USER_LOADING',\n}\n\nexport enum AuthUserMutations {\n CLEAR_AUTH_USER_TOKEN = 'CLEAR_AUTH_USER_TOKEN',\n UPDATE_AUTH_TOKEN = 'UPDATE_AUTH_TOKEN',\n UPDATE_AUTH_USER_PROFILE = 'UPDATE_AUTH_USER_PROFILE',\n UPDATE_IS_SUCCESS = 'UPDATE_USER_IS_SUCCESS',\n UPDATE_IS_REGISTRATION_SUCCESS = 'UPDATE_IS_REGISTRATION_SUCCESS',\n UPDATE_USER_LOADING = 'UPDATE_USER_LOADING',\n}\n","export enum OAuth2Actions {\n AUTHORIZE_CLIENT = 'AUTHORIZE_CLIENT',\n CREATE_CLIENT = 'CREATE_CLIENT',\n DELETE_CLIENT = 'DELETE_CLIENT',\n GET_CLIENTS = 'GET_CLIENTS',\n GET_CLIENT_BY_CLIENT_ID = 'GET_CLIENT_BY_CLIENT_ID',\n GET_CLIENT_BY_ID = 'GET_CLIENT_BY_ID',\n REVOKE_ALL_TOKENS = 'REVOKE_ALL_TOKENS',\n}\n\nexport enum OAuth2Getters {\n CLIENT = 'CLIENT',\n CLIENTS = 'CLIENTS',\n CLIENTS_PAGINATION = 'CLIENTS_PAGINATION',\n REVOCATION_SUCCESSFUL = 'REVOCATION_SUCCESSFUL',\n}\n\nexport enum OAuth2Mutations {\n EMPTY_CLIENT = 'EMPTY_CLIENT',\n SET_CLIENT = 'SET_CLIENT',\n SET_CLIENTS = 'SET_CLIENTS',\n SET_CLIENTS_PAGINATION = 'SET_CLIENTS_PAGINATION',\n SET_REVOCATION_SUCCESSFUL = 'SET_REVOCATION_SUCCESSFUL',\n}\n","export enum RootActions {\n GET_APPLICATION_CONFIG = 'GET_APPLICATION_CONFIG',\n GET_APPLICATION_STATS = 'GET_APPLICATION_STATS',\n UPDATE_APPLICATION_CONFIG = 'UPDATE_APPLICATION_CONFIG',\n UPDATE_APPLICATION_LANGUAGE = 'UPDATE_APPLICATION_LANGUAGE',\n}\n\nexport enum RootGetters {\n APP_CONFIG = 'APP_CONFIG',\n APP_LOADING = 'APP_LOADING',\n APP_STATS = 'APP_STATS',\n ERROR_MESSAGES = 'ERROR_MESSAGES',\n LANGUAGE = 'LANGUAGE',\n LOCALE = 'LOCALE', // date-fns\n}\n\nexport enum RootMutations {\n EMPTY_ERROR_MESSAGES = 'EMPTY_ERROR_MESSAGES',\n SET_ERROR_MESSAGES = 'SET_ERROR_MESSAGES',\n UPDATE_APPLICATION_CONFIG = 'UPDATE_APPLICATION_CONFIG',\n UPDATE_APPLICATION_LOADING = 'UPDATE_APPLICATION_LOADING',\n UPDATE_APPLICATION_STATS = 'UPDATE_APPLICATION_STATS',\n UPDATE_LANG = 'UPDATE_LANG',\n}\n","export enum SportsActions {\n GET_SPORTS = 'GET_SPORTS',\n UPDATE_SPORTS = 'UPDATE_SPORTS',\n}\n\nexport enum SportsGetters {\n SPORTS = 'SPORTS',\n}\n\nexport enum SportsMutation {\n SET_SPORTS = 'SET_SPORTS',\n}\n","export enum StatisticsActions {\n GET_USER_STATS = 'GET_USER_STATS',\n}\n\nexport enum StatisticsGetters {\n USER_STATS = 'USER_STATS',\n}\n\nexport enum StatisticsMutations {\n EMPTY_USER_STATS = 'EMPTY_USER_STATS',\n UPDATE_USER_STATS = 'UPDATE_USER_STATS',\n}\n","export enum UsersActions {\n EMPTY_USER = 'EMPTY_USER',\n EMPTY_USERS = 'EMPTY_USERS',\n GET_USER = 'GET_USER',\n GET_USERS = 'GET_USERS',\n UPDATE_USER = 'UPDATE_USER',\n DELETE_USER_ACCOUNT = 'DELETE_USER_ACCOUNT',\n}\n\nexport enum UsersGetters {\n USER = 'USER',\n USERS = 'USERS',\n USERS_IS_SUCCESS = 'USERS_IS_SUCCESS',\n USERS_LOADING = 'USERS_LOADING',\n USERS_PAGINATION = 'USERS_PAGINATION',\n}\n\nexport enum UsersMutations {\n UPDATE_USER = 'UPDATE_USER',\n UPDATE_USER_IN_USERS = 'UPDATE_USER_IN_USERS',\n UPDATE_USERS = 'UPDATE_USERS',\n UPDATE_USERS_LOADING = 'UPDATE_USERS_LOADING',\n UPDATE_USERS_PAGINATION = 'UPDATE_USERS_PAGINATION',\n UPDATE_IS_SUCCESS = 'UPDATE_IS_SUCCESS',\n}\n","import {\n AuthUserActions,\n AuthUserGetters,\n AuthUserMutations,\n} from '@/store/modules/authUser/enums'\nimport {\n OAuth2Actions,\n OAuth2Getters,\n OAuth2Mutations,\n} from '@/store/modules/oauth2/enums'\nimport {\n RootActions,\n RootGetters,\n RootMutations,\n} from '@/store/modules/root/enums'\nimport {\n SportsActions,\n SportsGetters,\n SportsMutation,\n} from '@/store/modules/sports/enums'\nimport {\n StatisticsActions,\n StatisticsGetters,\n StatisticsMutations,\n} from '@/store/modules/statistics/enums'\nimport {\n UsersActions,\n UsersGetters,\n UsersMutations,\n} from '@/store/modules/users/enums'\nimport {\n WorkoutsActions,\n WorkoutsGetters,\n WorkoutsMutations,\n} from '@/store/modules/workouts/enums'\n\nexport const ROOT_STORE = {\n ACTIONS: RootActions,\n GETTERS: RootGetters,\n MUTATIONS: RootMutations,\n}\n\nexport const SPORTS_STORE = {\n ACTIONS: SportsActions,\n GETTERS: SportsGetters,\n MUTATIONS: SportsMutation,\n}\n\nexport const STATS_STORE = {\n ACTIONS: StatisticsActions,\n GETTERS: StatisticsGetters,\n MUTATIONS: StatisticsMutations,\n}\n\nexport const AUTH_USER_STORE = {\n ACTIONS: AuthUserActions,\n GETTERS: AuthUserGetters,\n MUTATIONS: AuthUserMutations,\n}\nexport const OAUTH2_STORE = {\n ACTIONS: OAuth2Actions,\n GETTERS: OAuth2Getters,\n MUTATIONS: OAuth2Mutations,\n}\n\nexport const USERS_STORE = {\n ACTIONS: UsersActions,\n GETTERS: UsersGetters,\n MUTATIONS: UsersMutations,\n}\n\nexport const WORKOUTS_STORE = {\n ACTIONS: WorkoutsActions,\n GETTERS: WorkoutsGetters,\n MUTATIONS: WorkoutsMutations,\n}\n","import axios from 'axios'\n\nimport { pendingRequests, removeRequestIfPending } from '@/api/pending'\nimport { getApiUrl } from '@/utils'\n\nconst api = axios.create({\n baseURL: getApiUrl(),\n})\n\napi.interceptors.request.use(\n (config) => {\n const controller = new AbortController()\n config.signal = controller.signal\n const requestKey = removeRequestIfPending(config)\n pendingRequests.set(requestKey, controller)\n return config\n },\n (error) => Promise.reject(error)\n)\n\napi.interceptors.response.use(\n (response) => {\n removeRequestIfPending(response.config)\n return response\n },\n (error) => {\n if (error.message !== 'canceled') {\n removeRequestIfPending(error.response.config)\n }\n return Promise.reject(error)\n }\n)\n\nexport default api\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { IUsersActions, IUsersState } from '@/store/modules/users/types'\nimport { TPaginationPayload } from '@/types/api'\nimport { IAdminUserPayload, IUserDeletionPayload } from '@/types/user'\nimport { handleError } from '@/utils'\n\nexport const deleteUserAccount = (\n context:\n | ActionContext\n | ActionContext,\n payload: IUserDeletionPayload\n): void => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .delete(`users/${payload.username}`)\n .then((res) => {\n if (res.status === 204) {\n if (payload.fromAdmin) {\n router.push('/admin/users')\n } else {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.LOGOUT)\n .then(() => router.push('/'))\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree & IUsersActions = {\n [USERS_STORE.ACTIONS.EMPTY_USER](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USER, {})\n },\n [USERS_STORE.ACTIONS.EMPTY_USERS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS, [])\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION, {})\n },\n [USERS_STORE.ACTIONS.GET_USER](\n context: ActionContext,\n username: string\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, true)\n authApi\n .get(`users/${username}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER,\n res.data.data.users[0]\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.GET_USERS](\n context: ActionContext,\n payload: TPaginationPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, true)\n authApi\n .get('users', { params: payload })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USERS,\n res.data.data.users\n )\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION,\n res.data.pagination\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.UPDATE_USER](\n context: ActionContext,\n payload: IAdminUserPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n const data: Record = {}\n if (payload.admin !== undefined) {\n data.admin = payload.admin\n }\n if (payload.resetPassword) {\n data.reset_password = payload.resetPassword\n }\n if (payload.activate) {\n data.activate = payload.activate\n }\n if (payload.new_email !== undefined) {\n data.new_email = payload.new_email\n }\n authApi\n .patch(`users/${payload.username}`, data)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER_IN_USERS,\n res.data.data.users[0]\n )\n if (payload.resetPassword || payload.new_email) {\n context.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n }\n if (payload.activate || payload.new_email) {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER,\n res.data.data.users[0]\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.DELETE_USER_ACCOUNT](\n context: ActionContext,\n payload: IUserDeletionPayload\n ): void {\n deleteUserAccount(context, {\n username: payload.username,\n fromAdmin: true,\n })\n },\n}\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport api from '@/api/defaultApi'\nimport router from '@/router'\nimport {\n AUTH_USER_STORE,\n ROOT_STORE,\n SPORTS_STORE,\n STATS_STORE,\n USERS_STORE,\n WORKOUTS_STORE,\n} from '@/store/constants'\nimport {\n IAuthUserActions,\n IAuthUserState,\n} from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { deleteUserAccount } from '@/store/modules/users/actions'\nimport {\n ILoginOrRegisterData,\n IUserAccountPayload,\n IUserDeletionPayload,\n IUserAccountUpdatePayload,\n IUserEmailPayload,\n IUserPasswordResetPayload,\n IUserPayload,\n IUserPicturePayload,\n IUserPreferencesPayload,\n IUserSportPreferencesPayload,\n} from '@/types/user'\nimport { handleError } from '@/utils'\n\nconst removeAuthUserData = (\n context: ActionContext\n) => {\n localStorage.removeItem('authToken')\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(STATS_STORE.MUTATIONS.EMPTY_USER_STATS)\n context.commit(AUTH_USER_STORE.MUTATIONS.CLEAR_AUTH_USER_TOKEN)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS, [])\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUTS)\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n router.push('/login')\n}\n\nexport const actions: ActionTree &\n IAuthUserActions = {\n [AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER](\n context: ActionContext\n ): void {\n if (\n window.localStorage.authToken &&\n !context.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n ) {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN,\n window.localStorage.authToken\n )\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n }\n // after logout in another tab\n if (\n !window.localStorage.authToken &&\n context.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n ) {\n removeAuthUserData(context)\n }\n },\n [AUTH_USER_STORE.ACTIONS.CONFIRM_ACCOUNT](\n context: ActionContext,\n payload: IUserAccountUpdatePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/account/confirm', { token: payload.token })\n .then((res) => {\n if (res.data.status === 'success') {\n const token = res.data.auth_token\n window.localStorage.setItem('authToken', token)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN, token)\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n },\n [AUTH_USER_STORE.ACTIONS.CONFIRM_EMAIL](\n context: ActionContext,\n payload: IUserAccountUpdatePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n api\n .post('/auth/email/update', { token: payload.token })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n if (payload.refreshUser) {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => {\n return router.push('/profile/edit/account')\n })\n }\n router.push('/profile/edit/account')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n },\n [AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('auth/profile')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n if (res.data.data.language) {\n context.dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n res.data.data.language\n )\n }\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n removeAuthUserData(context)\n }\n })\n .catch((error) => {\n if (error.message !== 'canceled') {\n handleError(context, error)\n removeAuthUserData(context)\n }\n })\n },\n [AUTH_USER_STORE.ACTIONS.LOGIN_OR_REGISTER](\n context: ActionContext,\n data: ILoginOrRegisterData\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n false\n )\n api\n .post(`/auth/${data.actionType}`, data.formData)\n .then((res) => {\n if (res.data.status === 'success') {\n if (data.actionType === 'login') {\n const token = res.data.auth_token\n window.localStorage.setItem('authToken', token)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN, token)\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() =>\n router.push(\n typeof data.redirectUrl === 'string' ? data.redirectUrl : '/'\n )\n )\n } else {\n router\n .push('/login')\n .then(() =>\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n true\n )\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.LOGOUT](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .post('auth/logout')\n .then((res) => {\n if (res.data.status === 'success') {\n removeAuthUserData(context)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PROFILE](\n context: ActionContext,\n payload: IUserPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n router.push('/profile')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_ACCOUNT](\n context: ActionContext,\n payload: IUserAccountPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n authApi\n .patch('auth/profile/edit/account', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PREFERENCES](\n context: ActionContext,\n payload: IUserPreferencesPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit/preferences', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n context\n .dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n res.data.data.language\n )\n .then(() => router.push('/profile/preferences'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.RESET_USER_SPORT_PREFERENCES](\n context: ActionContext,\n sportId: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .delete(`auth/profile/reset/sports/${sportId}`)\n .then((res) => {\n if (res.status === 204) {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n })\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_SPORT_PREFERENCES](\n context: ActionContext,\n payload: IUserSportPreferencesPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit/sports', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n })\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PICTURE](\n context: ActionContext,\n payload: IUserPicturePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n if (!payload.picture) {\n throw new Error('No file part')\n }\n const form = new FormData()\n form.append('file', payload.picture)\n authApi\n .post('auth/picture', form, {\n headers: {\n 'content-type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/profile'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.DELETE_ACCOUNT](\n context: ActionContext,\n payload: IUserDeletionPayload\n ): void {\n deleteUserAccount(context, payload)\n },\n [AUTH_USER_STORE.ACTIONS.DELETE_PICTURE](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .delete(`auth/picture`)\n .then((res) => {\n if (res.status === 204) {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/profile'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.SEND_PASSWORD_RESET_REQUEST](\n context: ActionContext,\n payload: IUserEmailPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/password/reset-request', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/password-reset/sent')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL](\n context: ActionContext,\n payload: IUserEmailPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/account/resend-confirmation', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/account-confirmation/email-sent')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.RESET_USER_PASSWORD](\n context: ActionContext,\n payload: IUserPasswordResetPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/password/update', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/password-reset/password-updated')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport {\n IAuthUserGetters,\n IAuthUserState,\n} from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree &\n IAuthUserGetters = {\n [AUTH_USER_STORE.GETTERS.AUTH_TOKEN]: (state: IAuthUserState) => {\n return state.authToken\n },\n [AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]: (state: IAuthUserState) => {\n return state.authUserProfile\n },\n [AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]: (state: IAuthUserState) => {\n return state.authToken !== null\n },\n [AUTH_USER_STORE.GETTERS.IS_ADMIN]: (state: IAuthUserState) => {\n return state.authUserProfile && state.authUserProfile.admin\n },\n [AUTH_USER_STORE.GETTERS.IS_REGISTRATION_SUCCESS]: (\n state: IAuthUserState\n ) => {\n return state.isRegistrationSuccess\n },\n [AUTH_USER_STORE.GETTERS.IS_SUCCESS]: (state: IAuthUserState) => {\n return state.isSuccess\n },\n [AUTH_USER_STORE.GETTERS.USER_LOADING]: (state: IAuthUserState) => {\n return state.loading\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport {\n IAuthUserState,\n TAuthUserMutations,\n} from '@/store/modules/authUser/types'\nimport { IAuthUserProfile } from '@/types/user'\n\nexport const mutations: MutationTree & TAuthUserMutations = {\n [AUTH_USER_STORE.MUTATIONS.CLEAR_AUTH_USER_TOKEN](state: IAuthUserState) {\n state.authToken = null\n state.authUserProfile = {}\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN](\n state: IAuthUserState,\n authToken: string\n ) {\n state.authToken = authToken\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE](\n state: IAuthUserState,\n authUserProfile: IAuthUserProfile\n ) {\n state.authUserProfile = authUserProfile\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS](\n state: IAuthUserState,\n isRegistrationSuccess: boolean\n ) {\n state.isRegistrationSuccess = isRegistrationSuccess\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS](\n state: IAuthUserState,\n isSuccess: boolean\n ) {\n state.isSuccess = isSuccess\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING](\n state: IAuthUserState,\n loading: boolean\n ) {\n state.loading = loading\n },\n}\n","import { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IAuthUserProfile } from '@/types/user'\n\nexport const authUserState: IAuthUserState = {\n authToken: null,\n authUserProfile: {},\n isSuccess: false,\n isRegistrationSuccess: false,\n loading: false,\n}\n","import { Module } from 'vuex'\n\nimport { actions } from '@/store/modules/authUser/actions'\nimport { getters } from '@/store/modules/authUser/getters'\nimport { mutations } from '@/store/modules/authUser/mutations'\nimport { authUserState } from '@/store/modules/authUser/state'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst authUser: Module = {\n state: authUserState,\n actions,\n getters,\n mutations,\n}\n\nexport default authUser\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\nimport { IOAuth2Actions, IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IOauth2ClientsPayload,\n IOAuth2ClientPayload,\n IOAuth2ClientAuthorizePayload,\n} from '@/types/oauth'\nimport { handleError } from '@/utils'\n\nconst get_client = (\n context: ActionContext,\n url: string\n) => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get(url)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(OAUTH2_STORE.MUTATIONS.SET_CLIENT, res.data.data.client)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree & IOAuth2Actions = {\n [OAUTH2_STORE.ACTIONS.AUTHORIZE_CLIENT](\n context: ActionContext,\n payload: IOAuth2ClientAuthorizePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n const form = new FormData()\n form.set('client_id', payload.client_id)\n form.set('response_type', payload.response_type)\n form.set('scope', payload.scope)\n form.set('confirm', 'true')\n if (payload.state) {\n form.set('state', payload.state)\n }\n if (payload.code_challenge) {\n form.set('code_challenge', payload.code_challenge)\n }\n if (payload.code_challenge_method) {\n form.set('code_challenge_method', payload.code_challenge_method)\n }\n\n authApi\n .post('oauth/authorize', form, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.status == 200 && res.data.redirect_url) {\n window.location.href = res.data.redirect_url\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.CREATE_CLIENT](\n context: ActionContext,\n payload: IOAuth2ClientPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .post('oauth/apps', payload)\n .then((res) => {\n if (res.data.status === 'created') {\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENT,\n res.data.data.client\n )\n router.push(`/profile/apps/${res.data.data.client.id}/created`)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.DELETE_CLIENT](\n context: ActionContext,\n id: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .delete(`oauth/apps/${id}`)\n .then((res) => {\n if (res.status === 204) {\n context\n .dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENTS)\n .then(() => router.push('/profile/apps'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_CLIENT_ID](\n context: ActionContext,\n client_id: string\n ): void {\n get_client(context, `oauth/apps/${client_id}`)\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_ID](\n context: ActionContext,\n id: number\n ): void {\n get_client(context, `oauth/apps/${id}/by_id`)\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENTS](\n context: ActionContext,\n payload: IOauth2ClientsPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('oauth/apps', {\n params: payload,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENTS,\n res.data.data.clients\n )\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENTS_PAGINATION,\n res.data.pagination\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.REVOKE_ALL_TOKENS](\n context: ActionContext,\n id: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, false)\n authApi\n .post(`oauth/apps/${id}/revoke`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, true)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { OAUTH2_STORE } from '@/store/constants'\nimport { IOAuth2Getters, IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree & IOAuth2Getters = {\n [OAUTH2_STORE.GETTERS.CLIENT]: (state: IOAuth2State) => state.client,\n [OAUTH2_STORE.GETTERS.CLIENTS]: (state: IOAuth2State) => state.clients,\n [OAUTH2_STORE.GETTERS.CLIENTS_PAGINATION]: (state: IOAuth2State) =>\n state.pagination,\n [OAUTH2_STORE.GETTERS.REVOCATION_SUCCESSFUL]: (state: IOAuth2State) =>\n state.revocationSuccessful,\n}\n","import { MutationTree } from 'vuex'\n\nimport { OAUTH2_STORE } from '@/store/constants'\nimport { IOAuth2State, TOAuth2Mutations } from '@/store/modules/oauth2/types'\nimport { IPagination } from '@/types/api'\nimport { IOAuth2Client } from '@/types/oauth'\n\nexport const mutations: MutationTree & TOAuth2Mutations = {\n [OAUTH2_STORE.MUTATIONS.SET_CLIENT](\n state: IOAuth2State,\n client: IOAuth2Client\n ) {\n state.client = client\n },\n [OAUTH2_STORE.MUTATIONS.EMPTY_CLIENT](state: IOAuth2State) {\n state.client = {}\n },\n [OAUTH2_STORE.MUTATIONS.SET_CLIENTS](\n state: IOAuth2State,\n clients: IOAuth2Client[]\n ) {\n state.clients = clients\n },\n [OAUTH2_STORE.MUTATIONS.SET_CLIENTS_PAGINATION](\n state: IOAuth2State,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL](\n state: IOAuth2State,\n revocationSuccessful: boolean\n ) {\n state.revocationSuccessful = revocationSuccessful\n },\n}\n","import { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IPagination } from '@/types/api'\nimport { IOAuth2Client } from '@/types/oauth'\n\nexport const oAuth2State: IOAuth2State = {\n client: {},\n clients: [],\n pagination: {},\n revocationSuccessful: false,\n}\n","import { Module } from 'vuex'\n\nimport { actions } from '@/store/modules/oauth2/actions'\nimport { getters } from '@/store/modules/oauth2/getters'\nimport { mutations } from '@/store/modules/oauth2/mutations'\nimport { oAuth2State } from '@/store/modules/oauth2/state'\nimport { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst oauth2: Module = {\n state: oAuth2State,\n actions,\n getters,\n mutations,\n}\n\nexport default oauth2\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport createI18n from '@/i18n'\nimport router from '@/router'\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootActions, IRootState } from '@/store/modules/root/types'\nimport { TAppConfigForm } from '@/types/application'\nimport { handleError } from '@/utils'\n\nconst { locale } = createI18n.global\n\nexport const actions: ActionTree & IRootActions = {\n [ROOT_STORE.ACTIONS.GET_APPLICATION_CONFIG](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING, true)\n authApi\n .get('config')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG,\n res.data.data\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING, false)\n )\n },\n [ROOT_STORE.ACTIONS.GET_APPLICATION_STATS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('stats/all')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_STATS,\n res.data.data\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [ROOT_STORE.ACTIONS.UPDATE_APPLICATION_CONFIG](\n context: ActionContext,\n payload: TAppConfigForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .patch('config', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG,\n res.data.data\n )\n router.push('/admin/application')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE](\n context: ActionContext,\n language: string\n ): void {\n document.querySelector('html')?.setAttribute('lang', language)\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_LANG, language)\n locale.value = language\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootGetters, IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree & IRootGetters = {\n [ROOT_STORE.GETTERS.APP_CONFIG]: (state: IRootState) => {\n return state.application.config\n },\n [ROOT_STORE.GETTERS.APP_LOADING]: (state: IRootState) => {\n return state.appLoading\n },\n [ROOT_STORE.GETTERS.APP_STATS]: (state: IRootState) => {\n return state.application.statistics\n },\n [ROOT_STORE.GETTERS.ERROR_MESSAGES]: (state: IRootState) => {\n return state.errorMessages\n },\n [ROOT_STORE.GETTERS.LANGUAGE]: (state: IRootState) => {\n return state.language\n },\n [ROOT_STORE.GETTERS.LOCALE]: (state: IRootState) => {\n return state.locale\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootState, TRootMutations } from '@/store/modules/root/types'\nimport { TAppConfig, IAppStatistics } from '@/types/application'\nimport { localeFromLanguage } from '@/utils/locales'\n\nexport const mutations: MutationTree & TRootMutations = {\n [ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES](state: IRootState) {\n state.errorMessages = null\n },\n [ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES](\n state: IRootState,\n errorMessages: string\n ) {\n state.errorMessages = errorMessages\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG](\n state: IRootState,\n config: TAppConfig\n ) {\n state.application.config = config\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING](\n state: IRootState,\n loading: boolean\n ) {\n state.appLoading = loading\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_STATS](\n state: IRootState,\n statistics: IAppStatistics\n ) {\n state.application.statistics = statistics\n },\n [ROOT_STORE.MUTATIONS.UPDATE_LANG](state: IRootState, language: string) {\n state.language = language\n state.locale = localeFromLanguage[language]\n },\n}\n","import { enUS } from 'date-fns/locale'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { IApplication } from '@/types/application'\n\nexport const state: IRootState = {\n root: true,\n language: 'en',\n locale: enUS,\n errorMessages: null,\n application: {\n statistics: {\n sports: 0,\n uploads_dir_size: 0,\n users: 0,\n workouts: 0,\n },\n },\n appLoading: false,\n}\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport { AUTH_USER_STORE, ROOT_STORE, SPORTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsActions, ISportsState } from '@/store/modules/sports/types'\nimport { ISportPayload } from '@/types/sports'\nimport { handleError } from '@/utils'\n\nexport const actions: ActionTree & ISportsActions = {\n [SPORTS_STORE.ACTIONS.GET_SPORTS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('sports')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n SPORTS_STORE.MUTATIONS.SET_SPORTS,\n res.data.data.sports\n )\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [SPORTS_STORE.ACTIONS.UPDATE_SPORTS](\n context: ActionContext,\n payload: ISportPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .patch(`sports/${payload.id}`, { is_active: payload.isActive })\n .then((res) => {\n if (res.data.status === 'success') {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { SPORTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsGetters, ISportsState } from '@/store/modules/sports/types'\n\nexport const getters: GetterTree & ISportsGetters = {\n [SPORTS_STORE.GETTERS.SPORTS]: (state: ISportsState) => state.sports,\n}\n","import { MutationTree } from 'vuex'\n\nimport { SPORTS_STORE } from '@/store/constants'\nimport { ISportsState, TSportsMutations } from '@/store/modules/sports/types'\nimport { ISport } from '@/types/sports'\n\nexport const mutations: MutationTree & TSportsMutations = {\n [SPORTS_STORE.MUTATIONS.SET_SPORTS](state: ISportsState, sports: ISport[]) {\n state.sports = sports\n },\n}\n","import { ISportsState } from '@/store/modules/sports/types'\n\nexport const sportsState: ISportsState = {\n sports: [],\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/sports/actions'\nimport { getters } from '@/store/modules/sports/getters'\nimport { mutations } from '@/store/modules/sports/mutations'\nimport { sportsState } from '@/store/modules/sports/state'\nimport { ISportsState } from '@/store/modules/sports/types'\n\nconst sports: Module = {\n state: sportsState,\n actions,\n getters,\n mutations,\n}\n\nexport default sports\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport { STATS_STORE, ROOT_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IStatisticsActions,\n IStatisticsState,\n} from '@/store/modules/statistics/types'\nimport { IUserStatisticsPayload } from '@/types/statistics'\nimport { handleError } from '@/utils'\n\nexport const actions: ActionTree &\n IStatisticsActions = {\n [STATS_STORE.ACTIONS.GET_USER_STATS](\n context: ActionContext,\n payload: IUserStatisticsPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get(`stats/${payload.username}/${payload.filterType}`, {\n params: payload.params,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n STATS_STORE.MUTATIONS.UPDATE_USER_STATS,\n res.data.data.statistics\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { STATS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IStatisticsGetters,\n IStatisticsState,\n} from '@/store/modules/statistics/types'\n\nexport const getters: GetterTree &\n IStatisticsGetters = {\n [STATS_STORE.GETTERS.USER_STATS]: (state: IStatisticsState) => {\n return state.statistics\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { STATS_STORE } from '@/store/constants'\nimport {\n IStatisticsState,\n TStatisticsMutations,\n} from '@/store/modules/statistics/types'\nimport { TStatisticsFromApi } from '@/types/statistics'\n\nexport const mutations: MutationTree & TStatisticsMutations =\n {\n [STATS_STORE.MUTATIONS.UPDATE_USER_STATS](\n state: IStatisticsState,\n statistics: TStatisticsFromApi\n ) {\n state.statistics = statistics\n },\n [STATS_STORE.MUTATIONS.EMPTY_USER_STATS](state: IStatisticsState) {\n state.statistics = {}\n },\n }\n","import { IStatisticsState } from '@/store/modules/statistics/types'\nimport { TStatisticsFromApi } from '@/types/statistics'\n\nexport const statisticsState: IStatisticsState = {\n statistics: {},\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/statistics/actions'\nimport { getters } from '@/store/modules/statistics/getters'\nimport { mutations } from '@/store/modules/statistics/mutations'\nimport { statisticsState } from '@/store/modules/statistics/state'\nimport { IStatisticsState } from '@/store/modules/statistics/types'\n\nconst statistics: Module = {\n state: statisticsState,\n actions,\n getters,\n mutations,\n}\n\nexport default statistics\n","import { GetterTree } from 'vuex'\n\nimport { USERS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { IUsersGetters, IUsersState } from '@/store/modules/users/types'\n\nexport const getters: GetterTree & IUsersGetters = {\n [USERS_STORE.GETTERS.USER]: (state: IUsersState) => {\n return state.user\n },\n [USERS_STORE.GETTERS.USERS]: (state: IUsersState) => {\n return state.users\n },\n [USERS_STORE.GETTERS.USERS_IS_SUCCESS]: (state: IUsersState) => {\n return state.isSuccess\n },\n [USERS_STORE.GETTERS.USERS_LOADING]: (state: IUsersState) => {\n return state.loading\n },\n [USERS_STORE.GETTERS.USERS_PAGINATION]: (state: IUsersState) => {\n return state.pagination\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { USERS_STORE } from '@/store/constants'\nimport { IUsersState, TUsersMutations } from '@/store/modules/users/types'\nimport { IPagination } from '@/types/api'\nimport { IUserProfile } from '@/types/user'\n\nexport const mutations: MutationTree & TUsersMutations = {\n [USERS_STORE.MUTATIONS.UPDATE_USER](state: IUsersState, user: IUserProfile) {\n state.user = user\n },\n [USERS_STORE.MUTATIONS.UPDATE_USER_IN_USERS](\n state: IUsersState,\n updatedUser: IUserProfile\n ) {\n state.users = state.users.map((user) => {\n if (user.username === updatedUser.username) {\n return updatedUser\n }\n return user\n })\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS](\n state: IUsersState,\n users: IUserProfile[]\n ) {\n state.users = users\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING](\n state: IUsersState,\n loading: boolean\n ) {\n state.loading = loading\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION](\n state: IUsersState,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS](\n state: IUsersState,\n isSuccess: boolean\n ) {\n state.isSuccess = isSuccess\n },\n}\n","import { IUsersState } from '@/store/modules/users/types'\nimport { IPagination } from '@/types/api'\nimport { IUserProfile } from '@/types/user'\n\nexport const usersState: IUsersState = {\n user: {},\n users: [],\n loading: false,\n isSuccess: false,\n pagination: {},\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/users/actions'\nimport { getters } from '@/store/modules/users/getters'\nimport { mutations } from '@/store/modules/users/mutations'\nimport { usersState } from '@/store/modules/users/state'\nimport { IUsersState } from '@/store/modules/users/types'\n\nconst users: Module = {\n state: usersState,\n actions,\n getters,\n mutations,\n}\n\nexport default users\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { ROOT_STORE, AUTH_USER_STORE, WORKOUTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { WorkoutsMutations } from '@/store/modules/workouts/enums'\nimport {\n IWorkoutsActions,\n IWorkoutsState,\n} from '@/store/modules/workouts/types'\nimport {\n IWorkout,\n IWorkoutForm,\n IWorkoutPayload,\n TWorkoutsPayload,\n} from '@/types/workouts'\nimport { handleError } from '@/utils'\n\nconst getWorkouts = (\n context: ActionContext,\n payload: TWorkoutsPayload,\n target: WorkoutsMutations\n): void => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('workouts', {\n params: payload,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(WORKOUTS_STORE.MUTATIONS[target], res.data.data.workouts)\n if (target === WorkoutsMutations['SET_USER_WORKOUTS']) {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUTS_PAGINATION,\n res.data.pagination\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree &\n IWorkoutsActions = {\n [WORKOUTS_STORE.ACTIONS.GET_CALENDAR_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_CALENDAR_WORKOUTS)\n getWorkouts(context, payload, WorkoutsMutations['SET_CALENDAR_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_USER_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['SET_USER_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_TIMELINE_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['SET_TIMELINE_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_MORE_TIMELINE_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['ADD_TIMELINE_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n const segmentUrl = payload.segmentId ? `/segment/${payload.segmentId}` : ''\n authApi\n .get(`workouts/${payload.workoutId}`)\n .then((res) => {\n const workout: IWorkout = res.data.data.workouts[0]\n if (res.data.status === 'success') {\n if (\n payload.segmentId &&\n (workout.segments.length === 0 ||\n !workout.segments[+payload.segmentId - 1])\n ) {\n throw new Error('WORKOUT_NOT_FOUND')\n }\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT,\n res.data.data.workouts[0]\n )\n if (res.data.data.workouts[0].with_gpx) {\n authApi\n .get(`workouts/${payload.workoutId}/chart_data${segmentUrl}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_CHART_DATA,\n res.data.data.chart_data\n )\n }\n })\n authApi\n .get(`workouts/${payload.workoutId}/gpx${segmentUrl}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_GPX,\n res.data.data.gpx\n )\n }\n })\n }\n } else {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n handleError(context, null)\n }\n })\n .catch((error) => {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.DELETE_WORKOUT](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .delete(`workouts/${payload.workoutId}`)\n .then(() => {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n router.push('/')\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.EDIT_WORKOUT](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .patch(`workouts/${payload.workoutId}`, payload.data)\n .then(() => {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n context\n .dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, {\n workoutId: payload.workoutId,\n })\n .then(() => {\n router.push({\n name: 'Workout',\n params: { workoutId: payload.workoutId },\n })\n })\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.ADD_WORKOUT](\n context: ActionContext,\n payload: IWorkoutForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n if (!payload.file) {\n throw new Error('No file part')\n }\n const form = new FormData()\n form.append('file', payload.file)\n form.append(\n 'data',\n `{\"sport_id\": ${payload.sport_id}, \"notes\": \"${payload.notes}\"}`\n )\n authApi\n .post('workouts', form, {\n headers: {\n 'content-type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.data.status === 'created') {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n const workout: IWorkout = res.data.data.workouts[0]\n router.push(\n res.data.data.workouts.length === 1\n ? `/workouts/${workout.id}`\n : '/'\n )\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX](\n context: ActionContext,\n payload: IWorkoutForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .post('workouts/no_gpx', payload)\n .then((res) => {\n if (res.data.status === 'created') {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n const workout: IWorkout = res.data.data.workouts[0]\n router.push(`/workouts/${workout.id}`)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { WORKOUTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IWorkoutsGetters,\n IWorkoutsState,\n} from '@/store/modules/workouts/types'\n\nexport const getters: GetterTree &\n IWorkoutsGetters = {\n [WORKOUTS_STORE.GETTERS.CALENDAR_WORKOUTS]: (state: IWorkoutsState) => {\n return state.calendar_workouts\n },\n [WORKOUTS_STORE.GETTERS.TIMELINE_WORKOUTS]: (state: IWorkoutsState) => {\n return state.timeline_workouts\n },\n [WORKOUTS_STORE.GETTERS.USER_WORKOUTS]: (state: IWorkoutsState) => {\n return state.user_workouts\n },\n [WORKOUTS_STORE.GETTERS.WORKOUT_DATA]: (state: IWorkoutsState) => {\n return state.workoutData\n },\n [WORKOUTS_STORE.GETTERS.WORKOUTS_PAGINATION]: (state: IWorkoutsState) => {\n return state.pagination\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { WORKOUTS_STORE } from '@/store/constants'\nimport {\n IWorkoutsState,\n TWorkoutsMutations,\n} from '@/store/modules/workouts/types'\nimport { IPagination } from '@/types/api'\nimport { IWorkout, IWorkoutApiChartData } from '@/types/workouts'\n\nexport const mutations: MutationTree & TWorkoutsMutations = {\n [WORKOUTS_STORE.MUTATIONS.ADD_TIMELINE_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.timeline_workouts = state.timeline_workouts.concat(workouts)\n },\n [WORKOUTS_STORE.MUTATIONS.SET_CALENDAR_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.calendar_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_TIMELINE_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.timeline_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_USER_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.user_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUTS_PAGINATION](\n state: IWorkoutsState,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT](\n state: IWorkoutsState,\n workout: IWorkout\n ) {\n state.workoutData.workout = workout\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_CHART_DATA](\n state: IWorkoutsState,\n chartData: IWorkoutApiChartData[]\n ) {\n state.workoutData.chartData = chartData\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_GPX](\n state: IWorkoutsState,\n gpx: string\n ) {\n state.workoutData.gpx = gpx\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING](\n state: IWorkoutsState,\n loading: boolean\n ) {\n state.workoutData.loading = loading\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_CALENDAR_WORKOUTS](state: IWorkoutsState) {\n state.calendar_workouts = []\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUTS](state: IWorkoutsState) {\n state.calendar_workouts = []\n state.user_workouts = []\n state.timeline_workouts = []\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT](state: IWorkoutsState) {\n state.workoutData = {\n gpx: '',\n loading: false,\n workout: {},\n chartData: [],\n }\n },\n}\n","import { IWorkoutsState } from '@/store/modules/workouts/types'\nimport { IPagination } from '@/types/api'\nimport { IWorkout } from '@/types/workouts'\n\nexport const workoutsState: IWorkoutsState = {\n calendar_workouts: [],\n timeline_workouts: [],\n pagination: {},\n user_workouts: [],\n workoutData: {\n gpx: '',\n loading: false,\n workout: {},\n chartData: [],\n },\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/workouts/actions'\nimport { getters } from '@/store/modules/workouts/getters'\nimport { mutations } from '@/store/modules/workouts/mutations'\nimport { workoutsState } from '@/store/modules/workouts/state'\nimport { IWorkoutsState } from '@/store/modules/workouts/types'\n\nconst workouts: Module = {\n state: workoutsState,\n actions,\n getters,\n mutations,\n}\n\nexport default workouts\n","import { Module, ModuleTree } from 'vuex'\n\nimport authUserModule from '@/store/modules/authUser'\nimport oAuthModule from '@/store/modules/oauth2'\nimport { actions } from '@/store/modules/root/actions'\nimport { getters } from '@/store/modules/root/getters'\nimport { mutations } from '@/store/modules/root/mutations'\nimport { state } from '@/store/modules/root/state'\nimport { IRootState } from '@/store/modules/root/types'\nimport sportsModule from '@/store/modules/sports'\nimport statsModule from '@/store/modules/statistics'\nimport usersModule from '@/store/modules/users'\nimport workoutsModule from '@/store/modules/workouts'\n\nconst modules: ModuleTree = {\n authUserModule,\n oAuthModule,\n sportsModule,\n statsModule,\n usersModule,\n workoutsModule,\n}\n\nconst root: Module = {\n state,\n actions,\n getters,\n mutations,\n modules,\n}\n\nexport default root\n","import { createStore } from 'vuex'\n\nimport root from '@/store/modules/root'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst store = createStore(root)\n\nexport default store\n","export enum WorkoutsActions {\n ADD_WORKOUT = 'ADD_WORKOUT',\n ADD_WORKOUT_WITHOUT_GPX = 'ADD_WORKOUT_WITHOUT_GPX',\n DELETE_WORKOUT = 'DELETE_WORKOUT',\n EDIT_WORKOUT = 'EDIT_WORKOUT',\n GET_CALENDAR_WORKOUTS = 'GET_CALENDAR_WORKOUTS',\n GET_USER_WORKOUTS = 'GET_USER_WORKOUTS',\n GET_TIMELINE_WORKOUTS = 'GET_TIMELINE_WORKOUTS',\n GET_MORE_TIMELINE_WORKOUTS = 'GET_MORE_TIMELINE_WORKOUTS',\n GET_WORKOUT_DATA = 'GET_WORKOUT_DATA',\n}\n\nexport enum WorkoutsGetters {\n CALENDAR_WORKOUTS = 'CALENDAR_WORKOUTS',\n TIMELINE_WORKOUTS = 'TIMELINE_WORKOUTS',\n USER_WORKOUTS = 'USER_WORKOUTS',\n WORKOUT_DATA = 'WORKOUT_DATA',\n WORKOUTS_PAGINATION = 'WORKOUTS_PAGINATION',\n}\n\nexport enum WorkoutsMutations {\n ADD_TIMELINE_WORKOUTS = 'ADD_TIMELINE_WORKOUTS',\n EMPTY_WORKOUTS = 'EMPTY_WORKOUTS',\n EMPTY_CALENDAR_WORKOUTS = 'EMPTY_CALENDAR_WORKOUTS',\n EMPTY_WORKOUT = 'EMPTY_WORKOUT',\n SET_CALENDAR_WORKOUTS = 'SET_CALENDAR_WORKOUTS',\n SET_TIMELINE_WORKOUTS = 'SET_TIMELINE_WORKOUTS',\n SET_USER_WORKOUTS = 'SET_USER_WORKOUTS',\n SET_WORKOUT = 'SET_WORKOUT',\n SET_WORKOUT_GPX = 'SET_WORKOUT_GPX',\n SET_WORKOUT_CHART_DATA = 'SET_WORKOUT_CHART_DATA',\n SET_WORKOUT_LOADING = 'SET_WORKOUT_LOADING',\n SET_WORKOUTS_PAGINATION = 'SET_WORKOUTS_PAGINATION',\n}\n","import { useStore as VuexStore } from 'vuex'\n\nimport { Store } from '@/store/types'\n\nexport function useStore(): Store {\n return VuexStore() as Store\n}\n","import { LocationQuery } from 'vue-router'\n\nimport { IQueryOptions, TPaginationPayload } from '@/types/api'\n\nexport const sortList: string[] = ['asc', 'desc']\nexport const defaultPage = 1\nexport const defaultPerPage = 10\n\nexport const getNumberQueryValue = (\n queryValue: string | (string | null)[] | null,\n defaultValue: number\n): number => {\n return queryValue && typeof queryValue === 'string' && +queryValue > 0\n ? +queryValue\n : defaultValue\n}\n\nexport const getStringQueryValue = (\n queryValue: string | (string | null)[] | null,\n availableValues: string[],\n defaultValue: string\n): string => {\n return queryValue &&\n typeof queryValue === 'string' &&\n availableValues.includes(queryValue)\n ? queryValue\n : defaultValue\n}\n\nexport const getQuery = (\n locationQuery: LocationQuery,\n orderByList: string[],\n defaultOrderBy: string,\n options?: IQueryOptions\n): TPaginationPayload => {\n const queryOptions = options || {}\n const defaultSort = queryOptions.defaultSort || 'asc'\n const query = {}\n\n query.page = getNumberQueryValue(locationQuery.page, defaultPage)\n query.per_page = getNumberQueryValue(locationQuery.per_page, defaultPerPage)\n query.order = getStringQueryValue(locationQuery.order, sortList, defaultSort)\n query.order_by = getStringQueryValue(\n locationQuery.order_by,\n orderByList,\n defaultOrderBy\n )\n if (typeof locationQuery.q === 'string') {\n query.q = locationQuery.q\n } else {\n delete query.q\n }\n\n return query\n}\n\nexport const workoutsPayloadKeys = [\n 'from',\n 'to',\n 'ave_speed_from',\n 'ave_speed_to',\n 'max_speed_from',\n 'max_speed_to',\n 'distance_from',\n 'distance_to',\n 'duration_from',\n 'duration_to',\n 'sport_id',\n]\n\nconst getRange = (stop: number, start = 1): number[] => {\n return Array.from({ length: stop - start + 1 }, (_, i) => start + i)\n}\n\nexport const rangePagination = (\n pages: number,\n currentPage: number\n): (string | number)[] => {\n if (pages < 0) {\n return []\n }\n\n if (pages < 9) {\n return getRange(pages)\n }\n\n let pagination: (string | number)[] = [1, 2]\n if (currentPage < 4) {\n pagination = pagination.concat([3, 4, 5])\n } else if (currentPage < 6) {\n pagination = pagination.concat(getRange(currentPage + 2, 3))\n } else {\n pagination = pagination.concat(['...'])\n if (currentPage < pages - 2) {\n pagination = pagination.concat(getRange(currentPage + 2, currentPage - 2))\n }\n }\n if (currentPage + 2 <= pages - 2) {\n pagination = pagination.concat(['...'])\n pagination = pagination.concat(getRange(pages, pages - 1))\n } else {\n if (\n pagination[pagination.length - 1] !== '...' &&\n pagination[pagination.length - 1] >= pages - 2 &&\n pagination[pagination.length - 1] < pages\n ) {\n pagination = pagination.concat(\n getRange(pages, +pagination[pagination.length - 1] + 1)\n )\n } else {\n pagination = pagination.concat(\n getRange(\n pages,\n currentPage < pages - 3 ? currentPage + 3 : currentPage - 5\n )\n )\n }\n }\n\n return pagination\n}\n","import {\n addDays,\n addMonths,\n addYears,\n endOfMonth,\n endOfWeek,\n format,\n startOfMonth,\n startOfWeek,\n startOfYear,\n} from 'date-fns'\nimport { utcToZonedTime } from 'date-fns-tz'\n\nimport createI18n from '@/i18n'\nimport { localeFromLanguage } from '@/utils/locales'\n\nconst { locale } = createI18n.global\n\nexport const getStartDate = (\n duration: string,\n day: Date,\n weekStartingMonday: boolean\n): Date => {\n switch (duration) {\n case 'week':\n return startOfWeek(day, { weekStartsOn: weekStartingMonday ? 1 : 0 })\n case 'year':\n return startOfYear(day)\n case 'month':\n return startOfMonth(day)\n default:\n throw new Error(\n `Invalid duration, expected: \"week\", \"month\", \"year\", got: \"${duration}\"`\n )\n }\n}\n\nexport const incrementDate = (duration: string, day: Date): Date => {\n switch (duration) {\n case 'week':\n return addDays(day, 7)\n case 'year':\n return addYears(day, 1)\n case 'month':\n return addMonths(day, 1)\n default:\n throw new Error(\n `Invalid duration, expected: \"week\", \"month\", \"year\", got: \"${duration}\"`\n )\n }\n}\n\nexport const getDateWithTZ = (dateInUTC: string, tz: string): Date => {\n return utcToZonedTime(new Date(dateInUTC), tz)\n}\n\nexport const getCalendarStartAndEnd = (\n date: Date,\n weekStartingMonday: boolean\n): Record => {\n const monthStart = startOfMonth(date)\n const monthEnd = endOfMonth(date)\n const weekStartsOn = weekStartingMonday ? 1 : 0\n return {\n start: startOfWeek(monthStart, { weekStartsOn }),\n end: endOfWeek(monthEnd, { weekStartsOn }),\n }\n}\n\nexport const formatWorkoutDate = (\n dateTime: Date,\n dateFormat: string | null = null,\n timeFormat: string | null = null\n): Record => {\n if (!dateFormat) {\n dateFormat = 'yyyy/MM/dd'\n }\n dateFormat = getDateFormat(dateFormat, locale.value)\n if (!timeFormat) {\n timeFormat = 'HH:mm'\n }\n return {\n workout_date: format(dateTime, dateFormat, {\n locale: localeFromLanguage[locale.value],\n }),\n workout_time: format(dateTime, timeFormat),\n }\n}\n\nconst availableDateFormats = [\n 'MM/dd/yyyy',\n 'dd/MM/yyyy',\n 'yyyy-MM-dd',\n 'date_string',\n]\nconst dateStringFormats: Record = {\n de: 'do MMM yyyy',\n en: 'MMM. do, yyyy',\n fr: 'd MMM yyyy',\n // nb: 'do MMM yyyy',\n}\n\nexport const getDateFormat = (dateFormat: string, language: string): string => {\n return dateFormat === 'date_string' ? dateStringFormats[language] : dateFormat\n}\n\nexport const formatDate = (\n dateString: string,\n timezone: string,\n dateFormat: string,\n withTime = true,\n language: string | null = null\n): string => {\n if (!language) {\n language = locale.value\n }\n return format(\n getDateWithTZ(dateString, timezone),\n `${getDateFormat(dateFormat, language)}${withTime ? ' HH:mm' : ''}`,\n { locale: localeFromLanguage[language] }\n )\n}\n\nexport const availableDateFormatOptions = (\n inputDate: string,\n timezone: string,\n language: string | null = null\n) => {\n const l: string = language ? language : locale.value\n const options: Record[] = []\n availableDateFormats.map((df) => {\n const dateFormat = getDateFormat(df, l)\n options.push({\n label: `${dateFormat} - ${formatDate(\n inputDate,\n timezone,\n dateFormat,\n false,\n l\n )}`,\n value: df,\n })\n })\n return options\n}\n","const suffixes = ['bytes', 'KB', 'MB', 'GB', 'TB']\n\nexport const getReadableFileSize = (\n fileSize: number,\n asText = true\n): string | Record => {\n const i = Math.floor(Math.log(fileSize) / Math.log(1024))\n if (!fileSize) {\n return asText ? '0 bytes' : { size: '0', suffix: 'bytes' }\n }\n const size = (fileSize / Math.pow(1024, i)).toFixed(1)\n const suffix = suffixes[i]\n return asText ? `${size}${suffix}` : { size, suffix }\n}\n\nexport const getFileSizeInMB = (fileSize: number): number => {\n const value = fileSize / 1048576\n return (!fileSize && 0) || +value.toFixed(2)\n}\n","import { AxiosError } from 'axios'\nimport { ActionContext } from 'vuex'\n\nimport { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsState } from '@/store/modules/sports/types'\nimport { IStatisticsState } from '@/store/modules/statistics/types'\nimport { IUsersState } from '@/store/modules/users/types'\nimport { IWorkoutsState } from '@/store/modules/workouts/types'\n\nexport const getApiUrl = (): string => {\n return process.env.NODE_ENV === 'production'\n ? '/api/'\n : `${process.env.VUE_APP_API_URL}/api/`\n}\n\nexport const handleError = (\n context:\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext,\n error: AxiosError | null,\n msg = 'UNKNOWN'\n): void => {\n // if request is cancelled, no error to display\n if (error && error.message === 'canceled') {\n return\n }\n\n // if stored token is blacklisted, disconnect user\n if (\n error?.response?.status === 401 &&\n error.response.data.error === 'invalid_token'\n ) {\n localStorage.removeItem('authToken')\n context.dispatch(AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER)\n return\n }\n\n const errorMessages = !error\n ? msg\n : error.response\n ? error.response.status === 413\n ? 'file size is greater than the allowed size'\n : error.response.data.message\n ? error.response.data.message\n : msg\n : error.message\n ? error.message\n : msg\n context.commit(\n ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES,\n errorMessages.includes('\\n')\n ? errorMessages\n .split('\\n')\n .filter((m: string) => m !== '')\n .map((m: string) => `api.ERROR.${m}`)\n : `api.ERROR.${errorMessages}`\n )\n}\n","/* eslint-disable import/no-duplicates */\nimport { Locale } from 'date-fns'\nimport { de, enUS, fr } from 'date-fns/locale'\n\nimport createI18n from '@/i18n'\n\nexport const localeFromLanguage: Record = {\n de: de,\n en: enUS,\n fr: fr,\n // nb: nb, // disabled for now\n}\n\nexport const languageLabels: Record = {\n de: 'Deutsch',\n en: 'English',\n fr: 'Français',\n // nb: 'Norsk bokmål', // disabled for now\n}\n\nconst { availableLocales } = createI18n.global\nexport const availableLanguages = availableLocales.map((l) => {\n return { label: languageLabels[l], value: l }\n})\n","import { ISport, ITranslatedSport, TActiveStatus } from '@/types/sports'\nimport { IWorkout } from '@/types/workouts'\n\nexport const sportColors: Record = {\n 'Cycling (Sport)': '#4c9792',\n 'Cycling (Transport)': '#88af98',\n 'Cycling (Virtual)': '#64a360',\n Hiking: '#bb757c',\n 'Mountain Biking': '#d4b371',\n 'Mountain Biking (Electric)': '#fc9d6f',\n Rowing: '#fcce72',\n Running: '#835b83',\n 'Skiing (Alpine)': '#67a4bd',\n 'Skiing (Cross Country)': '#9498d0',\n Snowshoes: '#5780a8',\n Trail: '#09a98a',\n Walking: '#838383',\n}\n\nexport const sportIdColors = (sports: ISport[]): Record => {\n const colors: Record = {}\n sports.map(\n (sport) =>\n (colors[sport.id] = sport.color ? sport.color : sportColors[sport.label])\n )\n return colors\n}\n\nconst sortSports = (a: ITranslatedSport, b: ITranslatedSport): number => {\n const sportATranslatedLabel = a.translatedLabel.toLowerCase()\n const sportBTranslatedLabel = b.translatedLabel.toLowerCase()\n return sportATranslatedLabel > sportBTranslatedLabel\n ? 1\n : sportATranslatedLabel < sportBTranslatedLabel\n ? -1\n : 0\n}\n\nexport const translateSports = (\n sports: ISport[],\n t: CallableFunction,\n activeStatus: TActiveStatus = 'all',\n sportsToInclude: number[] = []\n): ITranslatedSport[] =>\n sports\n .filter((sport) =>\n activeStatus === 'all'\n ? true\n : sportsToInclude.includes(sport.id) || sport[activeStatus]\n )\n .map((sport) => ({\n ...sport,\n translatedLabel: t(`sports.${sport.label}.LABEL`),\n }))\n .sort(sortSports)\n\nexport const getSportLabel = (workout: IWorkout, sports: ISport[]): string => {\n return sports\n .filter((sport) => sport.id === workout.sport_id)\n .map((sport) => sport.label)[0]\n}\n\nexport const getSportColor = (\n workout: IWorkout,\n sports: ISport[]\n): string | null => {\n return sports\n .filter((sport) => sport.id === workout.sport_id)\n .map((sport) => sport.color)[0]\n}\n","import {\n addMonths,\n addWeeks,\n addYears,\n endOfMonth,\n endOfWeek,\n endOfYear,\n format,\n startOfMonth,\n startOfWeek,\n startOfYear,\n subMonths,\n subWeeks,\n subYears,\n} from 'date-fns'\n\nimport createI18n from '@/i18n'\nimport { IChartDataset } from '@/types/chart'\nimport { ISport } from '@/types/sports'\nimport {\n IStatisticsChartData,\n IStatisticsDateParams,\n TStatisticsDatasetKeys,\n TStatisticsDatasets,\n TStatisticsFromApi,\n} from '@/types/statistics'\nimport { incrementDate, getStartDate, getDateFormat } from '@/utils/dates'\nimport { localeFromLanguage } from '@/utils/locales'\nimport { sportColors } from '@/utils/sports'\nimport { convertStatsDistance } from '@/utils/units'\n\nconst { locale } = createI18n.global\n\nconst dateFormats: Record> = {\n week: {\n api: 'yyyy-MM-dd',\n chart: 'MM/dd/yyyy',\n },\n month: {\n api: 'yyyy-MM',\n chart: 'MM/yyyy',\n },\n year: {\n api: 'yyyy',\n chart: 'yyyy',\n },\n}\n\nexport const datasetKeys: TStatisticsDatasetKeys[] = [\n 'average_speed',\n 'nb_workouts',\n 'total_duration',\n 'total_distance',\n 'total_ascent',\n 'total_descent',\n]\n\nexport const getDateKeys = (\n params: IStatisticsDateParams,\n weekStartingMonday: boolean\n): Date[] => {\n const days = []\n for (\n let day = getStartDate(params.duration, params.start, weekStartingMonday);\n day <= params.end;\n day = incrementDate(params.duration, day)\n ) {\n days.push(day)\n }\n return days\n}\n\nconst getStatisticsChartDataset = (\n sportLabel: string,\n color: string,\n isLineChart = false\n): IChartDataset => {\n const dataset: IChartDataset = {\n label: sportLabel,\n backgroundColor: [color],\n data: [],\n }\n if (isLineChart) {\n dataset.type = 'line'\n dataset.borderColor = [color]\n dataset.spanGaps = true\n }\n return dataset\n}\n\nexport const getDatasets = (displayedSports: ISport[]): TStatisticsDatasets => {\n const datasets: TStatisticsDatasets = {\n average_speed: [],\n nb_workouts: [],\n total_distance: [],\n total_duration: [],\n total_ascent: [],\n total_descent: [],\n }\n displayedSports.map((sport) => {\n const color = sport.color ? sport.color : sportColors[sport.label]\n datasets.average_speed.push(\n getStatisticsChartDataset(sport.label, color, true)\n )\n datasets.nb_workouts.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_distance.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_duration.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_ascent.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_descent.push(getStatisticsChartDataset(sport.label, color))\n })\n return datasets\n}\n\nexport const convertStatsValue = (\n datasetKey: TStatisticsDatasetKeys,\n value: number,\n useImperialUnits: boolean\n): number => {\n switch (datasetKey) {\n case 'average_speed':\n case 'total_distance':\n case 'total_ascent':\n case 'total_descent':\n return convertStatsDistance(\n ['average_speed', 'total_distance'].includes(datasetKey) ? 'km' : 'm',\n value,\n useImperialUnits\n )\n default:\n case 'nb_workouts':\n case 'total_duration':\n return value\n }\n}\n\nexport const formatStats = (\n params: IStatisticsDateParams,\n weekStartingMonday: boolean,\n sports: ISport[],\n displayedSportsId: number[],\n apiStats: TStatisticsFromApi,\n useImperialUnits: boolean,\n userDateFormat: string\n): IStatisticsChartData => {\n const dayKeys = getDateKeys(params, weekStartingMonday)\n const dateFormat = dateFormats[params.duration]\n const displayedSports = sports.filter((sport) =>\n displayedSportsId.includes(sport.id)\n )\n const labels: string[] = []\n const datasets = getDatasets(displayedSports)\n const sportsId: Record = {}\n displayedSports.map(\n (displayedSport) => (sportsId[displayedSport.label] = displayedSport.id)\n )\n\n dayKeys.map((key) => {\n const date: string = format(key, dateFormat.api)\n const label: string = format(\n key,\n params.duration === 'week'\n ? getDateFormat(userDateFormat, locale.value)\n : dateFormat.chart,\n { locale: localeFromLanguage[locale.value] }\n )\n labels.push(label)\n datasetKeys.map((datasetKey) => {\n datasets[datasetKey].map((dataset) => {\n dataset.data.push(\n date in apiStats && sportsId[dataset.label] in apiStats[date]\n ? convertStatsValue(\n datasetKey,\n apiStats[date][sportsId[dataset.label]][datasetKey],\n useImperialUnits\n )\n : datasetKey === 'average_speed'\n ? null\n : 0\n )\n })\n })\n })\n return {\n labels,\n datasets,\n }\n}\n\nexport const getStatsDateParams = (\n date: Date,\n timeFrame: string,\n weekStartingMonday: boolean\n): IStatisticsDateParams => {\n const weekStartsOn = weekStartingMonday ? 1 : 0\n const start =\n timeFrame === 'year'\n ? startOfYear(subYears(date, 9))\n : timeFrame === 'week'\n ? startOfWeek(subMonths(date, 2), { weekStartsOn })\n : startOfMonth(subMonths(date, 11)) // month\n const end =\n timeFrame === 'year'\n ? endOfYear(date)\n : timeFrame === 'week'\n ? endOfWeek(date, { weekStartsOn })\n : endOfMonth(date) // month\n return {\n duration: timeFrame,\n end,\n start,\n }\n}\n\nexport const updateChartParams = (\n chartParams: IStatisticsDateParams,\n backward: boolean,\n weekStartingMonday: boolean\n): IStatisticsDateParams => {\n const { duration, start, end } = chartParams\n const weekStartsOn = weekStartingMonday ? 1 : 0\n return {\n duration,\n end:\n duration === 'year'\n ? endOfYear(backward ? subYears(end, 1) : addYears(end, 1))\n : duration === 'week'\n ? endOfWeek(backward ? subWeeks(end, 1) : addWeeks(end, 1), {\n weekStartsOn,\n })\n : endOfMonth(backward ? subMonths(end, 1) : addMonths(end, 1)),\n start:\n duration === 'year'\n ? startOfYear(backward ? subYears(start, 1) : addYears(start, 1))\n : duration === 'week'\n ? startOfWeek(backward ? subWeeks(start, 1) : addWeeks(start, 1), {\n weekStartsOn,\n })\n : startOfMonth(backward ? subMonths(start, 1) : addMonths(start, 1)),\n }\n}\n","import { IUnit, TFactor, TUnit } from '@/types/units'\n\nexport const units: Record = {\n ft: {\n unit: 'ft',\n system: 'imperial',\n multiplier: 1,\n defaultTarget: 'm',\n },\n mi: {\n unit: 'mi',\n system: 'imperial',\n multiplier: 5280,\n defaultTarget: 'km',\n },\n m: {\n unit: 'm',\n system: 'metric',\n multiplier: 1,\n defaultTarget: 'ft',\n },\n km: {\n unit: 'm',\n system: 'metric',\n multiplier: 1000,\n defaultTarget: 'mi',\n },\n}\n\nconst factors: TFactor = {\n metric: {\n imperial: 3.280839895,\n metric: 1,\n },\n imperial: {\n metric: 1 / 3.280839895,\n imperial: 1,\n },\n}\n\nexport const convertDistance = (\n distance: number,\n from: TUnit,\n to: TUnit,\n digits: number | null = 3\n): number => {\n const unitFrom = units[from]\n const unitTo = units[to]\n const convertedDistance =\n (distance * unitFrom.multiplier * factors[unitFrom.system][unitTo.system]) /\n unitTo.multiplier\n if (digits !== null) {\n return parseFloat(convertedDistance.toFixed(digits))\n }\n return convertedDistance\n}\n\nexport const convertStatsDistance = (\n unitFrom: TUnit,\n value: number,\n useImperialUnits: boolean\n): number => {\n const unitTo = useImperialUnits ? units[unitFrom].defaultTarget : unitFrom\n return useImperialUnits ? convertDistance(value, unitFrom, unitTo, 2) : value\n}\n","import {\n IWorkout,\n IWorkoutApiChartData,\n IWorkoutChartData,\n TCoordinates,\n TWorkoutDatasets,\n} from '@/types/workouts'\nimport { convertStatsDistance } from '@/utils/units'\n\nexport const getDatasets = (\n chartData: IWorkoutApiChartData[],\n t: CallableFunction,\n useImperialUnits: boolean\n): IWorkoutChartData => {\n const datasets: TWorkoutDatasets = {\n speed: {\n label: t('workouts.SPEED'),\n backgroundColor: ['#FFFFFF'],\n borderColor: ['#8884d8'],\n borderWidth: 2,\n data: [],\n yAxisID: 'ySpeed',\n },\n elevation: {\n label: t('workouts.ELEVATION'),\n backgroundColor: ['#e5e5e5'],\n borderColor: ['#cccccc'],\n borderWidth: 1,\n fill: true,\n data: [],\n yAxisID: 'yElevation',\n },\n }\n const distance_labels: unknown[] = []\n const duration_labels: unknown[] = []\n const coordinates: TCoordinates[] = []\n\n chartData.map((data) => {\n distance_labels.push(data.distance)\n duration_labels.push(data.duration)\n datasets.speed.data.push(\n convertStatsDistance('km', data.speed, useImperialUnits)\n )\n datasets.elevation.data.push(\n convertStatsDistance('m', data.elevation, useImperialUnits)\n )\n coordinates.push({ latitude: data.latitude, longitude: data.longitude })\n })\n\n return { distance_labels, duration_labels, datasets, coordinates }\n}\n\nexport const getDonutDatasets = (\n workouts: IWorkout[]\n): Record> => {\n const total = workouts.length\n if (total === 0) {\n return {}\n }\n\n const datasets: Record> = {}\n workouts.map((workout) => {\n if (!datasets[workout.sport_id]) {\n datasets[workout.sport_id] = {\n count: 0,\n percentage: 0,\n }\n }\n datasets[workout.sport_id].count += 1\n datasets[workout.sport_id].percentage =\n datasets[workout.sport_id].count / total\n })\n\n return datasets\n}\n\nexport const defaultOrder = {\n order: 'desc',\n order_by: 'workout_date',\n}\n","\n\n\n","import { render } from \"./Card.vue?vue&type=template&id=ad374c24\"\nconst script = {}\n\nimport \"./Card.vue?vue&type=style&index=0&id=ad374c24&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-72463173\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"table-selects\" }\nconst _hoisted_2 = [\"value\"]\nconst _hoisted_3 = [\"value\"]\nconst _hoisted_4 = [\"value\"]\nconst _hoisted_5 = [\"value\"]\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = [\"value\"]\n\nimport { toRefs } from 'vue'\n\n import { TPaginationPayload } from '@/types/api'\n\n interface Props {\n order_by: string[]\n query: TPaginationPayload\n sort: string[]\n message: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'FilterSelects',\n props: {\n order_by: null,\n query: null,\n sort: null,\n message: null\n },\n emits: ['updateSelect'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n order_by: string[]\n query: TPaginationPayload\n sort: string[]\n message: string\n }\n\n \n\n \n\n const { order_by, query, sort, message } = toRefs(props)\n const perPage = [10, 25, 50, 100]\n\n function onSelectUpdate(event: Event & { target: HTMLInputElement }) {\n emit('updateSelect', event.target.id, event.target.value)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.ORDER_BY.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"order_by\",\n id: \"order_by\",\n value: _unref(query).order_by,\n onChange: onSelectUpdate\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(order_by), (order) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: order,\n key: order\n }, _toDisplayString(_ctx.$t(`${_unref(message)}.${order.toUpperCase()}`)), 9, _hoisted_3))\n }), 128))\n ], 40, _hoisted_2)\n ]),\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.ORDER.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"order\",\n id: \"order\",\n value: _unref(query).order,\n onChange: onSelectUpdate\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(sort), (order) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: order,\n key: order\n }, _toDisplayString(_ctx.$t(`common.SELECTS.ORDER.${order.toUpperCase()}`)), 9, _hoisted_5))\n }), 128))\n ], 40, _hoisted_4)\n ]),\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.PER_PAGE.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"per_page\",\n id: \"per_page\",\n value: _unref(query).per_page,\n onChange: onSelectUpdate\n }, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(perPage, (nb) => {\n return _createElementVNode(\"option\", {\n value: nb,\n key: nb\n }, _toDisplayString(nb), 9, _hoisted_7)\n }), 64))\n ], 40, _hoisted_6)\n ])\n ]))\n}\n}\n\n})","import script from \"./FilterSelects.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./FilterSelects.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./FilterSelects.vue?vue&type=style&index=0&id=72463173&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-72463173\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./ErrorImg.vue?vue&type=template&id=e620aed4\"\nimport script from \"./ErrorImg.vue?vue&type=script&lang=js\"\nexport * from \"./ErrorImg.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-b60bfa80\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"error\" }\nconst _hoisted_2 = { class: \"error-content\" }\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n title: string\n message: string\n buttonText: string\n path?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Error',\n props: {\n title: null,\n message: null,\n buttonText: null,\n path: { default: '/' }\n },\n setup(__props: any) {\n\nconst props = __props as { title: string, message: string, buttonText: string, path: string }\n\n \n const { buttonText, title, message, path } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"h1\", null, _toDisplayString(_unref(title)), 1),\n _createElementVNode(\"p\", null, _toDisplayString(_unref(message)), 1),\n (_unref(buttonText))\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push(_unref(path)))),\n class: \"upper\"\n }, _toDisplayString(_unref(buttonText)), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./Error.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Error.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Error.vue?vue&type=style&index=0&id=b60bfa80&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b60bfa80\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nimport { Ref, onMounted, ref, toRefs, withDefaults, onUnmounted } from 'vue'\n\n import Error from '@/components/Common/Error.vue'\n interface Props {\n target?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'NotFound',\n props: {\n target: { default: 'PAGE' }\n },\n setup(__props: any) {\n\nconst props = __props as { target: string }\n\n \n const { target } = toRefs(props)\n const timer = ref()\n const errorDisplayed: Ref = ref(false)\n\n onMounted(() => displayError())\n\n function displayError() {\n timer.value = setTimeout(() => {\n errorDisplayed.value = true\n }, 500)\n }\n\n onUnmounted(() => {\n if (timer.value) {\n clearTimeout(timer.value)\n }\n })\n\nreturn (_ctx: any,_cache: any) => {\n return (errorDisplayed.value)\n ? (_openBlock(), _createBlock(Error, {\n key: 0,\n title: \"404\",\n message: _ctx.$t(`error.NOT_FOUND.${_unref(target)}`),\n \"button-text\": _ctx.$t('common.HOME')\n }, null, 8, [\"message\", \"button-text\"]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./NotFound.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NotFound.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderSlot as _renderSlot, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3a9a4a65\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n class: \"pagination-center\",\n \"aria-label\": \"navigation\"\n}\nconst _hoisted_2 = { class: \"pagination\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { toRefs } from 'vue'\n\n import { IPagination, TPaginationPayload } from '@/types/api'\n import { IOauth2ClientsPayload } from '@/types/oauth'\n import { TWorkoutsPayload } from '@/types/workouts'\n import { rangePagination } from '@/utils/api'\n\n interface Props {\n pagination: IPagination\n path: string\n query: TWorkoutsPayload | TPaginationPayload | IOauth2ClientsPayload\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Pagination',\n props: {\n pagination: null,\n path: null,\n query: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n pagination: IPagination\n path: string\n query: TWorkoutsPayload | TPaginationPayload | IOauth2ClientsPayload\n }\n\n \n\n const { pagination, path, query } = toRefs(props)\n\n function getQuery(\n page: number,\n cursor?: number\n ): TPaginationPayload | IOauth2ClientsPayload {\n const newQuery = Object.assign({}, query.value)\n newQuery.page = cursor ? page + cursor : page\n return newQuery\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"nav\", _hoisted_1, [\n _createElementVNode(\"ul\", _hoisted_2, [\n _createElementVNode(\"li\", {\n class: _normalizeClass([\"page-prev\", { disabled: !_unref(pagination).has_prev }])\n }, [\n _createVNode(_component_router_link, {\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(_unref(pagination).page, -1) },\n disabled: !_unref(pagination).has_prev\n }, {\n default: _withCtx(({ navigate }) => [\n _renderSlot(_ctx.$slots, \"default\", {\n onClick: ($event: any) => (_unref(pagination).has_next ? navigate : null)\n }, () => [\n _createTextVNode(_toDisplayString(_ctx.$t('api.PAGINATION.PREVIOUS')) + \" \", 1),\n _hoisted_3\n ])\n ]),\n _: 3\n }, 8, [\"to\", \"disabled\"])\n ], 2),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(rangePagination)(_unref(pagination).pages, _unref(pagination).page), (page) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: page,\n class: _normalizeClass([\"page\", { active: page === _unref(pagination).page }])\n }, [\n (page === '...')\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, \" ... \"))\n : (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(+page) }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(page), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]))\n ], 2))\n }), 128)),\n _createElementVNode(\"li\", {\n class: _normalizeClass([\"page-next\", { disabled: !_unref(pagination).has_next }])\n }, [\n _createVNode(_component_router_link, {\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(_unref(pagination).page, 1) },\n disabled: !_unref(pagination).has_next\n }, {\n default: _withCtx(({ navigate }) => [\n _renderSlot(_ctx.$slots, \"default\", {\n onClick: ($event: any) => (_unref(pagination).has_next ? navigate : null)\n }, () => [\n _createTextVNode(_toDisplayString(_ctx.$t('api.PAGINATION.NEXT')) + \" \", 1),\n _hoisted_5\n ])\n ]),\n _: 3\n }, 8, [\"to\", \"disabled\"])\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./Pagination.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Pagination.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Pagination.vue?vue&type=style&index=0&id=3a9a4a65&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3a9a4a65\"]])\n\nexport default __exports__","import { zxcvbnOptions } from '@zxcvbn-ts/core'\n\nexport const setZxcvbnOptions = async (language: string) => {\n const zxcvbnCommonPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-common'\n )\n const zxcvbnEnPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-en'\n )\n const zxcvbnFrPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-fr'\n )\n const zxcvbnDePackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-de'\n )\n const zxcvbnLangPackages: Record = {\n de: zxcvbnDePackage,\n en: zxcvbnEnPackage,\n fr: zxcvbnFrPackage,\n // no package available for norwegian bokmal, fallback on english\n nb: zxcvbnEnPackage,\n }\n const zxcvbnPackage = zxcvbnLangPackages[language]\n const options = {\n graphs: zxcvbnCommonPackage.default.adjacencyGraphs,\n dictionary: {\n ...zxcvbnCommonPackage.default.dictionary,\n ...zxcvbnPackage.default.dictionary,\n },\n }\n zxcvbnOptions.setOptions(options)\n}\n\nexport const getPasswordStrength = (strength: number): string => {\n switch (strength) {\n case 2:\n return 'AVERAGE'\n case 3:\n return 'GOOD'\n case 4:\n return 'STRONG'\n default:\n return 'WEAK'\n }\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74e71df5\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"password-strength\" }\nconst _hoisted_2 = [\"value\"]\nconst _hoisted_3 = {\n key: 0,\n class: \"password-strength-details\"\n}\nconst _hoisted_4 = { class: \"password-strength-value\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"info-box\"\n}\nconst _hoisted_6 = { class: \"password-feedback\" }\n\nimport { zxcvbn } from '@zxcvbn-ts/core'\n import {\n ComputedRef,\n Ref,\n computed,\n ref,\n onBeforeMount,\n toRefs,\n watch,\n } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { useStore } from '@/use/useStore'\n import { getPasswordStrength, setZxcvbnOptions } from '@/utils/password'\n\n interface Props {\n password: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordStength',\n props: {\n password: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n password: string\n }\n\n \n const { password } = toRefs(props)\n\n const store = useStore()\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const passwordScore: Ref = ref(0)\n const passwordStrength: Ref = ref('')\n const passwordSuggestions: Ref = ref([])\n const backgroundSize = ref('0% 100%')\n\n onBeforeMount(async () => await setZxcvbnOptions(language.value))\n\n function calculatePasswordStrength(password: string) {\n const zxcvbnResult = zxcvbn(password)\n passwordScore.value = zxcvbnResult.score\n passwordStrength.value = getPasswordStrength(passwordScore.value)\n passwordSuggestions.value = zxcvbnResult.feedback.suggestions\n backgroundSize.value = (passwordScore.value * 100) / 4 + '% 100%'\n }\n\n watch(\n () => language.value,\n async (newLanguageValue) => {\n await setZxcvbnOptions(newLanguageValue)\n }\n )\n watch(\n () => password.value,\n async (newPassword) => {\n if (isSuccess.value) {\n passwordStrength.value = ''\n } else {\n calculatePasswordStrength(newPassword)\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"input\", {\n class: _normalizeClass([\"password-slider\", `strength-${passwordScore.value}`]),\n style: _normalizeStyle({ backgroundSize: backgroundSize.value }),\n type: \"range\",\n value: passwordScore.value,\n min: \"0\",\n max: \"4\",\n step: \"1\"\n }, null, 14, _hoisted_2),\n (passwordStrength.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('user.PASSWORD_STRENGTH.LABEL')) + \": \" + _toDisplayString(_ctx.$t(`user.PASSWORD_STRENGTH.${passwordStrength.value}`)), 1),\n (passwordSuggestions.value.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"ul\", _hoisted_6, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(passwordSuggestions.value, (suggestion) => {\n return (_openBlock(), _createElementBlock(\"li\", { key: suggestion }, _toDisplayString(_ctx.$t(`user.PASSWORD_STRENGTH.SUGGESTIONS.${suggestion}`)), 1))\n }), 128))\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./PasswordStength.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordStength.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordStength.vue?vue&type=style&index=0&id=74e71df5&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74e71df5\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, vModelDynamic as _vModelDynamic, createElementVNode as _createElementVNode, withDirectives as _withDirectives, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5a126514\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"password-input\" }\nconst _hoisted_2 = [\"id\", \"disabled\", \"placeholder\", \"required\", \"type\"]\nconst _hoisted_3 = {\n key: 0,\n class: \"form-info\"\n}\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { Ref, ref, toRefs, watch, withDefaults } from 'vue'\n\n import PasswordStrength from '@/components/Common/PasswordStength.vue'\n\n interface Props {\n checkStrength?: boolean\n disabled?: boolean\n id?: string\n password?: string\n placeholder?: string\n required?: boolean\n }\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordInput',\n props: {\n checkStrength: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n id: { default: 'password' },\n password: { default: '' },\n placeholder: null,\n required: { type: Boolean, default: false }\n },\n emits: ['updatePassword', 'passwordError'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { checkStrength: boolean, disabled: boolean, id: string, password: string, placeholder?: string, required: boolean }\n\n \n const { checkStrength, disabled, id, password, placeholder, required } =\n toRefs(props)\n\n const showPassword: Ref = ref(false)\n const passwordValue: Ref = ref('')\n\n \n\n function togglePassword() {\n showPassword.value = !showPassword.value\n }\n function updatePassword(event: Event & { target: HTMLInputElement }) {\n emit('updatePassword', event.target.value)\n }\n function invalidPassword() {\n emit('passwordError')\n }\n\n watch(\n () => password.value,\n (newPassword) => {\n if (newPassword === '') {\n passwordValue.value = ''\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _withDirectives(_createElementVNode(\"input\", {\n id: _unref(id),\n disabled: _unref(disabled),\n placeholder: _unref(placeholder),\n required: _unref(required),\n type: showPassword.value ? 'text' : 'password',\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((passwordValue).value = $event)),\n minlength: \"8\",\n onInput: updatePassword,\n onInvalid: invalidPassword\n }, null, 40, _hoisted_2), [\n [_vModelDynamic, passwordValue.value]\n ]),\n _createElementVNode(\"div\", {\n class: \"show-password\",\n onClick: togglePassword\n }, [\n _createTextVNode(_toDisplayString(_ctx.$t(`user.${showPassword.value ? 'HIDE' : 'SHOW'}_PASSWORD`)) + \" \", 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa\", `fa-eye${showPassword.value ? '-slash' : ''}`]),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n (_unref(checkStrength))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _hoisted_4,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.PASSWORD_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(checkStrength))\n ? (_openBlock(), _createBlock(PasswordStrength, {\n key: 1,\n password: passwordValue.value\n }, null, 8, [\"password\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./PasswordInput.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordInput.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordInput.vue?vue&type=style&index=0&id=5a126514&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5a126514\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"map-attribution\" }, [\n /*#__PURE__*/_createElementVNode(\"span\", { class: \"map-attribution-text\" }, \"©\"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n class: \"map-attribution-text\",\n href: \"https://www.openstreetmap.org/copyright\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \" OpenStreetMap \")\n], -1)\n\nimport { toRefs, withDefaults } from 'vue'\n\n import { IWorkout } from '@/types/workouts'\n import { getApiUrl } from '@/utils'\n\n interface Props {\n workout: IWorkout\n displayHover?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StaticMap',\n props: {\n workout: null,\n displayHover: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { workout: IWorkout, displayHover: boolean }\n\n \n const { displayHover } = toRefs(props)\n const imageUrl = `${getApiUrl()}workouts/map/${props.workout.map}`\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"static-map\", { 'display-hover': _unref(displayHover) }])\n }, [\n (_unref(displayHover))\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: imageUrl,\n alt: \"\"\n }))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"bg-map-image\",\n style: _normalizeStyle({\n backgroundImage: `url(${imageUrl})`,\n })\n }, null, 4)),\n _hoisted_1\n ], 2))\n}\n}\n\n})","import script from \"./StaticMap.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StaticMap.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StaticMap.vue?vue&type=style&index=0&id=6b7e4baf&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-d5e9b348\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"start-chart\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { key: 1 }\nconst _hoisted_4 = { class: \"chart-radio\" }\nconst _hoisted_5 = [\"checked\"]\nconst _hoisted_6 = [\"checked\"]\nconst _hoisted_7 = [\"checked\"]\nconst _hoisted_8 = { key: 0 }\nconst _hoisted_9 = [\"checked\"]\nconst _hoisted_10 = { key: 1 }\nconst _hoisted_11 = [\"checked\"]\nconst _hoisted_12 = { key: 2 }\nconst _hoisted_13 = [\"checked\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Chart = _resolveComponent(\"Chart\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.hideChartIfNoData && _ctx.emptyStats)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('workouts.NO_WORKOUTS')), 1))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_distance\",\n checked: _ctx.displayedData === 'total_distance',\n onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_5),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_duration\",\n checked: _ctx.displayedData === 'total_duration',\n onClick: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_6),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DURATION')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"nb_workouts\",\n checked: _ctx.displayedData === 'nb_workouts',\n onClick: _cache[2] || (_cache[2] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_7),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.WORKOUT', 2)), 1)\n ]),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_8, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"average_speed\",\n checked: _ctx.displayedData === 'average_speed',\n onClick: _cache[3] || (_cache[3] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_9),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.AVERAGE_SPEED')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_10, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_ascent\",\n checked: _ctx.displayedData === 'total_ascent',\n onClick: _cache[4] || (_cache[4] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_11),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.ASCENT')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_12, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_descent\",\n checked: _ctx.displayedData === 'total_descent',\n onClick: _cache[5] || (_cache[5] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_13),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DESCENT')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n (_ctx.labels.length > 0)\n ? (_openBlock(), _createBlock(_component_Chart, {\n key: 0,\n datasets: _ctx.datasets,\n labels: _ctx.labels,\n displayedData: _ctx.displayedData,\n displayedSportIds: _ctx.displayedSportIds,\n fullStats: _ctx.fullStats,\n useImperialUnits: _ctx.user.imperial_units\n }, null, 8, [\"datasets\", \"labels\", \"displayedData\", \"displayedSportIds\", \"fullStats\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n}","import { resolveComponent as _resolveComponent, mergeProps as _mergeProps, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"chart\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BarChart = _resolveComponent(\"BarChart\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_BarChart, _mergeProps(_ctx.barChartProps, { class: \"bar-chart\" }), null, 16)\n ]))\n}","export const formatDuration = (\n totalSeconds: number,\n formatWithUnits = false\n): string => {\n let days = '0'\n if (formatWithUnits) {\n days = String(Math.floor(totalSeconds / 86400))\n totalSeconds %= 86400\n }\n const hours = String(Math.floor(totalSeconds / 3600)).padStart(2, '0')\n totalSeconds %= 3600\n const minutes = String(Math.floor(totalSeconds / 60)).padStart(2, '0')\n const seconds = String(totalSeconds % 60).padStart(2, '0')\n if (formatWithUnits) {\n return `${days === '0' ? '' : `${days}d `}${\n hours === '00' ? '' : `${hours}h `\n }${minutes}m ${seconds}s`\n }\n return `${hours === '00' ? '' : `${hours}:`}${minutes}:${seconds}`\n}\n","import { TStatisticsDatasetKeys } from '@/types/statistics'\nimport { formatDuration } from '@/utils/duration'\nimport { units } from '@/utils/units'\n\nexport const formatTooltipValue = (\n displayedData: TStatisticsDatasetKeys,\n value: number,\n useImperialUnits: boolean,\n formatWithUnits = true,\n unitFrom = 'km'\n): string => {\n const unitTo = useImperialUnits ? units[unitFrom].defaultTarget : unitFrom\n switch (displayedData) {\n case 'average_speed':\n return `${value.toFixed(2)} ${unitTo}/h`\n case 'total_duration':\n return formatDuration(value, formatWithUnits)\n case 'total_distance':\n case 'total_ascent':\n case 'total_descent':\n return `${value.toFixed(2)} ${unitTo}`\n default:\n return value.toString()\n }\n}\n","\n import { ChartData, ChartOptions, LayoutItem } from 'chart.js'\n import { ComputedRef, PropType, computed, defineComponent } from 'vue'\n import { BarChart, useBarChart } from 'vue-chart-3'\n import { useI18n } from 'vue-i18n'\n\n import { IChartDataset } from '@/types/chart'\n import { TStatisticsDatasetKeys } from '@/types/statistics'\n import { formatTooltipValue } from '@/utils/tooltip'\n\n export default defineComponent({\n name: 'Chart',\n components: {\n BarChart,\n },\n props: {\n datasets: {\n type: Object as PropType,\n required: true,\n },\n labels: {\n type: Object as PropType,\n required: true,\n },\n displayedData: {\n type: String as PropType,\n required: true,\n },\n displayedSportIds: {\n type: Array as PropType,\n required: true,\n },\n fullStats: {\n type: Boolean,\n required: true,\n },\n useImperialUnits: {\n type: Boolean,\n required: true,\n },\n },\n setup(props) {\n const { t } = useI18n()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function getNumber(value: any): number {\n return isNaN(value) ? 0 : +value\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function getSum(total: any, value: any): number {\n return getNumber(total) + getNumber(value)\n }\n function getUnit(displayedData: string) {\n return ['total_ascent', 'total_descent'].includes(displayedData)\n ? 'm'\n : 'km'\n }\n const chartData: ComputedRef> = computed(() => ({\n labels: props.labels,\n // workaround to avoid dataset modification\n datasets: JSON.parse(JSON.stringify(props.datasets)),\n }))\n const options = computed>(() => ({\n responsive: true,\n maintainAspectRatio: true,\n animation: false,\n layout: {\n padding: {\n top: props.fullStats ? 40 : 22,\n },\n },\n scales: {\n x: {\n stacked: true,\n grid: {\n drawOnChartArea: false,\n },\n },\n y: {\n stacked: props.displayedData !== 'average_speed',\n grid: {\n drawOnChartArea: false,\n },\n ticks: {\n maxTicksLimit: 6,\n callback: function (value) {\n return formatTooltipValue(\n props.displayedData,\n +value,\n props.useImperialUnits,\n false,\n getUnit(props.displayedData)\n )\n },\n },\n afterFit: function (scale: LayoutItem) {\n scale.width = props.fullStats ? 90 : 60\n },\n },\n },\n plugins: {\n datalabels: {\n anchor: 'end',\n align: 'end',\n color: function (context) {\n return props.displayedData === 'average_speed' &&\n context.dataset.backgroundColor\n ? // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n context.dataset.backgroundColor[0]\n : '#666666'\n },\n rotation: function (context) {\n return props.fullStats && context.chart.chartArea.width < 580\n ? 310\n : 0\n },\n display: function (context) {\n return props.fullStats && context.chart.chartArea.width < 300\n ? false\n : props.displayedData === 'average_speed'\n ? props.displayedSportIds.length == 1\n ? 'auto'\n : false\n : true\n },\n formatter: function (value, context) {\n if (props.displayedData === 'average_speed') {\n return formatTooltipValue(\n props.displayedData,\n value,\n props.useImperialUnits,\n false\n )\n } else {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const total: number = context.chart.data.datasets\n .map((d) => d.data[context.dataIndex])\n .reduce((total, value) => getSum(total, value), 0)\n return context.datasetIndex ===\n props.displayedSportIds.length - 1 && total > 0\n ? formatTooltipValue(\n props.displayedData,\n total,\n props.useImperialUnits,\n false,\n getUnit(props.displayedData)\n )\n : null\n }\n },\n },\n legend: {\n display: false,\n },\n tooltip: {\n interaction: {\n intersect: true,\n mode: 'index',\n position:\n props.displayedData === 'average_speed' ? 'nearest' : 'average',\n },\n filter: function (tooltipItem) {\n return tooltipItem.formattedValue !== '0'\n },\n callbacks: {\n label: function (context) {\n let label = t(`sports.${context.dataset.label}.LABEL`) || ''\n if (label) {\n label += ': '\n }\n if (context.parsed.y !== null) {\n label += formatTooltipValue(\n props.displayedData,\n context.parsed.y,\n props.useImperialUnits,\n true,\n getUnit(props.displayedData)\n )\n }\n return label\n },\n footer: function (tooltipItems) {\n if (props.displayedData === 'average_speed') {\n return ''\n }\n let sum = 0\n tooltipItems.map((tooltipItem) => {\n sum += tooltipItem.parsed.y\n })\n return (\n `${t('common.TOTAL')}: ` +\n formatTooltipValue(\n props.displayedData,\n sum,\n props.useImperialUnits,\n true,\n getUnit(props.displayedData)\n )\n )\n },\n },\n },\n },\n }))\n const { barChartProps } = useBarChart({\n chartData,\n options,\n })\n return { barChartProps }\n },\n })\n","import { render } from \"./Chart.vue?vue&type=template&id=6c8b76cd&ts=true\"\nimport script from \"./Chart.vue?vue&type=script&lang=ts\"\nexport * from \"./Chart.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n import { format } from 'date-fns'\n import {\n ComputedRef,\n PropType,\n Ref,\n computed,\n defineComponent,\n ref,\n watch,\n onBeforeMount,\n } from 'vue'\n\n import Chart from '@/components/Common/StatsChart/Chart.vue'\n import { STATS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import {\n IStatisticsChartData,\n TStatisticsDatasetKeys,\n IStatisticsDateParams,\n TStatisticsFromApi,\n IStatisticsParams,\n } from '@/types/statistics'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatStats } from '@/utils/statistics'\n\n export default defineComponent({\n name: 'UserMonthStats',\n components: {\n Chart,\n },\n props: {\n sports: {\n type: Object as PropType,\n required: true,\n },\n user: {\n type: Object as PropType,\n required: true,\n },\n chartParams: {\n type: Object as PropType,\n required: true,\n },\n displayedSportIds: {\n type: Array as PropType,\n default: () => [],\n },\n fullStats: {\n type: Boolean,\n default: false,\n },\n hideChartIfNoData: {\n type: Boolean,\n default: false,\n },\n },\n setup(props) {\n const store = useStore()\n\n const displayedData: Ref = ref('total_distance')\n const statistics: ComputedRef = computed(\n () => store.getters[STATS_STORE.GETTERS.USER_STATS]\n )\n const formattedStats: ComputedRef = computed(() =>\n formatStats(\n props.chartParams,\n props.user.weekm,\n props.sports,\n props.displayedSportIds,\n statistics.value,\n props.user.imperial_units,\n props.user.date_format\n )\n )\n\n onBeforeMount(() =>\n getStatistics(getApiParams(props.chartParams, props.user))\n )\n\n function getStatistics(apiParams: IStatisticsParams) {\n store.dispatch(STATS_STORE.ACTIONS.GET_USER_STATS, {\n username: props.user.username,\n filterType: 'by_time',\n params: apiParams,\n })\n }\n function updateDisplayData(\n event: Event & {\n target: HTMLInputElement & { name: TStatisticsDatasetKeys }\n }\n ) {\n displayedData.value = event.target.name\n }\n function getApiParams(\n chartParams: IStatisticsDateParams,\n user: IAuthUserProfile\n ): IStatisticsParams {\n return {\n from: format(chartParams.start, 'yyyy-MM-dd'),\n to: format(chartParams.end, 'yyyy-MM-dd'),\n time:\n chartParams.duration === 'week'\n ? `week${user.weekm ? 'm' : ''}`\n : chartParams.duration,\n }\n }\n\n watch(\n () => props.chartParams,\n async (newParams) => {\n getStatistics(getApiParams(newParams, props.user))\n }\n )\n\n return {\n datasets: computed(\n () => formattedStats.value.datasets[displayedData.value]\n ),\n labels: computed(() => formattedStats.value.labels),\n emptyStats: computed(() => Object.keys(statistics.value).length === 0),\n displayedData,\n updateDisplayData,\n }\n },\n })\n","import { render } from \"./index.vue?vue&type=template&id=d5e9b348&scoped=true&ts=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=d5e9b348&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-d5e9b348\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-20291951\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"box user-header\" }\nconst _hoisted_2 = { class: \"user-details\" }\nconst _hoisted_3 = { class: \"user-name\" }\nconst _hoisted_4 = { class: \"user-stats\" }\nconst _hoisted_5 = { class: \"user-stat\" }\nconst _hoisted_6 = { class: \"stat-number\" }\nconst _hoisted_7 = { class: \"stat-label\" }\nconst _hoisted_8 = { class: \"user-stat\" }\nconst _hoisted_9 = { class: \"stat-label\" }\nconst _hoisted_10 = { class: \"user-stat hide-small\" }\nconst _hoisted_11 = { class: \"stat-number\" }\nconst _hoisted_12 = { class: \"stat-label\" }\n\nimport { computed, ComputedRef, toRefs } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE } from '@/store/constants'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserHeader',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const { user } = toRefs(props)\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_unref(user).username), 1),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"span\", _hoisted_6, _toDisplayString(_unref(user).nb_workouts), 1),\n _createElementVNode(\"span\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.WORKOUT', _unref(user).nb_workouts)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createVNode(_component_Distance, {\n distance: _unref(user).total_distance,\n unitFrom: \"km\",\n digits: 0,\n displayUnit: false,\n useImperialUnits: _unref(authUser).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_unref(authUser).imperial_units ? 'miles' : 'km'), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_unref(user).nb_sports), 1),\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('workouts.SPORT', _unref(user).nb_sports)), 1)\n ])\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./UserHeader.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserHeader.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserHeader.vue?vue&type=style&index=0&id=20291951&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-20291951\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-217519af\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"user-infos\",\n class: \"description-list\"\n}\nconst _hoisted_2 = {\n key: 1,\n class: \"info-box success-message\"\n}\nconst _hoisted_3 = {\n key: 4,\n class: \"email-form form-box\"\n}\nconst _hoisted_4 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_5 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_6 = { class: \"form-buttons\" }\nconst _hoisted_7 = {\n class: \"confirm\",\n type: \"submit\"\n}\nconst _hoisted_8 = [\"onClick\"]\nconst _hoisted_9 = { key: 5 }\nconst _hoisted_10 = { class: \"user-bio\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"profile-buttons\"\n}\nconst _hoisted_12 = [\"onClick\"]\nconst _hoisted_13 = {\n key: 1,\n class: \"profile-buttons\"\n}\n\nimport { format } from 'date-fns'\n import {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n withDefaults,\n watch,\n onUnmounted,\n } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate, getDateFormat } from '@/utils/dates'\n import { localeFromLanguage } from '@/utils/locales'\n\n interface Props {\n user: IUserProfile\n fromAdmin?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserInfos',\n props: {\n user: null,\n fromAdmin: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { user: IUserProfile, fromAdmin: boolean }\n\n \n\n const store = useStore()\n\n const { user, fromAdmin } = toRefs(props)\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const registrationDate = computed(() =>\n props.user.created_at\n ? formatDate(\n props.user.created_at,\n authUser.value.timezone,\n authUser.value.date_format\n )\n : ''\n )\n const birthDate = computed(() =>\n props.user.birth_date\n ? format(\n new Date(props.user.birth_date),\n `${getDateFormat(authUser.value.date_format, language.value)}`,\n { locale: localeFromLanguage[language.value] }\n )\n : ''\n )\n const isSuccess = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS_IS_SUCCESS]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const displayModal: Ref = ref('')\n const formErrors = ref(false)\n const displayUserEmailForm: Ref = ref(false)\n const newUserEmail: Ref = ref('')\n const currentAction: Ref = ref('')\n\n function updateDisplayModal(value: string) {\n displayModal.value = value\n if (value !== '') {\n store.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n }\n }\n function deleteUserAccount(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.DELETE_USER_ACCOUNT, { username })\n }\n function resetUserPassword(username: string) {\n currentAction.value = 'password-reset'\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n resetPassword: true,\n })\n }\n function confirmUserAccount(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n activate: true,\n })\n }\n function displayEmailForm() {\n resetErrorsAndSuccess()\n newUserEmail.value = user.value.email_to_confirm\n ? user.value.email_to_confirm\n : ''\n displayUserEmailForm.value = true\n currentAction.value = 'email-update'\n }\n function hideEmailForm() {\n newUserEmail.value = ''\n displayUserEmailForm.value = false\n }\n function updateUserEmail(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n new_email: newUserEmail.value,\n })\n }\n function resetErrorsAndSuccess() {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n currentAction.value = ''\n }\n\n onUnmounted(() => resetErrorsAndSuccess())\n\n watch(\n () => isSuccess.value,\n (newIsSuccess) => {\n if (newIsSuccess) {\n updateDisplayModal('')\n hideEmailForm()\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_AlertMessage = _resolveComponent(\"AlertMessage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: \n displayModal.value === 'delete'\n ? 'admin.CONFIRM_USER_ACCOUNT_DELETION'\n : 'admin.CONFIRM_USER_PASSWORD_RESET'\n ,\n strongMessage: _unref(user).username,\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (\n displayModal.value === 'delete'\n ? deleteUserAccount(_unref(user).username)\n : resetUserPassword(_unref(user).username)\n )),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal('')))\n }, null, 8, [\"title\", \"message\", \"strongMessage\"]))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\n `admin.${\n currentAction.value === 'password-reset'\n ? 'PASSWORD_RESET'\n : 'USER_EMAIL_UPDATE'\n }_SUCCESSFUL`\n )), 1))\n : _createCommentVNode(\"\", true),\n (!_unref(user).is_active)\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 2,\n message: \"user.THIS_USER_ACCOUNT_IS_INACTIVE\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 3,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (displayUserEmailForm.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (updateUserEmail(_unref(user).username)), [\"prevent\"]))\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.CURRENT_EMAIL')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"email\",\n type: \"email\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_unref(user).email) = $event)),\n disabled: \"\"\n }, null, 512), [\n [_vModelText, _unref(user).email]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_5, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.NEW_EMAIL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"new-email\",\n type: \"email\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((newUserEmail).value = $event))\n }, null, 512), [\n [_vModelText, newUserEmail.value]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"button\", _hoisted_7, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(hideEmailForm, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_8)\n ])\n ], 34)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(registrationDate)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).first_name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LAST_NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).last_name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.BIRTH_DATE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(birthDate)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LOCATION')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).location), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.BIO')) + \":\", 1),\n _createElementVNode(\"dd\", _hoisted_10, _toDisplayString(_unref(user).bio), 1)\n ]),\n (_unref(fromAdmin))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n (_unref(authUser).username !== _unref(user).username)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"danger\",\n onClick: _cache[5] || (_cache[5] = _withModifiers(($event: any) => (updateDisplayModal('delete')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.DELETE_USER')), 1))\n : _createCommentVNode(\"\", true),\n (!_unref(user).is_active)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 1,\n onClick: _cache[6] || (_cache[6] = _withModifiers(($event: any) => (confirmUserAccount(_unref(user).username)), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.ACTIVATE_USER_ACCOUNT')), 1))\n : _createCommentVNode(\"\", true),\n (_unref(authUser).username !== _unref(user).username)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 2,\n onClick: _withModifiers(displayEmailForm, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('admin.UPDATE_USER_EMAIL')), 9, _hoisted_12))\n : _createCommentVNode(\"\", true),\n (\n _unref(authUser).username !== _unref(user).username &&\n _unref(appConfig).is_email_sending_enabled\n )\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 3,\n onClick: _cache[7] || (_cache[7] = _withModifiers(($event: any) => (updateDisplayModal('reset')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.RESET_USER_PASSWORD')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.$router.go(-1)))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createElementVNode(\"button\", {\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.$router.push('/profile/edit')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]))\n ]))\n}\n}\n\n})","import script from \"./UserInfos.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserInfos.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserInfos.vue?vue&type=style&index=0&id=217519af&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-217519af\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, withDirectives as _withDirectives, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-b3c885de\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-form\" }\nconst _hoisted_2 = {\n key: 2,\n class: \"info-box success-message\"\n}\nconst _hoisted_3 = { class: \"form-items\" }\nconst _hoisted_4 = [\"disabled\", \"placeholder\"]\nconst _hoisted_5 = {\n key: 1,\n class: \"form-info\"\n}\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = [\"disabled\", \"placeholder\"]\nconst _hoisted_8 = {\n key: 3,\n class: \"form-info\"\n}\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = { key: 3 }\nconst _hoisted_12 = { key: 0 }\nconst _hoisted_13 = { key: 4 }\nconst _hoisted_14 = { class: \"account\" }\nconst _hoisted_15 = { key: 5 }\n\nimport {\n ComputedRef,\n computed,\n onUnmounted,\n reactive,\n ref,\n toRefs,\n watch,\n withDefaults,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import PasswordInput from '@/components/Common/PasswordInput.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { ILoginRegisterFormData } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n action: string\n token?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAuthForm',\n props: {\n action: null,\n token: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { action: string, token: string }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { action } = toRefs(props)\n const formData: ILoginRegisterFormData = reactive({\n username: '',\n email: '',\n password: '',\n })\n const buttonText: ComputedRef = computed(() =>\n getButtonText(props.action)\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const isRegistrationSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_REGISTRATION_SUCCESS]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const registration_disabled: ComputedRef = computed(\n () =>\n props.action === 'register' && !appConfig.value.is_registration_enabled\n )\n const sendingEmailDisabled: ComputedRef = computed(\n () =>\n ['reset-request', 'account-confirmation-resend'].includes(props.action) &&\n !appConfig.value.is_email_sending_enabled\n )\n const formErrors = ref(false)\n\n function getButtonText(action: string): string {\n switch (action) {\n case 'reset-request':\n case 'reset':\n return 'buttons.SUBMIT'\n default:\n return `buttons.${props.action.toUpperCase()}`\n }\n }\n function invalidateForm() {\n formErrors.value = true\n }\n function updatePassword(password: string) {\n formData.password = password\n }\n function onSubmit(actionType: string) {\n switch (actionType) {\n case 'reset':\n if (!props.token) {\n return store.commit(\n ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES,\n 'user.INVALID_TOKEN'\n )\n }\n return store.dispatch(AUTH_USER_STORE.ACTIONS.RESET_USER_PASSWORD, {\n password: formData.password,\n token: props.token,\n })\n case 'reset-request':\n return store.dispatch(\n AUTH_USER_STORE.ACTIONS.SEND_PASSWORD_RESET_REQUEST,\n {\n email: formData.email,\n }\n )\n case 'account-confirmation-resend':\n return store.dispatch(\n AUTH_USER_STORE.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL,\n {\n email: formData.email,\n }\n )\n default:\n formData['language'] = language.value\n store.dispatch(AUTH_USER_STORE.ACTIONS.LOGIN_OR_REGISTER, {\n actionType,\n formData,\n redirectUrl: route.query.from,\n })\n }\n }\n function resetFormData() {\n formData.username = ''\n formData.email = ''\n formData.password = ''\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\n watch(\n () => route.path,\n async () => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n store.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n false\n )\n formErrors.value = false\n resetFormData()\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_AlertMessage = _resolveComponent(\"AlertMessage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n id: \"user-auth-form\",\n class: _normalizeClass(`${\n ['reset', 'reset-request'].includes(_unref(action)) ? _unref(action) : 'user-form'\n }`)\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"form-box\", {\n disabled: _unref(registration_disabled),\n }])\n }, [\n (_unref(registration_disabled))\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 0,\n message: \"user.REGISTER_DISABLED\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(sendingEmailDisabled))\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 1,\n message: \"admin.EMAIL_SENDING_DISABLED\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess) || _unref(isRegistrationSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\n `user.PROFILE.SUCCESSFUL_${\n _unref(isRegistrationSuccess)\n ? `REGISTRATION${\n _unref(appConfig).is_email_sending_enabled ? '_WITH_EMAIL' : ''\n }`\n : 'UPDATE'\n }`\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (onSubmit(_unref(action))), [\"prevent\"]))\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(action) === 'register')\n ? _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n id: \"username\",\n disabled: _unref(registration_disabled),\n required: \"\",\n pattern: \"[a-zA-Z0-9_]+\",\n minlength: \"3\",\n maxlength: \"30\",\n onInvalid: invalidateForm,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((formData.username) = $event)),\n placeholder: _ctx.$t('user.USERNAME')\n }, null, 40, _hoisted_4)), [\n [_vModelText, formData.username]\n ])\n : _createCommentVNode(\"\", true),\n (_unref(action) === 'register')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _hoisted_6,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.USERNAME_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(action) !== 'reset')\n ? _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 2,\n id: \"email\",\n disabled: _unref(registration_disabled) || _unref(sendingEmailDisabled),\n required: \"\",\n onInvalid: invalidateForm,\n type: \"email\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((formData.email) = $event)),\n placeholder: _ctx.$t('user.EMAIL')\n }, null, 40, _hoisted_7)), [\n [_vModelText, formData.email]\n ])\n : _createCommentVNode(\"\", true),\n (\n [\n 'reset-request',\n 'register',\n 'account-confirmation-resend',\n ].includes(_unref(action))\n )\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _hoisted_9,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.EMAIL_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (\n !['account-confirmation-resend', 'reset-request'].includes(\n _unref(action)\n )\n )\n ? (_openBlock(), _createBlock(PasswordInput, {\n key: 4,\n disabled: _unref(registration_disabled),\n required: true,\n placeholder: \n _unref(action) === 'reset'\n ? _ctx.$t('user.ENTER_PASSWORD')\n : _ctx.$t('user.PASSWORD')\n ,\n password: formData.password,\n checkStrength: ['reset', 'register'].includes(_unref(action)),\n onUpdatePassword: updatePassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"placeholder\", \"password\", \"checkStrength\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"button\", {\n type: \"submit\",\n disabled: _unref(registration_disabled) || _unref(sendingEmailDisabled)\n }, _toDisplayString(_ctx.$t(_unref(buttonText))), 9, _hoisted_10)\n ], 34),\n (_unref(action) === 'login')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/register\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.REGISTER')), 1)\n ]),\n _: 1\n }),\n (_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_12, \"-\"))\n : _createCommentVNode(\"\", true),\n (_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n class: \"links\",\n to: \"/password-reset/request\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PASSWORD_FORGOTTEN')), 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(action) === 'register')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('user.ALREADY_HAVE_ACCOUNT')), 1),\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/login\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.LOGIN')), 1)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (\n ['login', 'register'].includes(_unref(action)) &&\n _unref(appConfig).is_email_sending_enabled\n )\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/account-confirmation/resend\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.ACCOUNT_CONFIRMATION_NOT_RECEIVED')), 1)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 6,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ])\n ], 2))\n}\n}\n\n})","import script from \"./UserAuthForm.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAuthForm.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAuthForm.vue?vue&type=style&index=0&id=b3c885de&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b3c885de\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"user-picture\" }\nconst _hoisted_2 = [\"alt\", \"src\"]\nconst _hoisted_3 = {\n key: 1,\n class: \"no-picture\"\n}\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-user-circle-o\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_5 = [\n _hoisted_4\n]\n\nimport { computed } from 'vue'\n\n import { IUserProfile } from '@/types/user'\n import { getApiUrl } from '@/utils'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPicture',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const authUserPictureUrl = computed(() =>\n props.user.picture\n ? `${getApiUrl()}users/${props.user.username}/picture?${Date.now()}`\n : ''\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(authUserPictureUrl) !== '')\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n class: \"profile-user-img\",\n alt: _ctx.$t('user.USER_PICTURE'),\n src: _unref(authUserPictureUrl)\n }, null, 8, _hoisted_2))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _hoisted_5))\n ]))\n}\n}\n\n})","import script from \"./UserPicture.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPicture.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPicture.vue?vue&type=style&index=0&id=26bea286&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","\n\n\n","import { render } from \"./NoWorkouts.vue?vue&type=template&id=4b4d15fb&scoped=true\"\nconst script = {}\n\nimport \"./NoWorkouts.vue?vue&type=style&index=0&id=4b4d15fb&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4b4d15fb\"]])\n\nexport default __exports__","var map = {\n\t\"./de/de.ts\": 9923,\n\t\"./en/en.ts\": 8757,\n\t\"./fr/fr.ts\": 6625,\n\t\"./nb/nb.ts\": 8891\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 4612;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + ({\"24\":\"reset\",\"193\":\"statistics\",\"328\":\"admin\",\"401\":\"workouts\",\"845\":\"profile\",\"881\":\"password\"}[chunkId] || chunkId) + \".\" + {\"24\":\"3194c9f0\",\"93\":\"02cf293c\",\"193\":\"04a17f2e\",\"243\":\"e551248f\",\"328\":\"9bc68088\",\"401\":\"a514f12a\",\"431\":\"e5102e07\",\"633\":\"81a8ddc8\",\"845\":\"430ae7df\",\"858\":\"3f2a93f2\",\"881\":\"43430dfc\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/css/\" + {\"24\":\"reset\",\"193\":\"statistics\",\"328\":\"admin\",\"401\":\"workouts\",\"845\":\"profile\"}[chunkId] + \".\" + {\"24\":\"e2527ec6\",\"193\":\"40e24e75\",\"328\":\"73df498d\",\"401\":\"41709693\",\"845\":\"203e78e2\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"fittrackee_client:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"24\":1,\"193\":1,\"328\":1,\"401\":1,\"845\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkfittrackee_client\"] = self[\"webpackChunkfittrackee_client\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(4970); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["authApi","axios","baseURL","getApiUrl","interceptors","request","use","config","controller","AbortController","signal","requestKey","removeRequestIfPending","pendingRequests","authToken","store","AUTH_USER_STORE","auth","headers","Authorization","error","Promise","reject","response","message","Map","generateRequestKey","method","url","params","data","JSON","stringify","join","has","get","abort","delete","disabledLanguages","loadLocaleMessages","locales","require","messages","keys","forEach","key","matched","match","length","includes","locale","default","createI18n","legacy","fallbackLocale","globalInjection","ctx","normalize","_normalize","interpolate","_interpolate","list","_list","plural","_plural","about","AboutTranslations","admin","AdministrationTranslations","api","ApiTranslations","buttons","ButtonsTranslations","common","CommonTranslations","dashboard","DashboardTranslations","ErrorTranslations","oauth2","OAuth2Translations","sports","SportsTranslations","statistics","StatisticsTranslations","user","UserTranslations","workouts","WorkoutsTranslations","register","ready","console","log","registered","cached","updatefound","updated","offline","_withScopeId","n","_pushScopeId","_popScopeId","_hoisted_1","id","_hoisted_2","class","_hoisted_3","_hoisted_4","_createElementVNode","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","href","target","rel","_defineComponent","__name","props","version","adminContact","setup","__props","toRefs","_ctx","_cache","_component_router_link","_resolveComponent","_openBlock","_createElementBlock","_createTextVNode","_toDisplayString","_unref","_createVNode","to","_withCtx","$t","_","_createCommentVNode","__exports__","emits","emit","useStore","authUser","computed","getters","isAuthenticated","language","ROOT_STORE","isMenuOpen","ref","openMenu","value","closeMenu","updateLanguage","option","dispatch","toString","logout","_component_Dropdown","onClick","$event","$router","push","_normalizeClass","capitalize","_createBlock","UserPicture","username","availableLanguages","options","selected","onSelected","ErrorImg","innerHTML","appConfig","appLoading","hideScrollBar","displayScrollButton","updateHideScrollBar","isScrolledToBottom","element","getBoundingClientRect","top","window","innerHeight","bottom","scroll","onscroll","document","querySelector","scrollToTop","scrollTo","behavior","setTimeout","initLanguage","navigatorLanguage","navigator","split","localeFromLanguage","e","onBeforeMount","onMounted","_component_Loader","_component_router_view","_Fragment","NavBar","onMenuInteraction","NoConfig","Footer","admin_contact","name","charLimit","disabled","type","Boolean","input","text","updateText","event","watch","_withDirectives","maxLenght","onInput","_vModelText","distance","unitFrom","useImperialUnits","digits","displayUnit","speed","strong","unitTo","units","defaultTarget","convertedDistance","convertDistance","parseFloat","toFixed","route","useRoute","isOpen","dropdownOptions","map","toggleDropdown","updateSelected","path","_renderSlot","$slots","_renderList","index","label","Array","isArray","subMessage","xmlns","x","y","viewBox","style","d","render","cx","cy","r","sportLabel","color","title","sportColors","inject","_normalizeStyle","fill","CyclingSport","CyclingTransport","CyclingVirtual","Hiking","MountainBiking","MountainBikingElectric","Rowing","Running","SkiingAlpine","SkiingCrossCountry","Snowshoes","Trail","Walking","script","strongMessage","errorMessages","onUnmounted","commit","_component_i18n_t","_component_ErrorMessage","_component_Card","content","keypath","customComponents","AlertMessage","Card","CustomTextArea","Distance","Dropdown","ErrorMessage","Loader","Modal","SportImage","clickOutsideDirective","mounted","binding","clickOutsideEvent","contains","body","addEventListener","unmounted","removeEventListener","undefined","Chart","BarElement","LineElement","PointElement","Legend","Title","Tooltip","Filler","BarController","CategoryScale","LineController","LinearScale","ChartDataLabels","app","createApp","App","provide","i18n","router","VueFullscreen","directive","component","mount","for","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","edition","useRouter","appData","reactive","max_users","max_single_file_size","max_zip_file_size","gpx_limit_import","updateForm","Object","getFileSizeInMB","onCancel","onSubmit","formData","assign","_withModifiers","min","step","icon","appStatistics","uploadDirSize","getReadableFileSize","uploads_dir_size","StatCard","users","size","suffix","AppStatsCards","is_registration_enabled","is_email_sending_enabled","t","useI18n","translatedSports","translateSports","SPORTS_STORE","updateSportStatus","isActive","_component_SportImage","sport","translatedLabel","is_active","danger","has_workouts","query","q","searchUsers","resetFilter","onKeyup","_withKeys","placeholder","trim","orderByList","defaultOrderBy","getQuery","USERS_STORE","pagination","loadUsers","queryParams","reloadUsers","updateUser","queryParam","queryValue","page","newQuery","UsersNameFilter","onFilterOnUsername","FilterSelects","sort","sortList","order_by","onUpdateSelect","email","formatDate","created_at","timezone","date_format","nb_workouts","Pagination","tabs","selectedTab","getPath","tab","toLocaleLowerCase","checked","UserHeader","UserProfileTabs","appLanguage","userLanguage","languageLabels","fistDayOfWeek","weekm","display_ascent","getDateFormat","imperial_units","loading","userForm","password","new_password","isSuccess","emailUpdate","formErrors","displayModal","invalidateForm","updateUserForm","updatePassword","updateNewPassword","updateProfile","payload","updateDisplayModal","deleteAccount","async","isSuccessValue","_component_Modal","onConfirmAction","onCancelAction","errors","required","onInvalid","PasswordInput","onUpdatePassword","onPasswordError","checkStrength","first_name","last_name","birth_date","location","bio","registrationDate","format","Date","updateBio","_component_CustomTextArea","onUpdateValue","fileSizeLimit","pictureFile","deleteUserPicture","updatePictureFile","files","updateUserPicture","picture","accept","timeZones","tzList","focusItemIndex","matchTimezone","toLowerCase","onMouseOver","onUpdateTimezone","onEnter","preventDefault","firstElementChild","openDropdown","onKeydown","ref_key","filter","tz","focus","onMouseover","autofocus","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","weekStart","imperialUnits","ascentData","dateFormatOptions","availableDateFormatOptions","toUTCString","updateTZ","updateAscentDisplay","updateImperialUnit","updateWeekM","lang","_vModelSelect","TimezoneDropdown","dateFormat","start","unit","status","oauth2_scopes","admin_oauth2_scopes","appForm","client_name","client_uri","client_description","redirect_uri","scopes","filtered_scopes","getScopes","redirect_uris","scope","OAUTH2_STORE","updateDescription","updateScopes","indexOf","splice","admin_scopes","description","onChange","client","loadApp","client_id","authorizeApp","response_type","state","code_challenge","code_challenge_method","afterCreation","revocationSuccessful","messageToDisplay","idCopied","secretCopied","clipboardSupport","loadClient","updateMessageToDisplay","forDelete","confirmAction","clientId","copyIdToClipboard","clipboard","writeText","copySecretToClipboard","client_secret","newValue","issued_at","website","clients","getClientsQuery","clientsQuery","getNumberQueryValue","defaultPage","loadClients","isEdition","defaultColor","sports_list","sportPayload","sport_id","stopped_speed_threshold","updateSportInEdition","is_active_for_user","resetSportPayload","isSportInEdition","sportId","updateColor","updateThreshold","updateIsActive","updateSport","resetSport","newIsLoading","src","alt","BikePic","About","workout","_component_Distance","workoutId","workout_date","formatDistance","addSuffix","with_gpx","StaticMap","moving","min_alt","max_alt","ascent","descent","per_page","initWorkoutsCount","loadWorkouts","WORKOUTS_STORE","moreWorkoutsExist","previous_workout","defaultOrder","loadMoreWorkouts","WorkoutCard","s","NoWorkouts","displayHARecord","sportColor","records","record","record_type","height","width","colors","datasets","angleOffset","radius","circumference","Math","PI","calculateStrokeDashOffset","percentage","returnCircleTransformValue","rotation","entries","stroke","transform","isHidden","togglePane","stopPropagation","_directive_click_outside","_resolveDirective","DonutChart","CalendarWorkout","getSportLabel","getSportColor","chartDatasets","getDonutDatasets","sportIdColors","displayedWorkoutCount","slice","CalendarWorkoutsChart","currentDay","endDate","startDate","weekStartingMonday","rows","getDays","day","days","i","addDays","isWeekEnd","filterWorkouts","isSameDay","getDateWithTZ","reverse","row","isSameMonth","today","isToday","CalendarWorkouts","localeOptions","calendarDates","getCalendarStartAndEnd","calendarWorkouts","getCalendarWorkouts","apiParams","from","end","displayNextMonth","addMonths","displayPreviousMonth","subMonths","CalendarHeader","onDisplayNextMonth","onDisplayPreviousMonth","CalendarDays","CalendarCells","date","chartParams","duration","startOfMonth","endOfMonth","selectedSportIds","StatChart","formatRecord","distanceUnitFrom","distanceUnitTo","ascentUnitFrom","ascentUnitTo","Error","workout_id","sortRecords","a","b","recordALabel","recordBLabel","getRecordsBySports","reduce","sportList","find","sportTranslatedLabel","getTranslatedRecords","translatedRecords","recordsBySport","RecordsCard","userTotalDuration","total_duration","totalDuration","get_duration","totalDistance","total_distance","totalAscent","total_ascent","nb_sports","isSelected","updateDisplayColumn","UserStatsCards","UserMonthStats","UserRecords","UserCalendar","Timeline","NotFound","action","LoginOrRegisterForm","getTabFromPath","regex","tag","replace","toUpperCase","routes","Dashboard","LoginOrRegister","children","Profile","UserInfos","UserPreferences","UserSportPreferences","UserApps","UserAppsList","UserApp","AddUserApp","AuthorizeUserApp","ProfileEdition","UserInfosEdition","UserAccountEdition","UserPictureEdition","UserPreferencesEdition","displaySegment","AdminMenu","AdminApplication","AdminSports","fromAdmin","AdminUsers","AboutView","NotFoundView","createRouter","history","createWebHistory","process","pathsWithoutAuthentication","pathsWithoutChecks","beforeEach","next","then","fullPath","catch","AuthUserActions","AuthUserGetters","AuthUserMutations","OAuth2Actions","OAuth2Getters","OAuth2Mutations","RootActions","RootGetters","RootMutations","SportsActions","SportsGetters","SportsMutation","StatisticsActions","StatisticsGetters","StatisticsMutations","UsersActions","UsersGetters","UsersMutations","ACTIONS","GETTERS","MUTATIONS","STATS_STORE","WorkoutsActions","WorkoutsGetters","WorkoutsMutations","deleteUserAccount","context","res","handleError","actions","finally","resetPassword","reset_password","activate","new_email","removeAuthUserData","localStorage","removeItem","token","auth_token","setItem","refreshUser","actionType","redirectUrl","form","FormData","append","authUserProfile","isRegistrationSuccess","mutations","authUserState","get_client","set","redirect_url","oAuth2State","setAttribute","application","root","enUS","sportsState","filterType","statisticsState","updatedUser","usersState","getWorkouts","segmentUrl","segmentId","segments","chart_data","gpx","file","notes","calendar_workouts","timeline_workouts","user_workouts","workoutData","concat","chartData","workoutsState","modules","authUserModule","oAuthModule","sportsModule","statsModule","usersModule","workoutsModule","createStore","VuexStore","defaultPerPage","defaultValue","getStringQueryValue","availableValues","locationQuery","queryOptions","defaultSort","order","workoutsPayloadKeys","getRange","stop","rangePagination","pages","currentPage","getStartDate","startOfWeek","weekStartsOn","startOfYear","incrementDate","addYears","dateInUTC","utcToZonedTime","monthStart","monthEnd","endOfWeek","formatWorkoutDate","dateTime","timeFormat","workout_time","availableDateFormats","dateStringFormats","de","en","fr","dateString","withTime","inputDate","l","df","suffixes","fileSize","asText","floor","pow","msg","m","availableLocales","sortSports","sportATranslatedLabel","sportBTranslatedLabel","activeStatus","sportsToInclude","dateFormats","week","chart","month","year","datasetKeys","getDateKeys","getStatisticsChartDataset","isLineChart","dataset","backgroundColor","borderColor","spanGaps","getDatasets","displayedSports","average_speed","total_descent","convertStatsValue","datasetKey","convertStatsDistance","formatStats","displayedSportsId","apiStats","userDateFormat","dayKeys","labels","sportsId","displayedSport","getStatsDateParams","timeFrame","subYears","endOfYear","updateChartParams","backward","subWeeks","addWeeks","ft","system","multiplier","mi","km","factors","metric","imperial","borderWidth","yAxisID","elevation","distance_labels","duration_labels","coordinates","latitude","longitude","total","count","perPage","onSelectUpdate","nb","buttonText","timer","errorDisplayed","displayError","clearTimeout","cursor","has_prev","navigate","has_next","active","setZxcvbnOptions","zxcvbnCommonPackage","zxcvbnEnPackage","zxcvbnFrPackage","zxcvbnDePackage","zxcvbnLangPackages","zxcvbnPackage","graphs","adjacencyGraphs","dictionary","zxcvbnOptions","getPasswordStrength","strength","passwordScore","passwordStrength","passwordSuggestions","backgroundSize","calculatePasswordStrength","zxcvbnResult","zxcvbn","score","feedback","suggestions","newLanguageValue","newPassword","max","suggestion","showPassword","passwordValue","togglePassword","invalidPassword","minlength","_vModelDynamic","PasswordStrength","displayHover","imageUrl","backgroundImage","$props","$setup","$data","$options","_component_Chart","hideChartIfNoData","emptyStats","displayedData","args","updateDisplayData","fullStats","displayedSportIds","_component_BarChart","_mergeProps","barChartProps","formatDuration","totalSeconds","formatWithUnits","String","hours","padStart","minutes","seconds","formatTooltipValue","defineComponent","components","BarChart","getNumber","isNaN","getSum","getUnit","parse","responsive","maintainAspectRatio","animation","layout","padding","scales","stacked","grid","drawOnChartArea","ticks","maxTicksLimit","callback","afterFit","scale","plugins","datalabels","anchor","align","chartArea","display","formatter","dataIndex","datasetIndex","legend","tooltip","interaction","intersect","mode","position","tooltipItem","formattedValue","callbacks","parsed","footer","tooltipItems","sum","useBarChart","formattedStats","getStatistics","getApiParams","time","newParams","birthDate","displayUserEmailForm","newUserEmail","currentAction","resetUserPassword","confirmUserAccount","displayEmailForm","resetErrorsAndSuccess","email_to_confirm","hideEmailForm","updateUserEmail","newIsSuccess","_component_AlertMessage","go","getButtonText","registration_disabled","sendingEmailDisabled","resetFormData","pattern","maxlength","authUserPictureUrl","now","webpackContext","req","webpackContextResolve","__webpack_require__","o","code","resolve","module","exports","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","call","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","getter","__esModule","leafPrototypes","getProto","getPrototypeOf","obj","__proto__","this","ns","create","def","current","getOwnPropertyNames","definition","defineProperty","enumerable","f","chunkId","all","promises","u","miniCssF","g","globalThis","Function","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","done","needAttach","scripts","getElementsByTagName","getAttribute","createElement","charset","timeout","nc","onScriptComplete","prev","onerror","onload","doneFns","parentNode","removeChild","bind","head","appendChild","Symbol","toStringTag","p","createStylesheet","fullhref","linkTag","onLinkComplete","errorType","realHref","err","findStylesheet","existingLinkTags","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","promise","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/app.948d4b2d.js","mappings":"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O4V,IAAiB,QAG5HxX,EAAAA,EAAAA,GAAoB,MAAOG,GAAY,EACrCH,EAAAA,EAAAA,GAAoB,SAAU,CAC5B8G,KAAM,SACND,UAAW4Q,EAAYzU,QACtBrB,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,gCAAiC,EAAG5B,KAC/DwB,EAAAA,EAAAA,IAAOnD,GAAMqZ,UACTtW,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,SAAU,CAC3CvF,IAAK,EACL2D,MAAO,SACP2D,QAASkU,IACR/V,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,gCAAiC,KAC7DE,EAAAA,EAAAA,IAAoB,IAAI,IAC5BlC,EAAAA,EAAAA,GAAoB,SAAU,CAC5BH,MAAO,SACP2D,QAASnC,EAAO,KAAOA,EAAO,GAAMoC,GAAiBrC,EAAKsC,QAAQC,KAAK,eACtEhC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,iCAAkC,MAE/D,GAAIlC,OAET,CAEJ,ICtHA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,UCRO,MAAMkY,GAAY,CACvB,iBACA,eACA,iBACA,gBACA,eACA,oBACA,eACA,kBACA,sBACA,cACA,kBACA,eACA,gBACA,kBACA,iBACA,kBACA,kBACA,iBACA,eACA,kBACA,eACA,oBACA,oBACA,iCACA,8BACA,4BACA,0BACA,6BACA,4BACA,iCACA,0BACA,6BACA,6BACA,4BACA,4BACA,mBACA,mBACA,gBACA,yBACA,mBACA,gBACA,iBACA,uBACA,oBACA,iBACA,gBACA,wBACA,uBACA,iBACA,kBACA,kBACA,kBACA,oBACA,qBACA,kBACA,iBACA,kBACA,uBACA,iBACA,uBACA,iBACA,kBACA,mBACA,mBACA,sBACA,oBACA,sBACA,oBACA,kBACA,oBACA,qBACA,oBACA,oBACA,iBACA,kBACA,iBACA,qBACA,+BACA,uBACA,0BACA,6BACA,4BACA,wBACA,4BACA,0BACA,iBACA,kBACA,kBACA,iBACA,8BACA,8BACA,iBACA,eACA,sBACA,iBACA,kBACA,iBACA,qBACA,oBACA,mBACA,oBACA,iBACA,qBACA,sBACA,mBACA,kBACA,oBACA,qBACA,iBACA,mBACA,kBACA,eACA,kBACA,8BACA,8BACA,iCACA,kBACA,iBACA,sBACA,qBACA,kBACA,yBACA,wBACA,sBACA,sBACA,uBACA,sBACA,uBACA,iBACA,iBACA,mBACA,qBACA,mBACA,mBACA,wBACA,oBACA,uBACA,gBACA,mBACA,wBACA,sBACA,gBACA,sBACA,kBACA,kBACA,oBACA,qBACA,mBACA,kBACA,sBACA,mBACA,mBACA,4BACA,uBACA,oBACA,oBACA,qBACA,mBACA,mBACA,oBACA,cACA,aACA,cACA,aACA,cACA,gBACA,cACA,eACA,YACA,eACA,eACA,cACA,eACA,cACA,aACA,kBACA,eACA,gBACA,aACA,YACA,aACA,gBACA,iBACA,YACA,cACA,mBACA,iBACA,YACA,eACA,eACA,gBACA,iBACA,aACA,iBACA,eACA,iBACA,gBACA,eACA,mBACA,oBACA,eACA,aACA,eACA,gBACA,cACA,eACA,oBACA,mBACA,YACA,YACA,iBACA,iBACA,aACA,gBACA,iBACA,cACA,gBACA,iBACA,aACA,gBACA,iBACA,qBACA,cACA,gBACA,eACA,cACA,eACA,aACA,aACA,mBACA,cACA,gBACA,mBACA,eACA,cACA,qBACA,eACA,kBACA,mBACA,kBACA,sBACA,iBACA,mBACA,qBACA,yBACA,mBACA,qBACA,qBACA,wBACA,mBACA,mBACA,kBACA,mBACA,qBACA,sBACA,sBACA,kBACA,mBACA,mBACA,iBACA,mBACA,gBACA,kBACA,gBACA,kBACA,mBACA,kBACA,kBACA,oBACA,gBACA,mBACA,kBACA,kBACA,qBACA,cACA,eACA,gBACA,gBACA,oBACA,gBACA,eACA,eACA,gBACA,gBACA,cACA,eACA,gBACA,cACA,cACA,gBACA,iBACA,oBACA,eACA,mBACA,iBACA,gBACA,mBACA,kBACA,gBACA,iBACA,mBACA,gBACA,oBACA,gBACA,gBACA,mBACA,eACA,mBACA,cACA,kBACA,mB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","sources":["webpack://fittrackee_client/./src/api/authApi.ts","webpack://fittrackee_client/./src/api/pending.ts","webpack://fittrackee_client/./src/i18n.ts","webpack://fittrackee_client/./src/locales/de/about.json","webpack://fittrackee_client/./src/locales/de/administration.json","webpack://fittrackee_client/./src/locales/de/api.json","webpack://fittrackee_client/./src/locales/de/buttons.json","webpack://fittrackee_client/./src/locales/de/common.json","webpack://fittrackee_client/./src/locales/de/dashboard.json","webpack://fittrackee_client/./src/locales/de/error.json","webpack://fittrackee_client/./src/locales/de/oauth2.json","webpack://fittrackee_client/./src/locales/de/sports.json","webpack://fittrackee_client/./src/locales/de/statistics.json","webpack://fittrackee_client/./src/locales/de/user.json","webpack://fittrackee_client/./src/locales/de/workouts.json","webpack://fittrackee_client/./src/locales/de/de.ts","webpack://fittrackee_client/./src/locales/en/about.json","webpack://fittrackee_client/./src/locales/en/administration.json","webpack://fittrackee_client/./src/locales/en/api.json","webpack://fittrackee_client/./src/locales/en/buttons.json","webpack://fittrackee_client/./src/locales/en/common.json","webpack://fittrackee_client/./src/locales/en/dashboard.json","webpack://fittrackee_client/./src/locales/en/error.json","webpack://fittrackee_client/./src/locales/en/oauth2.json","webpack://fittrackee_client/./src/locales/en/sports.json","webpack://fittrackee_client/./src/locales/en/statistics.json","webpack://fittrackee_client/./src/locales/en/user.json","webpack://fittrackee_client/./src/locales/en/workouts.json","webpack://fittrackee_client/./src/locales/en/en.ts","webpack://fittrackee_client/./src/locales/fr/about.json","webpack://fittrackee_client/./src/locales/fr/administration.json","webpack://fittrackee_client/./src/locales/fr/api.json","webpack://fittrackee_client/./src/locales/fr/buttons.json","webpack://fittrackee_client/./src/locales/fr/common.json","webpack://fittrackee_client/./src/locales/fr/dashboard.json","webpack://fittrackee_client/./src/locales/fr/error.json","webpack://fittrackee_client/./src/locales/fr/oauth2.json","webpack://fittrackee_client/./src/locales/fr/sports.json","webpack://fittrackee_client/./src/locales/fr/statistics.json","webpack://fittrackee_client/./src/locales/fr/user.json","webpack://fittrackee_client/./src/locales/fr/workouts.json","webpack://fittrackee_client/./src/locales/fr/fr.ts","webpack://fittrackee_client/./src/locales/nb/about.json","webpack://fittrackee_client/./src/locales/nb/administration.json","webpack://fittrackee_client/./src/locales/nb/api.json","webpack://fittrackee_client/./src/locales/nb/buttons.json","webpack://fittrackee_client/./src/locales/nb/common.json","webpack://fittrackee_client/./src/locales/nb/dashboard.json","webpack://fittrackee_client/./src/locales/nb/error.json","webpack://fittrackee_client/./src/locales/nb/oauth2.json","webpack://fittrackee_client/./src/locales/nb/sports.json","webpack://fittrackee_client/./src/locales/nb/statistics.json","webpack://fittrackee_client/./src/locales/nb/user.json","webpack://fittrackee_client/./src/locales/nb/workouts.json","webpack://fittrackee_client/./src/locales/nb/nb.ts","webpack://fittrackee_client/./src/registerServiceWorker.ts","webpack://fittrackee_client/./src/components/Footer.vue?771f","webpack://fittrackee_client/./src/components/Footer.vue","webpack://fittrackee_client/./src/components/NavBar.vue?9bec","webpack://fittrackee_client/./src/components/NavBar.vue","webpack://fittrackee_client/./src/components/NoConfig.vue?541b","webpack://fittrackee_client/./src/components/NoConfig.vue","webpack://fittrackee_client/./src/App.vue?2a5e","webpack://fittrackee_client/./src/App.vue","webpack://fittrackee_client/./src/components/Common/AlertMessage.vue?3150","webpack://fittrackee_client/./src/components/Common/AlertMessage.vue","webpack://fittrackee_client/./src/components/Common/CustomTextArea.vue?8efa","webpack://fittrackee_client/./src/components/Common/CustomTextArea.vue","webpack://fittrackee_client/./src/components/Common/Distance.vue?edec","webpack://fittrackee_client/./src/components/Common/Distance.vue","webpack://fittrackee_client/./src/components/Common/Dropdown.vue?f7d5","webpack://fittrackee_client/./src/components/Common/Dropdown.vue","webpack://fittrackee_client/./src/components/Common/ErrorMessage.vue?c328","webpack://fittrackee_client/./src/components/Common/ErrorMessage.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/CyclingSport.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/CyclingSport.vue?4f4b","webpack://fittrackee_client/./src/components/Common/Images/SportImage/CyclingTransport.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/CyclingTransport.vue?a81c","webpack://fittrackee_client/./src/components/Common/Images/SportImage/CyclingVirtual.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/CyclingVirtual.vue?1bd1","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Hiking.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Hiking.vue?cf60","webpack://fittrackee_client/./src/components/Common/Images/SportImage/MountainBiking.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/MountainBiking.vue?8a30","webpack://fittrackee_client/./src/components/Common/Images/SportImage/MountainBikingElectric.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/MountainBikingElectric.vue?f7ee","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Rowing.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Rowing.vue?c24b","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Running.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Running.vue?2cd2","webpack://fittrackee_client/./src/components/Common/Images/SportImage/SkiingAlpine.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/SkiingAlpine.vue?f1ff","webpack://fittrackee_client/./src/components/Common/Images/SportImage/SkiingCrossCountry.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/SkiingCrossCountry.vue?f0db","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Snowshoes.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Snowshoes.vue?cfb7","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Trail.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Trail.vue?5564","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Walking.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Walking.vue?f92f","webpack://fittrackee_client/./src/components/Common/Images/SportImage/index.vue?1cdd","webpack://fittrackee_client/./src/components/Common/Images/SportImage/index.vue","webpack://fittrackee_client/./src/components/Common/Loader.vue","webpack://fittrackee_client/./src/components/Common/Loader.vue?0b74","webpack://fittrackee_client/./src/components/Common/Modal.vue?0d9d","webpack://fittrackee_client/./src/components/Common/Modal.vue","webpack://fittrackee_client/./src/custom-components.ts","webpack://fittrackee_client/./src/directives.ts","webpack://fittrackee_client/./src/main.ts","webpack://fittrackee_client/./src/components/Administration/AdminApplication.vue?dc32","webpack://fittrackee_client/./src/components/Administration/AdminApplication.vue","webpack://fittrackee_client/./src/components/Common/StatCard.vue?3301","webpack://fittrackee_client/./src/components/Common/StatCard.vue","webpack://fittrackee_client/./src/components/Administration/AppStatsCards.vue?60fb","webpack://fittrackee_client/./src/components/Administration/AppStatsCards.vue","webpack://fittrackee_client/./src/components/Administration/AdminMenu.vue?0597","webpack://fittrackee_client/./src/components/Administration/AdminMenu.vue","webpack://fittrackee_client/./src/components/Administration/AdminSports.vue?05cc","webpack://fittrackee_client/./src/components/Administration/AdminSports.vue","webpack://fittrackee_client/./src/components/Users/UsersNameFilter.vue?0a55","webpack://fittrackee_client/./src/components/Users/UsersNameFilter.vue","webpack://fittrackee_client/./src/components/Administration/AdminUsers.vue?5a76","webpack://fittrackee_client/./src/components/Administration/AdminUsers.vue","webpack://fittrackee_client/./src/components/User/UserProfileTabs.vue?63ef","webpack://fittrackee_client/./src/components/User/UserProfileTabs.vue","webpack://fittrackee_client/./src/components/User/ProfileDisplay/index.vue?c76d","webpack://fittrackee_client/./src/components/User/ProfileDisplay/index.vue","webpack://fittrackee_client/./src/components/User/ProfileDisplay/UserPreferences.vue?a91b","webpack://fittrackee_client/./src/components/User/ProfileDisplay/UserPreferences.vue","webpack://fittrackee_client/./src/components/User/ProfileEdition/index.vue?8616","webpack://fittrackee_client/./src/components/User/ProfileEdition/index.vue","webpack://fittrackee_client/./src/components/User/ProfileEdition/UserAccountEdition.vue?a978","webpack://fittrackee_client/./src/components/User/ProfileEdition/UserAccountEdition.vue","webpack://fittrackee_client/./src/components/User/ProfileEdition/UserInfosEdition.vue?38a2","webpack://fittrackee_client/./src/components/User/ProfileEdition/UserInfosEdition.vue","webpack://fittrackee_client/./src/components/User/ProfileEdition/UserPictureEdition.vue?05c1","webpack://fittrackee_client/./src/components/User/ProfileEdition/UserPictureEdition.vue","webpack://fittrackee_client/./src/utils/timezone.ts","webpack://fittrackee_client/./src/components/User/ProfileEdition/TimezoneDropdown.vue?5519","webpack://fittrackee_client/./src/components/User/ProfileEdition/TimezoneDropdown.vue","webpack://fittrackee_client/./src/components/User/ProfileEdition/UserPreferencesEdition.vue?76a6","webpack://fittrackee_client/./src/components/User/ProfileEdition/UserPreferencesEdition.vue","webpack://fittrackee_client/./src/utils/oauth.ts","webpack://fittrackee_client/./src/components/User/UserApps/AddUserApp.vue?64f1","webpack://fittrackee_client/./src/components/User/UserApps/AddUserApp.vue","webpack://fittrackee_client/./src/components/User/UserApps/AuthorizeUserApp.vue?3371","webpack://fittrackee_client/./src/components/User/UserApps/AuthorizeUserApp.vue","webpack://fittrackee_client/./src/components/User/UserApps/index.vue?889c","webpack://fittrackee_client/./src/components/User/UserApps/index.vue","webpack://fittrackee_client/./src/components/User/UserApps/UserApp.vue?df25","webpack://fittrackee_client/./src/components/User/UserApps/UserApp.vue","webpack://fittrackee_client/./src/components/User/UserApps/UserAppsList.vue?6c20","webpack://fittrackee_client/./src/components/User/UserApps/UserAppsList.vue","webpack://fittrackee_client/./src/components/User/UserSportPreferences.vue?5e40","webpack://fittrackee_client/./src/components/User/UserSportPreferences.vue","webpack://fittrackee_client/./src/components/About.vue?b879","webpack://fittrackee_client/./src/components/About.vue","webpack://fittrackee_client/./src/components/BikePic.vue","webpack://fittrackee_client/./src/components/BikePic.vue?a9e2","webpack://fittrackee_client/./src/views/AboutView.vue?9f41","webpack://fittrackee_client/./src/views/AboutView.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutCard.vue?56e2","webpack://fittrackee_client/./src/components/Workout/WorkoutCard.vue","webpack://fittrackee_client/./src/components/Dashboard/Timeline.vue?046b","webpack://fittrackee_client/./src/components/Dashboard/Timeline.vue","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarWorkout.vue?609b","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarWorkout.vue","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/DonutChart.vue?08e2","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/DonutChart.vue","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarWorkoutsChart.vue?1aa0","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarWorkoutsChart.vue","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarWorkouts.vue?7291","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarWorkouts.vue","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarCells.vue?b7e6","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarCells.vue","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarDays.vue?4138","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarDays.vue","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarHeader.vue?7e24","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarHeader.vue","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/index.vue?c598","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/index.vue","webpack://fittrackee_client/./src/components/Dashboard/UserMonthStats.vue?9128","webpack://fittrackee_client/./src/components/Dashboard/UserMonthStats.vue","webpack://fittrackee_client/./src/utils/records.ts","webpack://fittrackee_client/./src/components/Dashboard/UserRecords/RecordsCard.vue?9439","webpack://fittrackee_client/./src/components/Dashboard/UserRecords/RecordsCard.vue","webpack://fittrackee_client/./src/components/Dashboard/UserRecords/index.vue?7d56","webpack://fittrackee_client/./src/components/Dashboard/UserRecords/index.vue","webpack://fittrackee_client/./src/components/Dashboard/UserStatsCards/index.vue?c362","webpack://fittrackee_client/./src/components/Dashboard/UserStatsCards/index.vue","webpack://fittrackee_client/./src/views/Dashboard.vue?95bb","webpack://fittrackee_client/./src/views/Dashboard.vue","webpack://fittrackee_client/./src/views/NotFoundView.vue?8c2c","webpack://fittrackee_client/./src/views/NotFoundView.vue","webpack://fittrackee_client/./src/views/user/LoginOrRegister.vue?46fb","webpack://fittrackee_client/./src/views/user/LoginOrRegister.vue","webpack://fittrackee_client/./src/router/index.ts","webpack://fittrackee_client/./src/store/modules/authUser/enums.ts","webpack://fittrackee_client/./src/store/modules/oauth2/enums.ts","webpack://fittrackee_client/./src/store/modules/root/enums.ts","webpack://fittrackee_client/./src/store/modules/sports/enums.ts","webpack://fittrackee_client/./src/store/modules/statistics/enums.ts","webpack://fittrackee_client/./src/store/modules/users/enums.ts","webpack://fittrackee_client/./src/store/constants.ts","webpack://fittrackee_client/./src/api/defaultApi.ts","webpack://fittrackee_client/./src/store/modules/users/actions.ts","webpack://fittrackee_client/./src/store/modules/authUser/actions.ts","webpack://fittrackee_client/./src/store/modules/authUser/getters.ts","webpack://fittrackee_client/./src/store/modules/authUser/mutations.ts","webpack://fittrackee_client/./src/store/modules/authUser/state.ts","webpack://fittrackee_client/./src/store/modules/authUser/index.ts","webpack://fittrackee_client/./src/store/modules/oauth2/actions.ts","webpack://fittrackee_client/./src/store/modules/oauth2/getters.ts","webpack://fittrackee_client/./src/store/modules/oauth2/mutations.ts","webpack://fittrackee_client/./src/store/modules/oauth2/state.ts","webpack://fittrackee_client/./src/store/modules/oauth2/index.ts","webpack://fittrackee_client/./src/store/modules/root/actions.ts","webpack://fittrackee_client/./src/store/modules/root/getters.ts","webpack://fittrackee_client/./src/store/modules/root/mutations.ts","webpack://fittrackee_client/./src/store/modules/root/state.ts","webpack://fittrackee_client/./src/store/modules/sports/actions.ts","webpack://fittrackee_client/./src/store/modules/sports/getters.ts","webpack://fittrackee_client/./src/store/modules/sports/mutations.ts","webpack://fittrackee_client/./src/store/modules/sports/state.ts","webpack://fittrackee_client/./src/store/modules/sports/index.ts","webpack://fittrackee_client/./src/store/modules/statistics/actions.ts","webpack://fittrackee_client/./src/store/modules/statistics/getters.ts","webpack://fittrackee_client/./src/store/modules/statistics/mutations.ts","webpack://fittrackee_client/./src/store/modules/statistics/state.ts","webpack://fittrackee_client/./src/store/modules/statistics/index.ts","webpack://fittrackee_client/./src/store/modules/users/getters.ts","webpack://fittrackee_client/./src/store/modules/users/mutations.ts","webpack://fittrackee_client/./src/store/modules/users/state.ts","webpack://fittrackee_client/./src/store/modules/users/index.ts","webpack://fittrackee_client/./src/store/modules/workouts/actions.ts","webpack://fittrackee_client/./src/store/modules/workouts/getters.ts","webpack://fittrackee_client/./src/store/modules/workouts/mutations.ts","webpack://fittrackee_client/./src/store/modules/workouts/state.ts","webpack://fittrackee_client/./src/store/modules/workouts/index.ts","webpack://fittrackee_client/./src/store/modules/root/index.ts","webpack://fittrackee_client/./src/store/index.ts","webpack://fittrackee_client/./src/store/modules/workouts/enums.ts","webpack://fittrackee_client/./src/use/useStore.ts","webpack://fittrackee_client/./src/utils/api.ts","webpack://fittrackee_client/./src/utils/dates.ts","webpack://fittrackee_client/./src/utils/files.ts","webpack://fittrackee_client/./src/utils/index.ts","webpack://fittrackee_client/./src/utils/locales.ts","webpack://fittrackee_client/./src/utils/sports.ts","webpack://fittrackee_client/./src/utils/statistics.ts","webpack://fittrackee_client/./src/utils/units.ts","webpack://fittrackee_client/./src/utils/workouts.ts","webpack://fittrackee_client/./src/components/Common/Card.vue","webpack://fittrackee_client/./src/components/Common/Card.vue?88f1","webpack://fittrackee_client/./src/components/Common/FilterSelects.vue?7823","webpack://fittrackee_client/./src/components/Common/FilterSelects.vue","webpack://fittrackee_client/./src/components/Common/Images/ErrorImg.vue","webpack://fittrackee_client/./src/components/Common/Images/ErrorImg.vue?6a2a","webpack://fittrackee_client/./src/components/Common/Error.vue?5a3e","webpack://fittrackee_client/./src/components/Common/Error.vue","webpack://fittrackee_client/./src/components/Common/NotFound.vue?45eb","webpack://fittrackee_client/./src/components/Common/NotFound.vue","webpack://fittrackee_client/./src/components/Common/Pagination.vue?e0b0","webpack://fittrackee_client/./src/components/Common/Pagination.vue","webpack://fittrackee_client/./src/utils/password.ts","webpack://fittrackee_client/./src/components/Common/PasswordStength.vue?1d44","webpack://fittrackee_client/./src/components/Common/PasswordStength.vue","webpack://fittrackee_client/./src/components/Common/PasswordInput.vue?e9ce","webpack://fittrackee_client/./src/components/Common/PasswordInput.vue","webpack://fittrackee_client/./src/components/Common/StaticMap.vue?d223","webpack://fittrackee_client/./src/components/Common/StaticMap.vue","webpack://fittrackee_client/./src/components/Common/StatsChart/index.vue?f4b9","webpack://fittrackee_client/./src/components/Common/StatsChart/Chart.vue?1063","webpack://fittrackee_client/./src/utils/duration.ts","webpack://fittrackee_client/./src/utils/tooltip.ts","webpack://fittrackee_client/./src/components/Common/StatsChart/Chart.vue?960e","webpack://fittrackee_client/./src/components/Common/StatsChart/Chart.vue","webpack://fittrackee_client/./src/components/Common/StatsChart/index.vue?279d","webpack://fittrackee_client/./src/components/Common/StatsChart/index.vue","webpack://fittrackee_client/./src/components/User/ProfileDisplay/UserHeader.vue?bf09","webpack://fittrackee_client/./src/components/User/ProfileDisplay/UserHeader.vue","webpack://fittrackee_client/./src/components/User/ProfileDisplay/UserInfos.vue?77c4","webpack://fittrackee_client/./src/components/User/ProfileDisplay/UserInfos.vue","webpack://fittrackee_client/./src/components/User/UserAuthForm.vue?09b2","webpack://fittrackee_client/./src/components/User/UserAuthForm.vue","webpack://fittrackee_client/./src/components/User/UserPicture.vue?4869","webpack://fittrackee_client/./src/components/User/UserPicture.vue","webpack://fittrackee_client/./src/components/Workouts/NoWorkouts.vue","webpack://fittrackee_client/./src/components/Workouts/NoWorkouts.vue?e10e","webpack://fittrackee_client/./src/locales/ sync [A-Za-z0-9-_,\\s]+\\.ts$/","webpack://fittrackee_client/webpack/bootstrap","webpack://fittrackee_client/webpack/runtime/chunk loaded","webpack://fittrackee_client/webpack/runtime/compat get default export","webpack://fittrackee_client/webpack/runtime/create fake namespace object","webpack://fittrackee_client/webpack/runtime/define property getters","webpack://fittrackee_client/webpack/runtime/ensure chunk","webpack://fittrackee_client/webpack/runtime/get javascript chunk filename","webpack://fittrackee_client/webpack/runtime/get mini-css chunk filename","webpack://fittrackee_client/webpack/runtime/global","webpack://fittrackee_client/webpack/runtime/hasOwnProperty shorthand","webpack://fittrackee_client/webpack/runtime/load script","webpack://fittrackee_client/webpack/runtime/make namespace object","webpack://fittrackee_client/webpack/runtime/publicPath","webpack://fittrackee_client/webpack/runtime/css loading","webpack://fittrackee_client/webpack/runtime/jsonp chunk loading","webpack://fittrackee_client/webpack/startup"],"sourcesContent":["import axios from 'axios'\n\nimport { pendingRequests, removeRequestIfPending } from '@/api/pending'\nimport store from '@/store'\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport { getApiUrl } from '@/utils'\n\nconst authApi = axios.create({\n baseURL: getApiUrl(),\n})\n\nauthApi.interceptors.request.use(\n (config) => {\n const controller = new AbortController()\n config.signal = controller.signal\n const requestKey = removeRequestIfPending(config)\n pendingRequests.set(requestKey, controller)\n\n const authToken = store.getters[AUTH_USER_STORE.GETTERS.AUTH_TOKEN]\n if (authToken) {\n const auth = `Bearer ${authToken}`\n if (config.headers && config.headers.Authorization !== auth) {\n config.headers.Authorization = `Bearer ${authToken}`\n }\n }\n return config\n },\n (error) => Promise.reject(error)\n)\n\nauthApi.interceptors.response.use(\n (response) => {\n removeRequestIfPending(response.config)\n return response\n },\n (error) => {\n if (error.message !== 'canceled') {\n removeRequestIfPending(error.response.config)\n }\n return Promise.reject(error)\n }\n)\n\nexport default authApi\n","import { AxiosRequestConfig } from 'axios'\n\nexport const pendingRequests = new Map()\n\nconst generateRequestKey = (config: AxiosRequestConfig): string => {\n const { method, url, params = {}, data = {} } = config\n return [method, url, JSON.stringify(params), JSON.stringify(data)].join('')\n}\n\nexport const removeRequestIfPending = (config: AxiosRequestConfig): string => {\n const requestKey = generateRequestKey(config)\n if (pendingRequests.has(requestKey)) {\n const controller = pendingRequests.get(requestKey) || {}\n controller?.abort()\n pendingRequests.delete(requestKey)\n }\n return requestKey\n}\n","import { createI18n, LocaleMessages, VueMessageType } from 'vue-i18n'\n\n/**\n * Load locale messages\n *\n * The loaded `JSON` locale messages is pre-compiled by `@intlify/vue-i18n-loader`, which is integrated into `vue-cli-plugin-i18n`.\n * See: https://github.com/intlify/vue-i18n-loader#rocket-i18n-resource-pre-compilation\n */\nconst disabledLanguages = ['nb'] // to remove after norwegian translations release\n\nfunction loadLocaleMessages(): Record> {\n const locales = require.context('./locales', true, /[A-Za-z0-9-_,\\s]+\\.ts$/i)\n const messages: Record> = {}\n locales.keys().forEach((key) => {\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i)\n if (\n matched &&\n matched.length > 1 &&\n !disabledLanguages.includes(matched[1])\n ) {\n const locale = matched[1]\n messages[locale] = locales(key).default\n }\n })\n return messages\n}\n\nexport default createI18n({\n legacy: false,\n locale: 'en',\n fallbackLocale: 'en',\n globalInjection: true,\n messages: loadLocaleMessages(),\n})\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontaktiere den Administrator\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee ist ein selbst-gehosteter Outdoor-Aktivitäts-Tracker.\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"unter \", _interpolate(_list(0)), \" Lizenz \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Quellkode\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktion\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiviere Konto\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiv\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hinzufügen/Entfernen von Administratorrechten, Lösche Nutzerkonto.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontakt-E-Mail des Administrators\"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Anzahl aktiver Nutzer\"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wenn 0, gibt es keine Registrierungslimitierung..\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Dateianzahl im zip Archiv\"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Kontakt-E-Mail\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Größe der hochgeladenen Dateien (in Mb)\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungskonfiguration\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Größe des zip Archives (in Mb)\"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück zu Admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Möchtest du wirklich das \", _interpolate(_list(0)), \" Konto löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Möchtest du wirklich das \", _interpolate(_list(0)), \" Passwort zurücksetzen?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktuelle E-Mail\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lösche Nutzer\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail-Versand ist deaktiviert.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktivieren/Deaktivieren von Sportarten.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Neue E-Mail\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Das wasswort wurde zurückgesetzt.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung ist derzeit deaktiviert.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung ist derzeit aktiviert.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiv\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainings existieren\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten Administration\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktualisiere Anwemdungskonfiguration (maximale Anzahl an registrierten Nutzern, maximale Dateigröße).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktualisiere E-Mail\"])},\n \"USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzer\"])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die E-Mail Adresse wurde aktualisiert.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administratorrechte hinzufügen\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administratorrechte entfernen\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Adminstatus\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierungsdatum\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accountstatus\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzername\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainingsanzahl\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail: Eine gültige E-Mail muss angegeben werden.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler bei der GPX-Verarbeitung.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Einlesen der GPX-Datei\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Abrufen der Konfiguration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Aktualisieren der Konfiguration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Die Registrierung ist deaktiviert.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dateierweiterung ist nicht erlaubt.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die Datei ist größer als erlaubt.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültige Anmeldedaten.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die bereitgestellten Daten sind ungültig.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte erneut anmelden.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte erneut anmelden.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Netzwerkfehler.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die neue E-Mail muss sich von der aktuellen E-Mail unterscheiden\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei angegeben.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei ausgewählt.\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort: Passwort und Passwortbestätigung stimmen nicht überein.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe ein gültiges Authentifizierungstoken an.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Es tut mir leid, der Benutzername ist schon vergeben.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportart existiert nicht.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die Signatur ist abgelaufen. Bitte melde dich erneut an.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung erfolgreich.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Der Nutzer existiert nicht.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Um den Administrator zu kontaktieren, muss eine gültige E-Mail-Adresse angegeben werden\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du kannst Dein Konto nicht löschen, da kein anderer Nutzer hat Administratorrechte besitzt.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du hast keine Berechtigung.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorhergehende\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächste\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bestätigungs-E-Mail erneut senden\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Autorisieren\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abbrechen\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter löschen\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mein Konto löschen\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Deaktivieren\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bearbeiten\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktivieren\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmelden\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nein\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrieren\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurücksetzen\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Speichern\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ja\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Über\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bestätigung\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontakt\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Tag\"]), _normalize([\"Tage\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Angezeigt\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dokumentation (en)\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hier\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Versteckt\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Startseite\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sortiert nach\"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sortieren\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"aufsteigend\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"absteigend\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pro Seite\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Insgesamt\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dashboard\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dieser Monat\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bei der Anwendung scheinen einige Probleme aufgetreten zu sein.
Bitte versuche es später noch einmal oder kontaktiere den Administrator.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Seite nicht gefunden\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training nicht gefunden\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Etwas lief schief\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Eine neue OAuth2-Anwendung hinzufügen\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ID\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geheimnis\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungsbeschreibung\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erstellt am\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungsname\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Weiterleitungs-URL\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geltungsbereich\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf auth-Endpunkte\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf auth-Endpunkte\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf users-Endpunkte\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf users-Endpunkte\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf workouts-Endpunkte\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf workouts-Endpunkte\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf die Anwendungskonfiguration\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungs-URL\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung erfolgreich erstellt. Stelle sicher, dass du das Geheimnis kopierst, du kannst es nicht erneut anzeigen.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist sicher, dass du diese App löschen willst?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Die Anwendung \", _interpolate(_list(0)), \" fragt an:\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OAuth2-Anwendungen\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" den Zugriff auf deinen Account erlauben?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"in Zwischenablage kopieren\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung löschen\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung hinzufügen\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung wurde nicht gefunden!\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Anwendungen\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Beschreibung\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alle Tokens zurückrufen\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist du sicher, dass du alle Tokens zurückrufen möchtest?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alle vorhandenen und vergebenen Tokens wurde zurückgerufen.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Pendeln)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Virtuell)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wandern\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountainbiken\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountainbiken (elektrisch)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Rudern\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Laufen\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skifahren (Alpin)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skifahren (Langlauf)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schneeschuhe\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gehen\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistik\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Woche\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Monat\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jahr\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hast du keine Anweisungen erhalten?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prüfe deine E-Mail. Eine neue Bestätigungs-E-Mail wurde an die angegebene Adresse geschickt.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hast du bereits ein Konto?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Möchtest du dein Konto wirklich löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktuelles Passwort\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe eine gültige E-Mail-Adresse an.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe ein Passwort ein\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nach Benutzernamen filtern\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort verbergen\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte fordere ein neues Passworts an.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sprache\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmelden\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmeldung\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abmelden\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Neues Passwort\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Nutzer gefunden.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mindestens 8 Zeichen sind erforderlich.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort vergessen?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prüfe Deine E-Mail. Wenn Deine Adresse in der Datenbank enthalten ist, wirst du eine E-Mail mit einem Link erhalten um Dein Passwort zurückzusetzen.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"schwach\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mittel\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"gut\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwortstärke\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide vorhersehbare Buchstabenersetzungen wie \", \"@\", \" für a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide umgekehrte Schreibweisen gebräuchlicher Wörter.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schreibe einige, aber nicht alle Buchstaben groß.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schreibe mehr als nur den ersten Buchstaben groß.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Daten und Jahreszahlen, die mit Dir in Verbindung gebracht werden.\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Angabe von letzten Jahreszahlen.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Jahreszahlen, die mit Dir in Verbindung gebracht werden.\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide gebräuchliche Zeichenfolgen.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide wiederholungen von Wörtern und Zeichen.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Verwende längere Tastaturmuster und ändere mehrmals die Schreibrichtung.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Füge weitere weniger gebräuchliche Wörter hinzu.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Verwenden Sie mehrere Wörter, aber vermeide gebräuchliche Ausdrücke.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du kannst sichere Passwörter erstellen, ohne Symbole, Zahlen oder Großbuchstaben zu verwenden.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wenn Sie dieses Passwort auch anderweitig verwenden, sollten Sie es ändern.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Dein Passwort wurde aktualisiert. Klicke \", _interpolate(_list(0)), \" um dich anzumelden.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontoausgabe\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anstiegs-bezogene Daten (Aufnahmen, gesamt)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück zum Profil\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Biographie\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geburtsdatum\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Datumsanzeigeformat\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil bearbeiten\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen ändern\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen für Sportarten ändern\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Bitte \", _interpolate(_list(0)), \" um Deine E-Mail Adresse nochmals zu ändern oder kontaktiere den Administrator\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorname\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erster Tag der Woche\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sprache\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nachname\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ort\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Montag\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bildausgabe\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild aktualisieren\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild entfernen\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungsausgabe\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil-Ausgabe\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Regirierungsdatum\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten-Einstellungsausgabe\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sontag\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Konto\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungen\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktion\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Farbe\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vom Admin deaktiviert\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"aktiv\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geschwindigkeitsschwellenwert für Stopp\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich aktualisiert. Bitte prüfe Deine E-Mail um die neue E-Mail Adresse zu bestätigen.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich erstellt.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ein Aktivierungslink für Dein Konto wurde an die angegebene E-Mail Adresse geschickt.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich aktualisiert.\"])},\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einheiten für die Distanz\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Imperiales System (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Metrisches System (m, km)\"])}\n },\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zeitzone\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrieren\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail zur Kontobestätigung erneut senden\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Entschuldigung, die Registrierung ist deaktiviert.\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort anzeigen\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dieser Account ist inaktiv.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Benutzerbild\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzername\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 bis 30 Zeichen sind erforderlich, nur alphanumerische Zeichen und der Unterstrich _ sind erlaubt.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training hinzufügen\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Analyse\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aufstieg\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschn. Geschwindigkeit\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschnittsgeschwindigkeit\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"zurück zum Training\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Datum\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abstieg\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"zeige Filter\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Entfernung\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dauer\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training bearbeiten\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höhe\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ende\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Von\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".gpx Datei\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"verberge Filter\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Letzte Trainings\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lade mehr Trainings\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"maximale Höhe\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Maximale Dateianzahl\"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Maximalgröße\"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Geschwindigkeit\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"minimale Höhe\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächstes Segment\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächstes Training\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Daten aus gpx, ohne Bereinigung\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei angegeben\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"enthält keinen Ordner\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Karte\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein nächstes Segment\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein nächstes Training\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Anmerkungen\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein vorheriges Segment\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein vorheriges Training\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Aufzeichnungen.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Trainings.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmerkungen\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pausen\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorheriges Segment\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorheriges Training\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Aufzeichnung\"]), _normalize([\"Aufzeichnungen\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschn. Geschwindigkeit\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Weiteste Entfernung\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höchster Anstieg\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Längste Dauer\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Geschwindigkeit\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"verbleibende Zeichen\"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Segment\"]), _normalize([\"Segmente\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geschwindigkeit\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Sportart\"]), _normalize([\"Sportarten\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start und Ziel\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höhenachse bei Null starten\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"bis\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gesamtdauer\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Füge erstes Training hinzu!\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Luftfeuchtigkeit\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Temperatur\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wind\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNO\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NO\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ONO\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"O\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OSO\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SO\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSO\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSW\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SW\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WSW\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"W\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WNW\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NW\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNW\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"klarer Tag\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"klare Nacht\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wolkig\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nebel\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"teilweise bewölkter Tag\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"teilweise bewölkte Nacht\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Regen\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schneeregen\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schnee\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wind\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mit .gpx Datei\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ohne .gpx Datei\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Training\"]), _normalize([\"Trainings\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainingsdatum\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist du sicher, dass du dieses Training löschen möchtest?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".zip Datei\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"oder .zip Datei mit .gpx Dateien\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Contact the administrator\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee is a self-hosted outdoor activity tracker.\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"under \", _interpolate(_list(0)), \" license \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Source code\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Action\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activate account\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Active\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add/remove admin rights, delete user account.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administrator email for contact\"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. number of active users\"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"If 0, no limitation on registration.\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. files of zip archive\"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no contact email\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. size of uploaded files (in Mb)\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application configuration\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. size of zip archive (in Mb)\"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back to admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Are you sure you want to delete \", _interpolate(_list(0)), \" account? All data will be deleted, this cannot be undone.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Are you sure you want to reset \", _interpolate(_list(0)), \" password?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Current email\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete user\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email sending is disabled.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enable/disable sports.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New email\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The password has been reset.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration is currently disabled.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration is currently enabled.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset password\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Active\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workouts exist\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Label\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sports administration\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update application configuration (maximum number of registered users, maximum files size).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update email\"])},\n \"USER\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"user\"]), _normalize([\"users\"])])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The email address has been updated.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add admin rights\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove admin rights\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"admin status\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"registration date\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"account status\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"username\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workout count\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error. Please try again or contact the administrator.\"])},\n \"at least one file in zip archive exceeds size limit, please check the archive\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"At least one file in zip archive exceeds size limit, please check the archive.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email: valid email must be provided.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error during gpx processing.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error during gpx file parsing.\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error on getting configuration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error when updating configuration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error, please try again or contact the administrator.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error, registration is disabled.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File extension not allowed.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File size is greater than the allowed size.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid credentials.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Provided data are invalid.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please log in again.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please log in again.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Network Error.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The new email must be different than curent email\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No file provided.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No selected file.\"])},\n \"the number of files in the archive exceeds the limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The number of files in the archive exceeds the limit.\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password: password and password confirmation don't match.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Provide a valid auth token.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sorry, that username is already taken.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sport does not exist.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Signature expired. Please log in again.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Successfully registered.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User does not exist.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"A valid email must be provided for administrator contact\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You can not delete your account, no other user has admin rights.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You do not have permissions.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"previous\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"next\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Resend confirmation email\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Authorize\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cancel\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Clear filters\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete my account\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disable\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enable\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Log in\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Register\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Submit\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Yes\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"about\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirmation\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"contact\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"day\"]), _normalize([\"days\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Displayed\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"here\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hidden\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Home\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"order by\"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sort\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascending\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descending\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"par page\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Total\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dashboard\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This month\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error. Please try again or contact the administrator.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The application seems to have encountered some issues.
Please try again later or contact the administrator.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Page not found\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Workout not found\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Something went wrong\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add a new OAuth2 application\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Id\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Secret\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application description\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Issue at\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application name\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Redirect URL\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scope\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to application configuration.\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to auth endpoints.\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to auth endpoints.\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to users endpoints.\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to users endpoints.\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to workouts endpoints.\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to workouts endpoints.\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application URL\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application created successfully. Make sure to copy the secret now, it won't show up again.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete this app?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"The application \", _interpolate(_list(0)), \" is requesting:\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OAuth2 applications\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Authorize \", _interpolate(_list(0)), \" to use your account?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"copy to the clipboard\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete application\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add an application\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application not found!\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no applications\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no description\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revoke all tokens\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to revoke all tokens?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"All existing associated tokens have been revoked.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Transport)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Virtual)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hiking\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountain Biking\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountain Biking (Electric)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Rowing\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Running\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skiing (Alpine)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skiing (Cross Country)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Snowshoes\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Walking\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistics\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"week\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"month\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"year\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Didn't received instructions?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Check your email. A new confirmation email has been sent to the address provided.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Already have an account?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete your account? All data will be deleted, this cannot be undone\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Current password\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter a valid email address.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter a password\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter on username\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hide password\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please request a new password reset.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Language\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"log in\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Login\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Logout\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New password\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No users found.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"At least 8 characters required.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Forgot password?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password reset\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Check your email. If your address is in our database, you'll received an email with a link to reset your password.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"weak\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"average\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"good\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"strong\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"password strength\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid predictable letter substitutions like \", \"@\", \" for a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid reversed spellings of common words.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalize some, but not all letters.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalize more than the first letter.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid dates and years that are associated with you.\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid recent years.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid years that are associated with you.\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid common character sequences.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid repeated words and characters.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Use longer keyboard patterns and change typing direction multiple times.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add more words that are less common.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Use multiple words, but avoid common phrases.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You can create strong passwords without using symbols, numbers, or uppercase letters.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"If you use this password elsewhere, you should change it.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Your password have been updated. Click \", _interpolate(_list(0)), \" to log in.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Account edition\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ascent-related data (records, total)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back to profile\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bio\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Birth date\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date display format\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit profile\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit preferences\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit sports preferences\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Please \", _interpolate(_list(0)), \" to change your email address again or contact the administrator\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"First name\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"First day of week\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Language\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Last name\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Location\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Monday\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Picture\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Picture edition\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update picture\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove picture\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preferences edition\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile edition\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration date\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sports preferences edition\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sunday\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"account\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"apps\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"picture\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"preferences\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"profile\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sports\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"action\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"color\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"disabled by admin\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"active\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"label\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"stopped speed threshold\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been updated successfully. Please check your email to confirm your new email address.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been created successfully.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"A link to activate your account has been emailed to the address provided.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been updated successfully.\"])},\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Units for distance\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Imperial system (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Metric system (m, km)\"])}\n },\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Timezone\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Register\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Resend account confirmation email\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sorry, registration is disabled.\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset your password\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"show password\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This user account is inactive.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"user picture\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Username\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 to 30 characters required, only alphanumeric characters and the underscore character \\\"_\\\" allowed.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add a workout\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"analysis\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascent\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ave. speed\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"average speed\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"back to workout\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descent\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"display filters\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"distance\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"duration\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit the workout\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"elevation\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"end\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"from\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".gpx file\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hide filters\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Latest workouts\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load more workouts\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max. altitude\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max files\"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max size\"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max. speed\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"min. altitude\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next segment\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Next workout\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"data from gpx, without any cleaning\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No file provided\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no folder inside\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No map\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next segment\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next workout\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No notes\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No previous segment\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No previous workout\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No records.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No workouts.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"notes\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pauses\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Previous segment\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Previous workout\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"record\"]), _normalize([\"records\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ave. speed\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Farthest distance\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Highest ascent\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Longest duration\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. speed\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"remaining characters\"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"segment\"]), _normalize([\"segments\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"speed\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"sport\"]), _normalize([\"sports\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start and finish\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start elevation axis at zero\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"title\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"to\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"total duration\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Upload one!\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"humidity\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"temperature\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wind\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNE\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NE\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ENE\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ESE\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SE\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSE\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSW\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SW\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WSW\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"W\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WNW\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NW\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNW\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"clear day\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"clear night\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cloudy\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fog\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partly cloudy day\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partly cloudy night\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"rain\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sleet\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"snow\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wind\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"with .gpx file\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"without .gpx file\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"workout\"]), _normalize([\"workouts\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workout date\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete this workout?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".zip file\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"or .zip file containing .gpx files\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Contacter l'administrateur\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee est un tracker d'activités sportives (en extérieur).\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"sous licence \", _interpolate(_list(0)), \" (en) \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Code source (en)\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Action\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer le compte\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Actif\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter/retirer des droits d'administration, supprimer des comptes utilisateurs.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email de l'administrateur pour contact \"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nombre maximum d'utilisateurs actifs \"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Si égal à 0, pas limite d'inscription\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nombre max. de fichiers dans une archive zip \"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"non renseigné\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Taille max. des fichiers (en Mo) \"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Configuration de l'application\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Taille max. des archives zip (en Mo) \"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revenir à l'admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Êtes-vous sûr de vouloir supprimer le compte de l'utilisateur \", _interpolate(_list(0)), \" ? Toutes les données seront définitivement.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Êtes-vous sûr de vouloir réinitialiser le mot de passe de l'utilisateur \", _interpolate(_list(0)), \" ?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Adresse email actuelle\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer l'utilisateur\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'envoi d'emails est désactivé.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer/désactiver des sports.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nouvelle adresse email\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Le mot de passe a été réinitialisé.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Les inscriptions sont actuellement désactivées.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Les inscriptions sont actuellement activées.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinit. le mot de passe\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Actif\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"des séances existent\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Label\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration - Sports\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Configurer l'application (nombre maximum d'utilisateurs inscrits, taille maximale des fichers).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Changer l'email\"])},\n \"USER\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"utilisateur\"]), _normalize([\"utilisateurs\"])])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'adresse email a été mise à jour.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter les droits d'admin\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Retirer les droits d'admin\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"status administrateur\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date d'inscription\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"statut du compte\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nom d'utilisateur\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nombre de séances\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur. Veuillez réessayer ou contacter l'administrateur.\"])},\n \"at least one file in zip archive exceeds size limit, please check the archive\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Au moins un fichier de l'archive zip dépasse la taille maximale, veuillez vérifier l'archive.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Courriel : une adresse électronique valide doit être fournie.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors du traitement du fichier gpx.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de l'analyse du fichier.\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de la récupération de la configuration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de la mise à jour de la configuration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur, veuillez réessayer ou contacter l'administrateur.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur, les inscriptions sont désactivées.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Extension de fichier non autorisée.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"La taille du fichier est supérieure à la limite autorisée.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Identifiants invalides.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Données fournies incorrectes.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton de connexion invalide, merci de vous reconnecter.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton de connexion, merci de vous reconnecter.\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier fourni.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier sélectionné.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur réseau.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"La nouvelle addresse électronique doit être differente de l'adresse actuelle\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe : les mots de passe saisis sont différents.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Merci de fournir un jeton de connexion valide.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ce sport n'existe pas.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Signature expirée. Merci de vous reconnecter.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désolé, ce nom d'utilisateur est déjà utilisé.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Inscription validée.\"])},\n \"the number of files in the archive exceeds the limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Le nombre de fichiers de l'archive dépasse la limite.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'utilisateur n'existe pas.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Une adresse électronique doit être fournie pour le contact de l'administrateur\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous ne pouvez pas supprimer votre compte, aucun autre utilisateur n'a des droits d'administration.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous n'avez pas les permissions nécessaires.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"précédent\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"suivant\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Renvoyer le message de confirmation\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Autoriser\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Retour\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Annuler\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialiser\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer mon compte\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désactiver\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filtrer\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se connecter\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Non\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S'inscrire\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinit.\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Valider\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Oui\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"à propos\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirmation\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"contact\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"jour\"]), _normalize([\"jours\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Affiché\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation (en)\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ici\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Masqué\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accueil\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"trier par \"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"tri\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascendant\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descendant\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"par page\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Total\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tableau de bord\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ce mois-ci\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur. Veuillez réessayer ou contacter l'administrateur.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'application semble rencontrer quelques problèmes.
Veuillez réessayer plus tard ou contacter l'administrateur.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Page introuvable\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance introuvable\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Une erreur s'est produite\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une nouvelle application OAuth2\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Identifiant\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Secret\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Description de l'application\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Créée le\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom de l'application\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"URL de redirection\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scope\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture à la configuration de l'application.\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes auth.\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes auth.\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes users.\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes users.\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes workouts.\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes workouts.\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"URL de l'application\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application créée avec succès. Assurez-vous de copier le secret maintenant, il ne s'affichera plus.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr de vouloir supprimer cette application ?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"L'application \", _interpolate(_list(0)), \" demande les accès suivants :\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Applications OAuth2\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Autoriser \", _interpolate(_list(0)), \" à utiliser votre compte ?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"copier dans le presse papier\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer l'application\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une application\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application introuvable !\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de applications\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de description\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Révoquer tous les jetons\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr de vouloir révoquer tous les jetons ?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tous les jetons associés existants ont été révoqués.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Transport)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Virtuel)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Randonnée\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"VTT\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"VTT (Électrique)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aviron\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Course\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ski (Alpin)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ski (Randonnée)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Raquettes\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Marche\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistiques\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"semaine\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mois\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"année\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous n'avez pas reçu les instructions ?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vérifiez vos courriels. Un nouveau courriel de confirmation a été envoyé à l'adresse électronique fournie.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous avez déjà un compte ?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr·e de vouloir supprimer votre compte ? Toutes les données seront définitivement effacés\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe actuel\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Courriel\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Saisissez une adresse électronique valide.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Saisissez un mot de passe\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filtrer sur le nom d'utilisateur\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"masquer le mot de passe\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton invalide, veuillez demander une nouvelle réinitialisation de mot de passe.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Langue\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"connecter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se connecter\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se déconnecter\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nouveau mot de passe\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aucun utilisateur trouvé.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"8 caractères minimum.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe oublié ?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialisation du mot de passe\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vérifiez vos courriels. Si vote adresse est dans notre base de données, vous recevrez un courriel avec un lien pour réinitialiser votre mot de passe.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"faible\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"moyenne\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"bonne\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"forte\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"robustesse du mot de passe\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les substitutions de lettres prévisibles comme \", \"@\", \" pour a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les orthographes inversées des mots courants.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mettez quelques lettres en majuscules, mais pas toutes.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalisez mais pas seulement la première lettre.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les dates et les années qui vous sont associées. (ex : date ou année de naissance).\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les dernières années.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les années qui vous sont associées. (ex : date de naissance).\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les séquences de caractères courantes.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les mots et les caractères répétés.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Utilisez des motifs de clavier plus longs et changez de sens de frappe plusieurs fois.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajoutez des mots moins courants.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Utilisez plusieurs mots, mais évitez les phrases courantes.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous pouvez créer des mots de passe forts sans utiliser de symboles, de chiffres ou de lettres majuscules.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Si vous utilisez ce mot de passe ailleurs, vous devriez le modifier.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Votre mot de passe a été mis à jour. Cliquez \", _interpolate(_list(0)), \" pour vous connecter.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour du compte\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Données relatives au dénivelé positif (records, total)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revenir au profil\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bio\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date de naissance\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Format d'affichage de la date\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier le profil\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier les préférences\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier les préférences des sports\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Veuillez vous \", _interpolate(_list(0)), \" pour changer de nouveau votre adresse électronique ou contacter l'administrateur\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Premier jour de la semaine\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prénom\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Langue\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lieu\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lundi\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image de profil\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour de l'image de profil\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mettre à jour l'image\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour des préférences\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour du profil\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date d'inscription\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour des préférences des sports\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dimanche\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"compte\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"apps\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"image\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"préférences\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"profil\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sports\"])}\n },\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unités pour les distances\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Système impérial (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Système métrique (m, km)\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"action\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"couleur\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"désactivé par l'administrateur\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"actif\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"label\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"seuil de vitesse arrêtée\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été modifié avec succès. Veuillez vérifier votre boîte de réception pour valider votre nouvelle adresse électronique.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été créé avec succès.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Un lien pour activer votre compte a été envoyé à l'adresse électronique fournie.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été modifié avec succès.\"])},\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fuseau horaire\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S'inscrire\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désolé, les inscriptions sont désactivées.\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Envoyer à nouveau le courriel de confirmation de compte\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialiser votre mot de passe\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"afficher le mot de passe\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Le compte de cet utilisateur est inactif.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"photo de l'utilisateur\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom d'utilisateur\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 à 30 caractères requis, seuls les caractères alphanumériques et le caractère _ sont autorisés.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une séance\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"analyse\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"dénivelé positif\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse moyenne\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse moy.\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"revenir à la séance\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"dénivelé négatif\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"afficher les filtres\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"distance\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"durée\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier la séance\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fin\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"à partir de\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fichier .gpx\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"masquer les filtres\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séances récentes\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Charger les séances suivantes\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude max\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fichiers max. \"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"taille max. \"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse max\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude min\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Segment suivant\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance suivante\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"données issues du fichier gpx, sans correction\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier fourni\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de répertoire\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de carte\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de segment suivant\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séance suivante\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de notes\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de segment précédent\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séance précédente\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de records.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séances.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"notes\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pauses\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Segment précédent\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance précédente\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"record\"]), _normalize([\"records\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vitesse moy.\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Distance la + longue\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dénivelé positif le + élevé\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durée la + longue\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vitesse max.\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nombre de caractères restants \"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"segment\"]), _normalize([\"segments\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"sport\"]), _normalize([\"sports\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"début\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Départ et arrivée\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"démarrer l'axe de l'altitude à 0\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"titre\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"jusqu'au\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"durée totale\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajoutez votre première séance !\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"humidité\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"température\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vent\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNE\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NE\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ENE\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ESE\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SE\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSE\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSO\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SO\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OSO\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"O\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ONO\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NO\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNO\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ensoleillé\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuit claire\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuageux\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"brouillard\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partiellement nuageux\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuit partiellement nuageuse\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pluie\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"neige fondue\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"neige\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"venteux\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"avec un fichier .gpx\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sans fichier .gpx\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"séance\"]), _normalize([\"séances\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date de la séance\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Etes-vous sûr de vouloir supprimer cette séance ?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"archive .zip\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ou une archive .zip contenant des fichiers .gpx\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","/* eslint-disable no-console */\n\nimport { register } from 'register-service-worker'\n\nif (process.env.NODE_ENV === 'production') {\n register(`${process.env.BASE_URL}service-worker.js`, {\n ready() {\n console.log(\n 'App is being served from cache by a service worker.\\n' +\n 'For more details, visit https://goo.gl/AFskqB'\n )\n },\n registered() {\n console.log('Service worker has been registered.')\n },\n cached() {\n console.log('Content has been cached for offline use.')\n },\n updatefound() {\n console.log('New content is downloading.')\n },\n updated() {\n console.log('New content is available; please refresh.')\n },\n offline() {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n )\n },\n error(error) {\n console.error('Error during service worker registration:', error)\n },\n })\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2c73279e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"footer\" }\nconst _hoisted_2 = { class: \"footer-items\" }\nconst _hoisted_3 = { class: \"footer-item\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"strong\", null, \"FitTrackee\", -1))\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"footer-item bullet\" }, \"•\", -1))\nconst _hoisted_6 = { class: \"footer-item\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"footer-item bullet\"\n}\nconst _hoisted_8 = {\n key: 1,\n class: \"footer-item\"\n}\nconst _hoisted_9 = [\"href\"]\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"footer-item bullet\" }, \"•\", -1))\nconst _hoisted_11 = { class: \"footer-item\" }\nconst _hoisted_12 = {\n href: \"https://samr1.github.io/FitTrackee/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\n\nimport { toRefs } from 'vue'\n\n interface Props {\n version: string\n adminContact?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Footer',\n props: {\n version: null,\n adminContact: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n version: string\n adminContact?: string\n }\n\n \n\n const { adminContact, version } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _hoisted_4,\n _createTextVNode(\" v\" + _toDisplayString(_unref(version)), 1)\n ]),\n _hoisted_5,\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_router_link, { to: \"/about\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('common.ABOUT')), 1)\n ]),\n _: 1\n })\n ]),\n (_unref(adminContact))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, \"•\"))\n : _createCommentVNode(\"\", true),\n (_unref(adminContact))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"a\", {\n href: `mailto:${_unref(adminContact)}`\n }, _toDisplayString(_ctx.$t('common.CONTACT')), 9, _hoisted_9)\n ]))\n : _createCommentVNode(\"\", true),\n _hoisted_10,\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"a\", _hoisted_12, _toDisplayString(_ctx.$t('common.DOCUMENTATION')), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./Footer.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Footer.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Footer.vue?vue&type=style&index=0&id=2c73279e&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2c73279e\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-95c1cc02\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"nav\" }\nconst _hoisted_2 = { class: \"nav-container\" }\nconst _hoisted_3 = { class: \"nav-app-name\" }\nconst _hoisted_4 = { class: \"nav-items-close\" }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"app-name\" }, \"FitTrackee\", -1))\nconst _hoisted_6 = {\n key: 0,\n class: \"nav-items-group\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"nav-item nav-separator\" }, null, -1))\nconst _hoisted_8 = { class: \"nav-items-user-menu\" }\nconst _hoisted_9 = {\n key: 0,\n class: \"nav-items-group\"\n}\nconst _hoisted_10 = { class: \"nav-item nav-profile-img\" }\nconst _hoisted_11 = {\n key: 1,\n class: \"nav-items-group\"\n}\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", { class: \"fa fa-language\" }, null, -1))\n\nimport { ComputedRef, computed, ref, capitalize } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IDropdownOption } from '@/types/forms'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { availableLanguages } from '@/utils/locales'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'NavBar',\n emits: ['menuInteraction'],\n setup(__props, { emit }) {\n\n \n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const isAuthenticated: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n )\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const isMenuOpen = ref(false)\n\n function openMenu() {\n isMenuOpen.value = true\n emit('menuInteraction', true)\n }\n function closeMenu() {\n isMenuOpen.value = false\n emit('menuInteraction', false)\n }\n function updateLanguage(option: IDropdownOption) {\n store.dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n option.value.toString()\n )\n }\n function logout() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.LOGOUT)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Dropdown = _resolveComponent(\"Dropdown\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: \"nav-item app-name\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/')))\n }, \" FitTrackee \")\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"nav-icon-open\", { 'menu-open': isMenuOpen.value }])\n }, [\n _createElementVNode(\"i\", {\n class: \"fa fa-bars hamburger-icon\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (openMenu()))\n })\n ], 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"nav-items\", { 'menu-open': isMenuOpen.value }])\n }, [\n _createElementVNode(\"div\", _hoisted_4, [\n _hoisted_5,\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa fa-close close-icon nav-item\", { 'menu-closed': !isMenuOpen.value }]),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (closeMenu()))\n }, null, 2)\n ]),\n _createElementVNode(\"div\", {\n class: \"nav-items-app-menu\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (closeMenu()))\n }, [\n (_unref(isAuthenticated))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('dashboard.DASHBOARD')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/workouts\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 2))), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/statistics\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('statistics.STATISTICS')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/workouts/add\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.ADD_WORKOUT')), 1)\n ]),\n _: 1\n }),\n (_unref(isAuthenticated) && _unref(authUser).admin)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"nav-item\",\n to: \"/admin\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.ADMIN')), 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n _hoisted_7\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n (_unref(isAuthenticated))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _createVNode(UserPicture, { user: _unref(authUser) }, null, 8, [\"user\"])\n ]),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/profile\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(authUser).username), 1)\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", {\n class: \"nav-item nav-link\",\n onClick: logout\n }, _toDisplayString(_ctx.$t('user.LOGOUT')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/login\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.LOGIN')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/register\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.REGISTER')), 1)\n ]),\n _: 1\n })\n ])),\n (_unref(availableLanguages) && _unref(language))\n ? (_openBlock(), _createBlock(_component_Dropdown, {\n key: 2,\n class: \"nav-item\",\n options: _unref(availableLanguages),\n selected: _unref(language),\n onSelected: updateLanguage\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }, 8, [\"options\", \"selected\"]))\n : _createCommentVNode(\"\", true)\n ])\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./NavBar.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NavBar.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./NavBar.vue?vue&type=style&index=0&id=95c1cc02&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-95c1cc02\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-47759238\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"no-config\" }\nconst _hoisted_2 = { class: \"error-page\" }\nconst _hoisted_3 = { class: \"error-img\" }\nconst _hoisted_4 = [\"innerHTML\"]\n\nimport ErrorImg from '@/components/Common/Images/ErrorImg.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'NoConfig',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(ErrorImg)\n ]),\n _createElementVNode(\"p\", {\n class: \"error-message\",\n innerHTML: _ctx.$t('error.APP_ERROR')\n }, null, 8, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./NoConfig.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./NoConfig.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./NoConfig.vue?vue&type=style&index=0&id=47759238&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-47759238\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, createVNode as _createVNode, unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, normalizeClass as _normalizeClass, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { id: \"top\" }, null, -1)\nconst _hoisted_2 = {\n key: 0,\n class: \"app-container\"\n}\nconst _hoisted_3 = { class: \"app-loading\" }\nconst _hoisted_4 = { class: \"container scroll\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-up\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_6 = [\n _hoisted_5\n]\n\nimport { ComputedRef, computed, ref, onBeforeMount, onMounted } from 'vue'\n\n import Footer from '@/components/Footer.vue'\n import NavBar from '@/components/NavBar.vue'\n import NoConfig from '@/components/NoConfig.vue'\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { useStore } from '@/use/useStore'\n import { localeFromLanguage } from '@/utils/locales'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'App',\n setup(__props) {\n\n const store = useStore()\n\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const appLoading: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_LOADING]\n )\n const hideScrollBar = ref(false)\n const displayScrollButton = ref(false)\n\n onBeforeMount(() => {\n initLanguage()\n store.dispatch(ROOT_STORE.ACTIONS.GET_APPLICATION_CONFIG)\n })\n onMounted(() => scroll())\n\n function updateHideScrollBar(isMenuOpen: boolean) {\n hideScrollBar.value = isMenuOpen\n }\n function isScrolledToBottom(element: Element): boolean {\n return (\n element.getBoundingClientRect().top < window.innerHeight &&\n element.getBoundingClientRect().bottom >= 0\n )\n }\n function scroll() {\n window.onscroll = () => {\n const bottom = document.querySelector('#bottom')\n displayScrollButton.value = bottom !== null && isScrolledToBottom(bottom)\n }\n }\n function scrollToTop() {\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n })\n setTimeout(() => {\n displayScrollButton.value = false\n }, 300)\n }\n function initLanguage() {\n let language = 'en'\n try {\n const navigatorLanguage = navigator.language.split('-')[0]\n if (navigatorLanguage in localeFromLanguage) {\n language = navigatorLanguage\n }\n } catch (e) {\n language = 'en'\n }\n store.dispatch(ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE, language)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Loader = _resolveComponent(\"Loader\")!\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _hoisted_1,\n _createVNode(NavBar, { onMenuInteraction: updateHideScrollBar }),\n (_unref(appLoading))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Loader)\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([\"app-container\", { 'hide-scroll': hideScrollBar.value }])\n }, [\n (_unref(appConfig))\n ? (_openBlock(), _createBlock(_component_router_view, { key: 0 }))\n : (_openBlock(), _createBlock(NoConfig, { key: 1 }))\n ], 2)),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"scroll-button\", { 'display-button': displayScrollButton.value }]),\n onClick: scrollToTop\n }, _hoisted_6, 2)\n ]),\n (_unref(appConfig))\n ? (_openBlock(), _createBlock(Footer, {\n key: 2,\n version: _unref(appConfig) ? _unref(appConfig).version : '',\n adminContact: _unref(appConfig).admin_contact\n }, null, 8, [\"version\", \"adminContact\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n}\n}\n\n})","import script from \"./App.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./App.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./App.vue?vue&type=style&index=0&id=2930d5e0&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-69d7e4ff\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"alert-message\" }\nconst _hoisted_2 = [\"innerHTML\"]\n\nimport { toRefs } from 'vue'\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AlertMessage',\n props: {\n message: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n message: string\n }\n\n \n const { message } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n innerHTML: _ctx.$t(_unref(message))\n }, null, 8, _hoisted_2)\n ]))\n}\n}\n\n})","import script from \"./AlertMessage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AlertMessage.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AlertMessage.vue?vue&type=style&index=0&id=69d7e4ff&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-69d7e4ff\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8cf5cc64\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"custom-textarea\" }\nconst _hoisted_2 = [\"id\", \"name\", \"maxLenght\", \"disabled\"]\nconst _hoisted_3 = { class: \"remaining-chars\" }\n\nimport { ref, watch, withDefaults } from 'vue'\n\n interface Props {\n name: string\n charLimit?: number\n disabled?: boolean\n input?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CustomTextArea',\n props: {\n name: null,\n charLimit: { default: 500 },\n disabled: { type: Boolean, default: false },\n input: { default: '' }\n },\n emits: ['updateValue'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { name: string, charLimit: number, disabled: boolean, input: string | null }\n\n \n\n \n\n const text = ref('')\n\n function updateText(event: Event & { target: HTMLInputElement }) {\n emit('updateValue', event.target.value)\n }\n\n watch(\n () => props.input,\n (value) => {\n text.value = value === null ? '' : value\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _withDirectives(_createElementVNode(\"textarea\", {\n id: __props.name,\n name: __props.name,\n maxLenght: __props.charLimit,\n disabled: __props.disabled,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((text).value = $event)),\n onInput: updateText\n }, null, 40, _hoisted_2), [\n [_vModelText, text.value]\n ]),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('workouts.REMAINING_CHARS')) + \": \" + _toDisplayString(text.value.length) + \"/\" + _toDisplayString(__props.charLimit), 1)\n ]))\n}\n}\n\n})","import script from \"./CustomTextArea.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CustomTextArea.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CustomTextArea.vue?vue&type=style&index=0&id=8cf5cc64&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8cf5cc64\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, Fragment as _Fragment } from \"vue\"\n\nimport { ComputedRef, computed, toRefs, withDefaults } from 'vue'\n\n import { TUnit } from '@/types/units'\n import { units, convertDistance } from '@/utils/units'\n\n interface Props {\n distance: number\n unitFrom: TUnit\n useImperialUnits: boolean\n digits?: number\n displayUnit?: boolean\n speed?: boolean\n strong?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Distance',\n props: {\n distance: null,\n unitFrom: null,\n useImperialUnits: { type: Boolean },\n digits: { default: 2 },\n displayUnit: { type: Boolean, default: true },\n speed: { type: Boolean, default: false },\n strong: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { distance: number, unitFrom: TUnit, useImperialUnits: boolean, digits: number, displayUnit: boolean, speed: boolean, strong: boolean }\n\n \n\n const {\n digits,\n displayUnit,\n distance,\n speed,\n strong,\n unitFrom,\n useImperialUnits,\n } = toRefs(props)\n const unitTo: ComputedRef = computed(() =>\n useImperialUnits.value\n ? units[unitFrom.value].defaultTarget\n : unitFrom.value\n )\n const convertedDistance = computed(() =>\n useImperialUnits.value\n ? convertDistance(\n distance.value,\n unitFrom.value,\n unitTo.value,\n digits.value\n )\n : parseFloat(distance.value.toFixed(digits.value))\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"distance\", { strong: _unref(strong) }])\n }, _toDisplayString(_unref(convertedDistance)), 3),\n _createTextVNode(\" \" + _toDisplayString(' ') + \" \"),\n (_unref(displayUnit))\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n class: _normalizeClass([\"unit\", { strong: _unref(strong) }])\n }, _toDisplayString(_unref(unitTo)) + _toDisplayString(_unref(speed) ? '/h' : ''), 3))\n : _createCommentVNode(\"\", true)\n ], 64))\n}\n}\n\n})","import script from \"./Distance.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Distance.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Distance.vue?vue&type=style&index=0&id=f46ff1d6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-f46ff1d6\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2d3b4eac\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"dropdown-wrapper\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"dropdown-list\"\n}\nconst _hoisted_3 = [\"onClick\"]\n\nimport { ref, watch } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { IDropdownOption, TDropdownOptions } from '@/types/forms'\n interface Props {\n options: TDropdownOptions\n selected: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Dropdown',\n props: {\n options: null,\n selected: null\n },\n emits: {\n selected: (option: IDropdownOption) => option,\n },\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n options: TDropdownOptions\n selected: string\n }\n\n \n\n \n\n const route = useRoute()\n const isOpen = ref(false)\n const dropdownOptions = props.options.map((option) => option)\n\n function toggleDropdown() {\n isOpen.value = !isOpen.value\n }\n function updateSelected(option: IDropdownOption) {\n emit('selected', option)\n isOpen.value = false\n }\n\n watch(\n () => route.path,\n () => (isOpen.value = false)\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"dropdown-selected\",\n onClick: toggleDropdown\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n (isOpen.value)\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(dropdownOptions), (option, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n class: _normalizeClass([\"dropdown-item\", { selected: option.value === __props.selected }]),\n key: index,\n onClick: ($event: any) => (updateSelected(option))\n }, _toDisplayString(option.label), 11, _hoisted_3))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./Dropdown.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Dropdown.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Dropdown.vue?vue&type=style&index=0&id=2d3b4eac&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2d3b4eac\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2659a79a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"error-message\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { key: 1 }\n\nimport { toRefs } from 'vue'\n\n interface Props {\n message: string | string[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'ErrorMessage',\n props: {\n message: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n message: string | string[]\n }\n\n \n const { message } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (Array.isArray(_unref(message)))\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(message), (subMessage, index) => {\n return (_openBlock(), _createElementBlock(\"li\", { key: index }, _toDisplayString(_ctx.$t(subMessage)), 1))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(_unref(message))), 1))\n ]))\n}\n}\n\n})","import script from \"./ErrorMessage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ErrorMessage.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./ErrorMessage.vue?vue&type=style&index=0&id=2659a79a&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2659a79a\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingSport.vue?vue&type=template&id=be8023a2\"\nimport script from \"./CyclingSport.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingSport.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingTransport.vue?vue&type=template&id=97af5148\"\nimport script from \"./CyclingTransport.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingTransport.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingVirtual.vue?vue&type=template&id=ec8f7bb6\"\nimport script from \"./CyclingVirtual.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingVirtual.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Hiking.vue?vue&type=template&id=40903dc4\"\nimport script from \"./Hiking.vue?vue&type=script&lang=js\"\nexport * from \"./Hiking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./MountainBiking.vue?vue&type=template&id=5bdbc6e8\"\nimport script from \"./MountainBiking.vue?vue&type=script&lang=js\"\nexport * from \"./MountainBiking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./MountainBikingElectric.vue?vue&type=template&id=21e72aec\"\nimport script from \"./MountainBikingElectric.vue?vue&type=script&lang=js\"\nexport * from \"./MountainBikingElectric.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Rowing.vue?vue&type=template&id=31ae2dd5\"\nimport script from \"./Rowing.vue?vue&type=script&lang=js\"\nexport * from \"./Rowing.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Running.vue?vue&type=template&id=4d47a4fe\"\nimport script from \"./Running.vue?vue&type=script&lang=js\"\nexport * from \"./Running.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./SkiingAlpine.vue?vue&type=template&id=3ebf3bca\"\nimport script from \"./SkiingAlpine.vue?vue&type=script&lang=js\"\nexport * from \"./SkiingAlpine.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./SkiingCrossCountry.vue?vue&type=template&id=1561bbe6\"\nimport script from \"./SkiingCrossCountry.vue?vue&type=script&lang=js\"\nexport * from \"./SkiingCrossCountry.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Snowshoes.vue?vue&type=template&id=67df2761\"\nimport script from \"./Snowshoes.vue?vue&type=script&lang=js\"\nexport * from \"./Snowshoes.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Trail.vue?vue&type=template&id=32a14156\"\nimport script from \"./Trail.vue?vue&type=script&lang=js\"\nexport * from \"./Trail.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Walking.vue?vue&type=template&id=2ed4f5f4\"\nimport script from \"./Walking.vue?vue&type=script&lang=js\"\nexport * from \"./Walking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"title\"]\n\nimport { inject, toRefs, withDefaults } from 'vue'\n\n import CyclingSport from '@/components/Common/Images/SportImage/CyclingSport.vue'\n import CyclingTransport from '@/components/Common/Images/SportImage/CyclingTransport.vue'\n import CyclingVirtual from '@/components/Common/Images/SportImage/CyclingVirtual.vue'\n import Hiking from '@/components/Common/Images/SportImage/Hiking.vue'\n import MountainBiking from '@/components/Common/Images/SportImage/MountainBiking.vue'\n import MountainBikingElectric from '@/components/Common/Images/SportImage/MountainBikingElectric.vue'\n import Rowing from '@/components/Common/Images/SportImage/Rowing.vue'\n import Running from '@/components/Common/Images/SportImage/Running.vue'\n import SkiingAlpine from '@/components/Common/Images/SportImage/SkiingAlpine.vue'\n import SkiingCrossCountry from '@/components/Common/Images/SportImage/SkiingCrossCountry.vue'\n import Snowshoes from '@/components/Common/Images/SportImage/Snowshoes.vue'\n import Trail from '@/components/Common/Images/SportImage/Trail.vue'\n import Walking from '@/components/Common/Images/SportImage/Walking.vue'\n\n interface Props {\n sportLabel: string\n color: string | null\n title?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sportLabel: null,\n color: null,\n title: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { sportLabel: string, color: string | null, title: string }\n\n \n\n const { color, sportLabel, title } = toRefs(props)\n const sportColors = inject('sportColors')\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"sport-img\",\n style: _normalizeStyle({ fill: _unref(color) ? _unref(color) : _unref(sportColors)[_unref(sportLabel)] }),\n title: _unref(title) ? _unref(title) : _ctx.$t(`sports.${_unref(sportLabel)}.LABEL`)\n }, [\n (_unref(sportLabel) === 'Cycling (Sport)')\n ? (_openBlock(), _createBlock(CyclingSport, { key: 0 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Cycling (Transport)')\n ? (_openBlock(), _createBlock(CyclingTransport, { key: 1 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Cycling (Virtual)')\n ? (_openBlock(), _createBlock(CyclingVirtual, { key: 2 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Hiking')\n ? (_openBlock(), _createBlock(Hiking, { key: 3 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Mountain Biking')\n ? (_openBlock(), _createBlock(MountainBiking, { key: 4 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Mountain Biking (Electric)')\n ? (_openBlock(), _createBlock(MountainBikingElectric, { key: 5 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Rowing')\n ? (_openBlock(), _createBlock(Rowing, { key: 6 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Running')\n ? (_openBlock(), _createBlock(Running, { key: 7 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Skiing (Alpine)')\n ? (_openBlock(), _createBlock(SkiingAlpine, { key: 8 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Skiing (Cross Country)')\n ? (_openBlock(), _createBlock(SkiingCrossCountry, { key: 9 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Snowshoes')\n ? (_openBlock(), _createBlock(Snowshoes, { key: 10 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Trail')\n ? (_openBlock(), _createBlock(Trail, { key: 11 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Walking')\n ? (_openBlock(), _createBlock(Walking, { key: 12 }))\n : _createCommentVNode(\"\", true)\n ], 12, _hoisted_1))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","\n\n\n","import { render } from \"./Loader.vue?vue&type=template&id=4c9921ee&scoped=true\"\nconst script = {}\n\nimport \"./Loader.vue?vue&type=style&index=0&id=4c9921ee&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4c9921ee\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-e8fcfaba\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"modal\" }\nconst _hoisted_2 = { class: \"custom-modal\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"modal-message\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"modal-message\"\n}\nconst _hoisted_5 = { class: \"modal-buttons\" }\n\nimport { ComputedRef, computed, toRefs, withDefaults, onUnmounted } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n title: string\n message: string\n strongMessage?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Modal',\n props: {\n title: null,\n message: null,\n strongMessage: { default: () => null }\n },\n emits: ['cancelAction', 'confirmAction'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { title: string, message: string, strongMessage: string | null }\n\n \n\n \n\n const store = useStore()\n\n const { title, message, strongMessage } = toRefs(props)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\nreturn (_ctx: any,_cache: any) => {\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(title)), 1)\n ]),\n content: _withCtx(() => [\n (_unref(strongMessage))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createVNode(_component_i18n_t, { keypath: _unref(message) }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(strongMessage)), 1)\n ]),\n _: 1\n }, 8, [\"keypath\"])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, _toDisplayString(_unref(message)), 1)),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 2,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_5, [\n (!_unref(errorMessages))\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"confirm\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('confirmAction')))\n }, _toDisplayString(_ctx.$t('buttons.YES')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('cancelAction')))\n }, _toDisplayString(_ctx.$t(`buttons.${_unref(errorMessages) ? 'CANCEL' : 'NO'}`)), 1)\n ])\n ]),\n _: 1\n })\n ])\n ]))\n}\n}\n\n})","import script from \"./Modal.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Modal.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Modal.vue?vue&type=style&index=0&id=e8fcfaba&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-e8fcfaba\"]])\n\nexport default __exports__","import AlertMessage from '@/components/Common/AlertMessage.vue'\nimport Card from '@/components/Common/Card.vue'\nimport CustomTextArea from '@/components/Common/CustomTextArea.vue'\nimport Distance from '@/components/Common/Distance.vue'\nimport Dropdown from '@/components/Common/Dropdown.vue'\nimport ErrorMessage from '@/components/Common/ErrorMessage.vue'\nimport SportImage from '@/components/Common/Images/SportImage/index.vue'\nimport Loader from '@/components/Common/Loader.vue'\nimport Modal from '@/components/Common/Modal.vue'\n\nexport const customComponents = [\n { target: AlertMessage, name: 'AlertMessage' },\n { target: Card, name: 'Card' },\n { target: CustomTextArea, name: 'CustomTextArea' },\n { target: Distance, name: 'Distance' },\n { target: Dropdown, name: 'Dropdown' },\n { target: ErrorMessage, name: 'ErrorMessage' },\n { target: Loader, name: 'Loader' },\n { target: Modal, name: 'Modal' },\n { target: SportImage, name: 'SportImage' },\n]\n","import { Directive, DirectiveBinding } from 'vue'\n\ninterface ClickOutsideHTMLElement extends HTMLElement {\n clickOutsideEvent?: (event: MouseEvent | TouchEvent) => void\n}\n\nexport const clickOutsideDirective: Directive = {\n mounted: (\n element: ClickOutsideHTMLElement,\n binding: DirectiveBinding\n ): void => {\n element.clickOutsideEvent = function (event) {\n if (!(element === event.target || element.contains(event.target))) {\n binding.value(event)\n }\n }\n document.body.addEventListener('click', element.clickOutsideEvent)\n document.body.addEventListener('touchstart', element.clickOutsideEvent)\n },\n unmounted: function (element: ClickOutsideHTMLElement): void {\n if (element.clickOutsideEvent) {\n document.body.removeEventListener('click', element.clickOutsideEvent)\n document.body.removeEventListener('touchstart', element.clickOutsideEvent)\n element.clickOutsideEvent = undefined\n }\n },\n}\n","import {\n Chart,\n BarElement,\n LineElement,\n PointElement,\n Legend,\n Title,\n Tooltip,\n Filler,\n BarController,\n CategoryScale,\n LineController,\n LinearScale,\n} from 'chart.js'\nimport ChartDataLabels from 'chartjs-plugin-datalabels'\nimport { createApp } from 'vue'\nimport VueFullscreen from 'vue-fullscreen'\n\nimport './registerServiceWorker'\nimport App from './App.vue'\nimport i18n from './i18n'\nimport router from './router'\nimport store from './store'\n\nimport { customComponents } from '@/custom-components'\nimport { clickOutsideDirective } from '@/directives'\nimport { sportColors } from '@/utils/sports'\n\nChart.register(\n BarElement,\n LineElement,\n PointElement,\n Legend,\n Title,\n Tooltip,\n Filler,\n BarController,\n CategoryScale,\n LineController,\n LinearScale,\n ChartDataLabels\n)\n\nconst app = createApp(App)\n .provide('sportColors', sportColors)\n .use(i18n)\n .use(store)\n .use(router)\n .use(VueFullscreen, { name: 'VFullscreen' })\n .directive('click-outside', clickOutsideDirective)\n\ncustomComponents.forEach((component) => {\n app.component(component.name, component.target)\n})\n\napp.mount('#app')\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, vModelText as _vModelText, withDirectives as _withDirectives, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, withModifiers as _withModifiers, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-24ec93e2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-app\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = [\"onSubmit\"]\nconst _hoisted_3 = { for: \"admin_contact\" }\nconst _hoisted_4 = [\"value\"]\nconst _hoisted_5 = [\"disabled\"]\nconst _hoisted_6 = { for: \"max_users\" }\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = { class: \"user-limit-help\" }\nconst _hoisted_9 = { class: \"info-box\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { for: \"max_single_file_size\" }\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = { for: \"max_zip_file_size\" }\nconst _hoisted_14 = [\"disabled\"]\nconst _hoisted_15 = { for: \"gpx_limit_import\" }\nconst _hoisted_16 = [\"disabled\"]\nconst _hoisted_17 = {\n key: 1,\n class: \"form-buttons\"\n}\nconst _hoisted_18 = {\n class: \"confirm\",\n type: \"submit\"\n}\nconst _hoisted_19 = [\"onClick\"]\nconst _hoisted_20 = {\n key: 2,\n class: \"form-buttons\"\n}\n\nimport {\n ComputedRef,\n computed,\n reactive,\n withDefaults,\n onBeforeMount,\n toRefs,\n } from 'vue'\n import { useRouter } from 'vue-router'\n\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig, TAppConfigForm } from '@/types/application'\n import { useStore } from '@/use/useStore'\n import { getFileSizeInMB } from '@/utils/files'\n\n interface Props {\n appConfig: TAppConfig\n edition?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminApplication',\n props: {\n appConfig: null,\n edition: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { appConfig: TAppConfig, edition: boolean }\n\n \n const { edition } = toRefs(props)\n\n const store = useStore()\n const router = useRouter()\n\n const appData: TAppConfigForm = reactive({\n admin_contact: '',\n max_users: 0,\n max_single_file_size: 0,\n max_zip_file_size: 0,\n gpx_limit_import: 0,\n })\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => {\n if (props.appConfig) {\n updateForm(props.appConfig)\n }\n })\n\n function updateForm(appConfig: TAppConfig) {\n Object.keys(appData).map((key) => {\n ['max_single_file_size', 'max_zip_file_size'].includes(key)\n ? // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (appData[key] = getFileSizeInMB(appConfig[key]))\n : // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (appData[key] = appConfig[key])\n })\n }\n function onCancel() {\n updateForm(props.appConfig)\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n router.push('/admin/application')\n }\n function onSubmit() {\n const formData: TAppConfigForm = Object.assign({}, appData)\n formData.max_single_file_size *= 1048576\n formData.max_zip_file_size *= 1048576\n store.dispatch(ROOT_STORE.ACTIONS.UPDATE_APPLICATION_CONFIG, formData)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.TITLE')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"form\", {\n class: \"admin-form\",\n onSubmit: _withModifiers(onSubmit, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_3, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.ADMIN_CONTACT')) + \": \", 1),\n (!_unref(edition) && !appData.admin_contact)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"no-contact\",\n value: _ctx.$t('admin.APP_CONFIG.NO_CONTACT_EMAIL'),\n disabled: \"\"\n }, null, 8, _hoisted_4))\n : _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 1,\n id: \"admin_contact\",\n name: \"admin_contact\",\n type: \"email\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((appData.admin_contact) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_5)), [\n [_vModelText, appData.admin_contact]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_USERS_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_users\",\n name: \"max_users\",\n type: \"number\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((appData.max_users) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_7), [\n [_vModelText, appData.max_users]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"span\", _hoisted_9, [\n _hoisted_10,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_USERS_HELP')), 1)\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.SINGLE_UPLOAD_MAX_SIZE_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_single_file_size\",\n name: \"max_single_file_size\",\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((appData.max_single_file_size) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_12), [\n [_vModelText, appData.max_single_file_size]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_13, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.ZIP_UPLOAD_MAX_SIZE_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_zip_file_size\",\n name: \"max_zip_file_size\",\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((appData.max_zip_file_size) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_14), [\n [_vModelText, appData.max_zip_file_size]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_15, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_FILES_IN_ZIP_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"gpx_limit_import\",\n name: \"gpx_limit_import\",\n type: \"number\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((appData.gpx_limit_import) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_16), [\n [_vModelText, appData.gpx_limit_import]\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(edition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createElementVNode(\"button\", _hoisted_18, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(onCancel, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_19)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: _cache[5] || (_cache[5] = _withModifiers(($event: any) => (_ctx.$router.push('/admin/application/edit')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.EDIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[6] || (_cache[6] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ]))\n ], 40, _hoisted_2)\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminApplication.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminApplication.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminApplication.vue?vue&type=style&index=0&id=24ec93e2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-24ec93e2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"stat-card\" }\nconst _hoisted_2 = { class: \"stat-content box\" }\nconst _hoisted_3 = { class: \"stat-icon\" }\nconst _hoisted_4 = { class: \"stat-details\" }\nconst _hoisted_5 = { class: \"stat-huge\" }\nconst _hoisted_6 = { class: \"stat\" }\n\nimport { toRefs } from 'vue'\n\n interface Props {\n icon: string\n text: string\n value: string | number\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatCard',\n props: {\n icon: null,\n text: null,\n value: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n icon: string\n text: string\n value: string | number\n }\n\n \n const { icon, text, value } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa\", `fa-${_unref(icon)}`])\n }, null, 2)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, _toDisplayString(_unref(value)), 1),\n _createElementVNode(\"div\", _hoisted_6, _toDisplayString(_unref(text)), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./StatCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatCard.vue?vue&type=style&index=0&id=6cbb3351&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-stats\" }\n\nimport { computed, toRefs } from 'vue'\n\n import StatCard from '@/components/Common/StatCard.vue'\n import { IAppStatistics } from '@/types/application'\n import { getReadableFileSize } from '@/utils/files'\n\n interface Props {\n appStatistics: IAppStatistics\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AppStatsCards',\n props: {\n appStatistics: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n appStatistics: IAppStatistics\n }\n\n \n\n const { appStatistics } = toRefs(props)\n const uploadDirSize = computed(() =>\n getReadableFileSize(appStatistics.value.uploads_dir_size, false)\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatCard, {\n icon: \"users\",\n value: _unref(appStatistics).users,\n text: _ctx.$t('admin.USER', _unref(appStatistics).users)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"tags\",\n value: _unref(appStatistics).sports,\n text: _ctx.$t('workouts.SPORT', _unref(appStatistics).sports)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"calendar\",\n value: _unref(appStatistics).workouts,\n text: _ctx.$t('workouts.WORKOUT', _unref(appStatistics).workouts)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"folder-open\",\n value: _unref(uploadDirSize).size,\n text: _unref(uploadDirSize).suffix\n }, null, 8, [\"value\", \"text\"])\n ]))\n}\n}\n\n})","import script from \"./AppStatsCards.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStatsCards.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AppStatsCards.vue?vue&type=style&index=0&id=61c5053e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0dd66f89\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-menu\",\n class: \"center-card\"\n}\nconst _hoisted_2 = { class: \"admin-menu description-list\" }\nconst _hoisted_3 = { class: \"application-config-details\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_5 = { class: \"registration-status\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"email-sending-status\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-exclamation-triangle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { capitalize, toRefs, withDefaults } from 'vue'\n\n import AppStatsCards from '@/components/Administration/AppStatsCards.vue'\n import Card from '@/components/Common/Card.vue'\n import { IAppStatistics, TAppConfig } from '@/types/application'\n\n interface Props {\n appConfig: TAppConfig\n appStatistics?: IAppStatistics\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminMenu',\n props: {\n appConfig: null,\n appStatistics: { default: () => ({} as IAppStatistics) }\n },\n setup(__props: any) {\n\nconst props = __props as { appConfig: TAppConfig, appStatistics: IAppStatistics }\n\n \n\n const { appConfig, appStatistics } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.ADMINISTRATION')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(AppStatsCards, { appStatistics: _unref(appStatistics) }, null, 8, [\"appStatistics\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/application\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APPLICATION')), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", _hoisted_3, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.UPDATE_APPLICATION_DESCRIPTION')), 1),\n _hoisted_4,\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.$t(\n `admin.REGISTRATION_${\n _unref(appConfig).is_registration_enabled ? 'ENABLED' : 'DISABLED'\n }`\n )), 1),\n (!_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_6, [\n _hoisted_7,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.EMAIL_SENDING_DISABLED')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/sports\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('workouts.SPORT', 0))), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t('admin.ENABLE_DISABLE_SPORTS')), 1),\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/users\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('admin.USER', 0))), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t('admin.ADMIN_RIGHTS_DELETE_USER_ACCOUNT')), 1)\n ])\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminMenu.vue?vue&type=style&index=0&id=0dd66f89&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0dd66f89\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withModifiers as _withModifiers, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, createBlock as _createBlock, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6d62af67\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-sports\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = { class: \"responsive-table\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, \"#\", -1))\nconst _hoisted_4 = { class: \"text-left\" }\nconst _hoisted_5 = { class: \"text-left sport-action\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, null, -1))\nconst _hoisted_7 = { class: \"text-center\" }\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"cell-heading\" }, \"id\", -1))\nconst _hoisted_9 = { class: \"cell-heading\" }\nconst _hoisted_10 = { class: \"sport-label\" }\nconst _hoisted_11 = { class: \"cell-heading\" }\nconst _hoisted_12 = { class: \"text-center\" }\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"sport-action\" }\nconst _hoisted_15 = { class: \"cell-heading\" }\nconst _hoisted_16 = { class: \"action-button\" }\nconst _hoisted_17 = [\"onClick\"]\nconst _hoisted_18 = {\n key: 0,\n class: \"has-workouts\"\n}\nconst _hoisted_19 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-warning\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { ComputedRef, computed } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ROOT_STORE, SPORTS_STORE } from '@/store/constants'\n import { ITranslatedSport } from '@/types/sports'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminSports',\n setup(__props) {\n\n const { t } = useI18n()\n const store = useStore()\n\n const translatedSports: ComputedRef = computed(() =>\n translateSports(store.getters[SPORTS_STORE.GETTERS.SPORTS], t)\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n function updateSportStatus(id: number, isActive: boolean) {\n store.dispatch(SPORTS_STORE.ACTIONS.UPDATE_SPORTS, {\n id,\n isActive,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.SPORTS.TITLE')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"button\", {\n class: \"top-button\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_3,\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.IMAGE')), 1),\n _createElementVNode(\"th\", _hoisted_4, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.LABEL')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.ACTIVE')), 1),\n _createElementVNode(\"th\", _hoisted_5, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _hoisted_6\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: sport.id\n }, [\n _createElementVNode(\"td\", _hoisted_7, [\n _hoisted_8,\n _createTextVNode(\" \" + _toDisplayString(sport.id), 1)\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.IMAGE')), 1),\n _createVNode(_component_SportImage, {\n title: sport.translatedLabel,\n \"sport-label\": sport.label,\n color: sport.color\n }, null, 8, [\"title\", \"sport-label\", \"color\"])\n ]),\n _createElementVNode(\"td\", _hoisted_10, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.LABEL')), 1),\n _createTextVNode(\" \" + _toDisplayString(sport.translatedLabel), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_12, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.ACTIVE')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${sport.is_active ? '-check' : ''}`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_14, [\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"button\", {\n class: _normalizeClass({ danger: sport.is_active }),\n onClick: ($event: any) => (updateSportStatus(sport.id, !sport.is_active))\n }, _toDisplayString(_ctx.$t(`buttons.${sport.is_active ? 'DIS' : 'EN'}ABLE`)), 11, _hoisted_17),\n (sport.has_workouts)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_18, [\n _hoisted_19,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.HAS_WORKOUTS')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ]))\n }), 128))\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminSports.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminSports.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminSports.vue?vue&type=style&index=0&id=6d62af67&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6d62af67\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { vModelText as _vModelText, withKeys as _withKeys, createElementVNode as _createElementVNode, withDirectives as _withDirectives, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-627a8e91\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"users-filters\" }\nconst _hoisted_2 = { class: \"search-username\" }\nconst _hoisted_3 = [\"onKeyup\", \"placeholder\"]\n\nimport { ref } from 'vue'\n import { useRoute } from 'vue-router'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UsersNameFilter',\n emits: ['filterOnUsername'],\n setup(__props, { emit }) {\n\n const route = useRoute()\n const username = ref(route.query.q ? route.query.q : '')\n\n \n function searchUsers() {\n if (username.value !== '') {\n emit('filterOnUsername', username)\n }\n }\n function resetFilter() {\n username.value = ''\n emit('filterOnUsername', username.value)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"username\",\n name: \"username\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((username).value = $event)),\n onKeyup: _withKeys(searchUsers, [\"enter\"]),\n placeholder: _ctx.$t('user.FILTER_ON_USERNAME')\n }, null, 40, _hoisted_3), [\n [\n _vModelText,\n username.value,\n void 0,\n { trim: true }\n ]\n ]),\n (username.value !== '')\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-times\",\n \"aria-hidden\": \"true\",\n onClick: resetFilter\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa fa-search\", { 'fa-disabled': username.value === '' }]),\n \"aria-hidden\": \"true\",\n onClick: searchUsers\n }, null, 2)\n ]))\n}\n}\n\n})","import script from \"./UsersNameFilter.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./UsersNameFilter.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./UsersNameFilter.vue?vue&type=style&index=0&id=627a8e91&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-627a8e91\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withModifiers as _withModifiers, createElementVNode as _createElementVNode, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, withCtx as _withCtx, normalizeClass as _normalizeClass, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-dc12ff78\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-users\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"no-users\"\n}\nconst _hoisted_3 = {\n key: 1,\n class: \"responsive-table\"\n}\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, \"#\", -1))\nconst _hoisted_5 = { class: \"left-text\" }\nconst _hoisted_6 = { class: \"left-text\" }\nconst _hoisted_7 = { class: \"left-text\" }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = { class: \"cell-heading\" }\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = { class: \"cell-heading\" }\nconst _hoisted_12 = { class: \"text-center\" }\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"text-center\" }\nconst _hoisted_15 = { class: \"cell-heading\" }\nconst _hoisted_16 = { class: \"text-center\" }\nconst _hoisted_17 = { class: \"cell-heading\" }\nconst _hoisted_18 = { class: \"text-center\" }\nconst _hoisted_19 = { class: \"cell-heading\" }\nconst _hoisted_20 = [\"disabled\", \"onClick\"]\n\nimport {\n ComputedRef,\n Ref,\n computed,\n reactive,\n watch,\n capitalize,\n onBeforeMount,\n onUnmounted,\n } from 'vue'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import FilterSelects from '@/components/Common/FilterSelects.vue'\n import Pagination from '@/components/Common/Pagination.vue'\n import UserPicture from '@/components/User/UserPicture.vue'\n import UsersNameFilter from '@/components/Users/UsersNameFilter.vue'\n import { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\n import { IPagination, TPaginationPayload } from '@/types/api'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getQuery, sortList } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminUsers',\n setup(__props) {\n\n const store = useStore()\n const route = useRoute()\n const router = useRouter()\n\n const orderByList: string[] = [\n 'is_active',\n 'admin',\n 'created_at',\n 'username',\n 'workouts_count',\n ]\n const defaultOrderBy = 'created_at'\n let query: TPaginationPayload = reactive(\n getQuery(route.query, orderByList, defaultOrderBy)\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const users: ComputedRef = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS]\n )\n const pagination: ComputedRef = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS_PAGINATION]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => loadUsers(query))\n\n function loadUsers(queryParams: TPaginationPayload) {\n store.dispatch(USERS_STORE.ACTIONS.GET_USERS, queryParams)\n }\n function searchUsers(username: Ref) {\n reloadUsers('q', username.value)\n }\n\n function updateUser(username: string, admin: boolean) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n admin,\n })\n }\n function reloadUsers(queryParam: string, queryValue: string) {\n query[queryParam] = queryValue\n if (queryParam === 'per_page') {\n query.page = 1\n }\n router.push({ path: '/admin/users', query })\n }\n\n onUnmounted(() => {\n store.dispatch(USERS_STORE.ACTIONS.EMPTY_USERS)\n })\n\n watch(\n () => route.query,\n (newQuery: LocationQuery) => {\n query = getQuery(newQuery, orderByList, defaultOrderBy, { query })\n loadUsers(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('admin.USER', 0))), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"button\", {\n class: \"top-button\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1),\n _createVNode(UsersNameFilter, { onFilterOnUsername: searchUsers }),\n _createVNode(FilterSelects, {\n sort: _unref(sortList),\n order_by: orderByList,\n query: _unref(query),\n message: \"admin.USERS.SELECTS.ORDER_BY\",\n onUpdateSelect: reloadUsers\n }, null, 8, [\"sort\", \"query\"]),\n (_unref(users).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('user.NO_USERS_FOUND')), 1))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_4,\n _createElementVNode(\"th\", _hoisted_5, _toDisplayString(_ctx.$t('user.USERNAME')), 1),\n _createElementVNode(\"th\", _hoisted_6, _toDisplayString(_ctx.$t('user.EMAIL')), 1),\n _createElementVNode(\"th\", _hoisted_7, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 0))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.ACTIVE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.ADMIN')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.ACTION')), 1)\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(users), (user) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: user.username\n }, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE')), 1),\n _createVNode(UserPicture, { user: user }, null, 8, [\"user\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_ctx.$t('user.USERNAME')), 1),\n _createVNode(_component_router_link, {\n to: `/admin/users/${user.username}`\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(user.username), 1)\n ]),\n _: 2\n }, 1032, [\"to\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('user.EMAIL')), 1),\n _createTextVNode(\" \" + _toDisplayString(user.email), 1)\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')), 1),\n _createTextVNode(\" \" + _toDisplayString(_unref(formatDate)(\n user.created_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_12, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 0))), 1),\n _createTextVNode(\" \" + _toDisplayString(user.nb_workouts), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_14, [\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('admin.ACTIVE')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${user.is_active ? '-check' : ''}-square-o`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_16, [\n _createElementVNode(\"span\", _hoisted_17, _toDisplayString(_ctx.$t('user.ADMIN')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${user.admin ? '-check' : ''}-square-o`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_18, [\n _createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _createElementVNode(\"button\", {\n class: _normalizeClass({ danger: user.admin }),\n disabled: user.username === _unref(authUser).username,\n onClick: ($event: any) => (updateUser(user.username, !user.admin))\n }, _toDisplayString(_ctx.$t(\n `admin.USERS.TABLE.${\n user.admin ? 'REMOVE' : 'ADD'\n }_ADMIN_RIGHTS`\n )), 11, _hoisted_20)\n ])\n ]))\n }), 128))\n ])\n ]),\n (_unref(pagination).page)\n ? (_openBlock(), _createBlock(Pagination, {\n key: 0,\n path: \"/admin/users\",\n pagination: _unref(pagination),\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 1,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ]))\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminUsers.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminUsers.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminUsers.vue?vue&type=style&index=0&id=dc12ff78&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-dc12ff78\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = { class: \"profile-tabs custom-checkboxes-group\" }\nconst _hoisted_2 = { class: \"profile-tabs-checkboxes custom-checkboxes\" }\nconst _hoisted_3 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n tabs: string[]\n selectedTab: string\n edition: boolean\n disabled?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserProfileTabs',\n props: {\n tabs: null,\n selectedTab: null,\n edition: { type: Boolean },\n disabled: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { tabs: string[], selectedTab: string, edition: boolean, disabled: boolean }\n\n \n\n const { tabs, selectedTab, disabled } = toRefs(props)\n\n function getPath(tab: string) {\n switch (tab) {\n case 'ACCOUNT':\n case 'PICTURE':\n return `/profile/edit/${tab.toLocaleLowerCase()}`\n case 'APPS':\n case 'PREFERENCES':\n case 'SPORTS':\n return `/profile${\n props.edition ? '/edit' : ''\n }/${tab.toLocaleLowerCase()}`\n default:\n case 'PROFILE':\n return `/profile${props.edition ? '/edit' : ''}`\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(tabs), (tab) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"profile-tab custom-checkbox\",\n key: tab\n }, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: tab,\n name: tab,\n checked: _unref(selectedTab).split('/')[0] === tab,\n disabled: _unref(disabled),\n onInput: ($event: any) => (_ctx.$router.push(getPath(tab)))\n }, null, 40, _hoisted_3),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`user.PROFILE.TABS.${tab}`)), 1)\n ])\n ]))\n }), 128))\n ])\n ]))\n}\n}\n\n})","import script from \"./UserProfileTabs.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserProfileTabs.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserProfileTabs.vue?vue&type=style&index=0&id=01b05f01&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9729cba4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-profile\" }\nconst _hoisted_2 = { class: \"box\" }\n\nimport { toRefs } from 'vue'\n\n import UserHeader from '@/components/User/ProfileDisplay/UserHeader.vue'\n import UserProfileTabs from '@/components/User/UserProfileTabs.vue'\n import { IUserProfile } from '@/types/user'\n\n interface Props {\n user: IUserProfile\n tab: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null,\n tab: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n tab: string\n }\n\n \n\n const { user, tab } = toRefs(props)\n const tabs = ['PROFILE', 'PREFERENCES', 'SPORTS', 'APPS']\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(UserHeader, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(UserProfileTabs, {\n tabs: tabs,\n selectedTab: _unref(tab),\n edition: false\n }, null, 8, [\"selectedTab\"]),\n _createVNode(_component_router_view, { user: _unref(user) }, null, 8, [\"user\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=9729cba4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9729cba4\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"user-preferences\",\n class: \"description-list\"\n}\nconst _hoisted_2 = { class: \"profile-buttons\" }\n\nimport { computed, ComputedRef } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getDateFormat } from '@/utils/dates'\n import { languageLabels } from '@/utils/locales'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPreferences',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const appLanguage: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const userLanguage = computed(() =>\n props.user.language\n ? languageLabels[props.user.language]\n : languageLabels['en']\n )\n const fistDayOfWeek = computed(() => (props.user.weekm ? 'MONDAY' : 'SUNDAY'))\n const timezone = computed(() =>\n props.user.timezone ? props.user.timezone : 'Europe/Paris'\n )\n const date_format = computed(() =>\n props.user.date_format ? props.user.date_format : 'MM/dd/yyyy'\n )\n const display_ascent = computed(() =>\n props.user.display_ascent ? 'DISPLAYED' : 'HIDDEN'\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LANGUAGE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(userLanguage)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.TIMEZONE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(timezone)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.DATE_FORMAT')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(getDateFormat)(_unref(date_format), _unref(appLanguage))), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_DAY_OF_WEEK')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(`user.PROFILE.${_unref(fistDayOfWeek)}`)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.UNITS.LABEL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(\n `user.PROFILE.UNITS.${__props.user.imperial_units ? 'IMPERIAL' : 'METRIC'}`\n )), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.ASCENT_DATA')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(`common.${_unref(display_ascent)}`)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"button\", {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/edit/preferences')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPreferences.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPreferences.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"user-profile-edition\",\n class: \"center-card\"\n}\n\nimport { computed, toRefs } from 'vue'\n\n import UserProfileTabs from '@/components/User/UserProfileTabs.vue'\n import { AUTH_USER_STORE } from '@/store/constants'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n tab: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null,\n tab: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n tab: string\n }\n\n \n\n const store = useStore()\n\n const { user, tab } = toRefs(props)\n const tabs = ['PROFILE', 'ACCOUNT', 'PICTURE', 'PREFERENCES', 'SPORTS']\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(`user.PROFILE.${_unref(tab)}_EDITION`)), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserProfileTabs, {\n tabs: tabs,\n selectedTab: _unref(tab),\n edition: true,\n disabled: _unref(loading)\n }, null, 8, [\"selectedTab\", \"disabled\"]),\n _createVNode(_component_router_view, { user: _unref(user) }, null, 8, [\"user\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, createVNode as _createVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-37b8c4c8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-infos-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = {\n key: 1,\n class: \"info-box success-message\"\n}\nconst _hoisted_4 = [\"onSubmit\"]\nconst _hoisted_5 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_6 = [\"disabled\"]\nconst _hoisted_7 = {\n class: \"form-items\",\n for: \"password-field\"\n}\nconst _hoisted_8 = {\n class: \"form-items\",\n for: \"new-password-field\"\n}\nconst _hoisted_9 = { class: \"form-buttons\" }\nconst _hoisted_10 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport {\n ComputedRef,\n Ref,\n computed,\n reactive,\n ref,\n toRefs,\n onMounted,\n watch,\n onUnmounted,\n } from 'vue'\n\n import PasswordInput from '@/components/Common/PasswordInput.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IUserProfile, IUserAccountPayload } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAccountEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n const { user } = toRefs(props)\n\n const store = useStore()\n const userForm: IUserAccountPayload = reactive({\n email: '',\n password: '',\n new_password: '',\n })\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const emailUpdate = ref(false)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const formErrors = ref(false)\n const displayModal: Ref = ref(false)\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function invalidateForm() {\n formErrors.value = true\n }\n function updateUserForm(user: IUserProfile) {\n userForm.email = user.email\n }\n function updatePassword(password: string) {\n userForm.password = password\n }\n function updateNewPassword(new_password: string) {\n userForm.new_password = new_password\n }\n function updateProfile() {\n const payload: IUserAccountPayload = {\n email: userForm.email,\n password: userForm.password,\n }\n if (userForm.new_password) {\n payload.new_password = userForm.new_password\n }\n emailUpdate.value = userForm.email !== user.value.email\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_ACCOUNT, payload)\n }\n function updateDisplayModal(value: boolean) {\n displayModal.value = value\n }\n function deleteAccount(username: string) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.DELETE_ACCOUNT, { username })\n }\n\n onUnmounted(() => {\n store.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\n watch(\n () => isSuccess.value,\n async (isSuccessValue) => {\n if (isSuccessValue) {\n updatePassword('')\n updateNewPassword('')\n updateUserForm(user.value)\n formErrors.value = false\n }\n }\n )\n watch(\n () => user.value.email,\n async () => {\n updateUserForm(user.value)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t('user.CONFIRM_ACCOUNT_DELETION'),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (deleteAccount(_unref(user).username))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\n `user.PROFILE.SUCCESSFUL_${\n emailUpdate.value && _unref(appConfig).is_email_sending_enabled ? 'EMAIL_' : ''\n }UPDATE`\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_5, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.EMAIL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"email\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((userForm.email) = $event)),\n disabled: _unref(loading),\n required: true,\n onInvalid: invalidateForm\n }, null, 40, _hoisted_6), [\n [_vModelText, userForm.email]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.CURRENT_PASSWORD')) + \"* \", 1),\n _createVNode(PasswordInput, {\n id: \"password-field\",\n disabled: _unref(loading),\n password: userForm.password,\n required: true,\n onUpdatePassword: updatePassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"password\"])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.NEW_PASSWORD')) + \" \", 1),\n _createVNode(PasswordInput, {\n id: \"new-password-field\",\n disabled: _unref(loading),\n checkStrength: true,\n password: userForm.new_password,\n isSuccess: false,\n onUpdatePassword: updateNewPassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"password\"])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"button\", _hoisted_10, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[3] || (_cache[3] = _withModifiers(($event: any) => (_ctx.$router.push('/profile')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1),\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (updateDisplayModal(true)), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.DELETE_MY_ACCOUNT')), 1)\n ])\n ], 42, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserAccountEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAccountEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAccountEdition.vue?vue&type=style&index=0&id=37b8c4c8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-37b8c4c8\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, vModelText as _vModelText, withDirectives as _withDirectives, createVNode as _createVNode, withModifiers as _withModifiers, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5e5a4552\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-infos-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = {\n class: \"form-items\",\n for: \"registrationDate\"\n}\nconst _hoisted_5 = [\"value\"]\nconst _hoisted_6 = {\n class: \"form-items\",\n for: \"first_name\"\n}\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = {\n class: \"form-items\",\n for: \"last_name\"\n}\nconst _hoisted_9 = {\n class: \"form-items\",\n for: \"birth_date\"\n}\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = {\n class: \"form-items\",\n for: \"location\"\n}\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = { class: \"form-items\" }\nconst _hoisted_14 = { class: \"form-buttons\" }\nconst _hoisted_15 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport { format } from 'date-fns'\n import { ComputedRef, computed, reactive, onMounted, onUnmounted } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IUserProfile, IUserPayload, IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserInfosEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const userForm: IUserPayload = reactive({\n first_name: '',\n last_name: '',\n birth_date: '',\n location: '',\n bio: '',\n })\n const registrationDate = computed(() =>\n props.user.created_at\n ? formatDate(\n props.user.created_at,\n props.user.timezone,\n props.user.date_format\n )\n : ''\n )\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function updateUserForm(user: IUserProfile) {\n userForm.first_name = user.first_name ? user.first_name : ''\n userForm.last_name = user.last_name ? user.last_name : ''\n userForm.birth_date = user.birth_date\n ? format(new Date(user.birth_date), 'yyyy-MM-dd')\n : ''\n userForm.location = user.location ? user.location : ''\n userForm.bio = user.bio ? user.bio : ''\n }\n function updateBio(value: string) {\n userForm.bio = value\n }\n function updateProfile() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PROFILE, userForm)\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')) + \" \", 1),\n _createElementVNode(\"input\", {\n id: \"registrationDate\",\n value: _unref(registrationDate),\n disabled: \"\"\n }, null, 8, _hoisted_5)\n ]),\n _createElementVNode(\"label\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.FIRST_NAME')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"first_name\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((userForm.first_name) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_7), [\n [_vModelText, userForm.first_name]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LAST_NAME')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"last_name\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((userForm.last_name) = $event))\n }, null, 512), [\n [_vModelText, userForm.last_name]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_9, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.BIRTH_DATE')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"birth_date\",\n type: \"date\",\n class: \"birth-date\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((userForm.birth_date) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_10), [\n [_vModelText, userForm.birth_date]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LOCATION')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"location\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((userForm.location) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_12), [\n [_vModelText, userForm.location]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_13, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.BIO')) + \" \", 1),\n _createVNode(_component_CustomTextArea, {\n name: \"bio\",\n charLimit: 200,\n input: userForm.bio,\n disabled: _unref(loading),\n onUpdateValue: updateBio\n }, null, 8, [\"input\", \"disabled\"])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"button\", _hoisted_15, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (_ctx.$router.push('/profile')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserInfosEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserInfosEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserInfosEdition.vue?vue&type=style&index=0&id=5e5a4552&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5e5a4552\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-687e9604\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-picture-edition\" }\nconst _hoisted_2 = { class: \"user-picture-form\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = { class: \"picture-help\" }\nconst _hoisted_5 = { class: \"info-box\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = { class: \"picture-buttons\" }\nconst _hoisted_8 = [\"disabled\"]\n\nimport { ComputedRef, Ref, computed, ref, toRefs, onUnmounted } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getReadableFileSize } from '@/utils/files'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPictureEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const store = useStore()\n\n const { user } = toRefs(props)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const appConfig: ComputedRef = 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 pictureFile: Ref = ref(null)\n\n function deleteUserPicture() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.DELETE_PICTURE)\n }\n function updatePictureFile(event: Event & { target: HTMLInputElement }) {\n if (event.target.files) {\n pictureFile.value = event.target.files[0]\n }\n }\n function updateUserPicture() {\n if (pictureFile.value) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PICTURE, {\n picture: pictureFile.value,\n })\n }\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateUserPicture, [\"prevent\"])\n }, [\n _createElementVNode(\"input\", {\n type: \"file\",\n name: \"picture\",\n accept: \".png,.jpg,.gif\",\n onInput: updatePictureFile\n }, null, 32),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"span\", _hoisted_5, [\n _hoisted_6,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(fileSizeLimit)), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"button\", {\n type: \"submit\",\n disabled: !pictureFile.value\n }, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE_UPDATE')), 9, _hoisted_8),\n (_unref(user).picture)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"danger\",\n onClick: deleteUserPicture\n }, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE_REMOVE')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.BACK_TO_PROFILE')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPictureEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPictureEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPictureEdition.vue?vue&type=style&index=0&id=687e9604&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-687e9604\"]])\n\nexport default __exports__","export const timeZones = [\n 'Africa/Abidjan',\n 'Africa/Accra',\n 'Africa/Algiers',\n 'Africa/Bissau',\n 'Africa/Cairo',\n 'Africa/Casablanca',\n 'Africa/Ceuta',\n 'Africa/El_Aaiun',\n 'Africa/Johannesburg',\n 'Africa/Juba',\n 'Africa/Khartoum',\n 'Africa/Lagos',\n 'Africa/Maputo',\n 'Africa/Monrovia',\n 'Africa/Nairobi',\n 'Africa/Ndjamena',\n 'Africa/Sao_Tome',\n 'Africa/Tripoli',\n 'Africa/Tunis',\n 'Africa/Windhoek',\n 'America/Adak',\n 'America/Anchorage',\n 'America/Araguaina',\n 'America/Argentina/Buenos_Aires',\n 'America/Argentina/Catamarca',\n 'America/Argentina/Cordoba',\n 'America/Argentina/Jujuy',\n 'America/Argentina/La_Rioja',\n 'America/Argentina/Mendoza',\n 'America/Argentina/Rio_Gallegos',\n 'America/Argentina/Salta',\n 'America/Argentina/San_Juan',\n 'America/Argentina/San_Luis',\n 'America/Argentina/Tucuman',\n 'America/Argentina/Ushuaia',\n 'America/Asuncion',\n 'America/Atikokan',\n 'America/Bahia',\n 'America/Bahia_Banderas',\n 'America/Barbados',\n 'America/Belem',\n 'America/Belize',\n 'America/Blanc-Sablon',\n 'America/Boa_Vista',\n 'America/Bogota',\n 'America/Boise',\n 'America/Cambridge_Bay',\n 'America/Campo_Grande',\n 'America/Cancun',\n 'America/Caracas',\n 'America/Cayenne',\n 'America/Chicago',\n 'America/Chihuahua',\n 'America/Costa_Rica',\n 'America/Creston',\n 'America/Cuiaba',\n 'America/Curacao',\n 'America/Danmarkshavn',\n 'America/Dawson',\n 'America/Dawson_Creek',\n 'America/Denver',\n 'America/Detroit',\n 'America/Edmonton',\n 'America/Eirunepe',\n 'America/El_Salvador',\n 'America/Fortaleza',\n 'America/Fort_Nelson',\n 'America/Glace_Bay',\n 'America/Godthab',\n 'America/Goose_Bay',\n 'America/Grand_Turk',\n 'America/Guatemala',\n 'America/Guayaquil',\n 'America/Guyana',\n 'America/Halifax',\n 'America/Havana',\n 'America/Hermosillo',\n 'America/Indiana/Indianapolis',\n 'America/Indiana/Knox',\n 'America/Indiana/Marengo',\n 'America/Indiana/Petersburg',\n 'America/Indiana/Tell_City',\n 'America/Indiana/Vevay',\n 'America/Indiana/Vincennes',\n 'America/Indiana/Winamac',\n 'America/Inuvik',\n 'America/Iqaluit',\n 'America/Jamaica',\n 'America/Juneau',\n 'America/Kentucky/Louisville',\n 'America/Kentucky/Monticello',\n 'America/La_Paz',\n 'America/Lima',\n 'America/Los_Angeles',\n 'America/Maceio',\n 'America/Managua',\n 'America/Manaus',\n 'America/Martinique',\n 'America/Matamoros',\n 'America/Mazatlan',\n 'America/Menominee',\n 'America/Merida',\n 'America/Metlakatla',\n 'America/Mexico_City',\n 'America/Miquelon',\n 'America/Moncton',\n 'America/Monterrey',\n 'America/Montevideo',\n 'America/Nassau',\n 'America/New_York',\n 'America/Nipigon',\n 'America/Nome',\n 'America/Noronha',\n 'America/North_Dakota/Beulah',\n 'America/North_Dakota/Center',\n 'America/North_Dakota/New_Salem',\n 'America/Ojinaga',\n 'America/Panama',\n 'America/Pangnirtung',\n 'America/Paramaribo',\n 'America/Phoenix',\n 'America/Port-au-Prince',\n 'America/Port_of_Spain',\n 'America/Porto_Velho',\n 'America/Puerto_Rico',\n 'America/Punta_Arenas',\n 'America/Rainy_River',\n 'America/Rankin_Inlet',\n 'America/Recife',\n 'America/Regina',\n 'America/Resolute',\n 'America/Rio_Branco',\n 'America/Santarem',\n 'America/Santiago',\n 'America/Santo_Domingo',\n 'America/Sao_Paulo',\n 'America/Scoresbysund',\n 'America/Sitka',\n 'America/St_Johns',\n 'America/Swift_Current',\n 'America/Tegucigalpa',\n 'America/Thule',\n 'America/Thunder_Bay',\n 'America/Tijuana',\n 'America/Toronto',\n 'America/Vancouver',\n 'America/Whitehorse',\n 'America/Winnipeg',\n 'America/Yakutat',\n 'America/Yellowknife',\n 'Antarctica/Casey',\n 'Antarctica/Davis',\n 'Antarctica/DumontDUrville',\n 'Antarctica/Macquarie',\n 'Antarctica/Mawson',\n 'Antarctica/Palmer',\n 'Antarctica/Rothera',\n 'Antarctica/Syowa',\n 'Antarctica/Troll',\n 'Antarctica/Vostok',\n 'Asia/Almaty',\n 'Asia/Amman',\n 'Asia/Anadyr',\n 'Asia/Aqtau',\n 'Asia/Aqtobe',\n 'Asia/Ashgabat',\n 'Asia/Atyrau',\n 'Asia/Baghdad',\n 'Asia/Baku',\n 'Asia/Bangkok',\n 'Asia/Barnaul',\n 'Asia/Beirut',\n 'Asia/Bishkek',\n 'Asia/Brunei',\n 'Asia/Chita',\n 'Asia/Choibalsan',\n 'Asia/Colombo',\n 'Asia/Damascus',\n 'Asia/Dhaka',\n 'Asia/Dili',\n 'Asia/Dubai',\n 'Asia/Dushanbe',\n 'Asia/Famagusta',\n 'Asia/Gaza',\n 'Asia/Hebron',\n 'Asia/Ho_Chi_Minh',\n 'Asia/Hong_Kong',\n 'Asia/Hovd',\n 'Asia/Irkutsk',\n 'Asia/Jakarta',\n 'Asia/Jayapura',\n 'Asia/Jerusalem',\n 'Asia/Kabul',\n 'Asia/Kamchatka',\n 'Asia/Karachi',\n 'Asia/Kathmandu',\n 'Asia/Khandyga',\n 'Asia/Kolkata',\n 'Asia/Krasnoyarsk',\n 'Asia/Kuala_Lumpur',\n 'Asia/Kuching',\n 'Asia/Macau',\n 'Asia/Magadan',\n 'Asia/Makassar',\n 'Asia/Manila',\n 'Asia/Nicosia',\n 'Asia/Novokuznetsk',\n 'Asia/Novosibirsk',\n 'Asia/Omsk',\n 'Asia/Oral',\n 'Asia/Pontianak',\n 'Asia/Pyongyang',\n 'Asia/Qatar',\n 'Asia/Qostanay',\n 'Asia/Qyzylorda',\n 'Asia/Riyadh',\n 'Asia/Sakhalin',\n 'Asia/Samarkand',\n 'Asia/Seoul',\n 'Asia/Shanghai',\n 'Asia/Singapore',\n 'Asia/Srednekolymsk',\n 'Asia/Taipei',\n 'Asia/Tashkent',\n 'Asia/Tbilisi',\n 'Asia/Tehran',\n 'Asia/Thimphu',\n 'Asia/Tokyo',\n 'Asia/Tomsk',\n 'Asia/Ulaanbaatar',\n 'Asia/Urumqi',\n 'Asia/Ust-Nera',\n 'Asia/Vladivostok',\n 'Asia/Yakutsk',\n 'Asia/Yangon',\n 'Asia/Yekaterinburg',\n 'Asia/Yerevan',\n 'Atlantic/Azores',\n 'Atlantic/Bermuda',\n 'Atlantic/Canary',\n 'Atlantic/Cape_Verde',\n 'Atlantic/Faroe',\n 'Atlantic/Madeira',\n 'Atlantic/Reykjavik',\n 'Atlantic/South_Georgia',\n 'Atlantic/Stanley',\n 'Australia/Adelaide',\n 'Australia/Brisbane',\n 'Australia/Broken_Hill',\n 'Australia/Currie',\n 'Australia/Darwin',\n 'Australia/Eucla',\n 'Australia/Hobart',\n 'Australia/Lindeman',\n 'Australia/Lord_Howe',\n 'Australia/Melbourne',\n 'Australia/Perth',\n 'Australia/Sydney',\n 'Europe/Amsterdam',\n 'Europe/Andorra',\n 'Europe/Astrakhan',\n 'Europe/Athens',\n 'Europe/Belgrade',\n 'Europe/Berlin',\n 'Europe/Brussels',\n 'Europe/Bucharest',\n 'Europe/Budapest',\n 'Europe/Chisinau',\n 'Europe/Copenhagen',\n 'Europe/Dublin',\n 'Europe/Gibraltar',\n 'Europe/Helsinki',\n 'Europe/Istanbul',\n 'Europe/Kaliningrad',\n 'Europe/Kiev',\n 'Europe/Kirov',\n 'Europe/Lisbon',\n 'Europe/London',\n 'Europe/Luxembourg',\n 'Europe/Madrid',\n 'Europe/Malta',\n 'Europe/Minsk',\n 'Europe/Monaco',\n 'Europe/Moscow',\n 'Europe/Oslo',\n 'Europe/Paris',\n 'Europe/Prague',\n 'Europe/Riga',\n 'Europe/Rome',\n 'Europe/Samara',\n 'Europe/Saratov',\n 'Europe/Simferopol',\n 'Europe/Sofia',\n 'Europe/Stockholm',\n 'Europe/Tallinn',\n 'Europe/Tirane',\n 'Europe/Ulyanovsk',\n 'Europe/Uzhgorod',\n 'Europe/Vienna',\n 'Europe/Vilnius',\n 'Europe/Volgograd',\n 'Europe/Warsaw',\n 'Europe/Zaporozhye',\n 'Europe/Zurich',\n 'Indian/Chagos',\n 'Indian/Christmas',\n 'Indian/Cocos',\n 'Indian/Kerguelen',\n 'Indian/Mahe',\n 'Indian/Maldives',\n 'Indian/Mauritius',\n 'Indian/Reunion',\n 'Pacific/Apia',\n 'Pacific/Auckland',\n 'Pacific/Bougainville',\n 'Pacific/Chatham',\n 'Pacific/Chuuk',\n 'Pacific/Easter',\n 'Pacific/Efate',\n 'Pacific/Enderbury',\n 'Pacific/Fakaofo',\n 'Pacific/Fiji',\n 'Pacific/Funafuti',\n 'Pacific/Galapagos',\n 'Pacific/Gambier',\n 'Pacific/Guadalcanal',\n 'Pacific/Guam',\n 'Pacific/Honolulu',\n 'Pacific/Kiritimati',\n 'Pacific/Kosrae',\n 'Pacific/Kwajalein',\n 'Pacific/Majuro',\n 'Pacific/Marquesas',\n 'Pacific/Nauru',\n 'Pacific/Niue',\n 'Pacific/Norfolk',\n 'Pacific/Noumea',\n 'Pacific/Pago_Pago',\n 'Pacific/Palau',\n 'Pacific/Pitcairn',\n 'Pacific/Pohnpei',\n 'Pacific/Port_Moresby',\n 'Pacific/Rarotonga',\n 'Pacific/Tahiti',\n 'Pacific/Tarawa',\n 'Pacific/Tongatapu',\n 'Pacific/Wake',\n 'Pacific/Wallis',\n]\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, withKeys as _withKeys, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-47ea2903\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"tz-dropdown\" }\nconst _hoisted_2 = [\"value\", \"disabled\", \"onKeydown\"]\nconst _hoisted_3 = [\"onClick\", \"onMouseover\", \"autofocus\"]\n\nimport { Ref, ref, toRefs, watch, withDefaults } from 'vue'\n\n import { timeZones } from '@/utils/timezone'\n\n interface Props {\n input: string\n disabled?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'TimezoneDropdown',\n props: {\n input: null,\n disabled: { type: Boolean, default: false }\n },\n emits: ['updateTimezone'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { input: string, disabled: boolean }\n\n \n\n \n\n const { input, disabled } = toRefs(props)\n const timezone: Ref = ref(props.input)\n const isOpen: Ref = ref(false)\n const tzList: Ref = ref(null)\n const focusItemIndex: Ref = ref(0)\n\n function matchTimezone(t: string): RegExpMatchArray | null {\n return t.toLowerCase().match(timezone.value.toLowerCase())\n }\n function onMouseOver(index: number) {\n focusItemIndex.value = index\n }\n function onUpdateTimezone(value: string) {\n timezone.value = value\n isOpen.value = false\n emit('updateTimezone', value)\n }\n function onEnter(event: Event & { target: HTMLInputElement }) {\n event.preventDefault()\n if (tzList.value?.firstElementChild?.innerHTML) {\n onUpdateTimezone(tzList.value?.firstElementChild?.innerHTML)\n }\n }\n function openDropdown(event: Event & { target: HTMLInputElement }) {\n event.preventDefault()\n isOpen.value = true\n timezone.value = event.target.value.trim()\n }\n\n watch(\n () => props.input,\n (value) => {\n timezone.value = value\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"input\", {\n class: \"tz-dropdown-input\",\n id: \"timezone\",\n name: \"timezone\",\n value: timezone.value,\n disabled: _unref(disabled),\n required: \"\",\n onKeydown: [\n _cache[0] || (_cache[0] = _withKeys(($event: any) => (onUpdateTimezone(_unref(input))), [\"esc\"])),\n _withKeys(onEnter, [\"enter\"])\n ],\n onInput: openDropdown\n }, null, 40, _hoisted_2),\n (isOpen.value)\n ? (_openBlock(), _createElementBlock(\"ul\", {\n key: 0,\n class: \"tz-dropdown-list\",\n ref_key: \"tzList\",\n ref: tzList\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(timeZones).filter((t) => matchTimezone(t)), (tz, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: tz,\n class: _normalizeClass([\"tz-dropdown-item\", { focus: index === focusItemIndex.value }]),\n onClick: ($event: any) => (onUpdateTimezone(tz)),\n onMouseover: ($event: any) => (onMouseOver(index)),\n autofocus: index === focusItemIndex.value\n }, _toDisplayString(tz), 43, _hoisted_3))\n }), 128))\n ], 512))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./TimezoneDropdown.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./TimezoneDropdown.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./TimezoneDropdown.vue?vue&type=style&index=0&id=47ea2903&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-47ea2903\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, vModelSelect as _vModelSelect, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, createVNode as _createVNode, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-065d5e6c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-preferences-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = { class: \"form-items\" }\nconst _hoisted_5 = [\"disabled\"]\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = { class: \"form-items\" }\nconst _hoisted_8 = { class: \"form-items\" }\nconst _hoisted_9 = [\"disabled\"]\nconst _hoisted_10 = [\"value\"]\nconst _hoisted_11 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_12 = { class: \"checkboxes-label\" }\nconst _hoisted_13 = { class: \"checkboxes\" }\nconst _hoisted_14 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_15 = { class: \"checkbox-label\" }\nconst _hoisted_16 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_17 = { class: \"checkboxes-label\" }\nconst _hoisted_18 = { class: \"checkboxes\" }\nconst _hoisted_19 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_20 = { class: \"checkbox-label\" }\nconst _hoisted_21 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_22 = { class: \"checkboxes-label\" }\nconst _hoisted_23 = { class: \"checkboxes\" }\nconst _hoisted_24 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_25 = { class: \"checkbox-label\" }\nconst _hoisted_26 = { class: \"form-buttons\" }\nconst _hoisted_27 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport { ComputedRef, computed, reactive, onMounted, onUnmounted } from 'vue'\n\n import TimezoneDropdown from '@/components/User/ProfileEdition/TimezoneDropdown.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IUserPreferencesPayload, IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { availableDateFormatOptions } from '@/utils/dates'\n import { availableLanguages } from '@/utils/locales'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPreferencesEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const userForm: IUserPreferencesPayload = reactive({\n display_ascent: true,\n imperial_units: false,\n language: '',\n timezone: 'Europe/Paris',\n date_format: 'dd/MM/yyyy',\n weekm: false,\n })\n const weekStart = [\n {\n label: 'SUNDAY',\n value: false,\n },\n {\n label: 'MONDAY',\n value: true,\n },\n ]\n const imperialUnits = [\n {\n label: 'METRIC',\n value: false,\n },\n {\n label: 'IMPERIAL',\n value: true,\n },\n ]\n const ascentData = [\n {\n label: 'DISPLAYED',\n value: true,\n },\n {\n label: 'HIDDEN',\n value: false,\n },\n ]\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const dateFormatOptions = computed(() =>\n availableDateFormatOptions(\n new Date().toUTCString(),\n props.user.timezone,\n userForm.language\n )\n )\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function updateUserForm(user: IAuthUserProfile) {\n userForm.display_ascent = user.display_ascent\n userForm.imperial_units = user.imperial_units ? user.imperial_units : false\n userForm.language = user.language ? user.language : 'en'\n userForm.timezone = user.timezone ? user.timezone : 'Europe/Paris'\n userForm.date_format = user.date_format ? user.date_format : 'dd/MM/yyyy'\n userForm.weekm = user.weekm ? user.weekm : false\n }\n function updateProfile() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PREFERENCES, userForm)\n }\n function updateTZ(value: string) {\n userForm.timezone = value\n }\n function updateAscentDisplay(value: boolean) {\n userForm.display_ascent = value\n }\n function updateImperialUnit(value: boolean) {\n userForm.imperial_units = value\n }\n function updateWeekM(value: boolean) {\n userForm.weekm = value\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LANGUAGE')) + \" \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"language\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((userForm.language) = $event)),\n disabled: _unref(loading)\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(availableLanguages), (lang) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: lang.value,\n key: lang.value\n }, _toDisplayString(lang.label), 9, _hoisted_6))\n }), 128))\n ], 8, _hoisted_5), [\n [_vModelSelect, userForm.language]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.TIMEZONE')) + \" \", 1),\n _createVNode(TimezoneDropdown, {\n input: userForm.timezone,\n disabled: _unref(loading),\n onUpdateTimezone: updateTZ\n }, null, 8, [\"input\", \"disabled\"])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.DATE_FORMAT')) + \" \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"date_format\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((userForm.date_format) = $event)),\n disabled: _unref(loading)\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(dateFormatOptions), (dateFormat) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: dateFormat.value,\n key: dateFormat.value\n }, _toDisplayString(dateFormat.label), 9, _hoisted_10))\n }), 128))\n ], 8, _hoisted_9), [\n [_vModelSelect, userForm.date_format]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_DAY_OF_WEEK')), 1),\n _createElementVNode(\"div\", _hoisted_13, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(weekStart, (start) => {\n return _createElementVNode(\"label\", {\n key: start.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: start.label,\n name: start.label,\n checked: start.value === userForm.weekm,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateWeekM(start.value))\n }, null, 40, _hoisted_14),\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t(`user.PROFILE.${start.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"span\", _hoisted_17, _toDisplayString(_ctx.$t('user.PROFILE.UNITS.LABEL')), 1),\n _createElementVNode(\"div\", _hoisted_18, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(imperialUnits, (unit) => {\n return _createElementVNode(\"label\", {\n key: unit.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: unit.label,\n name: unit.label,\n checked: unit.value === userForm.imperial_units,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateImperialUnit(unit.value))\n }, null, 40, _hoisted_19),\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t(`user.PROFILE.UNITS.${unit.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"span\", _hoisted_22, _toDisplayString(_ctx.$t('user.PROFILE.ASCENT_DATA')), 1),\n _createElementVNode(\"div\", _hoisted_23, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(ascentData, (status) => {\n return _createElementVNode(\"label\", {\n key: status.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: status.label,\n name: status.label,\n checked: status.value === userForm.display_ascent,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateAscentDisplay(status.value))\n }, null, 40, _hoisted_24),\n _createElementVNode(\"span\", _hoisted_25, _toDisplayString(_ctx.$t(`common.${status.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_26, [\n _createElementVNode(\"button\", _hoisted_27, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/preferences')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPreferencesEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPreferencesEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPreferencesEdition.vue?vue&type=style&index=0&id=065d5e6c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-065d5e6c\"]])\n\nexport default __exports__","export const oauth2_scopes = [\n 'profile:read',\n 'profile:write',\n 'users:read',\n 'users:write',\n 'workouts:read',\n 'workouts:write',\n]\n\nexport const admin_oauth2_scopes = ['application:write']\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, vModelText as _vModelText, withDirectives as _withDirectives, resolveComponent as _resolveComponent, createVNode as _createVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0657ee77\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"new-oauth2-app\" }\nconst _hoisted_2 = { id: \"new-oauth2-title\" }\nconst _hoisted_3 = { id: \"apps-form\" }\nconst _hoisted_4 = [\"onSubmit\"]\nconst _hoisted_5 = { class: \"form-items\" }\nconst _hoisted_6 = { class: \"form-item\" }\nconst _hoisted_7 = { for: \"app-name\" }\nconst _hoisted_8 = { class: \"form-item\" }\nconst _hoisted_9 = { for: \"app-description\" }\nconst _hoisted_10 = { class: \"form-item\" }\nconst _hoisted_11 = { for: \"app-url\" }\nconst _hoisted_12 = { class: \"form-item\" }\nconst _hoisted_13 = { for: \"app-redirect-uri\" }\nconst _hoisted_14 = { class: \"form-item-scope\" }\nconst _hoisted_15 = { class: \"form-item-scope-label\" }\nconst _hoisted_16 = { class: \"scope-label\" }\nconst _hoisted_17 = [\"name\", \"checked\", \"onChange\"]\nconst _hoisted_18 = [\"innerHTML\"]\nconst _hoisted_19 = { class: \"form-buttons\" }\nconst _hoisted_20 = [\"disabled\"]\n\nimport { computed, reactive } from 'vue'\n\n import { OAUTH2_STORE } from '@/store/constants'\n import { IOAuth2ClientPayload } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { admin_oauth2_scopes, oauth2_scopes } from '@/utils/oauth'\n\n interface Props {\n authUser: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AddUserApp',\n props: {\n authUser: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n const appForm = reactive({\n client_name: '',\n client_uri: '',\n client_description: '',\n redirect_uri: '',\n })\n const scopes: string[] = reactive([])\n const filtered_scopes = computed(() =>\n getScopes(props.authUser, admin_oauth2_scopes, oauth2_scopes)\n )\n\n function createApp() {\n const payload: IOAuth2ClientPayload = {\n client_name: appForm.client_name,\n client_description: appForm.client_description,\n client_uri: appForm.client_uri,\n redirect_uris: [appForm.redirect_uri],\n scope: scopes.sort().join(' '),\n }\n store.dispatch(OAUTH2_STORE.ACTIONS.CREATE_CLIENT, payload)\n }\n function updateDescription(value: string) {\n appForm.client_description = value\n }\n function updateScopes(scope: string) {\n const index = scopes.indexOf(scope)\n if (index > -1) {\n scopes.splice(index, 1)\n } else {\n scopes.push(scope)\n }\n }\n function getScopes(\n authUser: IAuthUserProfile,\n admin_scopes: string[],\n scopes: string[]\n ) {\n const filtered_scopes = [...scopes]\n if (authUser.admin) {\n filtered_scopes.push(...admin_scopes)\n }\n return filtered_scopes.sort()\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"h1\", _hoisted_2, _toDisplayString(_ctx.$t('oauth2.ADD_A_NEW_APP')), 1),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(createApp, [\"prevent\"])\n }, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"label\", _hoisted_7, _toDisplayString(_ctx.$t('oauth2.APP.NAME')) + \"*\", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-name\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((appForm.client_name) = $event))\n }, null, 512), [\n [_vModelText, appForm.client_name]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"label\", _hoisted_9, _toDisplayString(_ctx.$t('oauth2.APP.DESCRIPTION')), 1),\n _createVNode(_component_CustomTextArea, {\n name: \"app-description\",\n charLimit: 200,\n input: appForm.description,\n onUpdateValue: updateDescription\n }, null, 8, [\"input\"])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"label\", _hoisted_11, _toDisplayString(_ctx.$t('oauth2.APP.URL')) + \"*\", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-url\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((appForm.client_uri) = $event))\n }, null, 512), [\n [_vModelText, appForm.client_uri]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"label\", _hoisted_13, _toDisplayString(_ctx.$t('oauth2.APP.REDIRECT_URL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-redirect-uri\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((appForm.redirect_uri) = $event))\n }, null, 512), [\n [_vModelText, appForm.redirect_uri]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", _hoisted_15, _toDisplayString(_ctx.$t('oauth2.APP.SCOPE.LABEL')) + \"* \", 1),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(filtered_scopes), (scope) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"form-item-scope-checkboxes\",\n key: scope\n }, [\n _createElementVNode(\"label\", _hoisted_16, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n name: scope,\n checked: scopes.includes(scope),\n onChange: ($event: any) => (updateScopes(scope))\n }, null, 40, _hoisted_17),\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]),\n _createElementVNode(\"p\", {\n class: \"scope-description\",\n innerHTML: _ctx.$t(`oauth2.APP.SCOPE.${scope}_DESCRIPTION`)\n }, null, 8, _hoisted_18)\n ]))\n }), 128))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n type: \"submit\",\n disabled: scopes.length === 0\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_20),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[3] || (_cache[3] = _withModifiers(() => _ctx.$router.push('/profile/apps'), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./AddUserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AddUserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AddUserApp.vue?vue&type=style&index=0&id=0657ee77&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0657ee77\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3b2fe9ed\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"authorize-oauth2-app\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { id: \"authorize-oauth2-title\" }\nconst _hoisted_4 = { class: \"oauth2-access description-list\" }\nconst _hoisted_5 = { class: \"client-scope\" }\nconst _hoisted_6 = [\"innerHTML\"]\nconst _hoisted_7 = { class: \"authorize-oauth2-buttons\" }\nconst _hoisted_8 = { key: 1 }\nconst _hoisted_9 = { class: \"no-app\" }\n\nimport { computed, ComputedRef, onBeforeMount } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IOAuth2Client } from '@/types/oauth'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AuthorizeUserApp',\n setup(__props) {\n\n const route = useRoute()\n const store = useStore()\n\n const client: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENT]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => loadApp())\n\n function loadApp() {\n if (route.query.client_id && typeof route.query.client_id === 'string') {\n store.dispatch(\n OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_CLIENT_ID,\n route.query.client_id\n )\n }\n }\n\n function authorizeApp() {\n store.dispatch(OAUTH2_STORE.ACTIONS.AUTHORIZE_CLIENT, {\n client_id: `${route.query.client_id}`,\n redirect_uri: `${route.query.redirect_uri}`,\n response_type: `${route.query.response_type}`,\n scope: `${route.query.scope}`,\n state: `${route.query.state ? route.query.state : ''}`,\n code_challenge: `${\n route.query.code_challenge ? route.query.code_challenge : ''\n }`,\n code_challenge_method: `${\n route.query.code_challenge_method\n ? route.query.code_challenge_method\n : ''\n }`,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(client).client_id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"h1\", _hoisted_3, [\n _createVNode(_component_i18n_t, { keypath: \"oauth2.AUTHORIZE_APP\" }, {\n default: _withCtx(() => [\n _createVNode(_component_router_link, {\n to: { name: 'UserApp', params: { id: _unref(client).id } }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(client).name), 1)\n ]),\n _: 1\n }, 8, [\"to\"])\n ]),\n _: 1\n })\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t('oauth2.APP_REQUESTING_ACCESS')), 1),\n _createElementVNode(\"dl\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(client).scope.split(' '), (scope) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: scope }, [\n _createElementVNode(\"dt\", _hoisted_5, [\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]),\n _createElementVNode(\"dd\", {\n innerHTML: _ctx.$t(`oauth2.APP.SCOPE.${scope}_DESCRIPTION`)\n }, null, 8, _hoisted_6)\n ], 64))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: authorizeApp\n }, _toDisplayString(_ctx.$t('buttons.AUTHORIZE')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"p\", _hoisted_9, _toDisplayString(_ctx.$t('oauth2.NO_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n ]))\n}\n}\n\n})","import script from \"./AuthorizeUserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AuthorizeUserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AuthorizeUserApp.vue?vue&type=style&index=0&id=3b2fe9ed&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3b2fe9ed\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"oauth2-apps\" }\n\nimport { onUnmounted, toRefs } from 'vue'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const { user } = toRefs(props)\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(OAUTH2_STORE.MUTATIONS.SET_CLIENTS, [])\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_router_view, { authUser: _unref(user) }, null, 8, [\"authUser\"])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3a844fa2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"oauth2-app\",\n class: \"description-list\"\n}\nconst _hoisted_2 = { key: 1 }\nconst _hoisted_3 = {\n key: 0,\n class: \"info-box success-message\"\n}\nconst _hoisted_4 = [\"title\"]\nconst _hoisted_5 = { key: 0 }\nconst _hoisted_6 = {\n key: 1,\n class: \"app-secret\"\n}\nconst _hoisted_7 = [\"title\"]\nconst _hoisted_8 = { class: \"client-scopes\" }\nconst _hoisted_9 = { class: \"app-buttons\" }\nconst _hoisted_10 = { key: 2 }\nconst _hoisted_11 = { class: \"no-app\" }\n\nimport {\n ComputedRef,\n Ref,\n capitalize,\n computed,\n onBeforeMount,\n toRefs,\n ref,\n onUnmounted,\n withDefaults,\n watch,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IOAuth2Client } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n authUser: IAuthUserProfile\n afterCreation?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserApp',\n props: {\n authUser: null,\n afterCreation: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, afterCreation: boolean }\n\n \n const route = useRoute()\n const store = useStore()\n\n const { afterCreation, authUser } = toRefs(props)\n const client: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENT]\n )\n const revocationSuccessful: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.REVOCATION_SUCCESSFUL]\n )\n const displayModal: Ref = ref(false)\n const messageToDisplay: Ref = ref(null)\n const idCopied: Ref = ref(false)\n const secretCopied: Ref = ref(false)\n const clipboardSupport: Ref = ref(false)\n\n onBeforeMount(() => {\n loadClient()\n if (navigator.clipboard) {\n clipboardSupport.value = true\n }\n })\n\n function loadClient() {\n // after creation, client is already in store\n if (\n !afterCreation.value &&\n route.params.id &&\n typeof route.params.id === 'string'\n ) {\n store.dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_ID, +route.params.id)\n }\n }\n function updateMessageToDisplay(forDelete: boolean) {\n messageToDisplay.value = forDelete\n ? 'oauth2.APP_DELETION_CONFIRMATION'\n : 'oauth2.TOKENS_REVOCATION_CONFIRMATION'\n updateDisplayModal(true)\n }\n function updateDisplayModal(value: boolean) {\n displayModal.value = value\n if (!value) {\n messageToDisplay.value = null\n }\n }\n function confirmAction(clientId: number) {\n if (messageToDisplay.value === 'oauth2.APP_DELETION_CONFIRMATION') {\n store.dispatch(OAUTH2_STORE.ACTIONS.DELETE_CLIENT, clientId)\n } else {\n store.dispatch(OAUTH2_STORE.ACTIONS.REVOKE_ALL_TOKENS, clientId)\n }\n }\n function copyIdToClipboard() {\n navigator.clipboard.writeText(client.value.client_id)\n idCopied.value = true\n secretCopied.value = false\n setTimeout(() => {\n idCopied.value = false\n }, 3000)\n }\n function copySecretToClipboard() {\n if (client.value.client_secret) {\n navigator.clipboard.writeText(client.value.client_secret)\n secretCopied.value = true\n idCopied.value = false\n setTimeout(() => {\n secretCopied.value = false\n }, 3000)\n }\n }\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(OAUTH2_STORE.MUTATIONS.EMPTY_CLIENT)\n store.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, false)\n })\n\n watch(\n () => revocationSuccessful.value,\n (newValue) => {\n if (newValue) {\n updateDisplayModal(false)\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t(messageToDisplay.value),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (confirmAction(_unref(client).id))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(client) && _unref(client).client_id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (_unref(afterCreation) || _unref(revocationSuccessful))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\n _unref(afterCreation)\n ? 'oauth2.APP_CREATED_SUCCESSFULLY'\n : 'oauth2.TOKENS_REVOKED'\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.CLIENT_ID')) + \":\", 1),\n _createElementVNode(\"dd\", null, [\n _createTextVNode(_toDisplayString(_unref(client).client_id) + \" \", 1),\n (_unref(afterCreation) && clipboardSupport.value)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: _normalizeClass(`fa fa-${idCopied.value ? 'check' : 'copy'}`),\n \"aria-hidden\": \"true\",\n title: _ctx.$t('oauth2.COPY_TO_CLIPBOARD'),\n onClick: copyIdToClipboard\n }, null, 10, _hoisted_4))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(afterCreation) && _unref(client).client_secret)\n ? (_openBlock(), _createElementBlock(\"dt\", _hoisted_5, _toDisplayString(_ctx.$t('oauth2.APP.CLIENT_SECRET')) + \": \", 1))\n : _createCommentVNode(\"\", true),\n (_unref(afterCreation) && _unref(client).client_secret)\n ? (_openBlock(), _createElementBlock(\"dd\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_unref(client).client_secret) + \" \", 1),\n (clipboardSupport.value)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: _normalizeClass(`fa fa-${secretCopied.value ? 'check' : 'copy'}`),\n \"aria-hidden\": \"true\",\n title: _ctx.$t('oauth2.COPY_TO_CLIPBOARD'),\n onClick: copySecretToClipboard\n }, null, 10, _hoisted_7))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"dt\", null, _toDisplayString(capitalize(_ctx.$t('oauth2.APP.ISSUE_AT'))) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(formatDate)(\n _unref(client).issued_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.DESCRIPTION')) + \":\", 1),\n _createElementVNode(\"dd\", {\n class: _normalizeClass({ 'no-description': !_unref(client).client_description })\n }, _toDisplayString(_unref(client).client_description\n ? _unref(client).client_description\n : _ctx.$t('oauth2.NO_DESCRIPTION')), 3),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.URL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).website), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.REDIRECT_URL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).redirect_uris.length > 0 ? _unref(client).redirect_uris[0] : ''), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.SCOPE.LABEL')) + \":\", 1),\n _createElementVNode(\"dd\", _hoisted_8, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(client).scope.split(' '), (scope) => {\n return (_openBlock(), _createElementBlock(\"span\", {\n class: \"client-scope\",\n key: scope\n }, [\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]))\n }), 128))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (updateMessageToDisplay(false)))\n }, _toDisplayString(_ctx.$t('oauth2.REVOKE_ALL_TOKENS')), 1),\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateMessageToDisplay(true)))\n }, _toDisplayString(_ctx.$t('oauth2.DELETE_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [\n _createElementVNode(\"p\", _hoisted_11, _toDisplayString(_ctx.$t('oauth2.NO_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n ]))\n}\n}\n\n})","import script from \"./UserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserApp.vue?vue&type=style&index=0&id=3a844fa2&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3a844fa2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-efa45ea0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"oauth2-apps-list\" }\nconst _hoisted_2 = { class: \"apps-list\" }\nconst _hoisted_3 = { key: 0 }\nconst _hoisted_4 = { class: \"app-issued-at\" }\nconst _hoisted_5 = {\n key: 1,\n class: \"no-apps\"\n}\nconst _hoisted_6 = { class: \"app-list-buttons\" }\n\nimport { ComputedRef, computed, onBeforeMount, toRefs, watch } from 'vue'\n import { LocationQuery, useRoute } from 'vue-router'\n\n import Pagination from '@/components/Common/Pagination.vue'\n import { OAUTH2_STORE } from '@/store/constants'\n import { IPagination } from '@/types/api'\n import { IOAuth2Client, IOauth2ClientsPayload } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { defaultPage, getNumberQueryValue } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n authUser: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAppsList',\n props: {\n authUser: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n const route = useRoute()\n\n const { authUser } = toRefs(props)\n const clients: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENTS]\n )\n\n const pagination: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENTS_PAGINATION]\n )\n let query: IOauth2ClientsPayload = getClientsQuery(route.query)\n\n onBeforeMount(() => {\n loadClients(query)\n })\n\n function getClientsQuery(newQuery: LocationQuery): IOauth2ClientsPayload {\n const clientsQuery: IOauth2ClientsPayload = {}\n if (newQuery.page) {\n clientsQuery.page = getNumberQueryValue(newQuery.page, defaultPage)\n }\n return clientsQuery\n }\n function loadClients(payload: IOauth2ClientsPayload) {\n store.dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENTS, payload)\n }\n\n watch(\n () => route.query,\n async (newQuery) => {\n query = getClientsQuery(newQuery)\n loadClients(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"p\", _hoisted_2, _toDisplayString(_ctx.$t('oauth2.APPS_LIST')), 1),\n (_unref(clients).length > 0)\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(clients), (client) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: client.client_id\n }, [\n _createVNode(_component_router_link, {\n to: { name: 'UserApp', params: { id: client.id } }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(client.name), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('oauth2.APP.ISSUE_AT')) + \" \" + _toDisplayString(_unref(formatDate)(\n client.issued_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1)\n ]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('oauth2.NO_APPS')), 1)),\n (_unref(clients).length > 0)\n ? (_openBlock(), _createBlock(Pagination, {\n key: 2,\n pagination: _unref(pagination),\n path: \"/profile/apps\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"button\", {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/apps/new')))\n }, _toDisplayString(_ctx.$t('oauth2.NEW_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserAppsList.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAppsList.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAppsList.vue?vue&type=style&index=0&id=efa45ea0&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-efa45ea0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, withModifiers as _withModifiers, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createBlock as _createBlock, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74e52489\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-sport-preferences\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"responsive-table\"\n}\nconst _hoisted_3 = { class: \"mobile-display\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"profile-buttons mobile-display\"\n}\nconst _hoisted_5 = {\n key: 1,\n class: \"profile-buttons\"\n}\nconst _hoisted_6 = { class: \"text-left\" }\nconst _hoisted_7 = { key: 0 }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = [\"value\"]\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"disabled-message\"\n}\nconst _hoisted_12 = {\n key: 1,\n class: \"fa fa-refresh fa-spin fa-fw\"\n}\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"cell-heading\" }\nconst _hoisted_15 = [\"checked\"]\nconst _hoisted_16 = { class: \"cell-heading\" }\nconst _hoisted_17 = [\"value\"]\nconst _hoisted_18 = { key: 1 }\nconst _hoisted_19 = {\n key: 0,\n class: \"action-buttons\"\n}\nconst _hoisted_20 = { class: \"cell-heading\" }\nconst _hoisted_21 = [\"onClick\"]\nconst _hoisted_22 = {\n key: 1,\n class: \"edition-buttons\"\n}\nconst _hoisted_23 = [\"disabled\"]\nconst _hoisted_24 = [\"disabled\", \"onClick\"]\nconst _hoisted_25 = [\"disabled\"]\nconst _hoisted_26 = {\n key: 0,\n class: \"profile-buttons\"\n}\nconst _hoisted_27 = {\n key: 1,\n class: \"profile-buttons\"\n}\n\nimport { ComputedRef, computed, inject, reactive, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { AUTH_USER_STORE, ROOT_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IUserProfile, IUserSportPreferencesPayload } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n user: IUserProfile\n isEdition: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserSportPreferences',\n props: {\n user: null,\n isEdition: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n isEdition: boolean\n }\n\n \n\n const store = useStore()\n const { t } = useI18n()\n\n const { isEdition, user } = toRefs(props)\n const defaultColor = '#838383'\n const sportColors: Record | undefined = inject('sportColors')\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(sports.value, t, 'is_active', user.value.sports_list)\n )\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const sportPayload: IUserSportPreferencesPayload = reactive({\n sport_id: 0,\n color: null,\n is_active: true,\n stopped_speed_threshold: 1,\n })\n\n function updateSportInEdition(sport: ISport | null) {\n if (sport !== null) {\n sportPayload.sport_id = sport.id\n sportPayload.color = sport.color\n ? sport.color\n : sportColors\n ? sportColors[sport.label]\n : defaultColor\n sportPayload.is_active = sport.is_active_for_user\n sportPayload.stopped_speed_threshold = sport.stopped_speed_threshold\n } else {\n resetSportPayload()\n }\n }\n function isSportInEdition(sportId: number) {\n return sportPayload.sport_id === sportId\n }\n function updateColor(event: Event & { target: HTMLInputElement }) {\n sportPayload.color = event.target.value\n }\n function updateThreshold(event: Event & { target: HTMLInputElement }) {\n sportPayload.stopped_speed_threshold = parseFloat(event.target.value)\n }\n function updateIsActive(event: Event & { target: HTMLInputElement }) {\n sportPayload.is_active = event.target.checked\n }\n function resetSportPayload() {\n sportPayload.sport_id = 0\n sportPayload.color = null\n sportPayload.is_active = true\n sportPayload.stopped_speed_threshold = 1\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n }\n function updateSport(event: Event) {\n event.preventDefault()\n store.dispatch(\n AUTH_USER_STORE.ACTIONS.UPDATE_USER_SPORT_PREFERENCES,\n sportPayload\n )\n }\n function resetSport(event: Event, sportId: number) {\n event.preventDefault()\n store.dispatch(\n AUTH_USER_STORE.ACTIONS.RESET_USER_SPORT_PREFERENCES,\n sportId\n )\n }\n\n watch(\n () => loading.value,\n (newIsLoading) => {\n if (!newIsLoading && !errorMessages.value) {\n resetSportPayload()\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/sports')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/profile/edit/sports')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_SPORTS_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]),\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.COLOR')), 1),\n _createElementVNode(\"th\", _hoisted_6, _toDisplayString(_ctx.$t('workouts.SPORT', 0)), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('workouts.WORKOUT', 0)), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.IS_ACTIVE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD')), 1),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"th\", _hoisted_7, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.ACTION')), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: sport.id\n }, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.COLOR')), 1),\n (isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"sport-color\",\n type: \"color\",\n value: sportPayload.color,\n onInput: updateColor\n }, null, 40, _hoisted_9))\n : (_openBlock(), _createBlock(_component_SportImage, {\n key: 1,\n title: sport.translatedLabel,\n \"sport-label\": sport.label,\n color: sport.color ? sport.color : _unref(sportColors)[sport.label]\n }, null, 8, [\"title\", \"sport-label\", \"color\"]))\n ]),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"sport-label\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.LABEL')), 1),\n _createTextVNode(\" \" + _toDisplayString(sport.translatedLabel) + \" \", 1),\n (!sport.is_active)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, \" (\" + _toDisplayString(_ctx.$t('user.PROFILE.SPORT.DISABLED_BY_ADMIN')) + \") \", 1))\n : _createCommentVNode(\"\", true),\n (_unref(loading) && isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"i\", _hoisted_12))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages) && sportPayload.sport_id === sport.id)\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 2,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('workouts.WORKOUT', 0)), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${\n _unref(user).sports_list.includes(sport.id) ? '-check' : ''\n }`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.IS_ACTIVE')), 1),\n (isSportInEdition(sport.id) && sport.is_active)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n type: \"checkbox\",\n checked: sport.is_active_for_user,\n onChange: updateIsActive\n }, null, 40, _hoisted_15))\n : (_openBlock(), _createElementBlock(\"i\", {\n key: 1,\n class: _normalizeClass(`fa fa${sport.is_active_for_user ? '-check' : ''}`),\n \"aria-hidden\": \"true\"\n }, null, 2))\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD')), 1),\n (isSportInEdition(sport.id) && sport.is_active)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"threshold-input\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: sportPayload.stopped_speed_threshold,\n onInput: updateThreshold\n }, null, 40, _hoisted_17))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_18, _toDisplayString(sport.stopped_speed_threshold), 1))\n ], 2),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"td\", _hoisted_19, [\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.ACTION')), 1),\n (sportPayload.sport_id === 0)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n onClick: ($event: any) => (updateSportInEdition(sport))\n }, _toDisplayString(_ctx.$t('buttons.EDIT')), 9, _hoisted_21))\n : _createCommentVNode(\"\", true),\n (isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_22, [\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: updateSport\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_23),\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: (e) => resetSport(e, sport.id)\n }, _toDisplayString(_ctx.$t('buttons.RESET')), 9, _hoisted_24),\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateSportInEdition(null)))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_25)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n }), 128))\n ])\n ]),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_26, [\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/sports')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_27, [\n _createElementVNode(\"button\", {\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.$router.push('/profile/edit/sports')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_SPORTS_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./UserSportPreferences.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserSportPreferences.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserSportPreferences.vue?vue&type=style&index=0&id=74e52489&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74e52489\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74257266\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"about-text\" }\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-book fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = {\n href: \"https://samr1.github.io/FitTrackee/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-github fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_6 = {\n href: \"https://github.com/SamR1/FitTrackee\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-balance-scale fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://choosealicense.com/licenses/agpl-3.0/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}, \" AGPLv3 \", -1))\nconst _hoisted_9 = { key: 0 }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-envelope-o fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = [\"href\"]\n\nimport { ComputedRef, computed, capitalize } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'About',\n setup(__props) {\n\n const store = useStore()\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"p\", {\n class: \"error-message\",\n innerHTML: _ctx.$t('about.FITTRACKEE_DESCRIPTION')\n }, null, 8, _hoisted_2),\n _createElementVNode(\"p\", null, [\n _hoisted_3,\n _createElementVNode(\"a\", _hoisted_4, _toDisplayString(capitalize(_ctx.$t('common.DOCUMENTATION'))), 1)\n ]),\n _createElementVNode(\"p\", null, [\n _hoisted_5,\n _createElementVNode(\"a\", _hoisted_6, _toDisplayString(_ctx.$t('about.SOURCE_CODE')), 1)\n ]),\n _createElementVNode(\"p\", null, [\n _hoisted_7,\n _createVNode(_component_i18n_t, { keypath: \"about.FITTRACKEE_LICENSE\" }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n })\n ]),\n (_unref(appConfig).admin_contact)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _hoisted_10,\n _createElementVNode(\"a\", {\n href: `mailto:${_unref(appConfig).admin_contact}`\n }, _toDisplayString(_ctx.$t('about.CONTACT_ADMIN')), 9, _hoisted_11)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./About.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./About.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./About.vue?vue&type=style&index=0&id=74257266&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74257266\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./BikePic.vue?vue&type=template&id=795f7f5f&scoped=true\"\nconst script = {}\n\nimport \"./BikePic.vue?vue&type=style&index=0&id=795f7f5f&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-795f7f5f\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-bffb50d0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"about\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = { class: \"container-sub\" }\nconst _hoisted_4 = { class: \"container-sub about-details\" }\n\nimport About from '@/components/About.vue'\n import BikePic from '@/components/BikePic.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'AboutView',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(BikePic)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(About)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./AboutView.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./AboutView.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./AboutView.vue?vue&type=style&index=0&id=bffb50d0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-bffb50d0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-96abcc38\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"timeline-workout\" }\nconst _hoisted_2 = { class: \"box\" }\nconst _hoisted_3 = { class: \"workout-user-date\" }\nconst _hoisted_4 = { class: \"workout-user\" }\nconst _hoisted_5 = [\"title\"]\nconst _hoisted_6 = { key: 0 }\nconst _hoisted_7 = {\n key: 1,\n class: \"no-map\"\n}\nconst _hoisted_8 = { class: \"img\" }\nconst _hoisted_9 = { class: \"data\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-clock-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { key: 0 }\nconst _hoisted_12 = { class: \"data\" }\nconst _hoisted_13 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-road\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_14 = {\n key: 0,\n class: \"data elevation\"\n}\nconst _hoisted_15 = [\"alt\"]\nconst _hoisted_16 = { class: \"data-values\" }\nconst _hoisted_17 = {\n key: 1,\n class: \"data altitude\"\n}\nconst _hoisted_18 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-location-arrow\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_19 = { class: \"data-values\" }\n\nimport { Locale, formatDistance } from 'date-fns'\n import { ComputedRef, computed, toRefs, withDefaults } from 'vue'\n\n import StaticMap from '@/components/Common/StaticMap.vue'\n import UserPicture from '@/components/User/UserPicture.vue'\n import { ROOT_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkout } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n user: IUserProfile\n useImperialUnits: boolean\n workout?: IWorkout\n sport?: ISport\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutCard',\n props: {\n user: null,\n useImperialUnits: { type: Boolean },\n workout: { default: () => ({} as IWorkout) },\n sport: { default: () => ({} as ISport) }\n },\n setup(__props: any) {\n\nconst props = __props as { user: IUserProfile, useImperialUnits: boolean, workout: IWorkout, sport: ISport }\n\n \n\n const store = useStore()\n\n const { user, workout, sport, useImperialUnits } = toRefs(props)\n const locale: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LOCALE]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n (_unref(user).username)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"workout-user-name\",\n to: {\n name: 'User',\n params: { username: _unref(user).username },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(user).username), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"workout-title\",\n to: {\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(workout).title), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true),\n (_unref(workout).workout_date && _unref(user))\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"workout-date\",\n title: \n _unref(formatDate)(_unref(workout).workout_date, _unref(user).timezone, _unref(user).date_format)\n \n }, _toDisplayString(_unref(formatDistance)(new Date(_unref(workout).workout_date), new Date(), {\n addSuffix: true,\n locale: _unref(locale),\n })), 9, _hoisted_5))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-map\", { 'no-cursor': !_unref(workout) }]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _unref(workout).id\n ? _ctx.$router.push({\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n })\n : null\n ))\n }, [\n (_unref(workout))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n (_unref(workout).with_gpx)\n ? (_openBlock(), _createBlock(StaticMap, {\n key: 0,\n workout: _unref(workout)\n }, null, 8, [\"workout\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.NO_MAP')), 1))\n ]))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-data\", { 'without-gpx': _unref(workout) && !_unref(workout).with_gpx }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (\n _unref(workout).id\n ? _ctx.$router.push({\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n })\n : null\n ))\n }, [\n _createElementVNode(\"div\", _hoisted_8, [\n (_unref(sport).label)\n ? (_openBlock(), _createBlock(_component_SportImage, {\n key: 0,\n \"sport-label\": _unref(sport).label,\n color: _unref(sport).color\n }, null, 8, [\"sport-label\", \"color\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n (_unref(workout))\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, _toDisplayString(_unref(workout).moving), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _hoisted_13,\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).distance,\n digits: 3,\n unitFrom: \"km\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(workout) && _unref(workout).with_gpx)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n _createElementVNode(\"img\", {\n class: \"mountains\",\n src: \"/img/workouts/mountains.svg\",\n alt: _ctx.$t('workouts.ELEVATION')\n }, null, 8, _hoisted_15),\n _createElementVNode(\"div\", _hoisted_16, [\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).min_alt,\n unitFrom: \"m\",\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\"/ \"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 1,\n distance: _unref(workout).max_alt,\n unitFrom: \"m\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(workout) && _unref(workout).with_gpx)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _hoisted_18,\n _createElementVNode(\"div\", _hoisted_19, [\n _createTextVNode(\" +\"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).ascent,\n unitFrom: \"m\",\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\"/- \"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 1,\n distance: _unref(workout).descent,\n unitFrom: \"m\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./WorkoutCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutCard.vue?vue&type=style&index=0&id=96abcc38&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-96abcc38\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-35567bf2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"timeline\" }\nconst _hoisted_2 = { class: \"section-title\" }\nconst _hoisted_3 = { key: 0 }\nconst _hoisted_4 = { key: 1 }\nconst _hoisted_5 = {\n key: 1,\n class: \"more-workouts\"\n}\n\nimport { ComputedRef, computed, ref, onBeforeMount, toRefs } from 'vue'\n\n import WorkoutCard from '@/components/Workout/WorkoutCard.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkout } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n sports: ISport[]\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Timeline',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IUserProfile\n }\n\n \n\n const store = useStore()\n\n const { sports, user } = toRefs(props)\n const page = ref(1)\n const per_page = 5\n const initWorkoutsCount =\n props.user.nb_workouts >= per_page ? per_page : props.user.nb_workouts\n onBeforeMount(() => loadWorkouts())\n const workouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.TIMELINE_WORKOUTS]\n )\n const moreWorkoutsExist: ComputedRef = computed(() =>\n workouts.value.length > 0\n ? workouts.value[workouts.value.length - 1].previous_workout !== null\n : false\n )\n\n function loadWorkouts() {\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_TIMELINE_WORKOUTS, {\n page: page.value,\n per_page,\n ...defaultOrder,\n })\n }\n function loadMoreWorkouts() {\n page.value += 1\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_MORE_TIMELINE_WORKOUTS, {\n page: page.value,\n per_page,\n ...defaultOrder,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('workouts.LATEST_WORKOUTS')), 1),\n (_unref(user).nb_workouts > 0 && _unref(workouts).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList([...Array(_unref(initWorkoutsCount)).keys()], (index) => {\n return (_openBlock(), _createBlock(WorkoutCard, {\n user: _unref(user),\n useImperialUnits: _unref(user).imperial_units,\n key: index\n }, null, 8, [\"user\", \"useImperialUnits\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout) => {\n return (_openBlock(), _createBlock(WorkoutCard, {\n workout: workout,\n sport: \n _unref(workouts).length > 0\n ? _unref(sports).filter((s) => s.id === workout.sport_id)[0]\n : null\n ,\n user: _unref(user),\n useImperialUnits: _unref(user).imperial_units,\n key: workout.id\n }, null, 8, [\"workout\", \"sport\", \"user\", \"useImperialUnits\"]))\n }), 128)),\n (_unref(workouts).length === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true),\n (_unref(moreWorkoutsExist))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"button\", { onClick: loadMoreWorkouts }, _toDisplayString(_ctx.$t('workouts.LOAD_MORE_WORKOUT')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n}\n}\n\n})","import script from \"./Timeline.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Timeline.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Timeline.vue?vue&type=style&index=0&id=35567bf2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-35567bf2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = [\"title\"]\n\nimport { toRefs } from 'vue'\n\n import { IWorkout } from '@/types/workouts'\n interface Props {\n displayHARecord: boolean\n workout: IWorkout\n sportLabel: string\n sportColor: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkout',\n props: {\n displayHARecord: { type: Boolean },\n workout: null,\n sportLabel: null,\n sportColor: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n displayHARecord: boolean\n workout: IWorkout\n sportLabel: string\n sportColor: string | null\n }\n\n \n\n const { displayHARecord, workout, sportLabel, sportColor } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"calendar-workout\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _ctx.$router.push({ name: 'Workout', params: { workoutId: _unref(workout).id } })\n ))\n }, [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(sportLabel),\n title: _unref(workout).title,\n color: _unref(sportColor)\n }, null, 8, [\"sport-label\", \"title\", \"color\"]),\n _createElementVNode(\"sup\", null, [\n (_unref(workout).records.length > 0)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-trophy custom-fa-small\",\n \"aria-hidden\": \"true\",\n title: \n _unref(workout).records\n .filter((record) =>\n _unref(displayHARecord) ? true : record.record_type !== 'HA'\n )\n .map((record) => ` ${_ctx.$t(`workouts.RECORD_${record.record_type}`)}`)\n \n }, null, 8, _hoisted_1))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkout.vue?vue&type=style&index=0&id=331e1c8b&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"donut-chart\" }\nconst _hoisted_2 = {\n height: \"34\",\n width: \"34\",\n viewBox: \"0 0 34 34\"\n}\nconst _hoisted_3 = [\"stroke\", \"stroke-dashoffset\", \"transform\"]\n\nimport { toRefs } from 'vue'\n\n interface Props {\n colors: Record\n datasets: Record>\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'DonutChart',\n props: {\n colors: null,\n datasets: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n colors: Record\n datasets: Record>\n }\n\n \n\n const { colors, datasets } = toRefs(props)\n let angleOffset = -90\n const cx = 16\n const cy = 16\n const radius = 14\n const circumference = 2 * Math.PI * radius\n\n function calculateStrokeDashOffset(\n percentage: number,\n circumference: number\n ): number {\n return circumference - percentage * circumference\n }\n function returnCircleTransformValue(\n index: number,\n percentage: number\n ): string {\n const rotation = `rotate(${angleOffset}, ${cx}, ${cy})`\n angleOffset = percentage * 360 + angleOffset\n return rotation\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(Object.entries(_unref(datasets)), (data, index) => {\n return (_openBlock(), _createElementBlock(\"g\", { key: index }, [\n _createElementVNode(\"circle\", {\n cx: cx,\n cy: cy,\n r: radius,\n fill: \"transparent\",\n stroke: _unref(colors)[+data[0]],\n \"stroke-dashoffset\": \n calculateStrokeDashOffset(data[1].percentage, circumference)\n ,\n \"stroke-dasharray\": circumference,\n \"stroke-width\": \"3\",\n \"stroke-opacity\": \"0.8\",\n transform: returnCircleTransformValue(index, data[1].percentage)\n }, null, 8, _hoisted_3)\n ]))\n }), 128))\n ]))\n ]))\n}\n}\n\n})","import script from \"./DonutChart.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./DonutChart.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-52d4310a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"calendar-workouts-chart\" }\nconst _hoisted_2 = { class: \"workouts-count\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workouts-pane\"\n}\nconst _hoisted_4 = { class: \"more-workouts\" }\n\nimport { ref, toRefs } from 'vue'\n\n import CalendarWorkout from '@/components/Dashboard/UserCalendar/CalendarWorkout.vue'\n import DonutChart from '@/components/Dashboard/UserCalendar/DonutChart.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getSportColor, getSportLabel } from '@/utils/sports'\n\n interface Props {\n colors: Record\n datasets: Record>\n sports: ISport[]\n workouts: IWorkout[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkoutsChart',\n props: {\n colors: null,\n datasets: null,\n sports: null,\n workouts: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n colors: Record\n datasets: Record>\n sports: ISport[]\n workouts: IWorkout[]\n }\n\n \n\n const { colors, datasets, sports, workouts } = toRefs(props)\n const isHidden = ref(true)\n\n function togglePane(event: Event & { target: HTMLElement }) {\n event.stopPropagation()\n isHidden.value = !isHidden.value\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _directive_click_outside = _resolveDirective(\"click-outside\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"workouts-chart\",\n onClick: togglePane\n }, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_unref(workouts).length), 1),\n _createVNode(DonutChart, {\n datasets: _unref(datasets),\n colors: _unref(colors)\n }, null, 8, [\"datasets\", \"colors\"])\n ]),\n (!isHidden.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"i\", {\n class: \"fa fa-times calendar-more\",\n \"aria-hidden\": \"true\",\n onClick: togglePane\n }),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout, index) => {\n return (_openBlock(), _createBlock(CalendarWorkout, {\n key: index,\n workout: workout,\n sportLabel: _unref(getSportLabel)(workout, _unref(sports)),\n sportColor: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"workout\", \"sportLabel\", \"sportColor\"]))\n }), 128))\n ])), [\n [_directive_click_outside, togglePane]\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkoutsChart.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkoutsChart.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkoutsChart.vue?vue&type=style&index=0&id=52d4310a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-52d4310a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-workouts\" }\nconst _hoisted_2 = { class: \"desktop-display\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workouts-display\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"donut-display\"\n}\nconst _hoisted_5 = { class: \"mobile-display\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"donut-display\"\n}\n\nimport { computed, toRefs } from 'vue'\n\n import CalendarWorkout from '@/components/Dashboard/UserCalendar/CalendarWorkout.vue'\n import CalendarWorkoutsChart from '@/components/Dashboard/UserCalendar/CalendarWorkoutsChart.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getSportColor, getSportLabel, sportIdColors } from '@/utils/sports'\n import { getDonutDatasets } from '@/utils/workouts'\n\n interface Props {\n displayHARecord: boolean\n workouts: IWorkout[]\n sports: ISport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkouts',\n props: {\n displayHARecord: { type: Boolean },\n workouts: null,\n sports: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n displayHARecord: boolean\n workouts: IWorkout[]\n sports: ISport[]\n }\n\n \n\n const { displayHARecord, workouts, sports } = toRefs(props)\n const chartDatasets = computed(() => getDonutDatasets(props.workouts))\n const colors = computed(() => sportIdColors(props.sports))\n const displayedWorkoutCount = 6\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(workouts).length <= displayedWorkoutCount)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts).slice(0, displayedWorkoutCount), (workout, index) => {\n return (_openBlock(), _createBlock(CalendarWorkout, {\n key: index,\n displayHARecord: _unref(displayHARecord),\n workout: workout,\n sportLabel: _unref(getSportLabel)(workout, _unref(sports)),\n sportColor: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"displayHARecord\", \"workout\", \"sportLabel\", \"sportColor\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(CalendarWorkoutsChart, {\n workouts: _unref(workouts),\n sports: _unref(sports),\n datasets: _unref(chartDatasets),\n colors: _unref(colors)\n }, null, 8, [\"workouts\", \"sports\", \"datasets\", \"colors\"])\n ]))\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n (_unref(workouts).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(CalendarWorkoutsChart, {\n workouts: _unref(workouts),\n sports: _unref(sports),\n datasets: _unref(chartDatasets),\n colors: _unref(colors)\n }, null, 8, [\"workouts\", \"sports\", \"datasets\", \"colors\"])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkouts.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkouts.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkouts.vue?vue&type=style&index=0&id=5aab7455&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-cells\" }\nconst _hoisted_2 = { class: \"calendar-cell-day\" }\n\nimport { addDays, format, isSameDay, isSameMonth, isToday } from 'date-fns'\n import { Ref, ref, toRefs, watch, onMounted } from 'vue'\n\n import CalendarWorkouts from '@/components/Dashboard/UserCalendar/CalendarWorkouts.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getDateWithTZ } from '@/utils/dates'\n\n interface Props {\n currentDay: Date\n displayHARecord: boolean\n endDate: Date\n sports: ISport[]\n startDate: Date\n timezone: string\n weekStartingMonday: boolean\n workouts: IWorkout[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarCells',\n props: {\n currentDay: null,\n displayHARecord: { type: Boolean },\n endDate: null,\n sports: null,\n startDate: null,\n timezone: null,\n weekStartingMonday: { type: Boolean },\n workouts: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n currentDay: Date\n displayHARecord: boolean\n endDate: Date\n sports: ISport[]\n startDate: Date\n timezone: string\n weekStartingMonday: boolean\n workouts: IWorkout[]\n }\n\n \n\n const {\n currentDay,\n displayHARecord,\n endDate,\n sports,\n startDate,\n timezone,\n weekStartingMonday,\n workouts,\n } = toRefs(props)\n const rows: Ref = ref([])\n\n onMounted(() => getDays())\n\n function getDays() {\n rows.value = []\n let day = startDate.value\n while (day <= endDate.value) {\n const days: Date[] = []\n for (let i = 0; i < 7; i++) {\n days.push(day)\n day = addDays(day, 1)\n }\n rows.value.push(days)\n }\n }\n function isWeekEnd(day: number): boolean {\n return weekStartingMonday.value\n ? [5, 6].includes(day)\n : [0, 6].includes(day)\n }\n function filterWorkouts(day: Date, workouts: IWorkout[]) {\n if (workouts) {\n return workouts\n .filter((workout) =>\n isSameDay(getDateWithTZ(workout.workout_date, timezone.value), day)\n )\n .reverse()\n }\n return []\n }\n\n watch(\n () => props.currentDay,\n () => getDays()\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(rows.value, (row, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"calendar-row\",\n key: index\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(row, (day, i) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"calendar-cell\", {\n 'disabled-cell': !_unref(isSameMonth)(day, _unref(currentDay)),\n 'week-end': isWeekEnd(i),\n today: _unref(isToday)(day),\n }]),\n key: i\n }, [\n _createVNode(CalendarWorkouts, {\n workouts: filterWorkouts(day, _unref(workouts)),\n sports: _unref(sports),\n displayHARecord: _unref(displayHARecord)\n }, null, 8, [\"workouts\", \"sports\", \"displayHARecord\"]),\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_unref(format)(day, 'd')), 1)\n ], 2))\n }), 128))\n ]))\n }), 128))\n ]))\n}\n}\n\n})","import script from \"./CalendarCells.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarCells.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarCells.vue?vue&type=style&index=0&id=34b99f0e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-days\" }\n\nimport { Locale, format, addDays } from 'date-fns'\n\n interface Props {\n startDate: Date\n localeOptions: Locale\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarDays',\n props: {\n startDate: null,\n localeOptions: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n startDate: Date\n localeOptions: Locale\n }\n\n \n\n const days = []\n for (let i = 0; i < 7; i++) {\n days.push(addDays(props.startDate, i))\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(days, (day, index) => {\n return _createElementVNode(\"div\", {\n class: \"calendar-day\",\n key: index\n }, _toDisplayString(_unref(format)(day, 'EEE', { locale: __props.localeOptions })), 1)\n }), 64))\n ]))\n}\n}\n\n})","import script from \"./CalendarDays.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarDays.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarDays.vue?vue&type=style&index=0&id=4f3dc99e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, unref as _unref, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-header\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\nconst _hoisted_4 = { class: \"calendar-month\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_6 = [\n _hoisted_5\n]\n\nimport { Locale, format } from 'date-fns'\n import { toRefs } from 'vue'\n\n interface Props {\n day: Date\n localeOptions: Locale\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarHeader',\n props: {\n day: null,\n localeOptions: null\n },\n emits: ['displayNextMonth', 'displayPreviousMonth'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n day: Date\n localeOptions: Locale\n }\n\n \n\n \n\n const { day, localeOptions } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"calendar-arrow calendar-arrow-left\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('displayPreviousMonth')))\n }, _hoisted_3),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(format)(_unref(day), 'MMM yyyy', { locale: _unref(localeOptions) })), 1)\n ]),\n _createElementVNode(\"div\", {\n class: \"calendar-arrow calendar-arrow-right\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('displayNextMonth')))\n }, _hoisted_6)\n ]))\n}\n}\n\n})","import script from \"./CalendarHeader.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarHeader.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarHeader.vue?vue&type=style&index=0&id=79a65a70&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-calendar\" }\nconst _hoisted_2 = { class: \"calendar-card box\" }\n\nimport { Locale, addMonths, format, subMonths } from 'date-fns'\n import { ComputedRef, computed, ref, toRefs, onBeforeMount } from 'vue'\n\n import CalendarCells from '@/components/Dashboard/UserCalendar/CalendarCells.vue'\n import CalendarDays from '@/components/Dashboard/UserCalendar/CalendarDays.vue'\n import CalendarHeader from '@/components/Dashboard/UserCalendar/CalendarHeader.vue'\n import { ROOT_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkout, TWorkoutsPayload } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { getCalendarStartAndEnd } from '@/utils/dates'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const { sports, user } = toRefs(props)\n const dateFormat = 'yyyy-MM-dd'\n const day = ref(new Date())\n const calendarDates = ref(getCalendarStartAndEnd(day.value, props.user.weekm))\n const calendarWorkouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.CALENDAR_WORKOUTS]\n )\n const localeOptions: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LOCALE]\n )\n\n onBeforeMount(() => getCalendarWorkouts())\n\n function getCalendarWorkouts() {\n calendarDates.value = getCalendarStartAndEnd(day.value, props.user.weekm)\n const apiParams: TWorkoutsPayload = {\n from: format(calendarDates.value.start, dateFormat),\n to: format(calendarDates.value.end, dateFormat),\n page: 1,\n per_page: 100,\n ...defaultOrder,\n }\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_CALENDAR_WORKOUTS, apiParams)\n }\n function displayNextMonth() {\n day.value = addMonths(day.value, 1)\n getCalendarWorkouts()\n }\n function displayPreviousMonth() {\n day.value = subMonths(day.value, 1)\n getCalendarWorkouts()\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(CalendarHeader, {\n day: day.value,\n \"locale-options\": _unref(localeOptions),\n onDisplayNextMonth: displayNextMonth,\n onDisplayPreviousMonth: displayPreviousMonth\n }, null, 8, [\"day\", \"locale-options\"]),\n _createVNode(CalendarDays, {\n \"start-date\": calendarDates.value.start,\n \"locale-options\": _unref(localeOptions)\n }, null, 8, [\"start-date\", \"locale-options\"]),\n _createVNode(CalendarCells, {\n currentDay: day.value,\n displayHARecord: _unref(user).display_ascent,\n \"end-date\": calendarDates.value.end,\n sports: _unref(sports),\n \"start-date\": calendarDates.value.start,\n timezone: _unref(user).timezone,\n workouts: _unref(calendarWorkouts),\n weekStartingMonday: _unref(user).weekm\n }, null, 8, [\"currentDay\", \"displayHARecord\", \"end-date\", \"sports\", \"start-date\", \"timezone\", \"workouts\", \"weekStartingMonday\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=3e7444d9&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1bcddc12\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"user-month-stats\" }\n\nimport { endOfMonth, startOfMonth } from 'date-fns'\n import { toRefs } from 'vue'\n\n import StatChart from '@/components/Common/StatsChart/index.vue'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n\n interface Props {\n sports: ISport[]\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserMonthStats',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IUserProfile\n }\n\n \n\n const { sports, user } = toRefs(props)\n const date = new Date()\n const chartParams = {\n duration: 'week',\n start: startOfMonth(date),\n end: endOfMonth(date),\n }\n const selectedSportIds = props.sports.map((sport) => sport.id)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('dashboard.THIS_MONTH')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(StatChart, {\n sports: _unref(sports),\n user: _unref(user),\n \"chart-params\": chartParams,\n \"displayed-sport-ids\": _unref(selectedSportIds),\n \"hide-chart-if-no-data\": true\n }, null, 8, [\"sports\", \"user\", \"displayed-sport-ids\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./UserMonthStats.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserMonthStats.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserMonthStats.vue?vue&type=style&index=0&id=1bcddc12&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1bcddc12\"]])\n\nexport default __exports__","import createI18n from '@/i18n'\nimport { ITranslatedSport } from '@/types/sports'\nimport { TUnit } from '@/types/units'\nimport { ICardRecord, IRecord, IRecordsBySports } from '@/types/workouts'\nimport { formatDate, getDateFormat } from '@/utils/dates'\nimport { convertDistance, units } from '@/utils/units'\n\nconst { locale } = createI18n.global\n\nexport const formatRecord = (\n record: IRecord,\n tz: string,\n useImperialUnits: boolean,\n date_format: string\n): Record => {\n const distanceUnitFrom: TUnit = 'km'\n const distanceUnitTo: TUnit = useImperialUnits\n ? units[distanceUnitFrom].defaultTarget\n : distanceUnitFrom\n const ascentUnitFrom: TUnit = 'm'\n const ascentUnitTo: TUnit = useImperialUnits\n ? units[ascentUnitFrom].defaultTarget\n : ascentUnitFrom\n let value\n switch (record.record_type) {\n case 'AS':\n case 'MS':\n value = `${convertDistance(\n +record.value,\n distanceUnitFrom,\n distanceUnitTo,\n 2\n )} ${distanceUnitTo}/h`\n break\n case 'FD':\n value = `${convertDistance(\n +record.value,\n distanceUnitFrom,\n distanceUnitTo,\n 3\n )} ${distanceUnitTo}`\n break\n case 'HA':\n value = `${convertDistance(\n +record.value,\n ascentUnitFrom,\n ascentUnitTo,\n 2\n )} ${ascentUnitTo}`\n break\n case 'LD':\n value = record.value\n break\n default:\n throw new Error(\n `Invalid record type, expected: \"AS\", \"FD\", \"HA\", \"LD\", \"MD\", got: \"${record.record_type}\"`\n )\n }\n return {\n workout_date: formatDate(record.workout_date, tz, date_format, false),\n workout_id: record.workout_id,\n id: record.id,\n record_type: record.record_type,\n value: value,\n }\n}\n\nexport const sortRecords = (a: ICardRecord, b: ICardRecord): number => {\n const recordALabel = a.label.toLowerCase()\n const recordBLabel = b.label.toLowerCase()\n return recordALabel > recordBLabel ? 1 : recordALabel < recordBLabel ? -1 : 0\n}\n\nexport const getRecordsBySports = (\n records: IRecord[],\n translatedSports: ITranslatedSport[],\n tz: string,\n useImperialUnits: boolean,\n display_ascent: boolean,\n date_format: string\n): IRecordsBySports => {\n date_format = getDateFormat(date_format, locale.value)\n return records\n .filter((r) => (display_ascent ? true : r.record_type !== 'HA'))\n .reduce((sportList: IRecordsBySports, record) => {\n const sport = translatedSports.find((s) => s.id === record.sport_id)\n if (sport && sport.label) {\n if (sportList[sport.translatedLabel] === void 0) {\n sportList[sport.translatedLabel] = {\n label: sport.label,\n color: sport.color,\n records: [],\n }\n }\n sportList[sport.translatedLabel].records.push(\n formatRecord(record, tz, useImperialUnits, date_format)\n )\n }\n return sportList\n }, {})\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8d17c606\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"records-card\" }\nconst _hoisted_2 = { class: \"record-type\" }\nconst _hoisted_3 = { class: \"record-value\" }\nconst _hoisted_4 = { class: \"record-date\" }\n\nimport { toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ICardRecord, IRecord, IRecordsBySports } from '@/types/workouts'\n import { sortRecords } from '@/utils/records'\n\n interface Props {\n records: IRecordsBySports\n sportTranslatedLabel: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'RecordsCard',\n props: {\n records: null,\n sportTranslatedLabel: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n records: IRecordsBySports\n sportTranslatedLabel: string\n }\n\n \n\n const { records, sportTranslatedLabel } = toRefs(props)\n\n const { t } = useI18n()\n\n function getTranslatedRecords(records: IRecord[]): ICardRecord[] {\n const translatedRecords: ICardRecord[] = []\n records.map((record) => {\n translatedRecords.push({\n ...record,\n label: t(`workouts.RECORD_${record.record_type}`),\n })\n })\n return translatedRecords.sort(sortRecords)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(records).label,\n color: _unref(records).color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createTextVNode(\" \" + _toDisplayString(_unref(sportTranslatedLabel)), 1)\n ]),\n content: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(getTranslatedRecords(_unref(records).records), (record) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"record\",\n key: record.id\n }, [\n _createElementVNode(\"span\", _hoisted_2, _toDisplayString(record.label), 1),\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(record.value), 1),\n _createElementVNode(\"span\", _hoisted_4, [\n _createVNode(_component_router_link, {\n to: {\n name: 'Workout',\n params: { workoutId: record.workout_id },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(record.workout_date), 1)\n ]),\n _: 2\n }, 1032, [\"to\"])\n ])\n ]))\n }), 128))\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./RecordsCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RecordsCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./RecordsCard.vue?vue&type=style&index=0&id=8d17c606&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8d17c606\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-f0c85cb8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"user-records-section\" }\nconst _hoisted_2 = { class: \"section-title\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy custom-fa-small\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { class: \"user-records\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"no-records\"\n}\n\nimport { computed } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import RecordsCard from '@/components/Dashboard/UserRecords/RecordsCard.vue'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { getRecordsBySports } from '@/utils/records'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const recordsBySport = computed(() =>\n getRecordsBySports(\n props.user.records,\n translateSports(props.sports, t),\n props.user.timezone,\n props.user.imperial_units,\n props.user.display_ascent,\n props.user.date_format\n )\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.RECORD', 2)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n (Object.keys(_unref(recordsBySport)).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('workouts.NO_RECORDS')), 1))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(Object.keys(_unref(recordsBySport)).sort(), (sportTranslatedLabel) => {\n return (_openBlock(), _createBlock(RecordsCard, {\n sportTranslatedLabel: sportTranslatedLabel,\n records: _unref(recordsBySport)[sportTranslatedLabel],\n key: sportTranslatedLabel,\n useImperialUnits: __props.user.imperial_units\n }, null, 8, [\"sportTranslatedLabel\", \"records\", \"useImperialUnits\"]))\n }), 128))\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=f0c85cb8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-f0c85cb8\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-stats\" }\n\nimport { ComputedRef, computed, toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import StatCard from '@/components/Common/StatCard.vue'\n import { TUnit } from '@/types/units'\n import { IAuthUserProfile } from '@/types/user'\n import { convertDistance, units } from '@/utils/units'\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const { user } = toRefs(props)\n const userTotalDuration: ComputedRef = computed(\n () => props.user.total_duration\n )\n const totalDuration = computed(() => get_duration(userTotalDuration))\n const distanceUnitFrom: TUnit = 'km'\n const distanceUnitTo: TUnit = user.value.imperial_units\n ? units[distanceUnitFrom].defaultTarget\n : distanceUnitFrom\n const totalDistance: ComputedRef = computed(() =>\n user.value.imperial_units\n ? convertDistance(user.value.total_distance, distanceUnitFrom, distanceUnitTo, 2)\n : parseFloat(user.value.total_distance.toFixed(2)))\n const ascentUnitFrom: TUnit = 'm'\n const ascentUnitTo: TUnit = user.value.imperial_units\n ? units[ascentUnitFrom].defaultTarget\n : ascentUnitFrom\n const totalAscent: ComputedRef = computed(() =>\n user.value.imperial_units\n ? convertDistance(user.value.total_ascent, ascentUnitFrom, ascentUnitTo, 2)\n : parseFloat(user.value.total_ascent.toFixed(2)))\n\n\n function get_duration(total_duration: ComputedRef) {\n const duration = total_duration.value.match(/day/g)\n ? total_duration.value.split(', ')[1]\n : total_duration.value\n return {\n days: total_duration.value.match(/day/g)\n ? `${total_duration.value.split(' ')[0]} ${\n total_duration.value.match(/days/g)\n ? t('common.DAY', 2)\n : t('common.DAY', 1)\n }`\n : `0 ${t('common.DAY', 2)},`,\n duration: `${duration.split(':')[0]}h ${duration.split(':')[1]}min`,\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatCard, {\n icon: \"calendar\",\n value: _unref(user).nb_workouts,\n text: _ctx.$t('workouts.WORKOUT', _unref(user).nb_workouts)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"road\",\n value: _unref(totalDistance),\n text: _unref(distanceUnitTo) === 'mi' ? 'miles' : _unref(distanceUnitTo)\n }, null, 8, [\"value\", \"text\"]),\n (_unref(user).display_ascent)\n ? (_openBlock(), _createBlock(StatCard, {\n key: 0,\n icon: \"location-arrow\",\n value: _unref(totalAscent),\n text: _unref(ascentUnitTo) === 'ft' ? 'feet' : _unref(ascentUnitTo)\n }, null, 8, [\"value\", \"text\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(StatCard, {\n icon: \"clock-o\",\n value: _unref(totalDuration).days,\n text: _unref(totalDuration).duration\n }, null, 8, [\"value\", \"text\"]),\n (!_unref(user).display_ascent)\n ? (_openBlock(), _createBlock(StatCard, {\n key: 1,\n icon: \"tags\",\n value: _unref(user).nb_sports,\n text: _ctx.$t('workouts.SPORT', _unref(user).nb_sports)\n }, null, 8, [\"value\", \"text\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=22dcb990&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4c0893c1\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"dashboard\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container mobile-menu\" }\nconst _hoisted_3 = { class: \"box\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-calendar\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_5 = [\n _hoisted_4\n]\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-bar-chart\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = [\n _hoisted_6\n]\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-map-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_9 = [\n _hoisted_8\n]\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = [\n _hoisted_10\n]\nconst _hoisted_12 = { class: \"container\" }\nconst _hoisted_13 = { class: \"container dashboard-container\" }\nconst _hoisted_14 = { class: \"left-container dashboard-sub-container\" }\nconst _hoisted_15 = { class: \"right-container dashboard-sub-container\" }\nconst _hoisted_16 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\nconst _hoisted_17 = {\n key: 1,\n class: \"app-loading\"\n}\n\nimport { ComputedRef, Ref, computed, onBeforeMount, ref } from 'vue'\n\n import Timeline from '@/components/Dashboard/Timeline.vue'\n import UserCalendar from '@/components/Dashboard/UserCalendar/index.vue'\n import UserMonthStats from '@/components/Dashboard/UserMonthStats.vue'\n import UserRecords from '@/components/Dashboard/UserRecords/index.vue'\n import UserStatsCards from '@/components/Dashboard/UserStatsCards/index.vue'\n import { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Dashboard',\n setup(__props) {\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const isSelected: Ref = ref('calendar')\n\n onBeforeMount(() => store.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE))\n\n function updateDisplayColumn(target: string) {\n isSelected.value = target\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Loader = _resolveComponent(\"Loader\")!\n\n return (_unref(authUser).username && _unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'calendar' }]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (updateDisplayColumn('calendar')))\n }, _hoisted_5, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'chart' }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayColumn('chart')))\n }, _hoisted_7, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'timeline' }]),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (updateDisplayColumn('timeline')))\n }, _hoisted_9, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'records' }]),\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateDisplayColumn('records')))\n }, _hoisted_11, 2)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createVNode(UserStatsCards, { user: _unref(authUser) }, null, 8, [\"user\"])\n ]),\n _createElementVNode(\"div\", _hoisted_13, [\n _createElementVNode(\"div\", _hoisted_14, [\n _createVNode(UserMonthStats, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'chart') })\n }, null, 8, [\"sports\", \"user\", \"class\"]),\n _createVNode(UserRecords, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'records') })\n }, null, 8, [\"sports\", \"user\", \"class\"])\n ]),\n _createElementVNode(\"div\", _hoisted_15, [\n _createVNode(UserCalendar, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'calendar') })\n }, null, 8, [\"sports\", \"user\", \"class\"]),\n _createVNode(Timeline, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'timeline') })\n }, null, 8, [\"sports\", \"user\", \"class\"])\n ])\n ]),\n _hoisted_16\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createVNode(_component_Loader)\n ]))\n}\n}\n\n})","import script from \"./Dashboard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Dashboard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Dashboard.vue?vue&type=style&index=0&id=4c0893c1&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4c0893c1\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"not-found view\" }\n\nimport NotFound from '@/components/Common/NotFound.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'NotFoundView',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(NotFound)\n ]))\n}\n}\n\n})","import script from \"./NotFoundView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NotFoundView.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6a38125b\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"loginOrRegister\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = { class: \"container-sub\" }\nconst _hoisted_4 = { class: \"container-sub\" }\n\nimport { toRefs } from 'vue'\n\n import BikePic from '@/components/BikePic.vue'\n import LoginOrRegisterForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'LoginOrRegister',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(BikePic)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(LoginOrRegisterForm, { action: _unref(action) }, null, 8, [\"action\"])\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./LoginOrRegister.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./LoginOrRegister.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./LoginOrRegister.vue?vue&type=style&index=0&id=6a38125b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6a38125b\"]])\n\nexport default __exports__","import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'\n\nimport AdminApplication from '@/components/Administration/AdminApplication.vue'\nimport AdminMenu from '@/components/Administration/AdminMenu.vue'\nimport AdminSports from '@/components/Administration/AdminSports.vue'\nimport AdminUsers from '@/components/Administration/AdminUsers.vue'\nimport Profile from '@/components/User/ProfileDisplay/index.vue'\nimport UserInfos from '@/components/User/ProfileDisplay/UserInfos.vue'\nimport UserPreferences from '@/components/User/ProfileDisplay/UserPreferences.vue'\nimport ProfileEdition from '@/components/User/ProfileEdition/index.vue'\nimport UserAccountEdition from '@/components/User/ProfileEdition/UserAccountEdition.vue'\nimport UserInfosEdition from '@/components/User/ProfileEdition/UserInfosEdition.vue'\nimport UserPictureEdition from '@/components/User/ProfileEdition/UserPictureEdition.vue'\nimport UserPreferencesEdition from '@/components/User/ProfileEdition/UserPreferencesEdition.vue'\nimport AddUserApp from '@/components/User/UserApps/AddUserApp.vue'\nimport AuthorizeUserApp from '@/components/User/UserApps/AuthorizeUserApp.vue'\nimport UserApps from '@/components/User/UserApps/index.vue'\nimport UserApp from '@/components/User/UserApps/UserApp.vue'\nimport UserAppsList from '@/components/User/UserApps/UserAppsList.vue'\nimport UserSportPreferences from '@/components/User/UserSportPreferences.vue'\nimport store from '@/store'\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport AboutView from '@/views/AboutView.vue'\nimport Dashboard from '@/views/Dashboard.vue'\nimport NotFoundView from '@/views/NotFoundView.vue'\nimport LoginOrRegister from '@/views/user/LoginOrRegister.vue'\n\nconst getTabFromPath = (path: string): string => {\n const regex = /(\\/profile)(\\/edit)*(\\/*)/\n const tag = path.replace(regex, '').toUpperCase()\n return tag === '' ? 'PROFILE' : tag.toUpperCase()\n}\n\nconst routes: Array = [\n {\n path: '/',\n name: 'Dashboard',\n component: Dashboard,\n },\n {\n path: '/login',\n name: 'Login',\n component: LoginOrRegister,\n props: { action: 'login' },\n },\n {\n path: '/register',\n name: 'Register',\n component: LoginOrRegister,\n props: { action: 'register' },\n },\n {\n path: '/account-confirmation',\n name: 'AccountConfirmation',\n component: () =>\n import(\n /* webpackChunkName: 'profile' */ '@/views/user/AccountConfirmationView.vue'\n ),\n },\n {\n path: '/account-confirmation/resend',\n name: 'AccountConfirmationResend',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/AccountConfirmationResendView.vue'\n ),\n props: { action: 'account-confirmation-resend' },\n },\n {\n path: '/account-confirmation/email-sent',\n name: 'AccountConfirmationEmailSend',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/AccountConfirmationResendView.vue'\n ),\n props: { action: 'email-sent' },\n },\n {\n path: '/password-reset/sent',\n name: 'PasswordEmailSent',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'request-sent' },\n },\n {\n path: '/password-reset/request',\n name: 'PasswordResetRequest',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'reset-request' },\n },\n {\n path: '/password-reset/password-updated',\n name: 'PasswordUpdated',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'password-updated' },\n },\n {\n path: '/password-reset',\n name: 'PasswordReset',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'reset' },\n },\n {\n path: '/email-update',\n name: 'EmailUpdate',\n component: () =>\n import(\n /* webpackChunkName: 'profile' */ '@/views/user/EmailUpdateView.vue'\n ),\n },\n {\n path: '/profile',\n name: 'Profile',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/ProfileView.vue'),\n children: [\n {\n path: '',\n name: 'UserProfile',\n component: Profile,\n props: (route) => ({\n tab: getTabFromPath(route.path),\n }),\n children: [\n {\n path: '',\n name: 'UserInfos',\n component: UserInfos,\n },\n {\n path: 'preferences',\n name: 'UserPreferences',\n component: UserPreferences,\n },\n {\n path: 'sports',\n name: 'UserSportPreferences',\n component: UserSportPreferences,\n props: { isEdition: false },\n },\n {\n path: 'apps',\n name: 'UserApps',\n component: UserApps,\n children: [\n {\n path: '',\n name: 'UserAppsList',\n component: UserAppsList,\n },\n {\n path: ':id',\n name: 'UserApp',\n component: UserApp,\n },\n {\n path: ':id/created',\n name: 'CreatedUserApp',\n component: UserApp,\n props: { afterCreation: true },\n },\n {\n path: 'new',\n name: 'AddUserApp',\n component: AddUserApp,\n },\n {\n path: 'authorize',\n name: 'AuthorizeUserApp',\n component: AuthorizeUserApp,\n },\n ],\n },\n ],\n },\n {\n path: 'edit',\n name: 'UserProfileEdition',\n component: ProfileEdition,\n props: (route) => ({\n tab: getTabFromPath(route.path),\n }),\n children: [\n {\n path: '',\n name: 'UserInfosEdition',\n component: UserInfosEdition,\n },\n {\n path: 'account',\n name: 'UserAccountEdition',\n component: UserAccountEdition,\n },\n {\n path: 'picture',\n name: 'UserPictureEdition',\n component: UserPictureEdition,\n },\n {\n path: 'preferences',\n name: 'UserPreferencesEdition',\n component: UserPreferencesEdition,\n },\n {\n path: 'sports',\n name: 'UserSportPreferencesEdition',\n component: UserSportPreferences,\n props: { isEdition: true },\n },\n ],\n },\n ],\n },\n {\n path: '/statistics',\n name: 'Statistics',\n component: () =>\n import(/* webpackChunkName: 'statistics' */ '@/views/StatisticsView.vue'),\n },\n {\n path: '/users/:username',\n name: 'User',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/UserView.vue'),\n },\n {\n path: '/workouts',\n name: 'Workouts',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/WorkoutsView.vue'\n ),\n },\n {\n path: '/workouts/:workoutId',\n name: 'Workout',\n component: () =>\n import(/* webpackChunkName: 'workouts' */ '@/views/workouts/Workout.vue'),\n props: { displaySegment: false },\n },\n {\n path: '/workouts/:workoutId/edit',\n name: 'EditWorkout',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/EditWorkout.vue'\n ),\n },\n {\n path: '/workouts/:workoutId/segment/:segmentId',\n name: 'WorkoutSegment',\n component: () =>\n import(/* webpackChunkName: 'workouts' */ '@/views/workouts/Workout.vue'),\n props: { displaySegment: true },\n },\n {\n path: '/workouts/add',\n name: 'AddWorkout',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/AddWorkout.vue'\n ),\n },\n {\n path: '/admin',\n name: 'Administration',\n component: () =>\n import(/* webpackChunkName: 'admin' */ '@/views/AdminView.vue'),\n children: [\n {\n path: '',\n name: 'AdministrationMenu',\n component: AdminMenu,\n },\n {\n path: 'application',\n name: 'ApplicationAdministration',\n component: AdminApplication,\n },\n {\n path: 'application/edit',\n name: 'ApplicationAdministrationEdition',\n component: AdminApplication,\n props: { edition: true },\n },\n {\n path: 'sports',\n name: 'SportsAdministration',\n component: AdminSports,\n },\n {\n path: 'users/:username',\n name: 'UserFromAdmin',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/UserView.vue'),\n props: { fromAdmin: true },\n },\n {\n path: 'users',\n name: 'UsersAdministration',\n component: AdminUsers,\n },\n ],\n },\n {\n path: '/about',\n name: 'About',\n component: AboutView,\n },\n {\n path: '/:pathMatch(.*)*',\n name: 'not-found',\n component: NotFoundView,\n },\n]\n\nconst router = createRouter({\n history: createWebHistory(process.env.BASE_URL),\n routes,\n})\n\nconst pathsWithoutAuthentication = [\n '/login',\n '/password-reset',\n '/password-reset/password-updated',\n '/password-reset/request',\n '/password-reset/sent',\n '/register',\n '/account-confirmation',\n '/account-confirmation/resend',\n '/account-confirmation/email-sent',\n]\n\nconst pathsWithoutChecks = ['/email-update', '/about']\n\nrouter.beforeEach((to, from, next) => {\n store\n .dispatch(AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER)\n .then(() => {\n if (pathsWithoutChecks.includes(to.path)) {\n return next()\n }\n if (\n store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED] &&\n pathsWithoutAuthentication.includes(to.path)\n ) {\n return next('/')\n }\n if (\n !store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED] &&\n !pathsWithoutAuthentication.includes(to.path)\n ) {\n const path =\n to.path === '/'\n ? { path: '/login' }\n : { path: '/login', query: { from: to.fullPath } }\n next(path)\n } else {\n next()\n }\n })\n .catch((error) => {\n console.error(error)\n next()\n })\n})\n\nexport default router\n","export enum AuthUserActions {\n CHECK_AUTH_USER = 'CHECK_AUTH_USER',\n CONFIRM_ACCOUNT = 'CONFIRM_ACCOUNT',\n CONFIRM_EMAIL = 'CONFIRM_EMAIL',\n DELETE_ACCOUNT = 'DELETE_ACCOUNT',\n DELETE_PICTURE = 'DELETE_PICTURE',\n GET_USER_PROFILE = 'GET_USER_PROFILE',\n LOGIN_OR_REGISTER = 'LOGIN_OR_REGISTER',\n LOGOUT = 'LOGOUT',\n SEND_PASSWORD_RESET_REQUEST = 'SEND_PASSWORD_RESET_REQUEST',\n RESEND_ACCOUNT_CONFIRMATION_EMAIL = 'RESEND_ACCOUNT_CONFIRMATION_EMAIL',\n RESET_USER_PASSWORD = 'RESET_USER_PASSWORD',\n RESET_USER_SPORT_PREFERENCES = 'RESET_USER_SPORT_PREFERENCES',\n UPDATE_USER_ACCOUNT = 'UPDATE_USER_ACCOUNT',\n UPDATE_USER_PICTURE = 'UPDATE_USER_PICTURE',\n UPDATE_USER_PROFILE = 'UPDATE_USER_PROFILE',\n UPDATE_USER_PREFERENCES = 'UPDATE_USER_PREFERENCES',\n UPDATE_USER_SPORT_PREFERENCES = 'UPDATE_USER_SPORT_PREFERENCES',\n}\n\nexport enum AuthUserGetters {\n AUTH_TOKEN = 'AUTH_TOKEN',\n AUTH_USER_PROFILE = 'AUTH_USER_PROFILE',\n IS_ADMIN = 'IS_ADMIN',\n IS_AUTHENTICATED = 'IS_AUTHENTICATED',\n IS_SUCCESS = 'IS_SUCCESS',\n IS_REGISTRATION_SUCCESS = 'IS_REGISTRATION_SUCCESS',\n USER_LOADING = 'USER_LOADING',\n}\n\nexport enum AuthUserMutations {\n CLEAR_AUTH_USER_TOKEN = 'CLEAR_AUTH_USER_TOKEN',\n UPDATE_AUTH_TOKEN = 'UPDATE_AUTH_TOKEN',\n UPDATE_AUTH_USER_PROFILE = 'UPDATE_AUTH_USER_PROFILE',\n UPDATE_IS_SUCCESS = 'UPDATE_USER_IS_SUCCESS',\n UPDATE_IS_REGISTRATION_SUCCESS = 'UPDATE_IS_REGISTRATION_SUCCESS',\n UPDATE_USER_LOADING = 'UPDATE_USER_LOADING',\n}\n","export enum OAuth2Actions {\n AUTHORIZE_CLIENT = 'AUTHORIZE_CLIENT',\n CREATE_CLIENT = 'CREATE_CLIENT',\n DELETE_CLIENT = 'DELETE_CLIENT',\n GET_CLIENTS = 'GET_CLIENTS',\n GET_CLIENT_BY_CLIENT_ID = 'GET_CLIENT_BY_CLIENT_ID',\n GET_CLIENT_BY_ID = 'GET_CLIENT_BY_ID',\n REVOKE_ALL_TOKENS = 'REVOKE_ALL_TOKENS',\n}\n\nexport enum OAuth2Getters {\n CLIENT = 'CLIENT',\n CLIENTS = 'CLIENTS',\n CLIENTS_PAGINATION = 'CLIENTS_PAGINATION',\n REVOCATION_SUCCESSFUL = 'REVOCATION_SUCCESSFUL',\n}\n\nexport enum OAuth2Mutations {\n EMPTY_CLIENT = 'EMPTY_CLIENT',\n SET_CLIENT = 'SET_CLIENT',\n SET_CLIENTS = 'SET_CLIENTS',\n SET_CLIENTS_PAGINATION = 'SET_CLIENTS_PAGINATION',\n SET_REVOCATION_SUCCESSFUL = 'SET_REVOCATION_SUCCESSFUL',\n}\n","export enum RootActions {\n GET_APPLICATION_CONFIG = 'GET_APPLICATION_CONFIG',\n GET_APPLICATION_STATS = 'GET_APPLICATION_STATS',\n UPDATE_APPLICATION_CONFIG = 'UPDATE_APPLICATION_CONFIG',\n UPDATE_APPLICATION_LANGUAGE = 'UPDATE_APPLICATION_LANGUAGE',\n}\n\nexport enum RootGetters {\n APP_CONFIG = 'APP_CONFIG',\n APP_LOADING = 'APP_LOADING',\n APP_STATS = 'APP_STATS',\n ERROR_MESSAGES = 'ERROR_MESSAGES',\n LANGUAGE = 'LANGUAGE',\n LOCALE = 'LOCALE', // date-fns\n}\n\nexport enum RootMutations {\n EMPTY_ERROR_MESSAGES = 'EMPTY_ERROR_MESSAGES',\n SET_ERROR_MESSAGES = 'SET_ERROR_MESSAGES',\n UPDATE_APPLICATION_CONFIG = 'UPDATE_APPLICATION_CONFIG',\n UPDATE_APPLICATION_LOADING = 'UPDATE_APPLICATION_LOADING',\n UPDATE_APPLICATION_STATS = 'UPDATE_APPLICATION_STATS',\n UPDATE_LANG = 'UPDATE_LANG',\n}\n","export enum SportsActions {\n GET_SPORTS = 'GET_SPORTS',\n UPDATE_SPORTS = 'UPDATE_SPORTS',\n}\n\nexport enum SportsGetters {\n SPORTS = 'SPORTS',\n}\n\nexport enum SportsMutation {\n SET_SPORTS = 'SET_SPORTS',\n}\n","export enum StatisticsActions {\n GET_USER_STATS = 'GET_USER_STATS',\n}\n\nexport enum StatisticsGetters {\n USER_STATS = 'USER_STATS',\n}\n\nexport enum StatisticsMutations {\n EMPTY_USER_STATS = 'EMPTY_USER_STATS',\n UPDATE_USER_STATS = 'UPDATE_USER_STATS',\n}\n","export enum UsersActions {\n EMPTY_USER = 'EMPTY_USER',\n EMPTY_USERS = 'EMPTY_USERS',\n GET_USER = 'GET_USER',\n GET_USERS = 'GET_USERS',\n UPDATE_USER = 'UPDATE_USER',\n DELETE_USER_ACCOUNT = 'DELETE_USER_ACCOUNT',\n}\n\nexport enum UsersGetters {\n USER = 'USER',\n USERS = 'USERS',\n USERS_IS_SUCCESS = 'USERS_IS_SUCCESS',\n USERS_LOADING = 'USERS_LOADING',\n USERS_PAGINATION = 'USERS_PAGINATION',\n}\n\nexport enum UsersMutations {\n UPDATE_USER = 'UPDATE_USER',\n UPDATE_USER_IN_USERS = 'UPDATE_USER_IN_USERS',\n UPDATE_USERS = 'UPDATE_USERS',\n UPDATE_USERS_LOADING = 'UPDATE_USERS_LOADING',\n UPDATE_USERS_PAGINATION = 'UPDATE_USERS_PAGINATION',\n UPDATE_IS_SUCCESS = 'UPDATE_IS_SUCCESS',\n}\n","import {\n AuthUserActions,\n AuthUserGetters,\n AuthUserMutations,\n} from '@/store/modules/authUser/enums'\nimport {\n OAuth2Actions,\n OAuth2Getters,\n OAuth2Mutations,\n} from '@/store/modules/oauth2/enums'\nimport {\n RootActions,\n RootGetters,\n RootMutations,\n} from '@/store/modules/root/enums'\nimport {\n SportsActions,\n SportsGetters,\n SportsMutation,\n} from '@/store/modules/sports/enums'\nimport {\n StatisticsActions,\n StatisticsGetters,\n StatisticsMutations,\n} from '@/store/modules/statistics/enums'\nimport {\n UsersActions,\n UsersGetters,\n UsersMutations,\n} from '@/store/modules/users/enums'\nimport {\n WorkoutsActions,\n WorkoutsGetters,\n WorkoutsMutations,\n} from '@/store/modules/workouts/enums'\n\nexport const ROOT_STORE = {\n ACTIONS: RootActions,\n GETTERS: RootGetters,\n MUTATIONS: RootMutations,\n}\n\nexport const SPORTS_STORE = {\n ACTIONS: SportsActions,\n GETTERS: SportsGetters,\n MUTATIONS: SportsMutation,\n}\n\nexport const STATS_STORE = {\n ACTIONS: StatisticsActions,\n GETTERS: StatisticsGetters,\n MUTATIONS: StatisticsMutations,\n}\n\nexport const AUTH_USER_STORE = {\n ACTIONS: AuthUserActions,\n GETTERS: AuthUserGetters,\n MUTATIONS: AuthUserMutations,\n}\nexport const OAUTH2_STORE = {\n ACTIONS: OAuth2Actions,\n GETTERS: OAuth2Getters,\n MUTATIONS: OAuth2Mutations,\n}\n\nexport const USERS_STORE = {\n ACTIONS: UsersActions,\n GETTERS: UsersGetters,\n MUTATIONS: UsersMutations,\n}\n\nexport const WORKOUTS_STORE = {\n ACTIONS: WorkoutsActions,\n GETTERS: WorkoutsGetters,\n MUTATIONS: WorkoutsMutations,\n}\n","import axios from 'axios'\n\nimport { pendingRequests, removeRequestIfPending } from '@/api/pending'\nimport { getApiUrl } from '@/utils'\n\nconst api = axios.create({\n baseURL: getApiUrl(),\n})\n\napi.interceptors.request.use(\n (config) => {\n const controller = new AbortController()\n config.signal = controller.signal\n const requestKey = removeRequestIfPending(config)\n pendingRequests.set(requestKey, controller)\n return config\n },\n (error) => Promise.reject(error)\n)\n\napi.interceptors.response.use(\n (response) => {\n removeRequestIfPending(response.config)\n return response\n },\n (error) => {\n if (error.message !== 'canceled') {\n removeRequestIfPending(error.response.config)\n }\n return Promise.reject(error)\n }\n)\n\nexport default api\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { IUsersActions, IUsersState } from '@/store/modules/users/types'\nimport { TPaginationPayload } from '@/types/api'\nimport { IAdminUserPayload, IUserDeletionPayload } from '@/types/user'\nimport { handleError } from '@/utils'\n\nexport const deleteUserAccount = (\n context:\n | ActionContext\n | ActionContext,\n payload: IUserDeletionPayload\n): void => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .delete(`users/${payload.username}`)\n .then((res) => {\n if (res.status === 204) {\n if (payload.fromAdmin) {\n router.push('/admin/users')\n } else {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.LOGOUT)\n .then(() => router.push('/'))\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree & IUsersActions = {\n [USERS_STORE.ACTIONS.EMPTY_USER](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USER, {})\n },\n [USERS_STORE.ACTIONS.EMPTY_USERS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS, [])\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION, {})\n },\n [USERS_STORE.ACTIONS.GET_USER](\n context: ActionContext,\n username: string\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, true)\n authApi\n .get(`users/${username}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER,\n res.data.data.users[0]\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.GET_USERS](\n context: ActionContext,\n payload: TPaginationPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, true)\n authApi\n .get('users', { params: payload })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USERS,\n res.data.data.users\n )\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION,\n res.data.pagination\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.UPDATE_USER](\n context: ActionContext,\n payload: IAdminUserPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n const data: Record = {}\n if (payload.admin !== undefined) {\n data.admin = payload.admin\n }\n if (payload.resetPassword) {\n data.reset_password = payload.resetPassword\n }\n if (payload.activate) {\n data.activate = payload.activate\n }\n if (payload.new_email !== undefined) {\n data.new_email = payload.new_email\n }\n authApi\n .patch(`users/${payload.username}`, data)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER_IN_USERS,\n res.data.data.users[0]\n )\n if (payload.resetPassword || payload.new_email) {\n context.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n }\n if (payload.activate || payload.new_email) {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER,\n res.data.data.users[0]\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.DELETE_USER_ACCOUNT](\n context: ActionContext,\n payload: IUserDeletionPayload\n ): void {\n deleteUserAccount(context, {\n username: payload.username,\n fromAdmin: true,\n })\n },\n}\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport api from '@/api/defaultApi'\nimport router from '@/router'\nimport {\n AUTH_USER_STORE,\n ROOT_STORE,\n SPORTS_STORE,\n STATS_STORE,\n USERS_STORE,\n WORKOUTS_STORE,\n} from '@/store/constants'\nimport {\n IAuthUserActions,\n IAuthUserState,\n} from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { deleteUserAccount } from '@/store/modules/users/actions'\nimport {\n ILoginOrRegisterData,\n IUserAccountPayload,\n IUserDeletionPayload,\n IUserAccountUpdatePayload,\n IUserEmailPayload,\n IUserPasswordResetPayload,\n IUserPayload,\n IUserPicturePayload,\n IUserPreferencesPayload,\n IUserSportPreferencesPayload,\n} from '@/types/user'\nimport { handleError } from '@/utils'\n\nconst removeAuthUserData = (\n context: ActionContext\n) => {\n localStorage.removeItem('authToken')\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(STATS_STORE.MUTATIONS.EMPTY_USER_STATS)\n context.commit(AUTH_USER_STORE.MUTATIONS.CLEAR_AUTH_USER_TOKEN)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS, [])\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUTS)\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n router.push('/login')\n}\n\nexport const actions: ActionTree &\n IAuthUserActions = {\n [AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER](\n context: ActionContext\n ): void {\n if (\n window.localStorage.authToken &&\n !context.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n ) {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN,\n window.localStorage.authToken\n )\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n }\n // after logout in another tab\n if (\n !window.localStorage.authToken &&\n context.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n ) {\n removeAuthUserData(context)\n }\n },\n [AUTH_USER_STORE.ACTIONS.CONFIRM_ACCOUNT](\n context: ActionContext,\n payload: IUserAccountUpdatePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/account/confirm', { token: payload.token })\n .then((res) => {\n if (res.data.status === 'success') {\n const token = res.data.auth_token\n window.localStorage.setItem('authToken', token)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN, token)\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n },\n [AUTH_USER_STORE.ACTIONS.CONFIRM_EMAIL](\n context: ActionContext,\n payload: IUserAccountUpdatePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n api\n .post('/auth/email/update', { token: payload.token })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n if (payload.refreshUser) {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => {\n return router.push('/profile/edit/account')\n })\n }\n router.push('/profile/edit/account')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n },\n [AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('auth/profile')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n if (res.data.data.language) {\n context.dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n res.data.data.language\n )\n }\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n removeAuthUserData(context)\n }\n })\n .catch((error) => {\n if (error.message !== 'canceled') {\n handleError(context, error)\n removeAuthUserData(context)\n }\n })\n },\n [AUTH_USER_STORE.ACTIONS.LOGIN_OR_REGISTER](\n context: ActionContext,\n data: ILoginOrRegisterData\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n false\n )\n api\n .post(`/auth/${data.actionType}`, data.formData)\n .then((res) => {\n if (res.data.status === 'success') {\n if (data.actionType === 'login') {\n const token = res.data.auth_token\n window.localStorage.setItem('authToken', token)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN, token)\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() =>\n router.push(\n typeof data.redirectUrl === 'string' ? data.redirectUrl : '/'\n )\n )\n } else {\n router\n .push('/login')\n .then(() =>\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n true\n )\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.LOGOUT](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .post('auth/logout')\n .then((res) => {\n if (res.data.status === 'success') {\n removeAuthUserData(context)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PROFILE](\n context: ActionContext,\n payload: IUserPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n router.push('/profile')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_ACCOUNT](\n context: ActionContext,\n payload: IUserAccountPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n authApi\n .patch('auth/profile/edit/account', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PREFERENCES](\n context: ActionContext,\n payload: IUserPreferencesPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit/preferences', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n context\n .dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n res.data.data.language\n )\n .then(() => router.push('/profile/preferences'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.RESET_USER_SPORT_PREFERENCES](\n context: ActionContext,\n sportId: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .delete(`auth/profile/reset/sports/${sportId}`)\n .then((res) => {\n if (res.status === 204) {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n })\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_SPORT_PREFERENCES](\n context: ActionContext,\n payload: IUserSportPreferencesPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit/sports', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n })\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PICTURE](\n context: ActionContext,\n payload: IUserPicturePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n if (!payload.picture) {\n throw new Error('No file part')\n }\n const form = new FormData()\n form.append('file', payload.picture)\n authApi\n .post('auth/picture', form, {\n headers: {\n 'content-type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/profile'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.DELETE_ACCOUNT](\n context: ActionContext,\n payload: IUserDeletionPayload\n ): void {\n deleteUserAccount(context, payload)\n },\n [AUTH_USER_STORE.ACTIONS.DELETE_PICTURE](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .delete(`auth/picture`)\n .then((res) => {\n if (res.status === 204) {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/profile'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.SEND_PASSWORD_RESET_REQUEST](\n context: ActionContext,\n payload: IUserEmailPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/password/reset-request', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/password-reset/sent')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL](\n context: ActionContext,\n payload: IUserEmailPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/account/resend-confirmation', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/account-confirmation/email-sent')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.RESET_USER_PASSWORD](\n context: ActionContext,\n payload: IUserPasswordResetPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/password/update', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/password-reset/password-updated')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport {\n IAuthUserGetters,\n IAuthUserState,\n} from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree &\n IAuthUserGetters = {\n [AUTH_USER_STORE.GETTERS.AUTH_TOKEN]: (state: IAuthUserState) => {\n return state.authToken\n },\n [AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]: (state: IAuthUserState) => {\n return state.authUserProfile\n },\n [AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]: (state: IAuthUserState) => {\n return state.authToken !== null\n },\n [AUTH_USER_STORE.GETTERS.IS_ADMIN]: (state: IAuthUserState) => {\n return state.authUserProfile && state.authUserProfile.admin\n },\n [AUTH_USER_STORE.GETTERS.IS_REGISTRATION_SUCCESS]: (\n state: IAuthUserState\n ) => {\n return state.isRegistrationSuccess\n },\n [AUTH_USER_STORE.GETTERS.IS_SUCCESS]: (state: IAuthUserState) => {\n return state.isSuccess\n },\n [AUTH_USER_STORE.GETTERS.USER_LOADING]: (state: IAuthUserState) => {\n return state.loading\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport {\n IAuthUserState,\n TAuthUserMutations,\n} from '@/store/modules/authUser/types'\nimport { IAuthUserProfile } from '@/types/user'\n\nexport const mutations: MutationTree & TAuthUserMutations = {\n [AUTH_USER_STORE.MUTATIONS.CLEAR_AUTH_USER_TOKEN](state: IAuthUserState) {\n state.authToken = null\n state.authUserProfile = {}\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN](\n state: IAuthUserState,\n authToken: string\n ) {\n state.authToken = authToken\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE](\n state: IAuthUserState,\n authUserProfile: IAuthUserProfile\n ) {\n state.authUserProfile = authUserProfile\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS](\n state: IAuthUserState,\n isRegistrationSuccess: boolean\n ) {\n state.isRegistrationSuccess = isRegistrationSuccess\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS](\n state: IAuthUserState,\n isSuccess: boolean\n ) {\n state.isSuccess = isSuccess\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING](\n state: IAuthUserState,\n loading: boolean\n ) {\n state.loading = loading\n },\n}\n","import { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IAuthUserProfile } from '@/types/user'\n\nexport const authUserState: IAuthUserState = {\n authToken: null,\n authUserProfile: {},\n isSuccess: false,\n isRegistrationSuccess: false,\n loading: false,\n}\n","import { Module } from 'vuex'\n\nimport { actions } from '@/store/modules/authUser/actions'\nimport { getters } from '@/store/modules/authUser/getters'\nimport { mutations } from '@/store/modules/authUser/mutations'\nimport { authUserState } from '@/store/modules/authUser/state'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst authUser: Module = {\n state: authUserState,\n actions,\n getters,\n mutations,\n}\n\nexport default authUser\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\nimport { IOAuth2Actions, IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IOauth2ClientsPayload,\n IOAuth2ClientPayload,\n IOAuth2ClientAuthorizePayload,\n} from '@/types/oauth'\nimport { handleError } from '@/utils'\n\nconst get_client = (\n context: ActionContext,\n url: string\n) => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get(url)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(OAUTH2_STORE.MUTATIONS.SET_CLIENT, res.data.data.client)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree & IOAuth2Actions = {\n [OAUTH2_STORE.ACTIONS.AUTHORIZE_CLIENT](\n context: ActionContext,\n payload: IOAuth2ClientAuthorizePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n const form = new FormData()\n form.set('client_id', payload.client_id)\n form.set('response_type', payload.response_type)\n form.set('scope', payload.scope)\n form.set('confirm', 'true')\n if (payload.state) {\n form.set('state', payload.state)\n }\n if (payload.code_challenge) {\n form.set('code_challenge', payload.code_challenge)\n }\n if (payload.code_challenge_method) {\n form.set('code_challenge_method', payload.code_challenge_method)\n }\n\n authApi\n .post('oauth/authorize', form, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.status == 200 && res.data.redirect_url) {\n window.location.href = res.data.redirect_url\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.CREATE_CLIENT](\n context: ActionContext,\n payload: IOAuth2ClientPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .post('oauth/apps', payload)\n .then((res) => {\n if (res.data.status === 'created') {\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENT,\n res.data.data.client\n )\n router.push(`/profile/apps/${res.data.data.client.id}/created`)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.DELETE_CLIENT](\n context: ActionContext,\n id: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .delete(`oauth/apps/${id}`)\n .then((res) => {\n if (res.status === 204) {\n context\n .dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENTS)\n .then(() => router.push('/profile/apps'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_CLIENT_ID](\n context: ActionContext,\n client_id: string\n ): void {\n get_client(context, `oauth/apps/${client_id}`)\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_ID](\n context: ActionContext,\n id: number\n ): void {\n get_client(context, `oauth/apps/${id}/by_id`)\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENTS](\n context: ActionContext,\n payload: IOauth2ClientsPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('oauth/apps', {\n params: payload,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENTS,\n res.data.data.clients\n )\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENTS_PAGINATION,\n res.data.pagination\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.REVOKE_ALL_TOKENS](\n context: ActionContext,\n id: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, false)\n authApi\n .post(`oauth/apps/${id}/revoke`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, true)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { OAUTH2_STORE } from '@/store/constants'\nimport { IOAuth2Getters, IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree & IOAuth2Getters = {\n [OAUTH2_STORE.GETTERS.CLIENT]: (state: IOAuth2State) => state.client,\n [OAUTH2_STORE.GETTERS.CLIENTS]: (state: IOAuth2State) => state.clients,\n [OAUTH2_STORE.GETTERS.CLIENTS_PAGINATION]: (state: IOAuth2State) =>\n state.pagination,\n [OAUTH2_STORE.GETTERS.REVOCATION_SUCCESSFUL]: (state: IOAuth2State) =>\n state.revocationSuccessful,\n}\n","import { MutationTree } from 'vuex'\n\nimport { OAUTH2_STORE } from '@/store/constants'\nimport { IOAuth2State, TOAuth2Mutations } from '@/store/modules/oauth2/types'\nimport { IPagination } from '@/types/api'\nimport { IOAuth2Client } from '@/types/oauth'\n\nexport const mutations: MutationTree & TOAuth2Mutations = {\n [OAUTH2_STORE.MUTATIONS.SET_CLIENT](\n state: IOAuth2State,\n client: IOAuth2Client\n ) {\n state.client = client\n },\n [OAUTH2_STORE.MUTATIONS.EMPTY_CLIENT](state: IOAuth2State) {\n state.client = {}\n },\n [OAUTH2_STORE.MUTATIONS.SET_CLIENTS](\n state: IOAuth2State,\n clients: IOAuth2Client[]\n ) {\n state.clients = clients\n },\n [OAUTH2_STORE.MUTATIONS.SET_CLIENTS_PAGINATION](\n state: IOAuth2State,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL](\n state: IOAuth2State,\n revocationSuccessful: boolean\n ) {\n state.revocationSuccessful = revocationSuccessful\n },\n}\n","import { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IPagination } from '@/types/api'\nimport { IOAuth2Client } from '@/types/oauth'\n\nexport const oAuth2State: IOAuth2State = {\n client: {},\n clients: [],\n pagination: {},\n revocationSuccessful: false,\n}\n","import { Module } from 'vuex'\n\nimport { actions } from '@/store/modules/oauth2/actions'\nimport { getters } from '@/store/modules/oauth2/getters'\nimport { mutations } from '@/store/modules/oauth2/mutations'\nimport { oAuth2State } from '@/store/modules/oauth2/state'\nimport { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst oauth2: Module = {\n state: oAuth2State,\n actions,\n getters,\n mutations,\n}\n\nexport default oauth2\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport createI18n from '@/i18n'\nimport router from '@/router'\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootActions, IRootState } from '@/store/modules/root/types'\nimport { TAppConfigForm } from '@/types/application'\nimport { handleError } from '@/utils'\n\nconst { locale } = createI18n.global\n\nexport const actions: ActionTree & IRootActions = {\n [ROOT_STORE.ACTIONS.GET_APPLICATION_CONFIG](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING, true)\n authApi\n .get('config')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG,\n res.data.data\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING, false)\n )\n },\n [ROOT_STORE.ACTIONS.GET_APPLICATION_STATS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('stats/all')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_STATS,\n res.data.data\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [ROOT_STORE.ACTIONS.UPDATE_APPLICATION_CONFIG](\n context: ActionContext,\n payload: TAppConfigForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .patch('config', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG,\n res.data.data\n )\n router.push('/admin/application')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE](\n context: ActionContext,\n language: string\n ): void {\n document.querySelector('html')?.setAttribute('lang', language)\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_LANG, language)\n locale.value = language\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootGetters, IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree & IRootGetters = {\n [ROOT_STORE.GETTERS.APP_CONFIG]: (state: IRootState) => {\n return state.application.config\n },\n [ROOT_STORE.GETTERS.APP_LOADING]: (state: IRootState) => {\n return state.appLoading\n },\n [ROOT_STORE.GETTERS.APP_STATS]: (state: IRootState) => {\n return state.application.statistics\n },\n [ROOT_STORE.GETTERS.ERROR_MESSAGES]: (state: IRootState) => {\n return state.errorMessages\n },\n [ROOT_STORE.GETTERS.LANGUAGE]: (state: IRootState) => {\n return state.language\n },\n [ROOT_STORE.GETTERS.LOCALE]: (state: IRootState) => {\n return state.locale\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootState, TRootMutations } from '@/store/modules/root/types'\nimport { TAppConfig, IAppStatistics } from '@/types/application'\nimport { localeFromLanguage } from '@/utils/locales'\n\nexport const mutations: MutationTree & TRootMutations = {\n [ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES](state: IRootState) {\n state.errorMessages = null\n },\n [ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES](\n state: IRootState,\n errorMessages: string\n ) {\n state.errorMessages = errorMessages\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG](\n state: IRootState,\n config: TAppConfig\n ) {\n state.application.config = config\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING](\n state: IRootState,\n loading: boolean\n ) {\n state.appLoading = loading\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_STATS](\n state: IRootState,\n statistics: IAppStatistics\n ) {\n state.application.statistics = statistics\n },\n [ROOT_STORE.MUTATIONS.UPDATE_LANG](state: IRootState, language: string) {\n state.language = language\n state.locale = localeFromLanguage[language]\n },\n}\n","import { enUS } from 'date-fns/locale'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { IApplication } from '@/types/application'\n\nexport const state: IRootState = {\n root: true,\n language: 'en',\n locale: enUS,\n errorMessages: null,\n application: {\n statistics: {\n sports: 0,\n uploads_dir_size: 0,\n users: 0,\n workouts: 0,\n },\n },\n appLoading: false,\n}\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport { AUTH_USER_STORE, ROOT_STORE, SPORTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsActions, ISportsState } from '@/store/modules/sports/types'\nimport { ISportPayload } from '@/types/sports'\nimport { handleError } from '@/utils'\n\nexport const actions: ActionTree & ISportsActions = {\n [SPORTS_STORE.ACTIONS.GET_SPORTS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('sports')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n SPORTS_STORE.MUTATIONS.SET_SPORTS,\n res.data.data.sports\n )\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [SPORTS_STORE.ACTIONS.UPDATE_SPORTS](\n context: ActionContext,\n payload: ISportPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .patch(`sports/${payload.id}`, { is_active: payload.isActive })\n .then((res) => {\n if (res.data.status === 'success') {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { SPORTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsGetters, ISportsState } from '@/store/modules/sports/types'\n\nexport const getters: GetterTree & ISportsGetters = {\n [SPORTS_STORE.GETTERS.SPORTS]: (state: ISportsState) => state.sports,\n}\n","import { MutationTree } from 'vuex'\n\nimport { SPORTS_STORE } from '@/store/constants'\nimport { ISportsState, TSportsMutations } from '@/store/modules/sports/types'\nimport { ISport } from '@/types/sports'\n\nexport const mutations: MutationTree & TSportsMutations = {\n [SPORTS_STORE.MUTATIONS.SET_SPORTS](state: ISportsState, sports: ISport[]) {\n state.sports = sports\n },\n}\n","import { ISportsState } from '@/store/modules/sports/types'\n\nexport const sportsState: ISportsState = {\n sports: [],\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/sports/actions'\nimport { getters } from '@/store/modules/sports/getters'\nimport { mutations } from '@/store/modules/sports/mutations'\nimport { sportsState } from '@/store/modules/sports/state'\nimport { ISportsState } from '@/store/modules/sports/types'\n\nconst sports: Module = {\n state: sportsState,\n actions,\n getters,\n mutations,\n}\n\nexport default sports\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport { STATS_STORE, ROOT_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IStatisticsActions,\n IStatisticsState,\n} from '@/store/modules/statistics/types'\nimport { IUserStatisticsPayload } from '@/types/statistics'\nimport { handleError } from '@/utils'\n\nexport const actions: ActionTree &\n IStatisticsActions = {\n [STATS_STORE.ACTIONS.GET_USER_STATS](\n context: ActionContext,\n payload: IUserStatisticsPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get(`stats/${payload.username}/${payload.filterType}`, {\n params: payload.params,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n STATS_STORE.MUTATIONS.UPDATE_USER_STATS,\n res.data.data.statistics\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { STATS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IStatisticsGetters,\n IStatisticsState,\n} from '@/store/modules/statistics/types'\n\nexport const getters: GetterTree &\n IStatisticsGetters = {\n [STATS_STORE.GETTERS.USER_STATS]: (state: IStatisticsState) => {\n return state.statistics\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { STATS_STORE } from '@/store/constants'\nimport {\n IStatisticsState,\n TStatisticsMutations,\n} from '@/store/modules/statistics/types'\nimport { TStatisticsFromApi } from '@/types/statistics'\n\nexport const mutations: MutationTree & TStatisticsMutations =\n {\n [STATS_STORE.MUTATIONS.UPDATE_USER_STATS](\n state: IStatisticsState,\n statistics: TStatisticsFromApi\n ) {\n state.statistics = statistics\n },\n [STATS_STORE.MUTATIONS.EMPTY_USER_STATS](state: IStatisticsState) {\n state.statistics = {}\n },\n }\n","import { IStatisticsState } from '@/store/modules/statistics/types'\nimport { TStatisticsFromApi } from '@/types/statistics'\n\nexport const statisticsState: IStatisticsState = {\n statistics: {},\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/statistics/actions'\nimport { getters } from '@/store/modules/statistics/getters'\nimport { mutations } from '@/store/modules/statistics/mutations'\nimport { statisticsState } from '@/store/modules/statistics/state'\nimport { IStatisticsState } from '@/store/modules/statistics/types'\n\nconst statistics: Module = {\n state: statisticsState,\n actions,\n getters,\n mutations,\n}\n\nexport default statistics\n","import { GetterTree } from 'vuex'\n\nimport { USERS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { IUsersGetters, IUsersState } from '@/store/modules/users/types'\n\nexport const getters: GetterTree & IUsersGetters = {\n [USERS_STORE.GETTERS.USER]: (state: IUsersState) => {\n return state.user\n },\n [USERS_STORE.GETTERS.USERS]: (state: IUsersState) => {\n return state.users\n },\n [USERS_STORE.GETTERS.USERS_IS_SUCCESS]: (state: IUsersState) => {\n return state.isSuccess\n },\n [USERS_STORE.GETTERS.USERS_LOADING]: (state: IUsersState) => {\n return state.loading\n },\n [USERS_STORE.GETTERS.USERS_PAGINATION]: (state: IUsersState) => {\n return state.pagination\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { USERS_STORE } from '@/store/constants'\nimport { IUsersState, TUsersMutations } from '@/store/modules/users/types'\nimport { IPagination } from '@/types/api'\nimport { IUserProfile } from '@/types/user'\n\nexport const mutations: MutationTree & TUsersMutations = {\n [USERS_STORE.MUTATIONS.UPDATE_USER](state: IUsersState, user: IUserProfile) {\n state.user = user\n },\n [USERS_STORE.MUTATIONS.UPDATE_USER_IN_USERS](\n state: IUsersState,\n updatedUser: IUserProfile\n ) {\n state.users = state.users.map((user) => {\n if (user.username === updatedUser.username) {\n return updatedUser\n }\n return user\n })\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS](\n state: IUsersState,\n users: IUserProfile[]\n ) {\n state.users = users\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING](\n state: IUsersState,\n loading: boolean\n ) {\n state.loading = loading\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION](\n state: IUsersState,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS](\n state: IUsersState,\n isSuccess: boolean\n ) {\n state.isSuccess = isSuccess\n },\n}\n","import { IUsersState } from '@/store/modules/users/types'\nimport { IPagination } from '@/types/api'\nimport { IUserProfile } from '@/types/user'\n\nexport const usersState: IUsersState = {\n user: {},\n users: [],\n loading: false,\n isSuccess: false,\n pagination: {},\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/users/actions'\nimport { getters } from '@/store/modules/users/getters'\nimport { mutations } from '@/store/modules/users/mutations'\nimport { usersState } from '@/store/modules/users/state'\nimport { IUsersState } from '@/store/modules/users/types'\n\nconst users: Module = {\n state: usersState,\n actions,\n getters,\n mutations,\n}\n\nexport default users\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { ROOT_STORE, AUTH_USER_STORE, WORKOUTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { WorkoutsMutations } from '@/store/modules/workouts/enums'\nimport {\n IWorkoutsActions,\n IWorkoutsState,\n} from '@/store/modules/workouts/types'\nimport {\n IWorkout,\n IWorkoutForm,\n IWorkoutPayload,\n TWorkoutsPayload,\n} from '@/types/workouts'\nimport { handleError } from '@/utils'\n\nconst getWorkouts = (\n context: ActionContext,\n payload: TWorkoutsPayload,\n target: WorkoutsMutations\n): void => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('workouts', {\n params: payload,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(WORKOUTS_STORE.MUTATIONS[target], res.data.data.workouts)\n if (target === WorkoutsMutations['SET_USER_WORKOUTS']) {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUTS_PAGINATION,\n res.data.pagination\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree &\n IWorkoutsActions = {\n [WORKOUTS_STORE.ACTIONS.GET_CALENDAR_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_CALENDAR_WORKOUTS)\n getWorkouts(context, payload, WorkoutsMutations['SET_CALENDAR_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_USER_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['SET_USER_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_TIMELINE_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['SET_TIMELINE_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_MORE_TIMELINE_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['ADD_TIMELINE_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n const segmentUrl = payload.segmentId ? `/segment/${payload.segmentId}` : ''\n authApi\n .get(`workouts/${payload.workoutId}`)\n .then((res) => {\n const workout: IWorkout = res.data.data.workouts[0]\n if (res.data.status === 'success') {\n if (\n payload.segmentId &&\n (workout.segments.length === 0 ||\n !workout.segments[+payload.segmentId - 1])\n ) {\n throw new Error('WORKOUT_NOT_FOUND')\n }\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT,\n res.data.data.workouts[0]\n )\n if (res.data.data.workouts[0].with_gpx) {\n authApi\n .get(`workouts/${payload.workoutId}/chart_data${segmentUrl}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_CHART_DATA,\n res.data.data.chart_data\n )\n }\n })\n authApi\n .get(`workouts/${payload.workoutId}/gpx${segmentUrl}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_GPX,\n res.data.data.gpx\n )\n }\n })\n }\n } else {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n handleError(context, null)\n }\n })\n .catch((error) => {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.DELETE_WORKOUT](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .delete(`workouts/${payload.workoutId}`)\n .then(() => {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n router.push('/')\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.EDIT_WORKOUT](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .patch(`workouts/${payload.workoutId}`, payload.data)\n .then(() => {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n context\n .dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, {\n workoutId: payload.workoutId,\n })\n .then(() => {\n router.push({\n name: 'Workout',\n params: { workoutId: payload.workoutId },\n })\n })\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.ADD_WORKOUT](\n context: ActionContext,\n payload: IWorkoutForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n if (!payload.file) {\n throw new Error('No file part')\n }\n const form = new FormData()\n form.append('file', payload.file)\n form.append(\n 'data',\n `{\"sport_id\": ${payload.sport_id}, \"notes\": \"${payload.notes}\"}`\n )\n authApi\n .post('workouts', form, {\n headers: {\n 'content-type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.data.status === 'created') {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n const workout: IWorkout = res.data.data.workouts[0]\n router.push(\n res.data.data.workouts.length === 1\n ? `/workouts/${workout.id}`\n : '/'\n )\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX](\n context: ActionContext,\n payload: IWorkoutForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .post('workouts/no_gpx', payload)\n .then((res) => {\n if (res.data.status === 'created') {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n const workout: IWorkout = res.data.data.workouts[0]\n router.push(`/workouts/${workout.id}`)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { WORKOUTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IWorkoutsGetters,\n IWorkoutsState,\n} from '@/store/modules/workouts/types'\n\nexport const getters: GetterTree &\n IWorkoutsGetters = {\n [WORKOUTS_STORE.GETTERS.CALENDAR_WORKOUTS]: (state: IWorkoutsState) => {\n return state.calendar_workouts\n },\n [WORKOUTS_STORE.GETTERS.TIMELINE_WORKOUTS]: (state: IWorkoutsState) => {\n return state.timeline_workouts\n },\n [WORKOUTS_STORE.GETTERS.USER_WORKOUTS]: (state: IWorkoutsState) => {\n return state.user_workouts\n },\n [WORKOUTS_STORE.GETTERS.WORKOUT_DATA]: (state: IWorkoutsState) => {\n return state.workoutData\n },\n [WORKOUTS_STORE.GETTERS.WORKOUTS_PAGINATION]: (state: IWorkoutsState) => {\n return state.pagination\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { WORKOUTS_STORE } from '@/store/constants'\nimport {\n IWorkoutsState,\n TWorkoutsMutations,\n} from '@/store/modules/workouts/types'\nimport { IPagination } from '@/types/api'\nimport { IWorkout, IWorkoutApiChartData } from '@/types/workouts'\n\nexport const mutations: MutationTree & TWorkoutsMutations = {\n [WORKOUTS_STORE.MUTATIONS.ADD_TIMELINE_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.timeline_workouts = state.timeline_workouts.concat(workouts)\n },\n [WORKOUTS_STORE.MUTATIONS.SET_CALENDAR_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.calendar_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_TIMELINE_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.timeline_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_USER_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.user_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUTS_PAGINATION](\n state: IWorkoutsState,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT](\n state: IWorkoutsState,\n workout: IWorkout\n ) {\n state.workoutData.workout = workout\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_CHART_DATA](\n state: IWorkoutsState,\n chartData: IWorkoutApiChartData[]\n ) {\n state.workoutData.chartData = chartData\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_GPX](\n state: IWorkoutsState,\n gpx: string\n ) {\n state.workoutData.gpx = gpx\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING](\n state: IWorkoutsState,\n loading: boolean\n ) {\n state.workoutData.loading = loading\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_CALENDAR_WORKOUTS](state: IWorkoutsState) {\n state.calendar_workouts = []\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUTS](state: IWorkoutsState) {\n state.calendar_workouts = []\n state.user_workouts = []\n state.timeline_workouts = []\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT](state: IWorkoutsState) {\n state.workoutData = {\n gpx: '',\n loading: false,\n workout: {},\n chartData: [],\n }\n },\n}\n","import { IWorkoutsState } from '@/store/modules/workouts/types'\nimport { IPagination } from '@/types/api'\nimport { IWorkout } from '@/types/workouts'\n\nexport const workoutsState: IWorkoutsState = {\n calendar_workouts: [],\n timeline_workouts: [],\n pagination: {},\n user_workouts: [],\n workoutData: {\n gpx: '',\n loading: false,\n workout: {},\n chartData: [],\n },\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/workouts/actions'\nimport { getters } from '@/store/modules/workouts/getters'\nimport { mutations } from '@/store/modules/workouts/mutations'\nimport { workoutsState } from '@/store/modules/workouts/state'\nimport { IWorkoutsState } from '@/store/modules/workouts/types'\n\nconst workouts: Module = {\n state: workoutsState,\n actions,\n getters,\n mutations,\n}\n\nexport default workouts\n","import { Module, ModuleTree } from 'vuex'\n\nimport authUserModule from '@/store/modules/authUser'\nimport oAuthModule from '@/store/modules/oauth2'\nimport { actions } from '@/store/modules/root/actions'\nimport { getters } from '@/store/modules/root/getters'\nimport { mutations } from '@/store/modules/root/mutations'\nimport { state } from '@/store/modules/root/state'\nimport { IRootState } from '@/store/modules/root/types'\nimport sportsModule from '@/store/modules/sports'\nimport statsModule from '@/store/modules/statistics'\nimport usersModule from '@/store/modules/users'\nimport workoutsModule from '@/store/modules/workouts'\n\nconst modules: ModuleTree = {\n authUserModule,\n oAuthModule,\n sportsModule,\n statsModule,\n usersModule,\n workoutsModule,\n}\n\nconst root: Module = {\n state,\n actions,\n getters,\n mutations,\n modules,\n}\n\nexport default root\n","import { createStore } from 'vuex'\n\nimport root from '@/store/modules/root'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst store = createStore(root)\n\nexport default store\n","export enum WorkoutsActions {\n ADD_WORKOUT = 'ADD_WORKOUT',\n ADD_WORKOUT_WITHOUT_GPX = 'ADD_WORKOUT_WITHOUT_GPX',\n DELETE_WORKOUT = 'DELETE_WORKOUT',\n EDIT_WORKOUT = 'EDIT_WORKOUT',\n GET_CALENDAR_WORKOUTS = 'GET_CALENDAR_WORKOUTS',\n GET_USER_WORKOUTS = 'GET_USER_WORKOUTS',\n GET_TIMELINE_WORKOUTS = 'GET_TIMELINE_WORKOUTS',\n GET_MORE_TIMELINE_WORKOUTS = 'GET_MORE_TIMELINE_WORKOUTS',\n GET_WORKOUT_DATA = 'GET_WORKOUT_DATA',\n}\n\nexport enum WorkoutsGetters {\n CALENDAR_WORKOUTS = 'CALENDAR_WORKOUTS',\n TIMELINE_WORKOUTS = 'TIMELINE_WORKOUTS',\n USER_WORKOUTS = 'USER_WORKOUTS',\n WORKOUT_DATA = 'WORKOUT_DATA',\n WORKOUTS_PAGINATION = 'WORKOUTS_PAGINATION',\n}\n\nexport enum WorkoutsMutations {\n ADD_TIMELINE_WORKOUTS = 'ADD_TIMELINE_WORKOUTS',\n EMPTY_WORKOUTS = 'EMPTY_WORKOUTS',\n EMPTY_CALENDAR_WORKOUTS = 'EMPTY_CALENDAR_WORKOUTS',\n EMPTY_WORKOUT = 'EMPTY_WORKOUT',\n SET_CALENDAR_WORKOUTS = 'SET_CALENDAR_WORKOUTS',\n SET_TIMELINE_WORKOUTS = 'SET_TIMELINE_WORKOUTS',\n SET_USER_WORKOUTS = 'SET_USER_WORKOUTS',\n SET_WORKOUT = 'SET_WORKOUT',\n SET_WORKOUT_GPX = 'SET_WORKOUT_GPX',\n SET_WORKOUT_CHART_DATA = 'SET_WORKOUT_CHART_DATA',\n SET_WORKOUT_LOADING = 'SET_WORKOUT_LOADING',\n SET_WORKOUTS_PAGINATION = 'SET_WORKOUTS_PAGINATION',\n}\n","import { useStore as VuexStore } from 'vuex'\n\nimport { Store } from '@/store/types'\n\nexport function useStore(): Store {\n return VuexStore() as Store\n}\n","import { LocationQuery } from 'vue-router'\n\nimport { IQueryOptions, TPaginationPayload } from '@/types/api'\n\nexport const sortList: string[] = ['asc', 'desc']\nexport const defaultPage = 1\nexport const defaultPerPage = 10\n\nexport const getNumberQueryValue = (\n queryValue: string | (string | null)[] | null,\n defaultValue: number\n): number => {\n return queryValue && typeof queryValue === 'string' && +queryValue > 0\n ? +queryValue\n : defaultValue\n}\n\nexport const getStringQueryValue = (\n queryValue: string | (string | null)[] | null,\n availableValues: string[],\n defaultValue: string\n): string => {\n return queryValue &&\n typeof queryValue === 'string' &&\n availableValues.includes(queryValue)\n ? queryValue\n : defaultValue\n}\n\nexport const getQuery = (\n locationQuery: LocationQuery,\n orderByList: string[],\n defaultOrderBy: string,\n options?: IQueryOptions\n): TPaginationPayload => {\n const queryOptions = options || {}\n const defaultSort = queryOptions.defaultSort || 'asc'\n const query = {}\n\n query.page = getNumberQueryValue(locationQuery.page, defaultPage)\n query.per_page = getNumberQueryValue(locationQuery.per_page, defaultPerPage)\n query.order = getStringQueryValue(locationQuery.order, sortList, defaultSort)\n query.order_by = getStringQueryValue(\n locationQuery.order_by,\n orderByList,\n defaultOrderBy\n )\n if (typeof locationQuery.q === 'string') {\n query.q = locationQuery.q\n } else {\n delete query.q\n }\n\n return query\n}\n\nexport const workoutsPayloadKeys = [\n 'from',\n 'to',\n 'ave_speed_from',\n 'ave_speed_to',\n 'max_speed_from',\n 'max_speed_to',\n 'distance_from',\n 'distance_to',\n 'duration_from',\n 'duration_to',\n 'sport_id',\n]\n\nconst getRange = (stop: number, start = 1): number[] => {\n return Array.from({ length: stop - start + 1 }, (_, i) => start + i)\n}\n\nexport const rangePagination = (\n pages: number,\n currentPage: number\n): (string | number)[] => {\n if (pages < 0) {\n return []\n }\n\n if (pages < 9) {\n return getRange(pages)\n }\n\n let pagination: (string | number)[] = [1, 2]\n if (currentPage < 4) {\n pagination = pagination.concat([3, 4, 5])\n } else if (currentPage < 6) {\n pagination = pagination.concat(getRange(currentPage + 2, 3))\n } else {\n pagination = pagination.concat(['...'])\n if (currentPage < pages - 2) {\n pagination = pagination.concat(getRange(currentPage + 2, currentPage - 2))\n }\n }\n if (currentPage + 2 <= pages - 2) {\n pagination = pagination.concat(['...'])\n pagination = pagination.concat(getRange(pages, pages - 1))\n } else {\n if (\n pagination[pagination.length - 1] !== '...' &&\n pagination[pagination.length - 1] >= pages - 2 &&\n pagination[pagination.length - 1] < pages\n ) {\n pagination = pagination.concat(\n getRange(pages, +pagination[pagination.length - 1] + 1)\n )\n } else {\n pagination = pagination.concat(\n getRange(\n pages,\n currentPage < pages - 3 ? currentPage + 3 : currentPage - 5\n )\n )\n }\n }\n\n return pagination\n}\n","import {\n addDays,\n addMonths,\n addYears,\n endOfMonth,\n endOfWeek,\n format,\n startOfMonth,\n startOfWeek,\n startOfYear,\n} from 'date-fns'\nimport { utcToZonedTime } from 'date-fns-tz'\n\nimport createI18n from '@/i18n'\nimport { localeFromLanguage } from '@/utils/locales'\n\nconst { locale } = createI18n.global\n\nexport const getStartDate = (\n duration: string,\n day: Date,\n weekStartingMonday: boolean\n): Date => {\n switch (duration) {\n case 'week':\n return startOfWeek(day, { weekStartsOn: weekStartingMonday ? 1 : 0 })\n case 'year':\n return startOfYear(day)\n case 'month':\n return startOfMonth(day)\n default:\n throw new Error(\n `Invalid duration, expected: \"week\", \"month\", \"year\", got: \"${duration}\"`\n )\n }\n}\n\nexport const incrementDate = (duration: string, day: Date): Date => {\n switch (duration) {\n case 'week':\n return addDays(day, 7)\n case 'year':\n return addYears(day, 1)\n case 'month':\n return addMonths(day, 1)\n default:\n throw new Error(\n `Invalid duration, expected: \"week\", \"month\", \"year\", got: \"${duration}\"`\n )\n }\n}\n\nexport const getDateWithTZ = (dateInUTC: string, tz: string): Date => {\n return utcToZonedTime(new Date(dateInUTC), tz)\n}\n\nexport const getCalendarStartAndEnd = (\n date: Date,\n weekStartingMonday: boolean\n): Record => {\n const monthStart = startOfMonth(date)\n const monthEnd = endOfMonth(date)\n const weekStartsOn = weekStartingMonday ? 1 : 0\n return {\n start: startOfWeek(monthStart, { weekStartsOn }),\n end: endOfWeek(monthEnd, { weekStartsOn }),\n }\n}\n\nexport const formatWorkoutDate = (\n dateTime: Date,\n dateFormat: string | null = null,\n timeFormat: string | null = null\n): Record => {\n if (!dateFormat) {\n dateFormat = 'yyyy/MM/dd'\n }\n dateFormat = getDateFormat(dateFormat, locale.value)\n if (!timeFormat) {\n timeFormat = 'HH:mm'\n }\n return {\n workout_date: format(dateTime, dateFormat, {\n locale: localeFromLanguage[locale.value],\n }),\n workout_time: format(dateTime, timeFormat),\n }\n}\n\nconst availableDateFormats = [\n 'MM/dd/yyyy',\n 'dd/MM/yyyy',\n 'yyyy-MM-dd',\n 'date_string',\n]\nconst dateStringFormats: Record = {\n de: 'do MMM yyyy',\n en: 'MMM. do, yyyy',\n fr: 'd MMM yyyy',\n // nb: 'do MMM yyyy',\n}\n\nexport const getDateFormat = (dateFormat: string, language: string): string => {\n return dateFormat === 'date_string' ? dateStringFormats[language] : dateFormat\n}\n\nexport const formatDate = (\n dateString: string,\n timezone: string,\n dateFormat: string,\n withTime = true,\n language: string | null = null\n): string => {\n if (!language) {\n language = locale.value\n }\n return format(\n getDateWithTZ(dateString, timezone),\n `${getDateFormat(dateFormat, language)}${withTime ? ' HH:mm' : ''}`,\n { locale: localeFromLanguage[language] }\n )\n}\n\nexport const availableDateFormatOptions = (\n inputDate: string,\n timezone: string,\n language: string | null = null\n) => {\n const l: string = language ? language : locale.value\n const options: Record[] = []\n availableDateFormats.map((df) => {\n const dateFormat = getDateFormat(df, l)\n options.push({\n label: `${dateFormat} - ${formatDate(\n inputDate,\n timezone,\n dateFormat,\n false,\n l\n )}`,\n value: df,\n })\n })\n return options\n}\n","const suffixes = ['bytes', 'KB', 'MB', 'GB', 'TB']\n\nexport const getReadableFileSize = (\n fileSize: number,\n asText = true\n): string | Record => {\n const i = Math.floor(Math.log(fileSize) / Math.log(1024))\n if (!fileSize) {\n return asText ? '0 bytes' : { size: '0', suffix: 'bytes' }\n }\n const size = (fileSize / Math.pow(1024, i)).toFixed(1)\n const suffix = suffixes[i]\n return asText ? `${size}${suffix}` : { size, suffix }\n}\n\nexport const getFileSizeInMB = (fileSize: number): number => {\n const value = fileSize / 1048576\n return (!fileSize && 0) || +value.toFixed(2)\n}\n","import { AxiosError } from 'axios'\nimport { ActionContext } from 'vuex'\n\nimport { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsState } from '@/store/modules/sports/types'\nimport { IStatisticsState } from '@/store/modules/statistics/types'\nimport { IUsersState } from '@/store/modules/users/types'\nimport { IWorkoutsState } from '@/store/modules/workouts/types'\n\nexport const getApiUrl = (): string => {\n return process.env.NODE_ENV === 'production'\n ? '/api/'\n : `${process.env.VUE_APP_API_URL}/api/`\n}\n\nexport const handleError = (\n context:\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext,\n error: AxiosError | null,\n msg = 'UNKNOWN'\n): void => {\n // if request is cancelled, no error to display\n if (error && error.message === 'canceled') {\n return\n }\n\n // if stored token is blacklisted, disconnect user\n if (\n error?.response?.status === 401 &&\n error.response.data.error === 'invalid_token'\n ) {\n localStorage.removeItem('authToken')\n context.dispatch(AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER)\n return\n }\n\n const errorMessages = !error\n ? msg\n : error.response\n ? error.response.status === 413\n ? 'file size is greater than the allowed size'\n : error.response.data.message\n ? error.response.data.message\n : msg\n : error.message\n ? error.message\n : msg\n context.commit(\n ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES,\n errorMessages.includes('\\n')\n ? errorMessages\n .split('\\n')\n .filter((m: string) => m !== '')\n .map((m: string) => `api.ERROR.${m}`)\n : `api.ERROR.${errorMessages}`\n )\n}\n","/* eslint-disable import/no-duplicates */\nimport { Locale } from 'date-fns'\nimport { de, enUS, fr } from 'date-fns/locale'\n\nimport createI18n from '@/i18n'\n\nexport const localeFromLanguage: Record = {\n de: de,\n en: enUS,\n fr: fr,\n // nb: nb, // disabled for now\n}\n\nexport const languageLabels: Record = {\n de: 'Deutsch',\n en: 'English',\n fr: 'Français',\n // nb: 'Norsk bokmål', // disabled for now\n}\n\nconst { availableLocales } = createI18n.global\nexport const availableLanguages = availableLocales.map((l) => {\n return { label: languageLabels[l], value: l }\n})\n","import { ISport, ITranslatedSport, TActiveStatus } from '@/types/sports'\nimport { IWorkout } from '@/types/workouts'\n\nexport const sportColors: Record = {\n 'Cycling (Sport)': '#4c9792',\n 'Cycling (Transport)': '#88af98',\n 'Cycling (Virtual)': '#64a360',\n Hiking: '#bb757c',\n 'Mountain Biking': '#d4b371',\n 'Mountain Biking (Electric)': '#fc9d6f',\n Rowing: '#fcce72',\n Running: '#835b83',\n 'Skiing (Alpine)': '#67a4bd',\n 'Skiing (Cross Country)': '#9498d0',\n Snowshoes: '#5780a8',\n Trail: '#09a98a',\n Walking: '#838383',\n}\n\nexport const sportIdColors = (sports: ISport[]): Record => {\n const colors: Record = {}\n sports.map(\n (sport) =>\n (colors[sport.id] = sport.color ? sport.color : sportColors[sport.label])\n )\n return colors\n}\n\nconst sortSports = (a: ITranslatedSport, b: ITranslatedSport): number => {\n const sportATranslatedLabel = a.translatedLabel.toLowerCase()\n const sportBTranslatedLabel = b.translatedLabel.toLowerCase()\n return sportATranslatedLabel > sportBTranslatedLabel\n ? 1\n : sportATranslatedLabel < sportBTranslatedLabel\n ? -1\n : 0\n}\n\nexport const translateSports = (\n sports: ISport[],\n t: CallableFunction,\n activeStatus: TActiveStatus = 'all',\n sportsToInclude: number[] = []\n): ITranslatedSport[] =>\n sports\n .filter((sport) =>\n activeStatus === 'all'\n ? true\n : sportsToInclude.includes(sport.id) || sport[activeStatus]\n )\n .map((sport) => ({\n ...sport,\n translatedLabel: t(`sports.${sport.label}.LABEL`),\n }))\n .sort(sortSports)\n\nexport const getSportLabel = (workout: IWorkout, sports: ISport[]): string => {\n return sports\n .filter((sport) => sport.id === workout.sport_id)\n .map((sport) => sport.label)[0]\n}\n\nexport const getSportColor = (\n workout: IWorkout,\n sports: ISport[]\n): string | null => {\n return sports\n .filter((sport) => sport.id === workout.sport_id)\n .map((sport) => sport.color)[0]\n}\n","import {\n addMonths,\n addWeeks,\n addYears,\n endOfMonth,\n endOfWeek,\n endOfYear,\n format,\n startOfMonth,\n startOfWeek,\n startOfYear,\n subMonths,\n subWeeks,\n subYears,\n} from 'date-fns'\n\nimport createI18n from '@/i18n'\nimport { IChartDataset } from '@/types/chart'\nimport { ISport } from '@/types/sports'\nimport {\n IStatisticsChartData,\n IStatisticsDateParams,\n TStatisticsDatasetKeys,\n TStatisticsDatasets,\n TStatisticsFromApi,\n} from '@/types/statistics'\nimport { incrementDate, getStartDate, getDateFormat } from '@/utils/dates'\nimport { localeFromLanguage } from '@/utils/locales'\nimport { sportColors } from '@/utils/sports'\nimport { convertStatsDistance } from '@/utils/units'\n\nconst { locale } = createI18n.global\n\nconst dateFormats: Record> = {\n week: {\n api: 'yyyy-MM-dd',\n chart: 'MM/dd/yyyy',\n },\n month: {\n api: 'yyyy-MM',\n chart: 'MM/yyyy',\n },\n year: {\n api: 'yyyy',\n chart: 'yyyy',\n },\n}\n\nexport const datasetKeys: TStatisticsDatasetKeys[] = [\n 'average_speed',\n 'nb_workouts',\n 'total_duration',\n 'total_distance',\n 'total_ascent',\n 'total_descent',\n]\n\nexport const getDateKeys = (\n params: IStatisticsDateParams,\n weekStartingMonday: boolean\n): Date[] => {\n const days = []\n for (\n let day = getStartDate(params.duration, params.start, weekStartingMonday);\n day <= params.end;\n day = incrementDate(params.duration, day)\n ) {\n days.push(day)\n }\n return days\n}\n\nconst getStatisticsChartDataset = (\n sportLabel: string,\n color: string,\n isLineChart = false\n): IChartDataset => {\n const dataset: IChartDataset = {\n label: sportLabel,\n backgroundColor: [color],\n data: [],\n }\n if (isLineChart) {\n dataset.type = 'line'\n dataset.borderColor = [color]\n dataset.spanGaps = true\n }\n return dataset\n}\n\nexport const getDatasets = (displayedSports: ISport[]): TStatisticsDatasets => {\n const datasets: TStatisticsDatasets = {\n average_speed: [],\n nb_workouts: [],\n total_distance: [],\n total_duration: [],\n total_ascent: [],\n total_descent: [],\n }\n displayedSports.map((sport) => {\n const color = sport.color ? sport.color : sportColors[sport.label]\n datasets.average_speed.push(\n getStatisticsChartDataset(sport.label, color, true)\n )\n datasets.nb_workouts.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_distance.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_duration.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_ascent.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_descent.push(getStatisticsChartDataset(sport.label, color))\n })\n return datasets\n}\n\nexport const convertStatsValue = (\n datasetKey: TStatisticsDatasetKeys,\n value: number,\n useImperialUnits: boolean\n): number => {\n switch (datasetKey) {\n case 'average_speed':\n case 'total_distance':\n case 'total_ascent':\n case 'total_descent':\n return convertStatsDistance(\n ['average_speed', 'total_distance'].includes(datasetKey) ? 'km' : 'm',\n value,\n useImperialUnits\n )\n default:\n case 'nb_workouts':\n case 'total_duration':\n return value\n }\n}\n\nexport const formatStats = (\n params: IStatisticsDateParams,\n weekStartingMonday: boolean,\n sports: ISport[],\n displayedSportsId: number[],\n apiStats: TStatisticsFromApi,\n useImperialUnits: boolean,\n userDateFormat: string\n): IStatisticsChartData => {\n const dayKeys = getDateKeys(params, weekStartingMonday)\n const dateFormat = dateFormats[params.duration]\n const displayedSports = sports.filter((sport) =>\n displayedSportsId.includes(sport.id)\n )\n const labels: string[] = []\n const datasets = getDatasets(displayedSports)\n const sportsId: Record = {}\n displayedSports.map(\n (displayedSport) => (sportsId[displayedSport.label] = displayedSport.id)\n )\n\n dayKeys.map((key) => {\n const date: string = format(key, dateFormat.api)\n const label: string = format(\n key,\n params.duration === 'week'\n ? getDateFormat(userDateFormat, locale.value)\n : dateFormat.chart,\n { locale: localeFromLanguage[locale.value] }\n )\n labels.push(label)\n datasetKeys.map((datasetKey) => {\n datasets[datasetKey].map((dataset) => {\n dataset.data.push(\n date in apiStats && sportsId[dataset.label] in apiStats[date]\n ? convertStatsValue(\n datasetKey,\n apiStats[date][sportsId[dataset.label]][datasetKey],\n useImperialUnits\n )\n : datasetKey === 'average_speed'\n ? null\n : 0\n )\n })\n })\n })\n return {\n labels,\n datasets,\n }\n}\n\nexport const getStatsDateParams = (\n date: Date,\n timeFrame: string,\n weekStartingMonday: boolean\n): IStatisticsDateParams => {\n const weekStartsOn = weekStartingMonday ? 1 : 0\n const start =\n timeFrame === 'year'\n ? startOfYear(subYears(date, 9))\n : timeFrame === 'week'\n ? startOfWeek(subMonths(date, 2), { weekStartsOn })\n : startOfMonth(subMonths(date, 11)) // month\n const end =\n timeFrame === 'year'\n ? endOfYear(date)\n : timeFrame === 'week'\n ? endOfWeek(date, { weekStartsOn })\n : endOfMonth(date) // month\n return {\n duration: timeFrame,\n end,\n start,\n }\n}\n\nexport const updateChartParams = (\n chartParams: IStatisticsDateParams,\n backward: boolean,\n weekStartingMonday: boolean\n): IStatisticsDateParams => {\n const { duration, start, end } = chartParams\n const weekStartsOn = weekStartingMonday ? 1 : 0\n return {\n duration,\n end:\n duration === 'year'\n ? endOfYear(backward ? subYears(end, 1) : addYears(end, 1))\n : duration === 'week'\n ? endOfWeek(backward ? subWeeks(end, 1) : addWeeks(end, 1), {\n weekStartsOn,\n })\n : endOfMonth(backward ? subMonths(end, 1) : addMonths(end, 1)),\n start:\n duration === 'year'\n ? startOfYear(backward ? subYears(start, 1) : addYears(start, 1))\n : duration === 'week'\n ? startOfWeek(backward ? subWeeks(start, 1) : addWeeks(start, 1), {\n weekStartsOn,\n })\n : startOfMonth(backward ? subMonths(start, 1) : addMonths(start, 1)),\n }\n}\n","import { IUnit, TFactor, TUnit } from '@/types/units'\n\nexport const units: Record = {\n ft: {\n unit: 'ft',\n system: 'imperial',\n multiplier: 1,\n defaultTarget: 'm',\n },\n mi: {\n unit: 'mi',\n system: 'imperial',\n multiplier: 5280,\n defaultTarget: 'km',\n },\n m: {\n unit: 'm',\n system: 'metric',\n multiplier: 1,\n defaultTarget: 'ft',\n },\n km: {\n unit: 'm',\n system: 'metric',\n multiplier: 1000,\n defaultTarget: 'mi',\n },\n}\n\nconst factors: TFactor = {\n metric: {\n imperial: 3.280839895,\n metric: 1,\n },\n imperial: {\n metric: 1 / 3.280839895,\n imperial: 1,\n },\n}\n\nexport const convertDistance = (\n distance: number,\n from: TUnit,\n to: TUnit,\n digits: number | null = 3\n): number => {\n const unitFrom = units[from]\n const unitTo = units[to]\n const convertedDistance =\n (distance * unitFrom.multiplier * factors[unitFrom.system][unitTo.system]) /\n unitTo.multiplier\n if (digits !== null) {\n return parseFloat(convertedDistance.toFixed(digits))\n }\n return convertedDistance\n}\n\nexport const convertStatsDistance = (\n unitFrom: TUnit,\n value: number,\n useImperialUnits: boolean\n): number => {\n const unitTo = useImperialUnits ? units[unitFrom].defaultTarget : unitFrom\n return useImperialUnits ? convertDistance(value, unitFrom, unitTo, 2) : value\n}\n","import {\n IWorkout,\n IWorkoutApiChartData,\n IWorkoutChartData,\n TCoordinates,\n TWorkoutDatasets,\n} from '@/types/workouts'\nimport { convertStatsDistance } from '@/utils/units'\n\nexport const getDatasets = (\n chartData: IWorkoutApiChartData[],\n t: CallableFunction,\n useImperialUnits: boolean\n): IWorkoutChartData => {\n const datasets: TWorkoutDatasets = {\n speed: {\n label: t('workouts.SPEED'),\n backgroundColor: ['#FFFFFF'],\n borderColor: ['#8884d8'],\n borderWidth: 2,\n data: [],\n yAxisID: 'ySpeed',\n },\n elevation: {\n label: t('workouts.ELEVATION'),\n backgroundColor: ['#e5e5e5'],\n borderColor: ['#cccccc'],\n borderWidth: 1,\n fill: true,\n data: [],\n yAxisID: 'yElevation',\n },\n }\n const distance_labels: unknown[] = []\n const duration_labels: unknown[] = []\n const coordinates: TCoordinates[] = []\n\n chartData.map((data) => {\n distance_labels.push(data.distance)\n duration_labels.push(data.duration)\n datasets.speed.data.push(\n convertStatsDistance('km', data.speed, useImperialUnits)\n )\n datasets.elevation.data.push(\n convertStatsDistance('m', data.elevation, useImperialUnits)\n )\n coordinates.push({ latitude: data.latitude, longitude: data.longitude })\n })\n\n return { distance_labels, duration_labels, datasets, coordinates }\n}\n\nexport const getDonutDatasets = (\n workouts: IWorkout[]\n): Record> => {\n const total = workouts.length\n if (total === 0) {\n return {}\n }\n\n const datasets: Record> = {}\n workouts.map((workout) => {\n if (!datasets[workout.sport_id]) {\n datasets[workout.sport_id] = {\n count: 0,\n percentage: 0,\n }\n }\n datasets[workout.sport_id].count += 1\n datasets[workout.sport_id].percentage =\n datasets[workout.sport_id].count / total\n })\n\n return datasets\n}\n\nexport const defaultOrder = {\n order: 'desc',\n order_by: 'workout_date',\n}\n","\n\n\n","import { render } from \"./Card.vue?vue&type=template&id=ad374c24\"\nconst script = {}\n\nimport \"./Card.vue?vue&type=style&index=0&id=ad374c24&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-72463173\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"table-selects\" }\nconst _hoisted_2 = [\"value\"]\nconst _hoisted_3 = [\"value\"]\nconst _hoisted_4 = [\"value\"]\nconst _hoisted_5 = [\"value\"]\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = [\"value\"]\n\nimport { toRefs } from 'vue'\n\n import { TPaginationPayload } from '@/types/api'\n\n interface Props {\n order_by: string[]\n query: TPaginationPayload\n sort: string[]\n message: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'FilterSelects',\n props: {\n order_by: null,\n query: null,\n sort: null,\n message: null\n },\n emits: ['updateSelect'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n order_by: string[]\n query: TPaginationPayload\n sort: string[]\n message: string\n }\n\n \n\n \n\n const { order_by, query, sort, message } = toRefs(props)\n const perPage = [10, 25, 50, 100]\n\n function onSelectUpdate(event: Event & { target: HTMLInputElement }) {\n emit('updateSelect', event.target.id, event.target.value)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.ORDER_BY.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"order_by\",\n id: \"order_by\",\n value: _unref(query).order_by,\n onChange: onSelectUpdate\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(order_by), (order) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: order,\n key: order\n }, _toDisplayString(_ctx.$t(`${_unref(message)}.${order.toUpperCase()}`)), 9, _hoisted_3))\n }), 128))\n ], 40, _hoisted_2)\n ]),\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.ORDER.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"order\",\n id: \"order\",\n value: _unref(query).order,\n onChange: onSelectUpdate\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(sort), (order) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: order,\n key: order\n }, _toDisplayString(_ctx.$t(`common.SELECTS.ORDER.${order.toUpperCase()}`)), 9, _hoisted_5))\n }), 128))\n ], 40, _hoisted_4)\n ]),\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.PER_PAGE.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"per_page\",\n id: \"per_page\",\n value: _unref(query).per_page,\n onChange: onSelectUpdate\n }, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(perPage, (nb) => {\n return _createElementVNode(\"option\", {\n value: nb,\n key: nb\n }, _toDisplayString(nb), 9, _hoisted_7)\n }), 64))\n ], 40, _hoisted_6)\n ])\n ]))\n}\n}\n\n})","import script from \"./FilterSelects.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./FilterSelects.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./FilterSelects.vue?vue&type=style&index=0&id=72463173&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-72463173\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./ErrorImg.vue?vue&type=template&id=e620aed4\"\nimport script from \"./ErrorImg.vue?vue&type=script&lang=js\"\nexport * from \"./ErrorImg.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-b60bfa80\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"error\" }\nconst _hoisted_2 = { class: \"error-content\" }\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n title: string\n message: string\n buttonText: string\n path?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Error',\n props: {\n title: null,\n message: null,\n buttonText: null,\n path: { default: '/' }\n },\n setup(__props: any) {\n\nconst props = __props as { title: string, message: string, buttonText: string, path: string }\n\n \n const { buttonText, title, message, path } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"h1\", null, _toDisplayString(_unref(title)), 1),\n _createElementVNode(\"p\", null, _toDisplayString(_unref(message)), 1),\n (_unref(buttonText))\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push(_unref(path)))),\n class: \"upper\"\n }, _toDisplayString(_unref(buttonText)), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./Error.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Error.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Error.vue?vue&type=style&index=0&id=b60bfa80&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b60bfa80\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nimport { Ref, onMounted, ref, toRefs, withDefaults, onUnmounted } from 'vue'\n\n import Error from '@/components/Common/Error.vue'\n interface Props {\n target?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'NotFound',\n props: {\n target: { default: 'PAGE' }\n },\n setup(__props: any) {\n\nconst props = __props as { target: string }\n\n \n const { target } = toRefs(props)\n const timer = ref()\n const errorDisplayed: Ref = ref(false)\n\n onMounted(() => displayError())\n\n function displayError() {\n timer.value = setTimeout(() => {\n errorDisplayed.value = true\n }, 500)\n }\n\n onUnmounted(() => {\n if (timer.value) {\n clearTimeout(timer.value)\n }\n })\n\nreturn (_ctx: any,_cache: any) => {\n return (errorDisplayed.value)\n ? (_openBlock(), _createBlock(Error, {\n key: 0,\n title: \"404\",\n message: _ctx.$t(`error.NOT_FOUND.${_unref(target)}`),\n \"button-text\": _ctx.$t('common.HOME')\n }, null, 8, [\"message\", \"button-text\"]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./NotFound.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NotFound.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderSlot as _renderSlot, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3a9a4a65\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n class: \"pagination-center\",\n \"aria-label\": \"navigation\"\n}\nconst _hoisted_2 = { class: \"pagination\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { toRefs } from 'vue'\n\n import { IPagination, TPaginationPayload } from '@/types/api'\n import { IOauth2ClientsPayload } from '@/types/oauth'\n import { TWorkoutsPayload } from '@/types/workouts'\n import { rangePagination } from '@/utils/api'\n\n interface Props {\n pagination: IPagination\n path: string\n query: TWorkoutsPayload | TPaginationPayload | IOauth2ClientsPayload\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Pagination',\n props: {\n pagination: null,\n path: null,\n query: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n pagination: IPagination\n path: string\n query: TWorkoutsPayload | TPaginationPayload | IOauth2ClientsPayload\n }\n\n \n\n const { pagination, path, query } = toRefs(props)\n\n function getQuery(\n page: number,\n cursor?: number\n ): TPaginationPayload | IOauth2ClientsPayload {\n const newQuery = Object.assign({}, query.value)\n newQuery.page = cursor ? page + cursor : page\n return newQuery\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"nav\", _hoisted_1, [\n _createElementVNode(\"ul\", _hoisted_2, [\n _createElementVNode(\"li\", {\n class: _normalizeClass([\"page-prev\", { disabled: !_unref(pagination).has_prev }])\n }, [\n _createVNode(_component_router_link, {\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(_unref(pagination).page, -1) },\n disabled: !_unref(pagination).has_prev\n }, {\n default: _withCtx(({ navigate }) => [\n _renderSlot(_ctx.$slots, \"default\", {\n onClick: ($event: any) => (_unref(pagination).has_next ? navigate : null)\n }, () => [\n _createTextVNode(_toDisplayString(_ctx.$t('api.PAGINATION.PREVIOUS')) + \" \", 1),\n _hoisted_3\n ])\n ]),\n _: 3\n }, 8, [\"to\", \"disabled\"])\n ], 2),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(rangePagination)(_unref(pagination).pages, _unref(pagination).page), (page) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: page,\n class: _normalizeClass([\"page\", { active: page === _unref(pagination).page }])\n }, [\n (page === '...')\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, \" ... \"))\n : (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(+page) }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(page), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]))\n ], 2))\n }), 128)),\n _createElementVNode(\"li\", {\n class: _normalizeClass([\"page-next\", { disabled: !_unref(pagination).has_next }])\n }, [\n _createVNode(_component_router_link, {\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(_unref(pagination).page, 1) },\n disabled: !_unref(pagination).has_next\n }, {\n default: _withCtx(({ navigate }) => [\n _renderSlot(_ctx.$slots, \"default\", {\n onClick: ($event: any) => (_unref(pagination).has_next ? navigate : null)\n }, () => [\n _createTextVNode(_toDisplayString(_ctx.$t('api.PAGINATION.NEXT')) + \" \", 1),\n _hoisted_5\n ])\n ]),\n _: 3\n }, 8, [\"to\", \"disabled\"])\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./Pagination.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Pagination.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Pagination.vue?vue&type=style&index=0&id=3a9a4a65&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3a9a4a65\"]])\n\nexport default __exports__","import { zxcvbnOptions } from '@zxcvbn-ts/core'\n\nexport const setZxcvbnOptions = async (language: string) => {\n const zxcvbnCommonPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-common'\n )\n const zxcvbnEnPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-en'\n )\n const zxcvbnFrPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-fr'\n )\n const zxcvbnDePackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-de'\n )\n const zxcvbnLangPackages: Record = {\n de: zxcvbnDePackage,\n en: zxcvbnEnPackage,\n fr: zxcvbnFrPackage,\n // no package available for norwegian bokmal, fallback on english\n nb: zxcvbnEnPackage,\n }\n const zxcvbnPackage = zxcvbnLangPackages[language]\n const options = {\n graphs: zxcvbnCommonPackage.default.adjacencyGraphs,\n dictionary: {\n ...zxcvbnCommonPackage.default.dictionary,\n ...zxcvbnPackage.default.dictionary,\n },\n }\n zxcvbnOptions.setOptions(options)\n}\n\nexport const getPasswordStrength = (strength: number): string => {\n switch (strength) {\n case 2:\n return 'AVERAGE'\n case 3:\n return 'GOOD'\n case 4:\n return 'STRONG'\n default:\n return 'WEAK'\n }\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74e71df5\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"password-strength\" }\nconst _hoisted_2 = [\"value\"]\nconst _hoisted_3 = {\n key: 0,\n class: \"password-strength-details\"\n}\nconst _hoisted_4 = { class: \"password-strength-value\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"info-box\"\n}\nconst _hoisted_6 = { class: \"password-feedback\" }\n\nimport { zxcvbn } from '@zxcvbn-ts/core'\n import {\n ComputedRef,\n Ref,\n computed,\n ref,\n onBeforeMount,\n toRefs,\n watch,\n } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { useStore } from '@/use/useStore'\n import { getPasswordStrength, setZxcvbnOptions } from '@/utils/password'\n\n interface Props {\n password: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordStength',\n props: {\n password: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n password: string\n }\n\n \n const { password } = toRefs(props)\n\n const store = useStore()\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const passwordScore: Ref = ref(0)\n const passwordStrength: Ref = ref('')\n const passwordSuggestions: Ref = ref([])\n const backgroundSize = ref('0% 100%')\n\n onBeforeMount(async () => await setZxcvbnOptions(language.value))\n\n function calculatePasswordStrength(password: string) {\n const zxcvbnResult = zxcvbn(password)\n passwordScore.value = zxcvbnResult.score\n passwordStrength.value = getPasswordStrength(passwordScore.value)\n passwordSuggestions.value = zxcvbnResult.feedback.suggestions\n backgroundSize.value = (passwordScore.value * 100) / 4 + '% 100%'\n }\n\n watch(\n () => language.value,\n async (newLanguageValue) => {\n await setZxcvbnOptions(newLanguageValue)\n }\n )\n watch(\n () => password.value,\n async (newPassword) => {\n if (isSuccess.value) {\n passwordStrength.value = ''\n } else {\n calculatePasswordStrength(newPassword)\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"input\", {\n class: _normalizeClass([\"password-slider\", `strength-${passwordScore.value}`]),\n style: _normalizeStyle({ backgroundSize: backgroundSize.value }),\n type: \"range\",\n value: passwordScore.value,\n min: \"0\",\n max: \"4\",\n step: \"1\"\n }, null, 14, _hoisted_2),\n (passwordStrength.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('user.PASSWORD_STRENGTH.LABEL')) + \": \" + _toDisplayString(_ctx.$t(`user.PASSWORD_STRENGTH.${passwordStrength.value}`)), 1),\n (passwordSuggestions.value.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"ul\", _hoisted_6, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(passwordSuggestions.value, (suggestion) => {\n return (_openBlock(), _createElementBlock(\"li\", { key: suggestion }, _toDisplayString(_ctx.$t(`user.PASSWORD_STRENGTH.SUGGESTIONS.${suggestion}`)), 1))\n }), 128))\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./PasswordStength.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordStength.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordStength.vue?vue&type=style&index=0&id=74e71df5&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74e71df5\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, vModelDynamic as _vModelDynamic, createElementVNode as _createElementVNode, withDirectives as _withDirectives, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5a126514\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"password-input\" }\nconst _hoisted_2 = [\"id\", \"disabled\", \"placeholder\", \"required\", \"type\"]\nconst _hoisted_3 = {\n key: 0,\n class: \"form-info\"\n}\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { Ref, ref, toRefs, watch, withDefaults } from 'vue'\n\n import PasswordStrength from '@/components/Common/PasswordStength.vue'\n\n interface Props {\n checkStrength?: boolean\n disabled?: boolean\n id?: string\n password?: string\n placeholder?: string\n required?: boolean\n }\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordInput',\n props: {\n checkStrength: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n id: { default: 'password' },\n password: { default: '' },\n placeholder: null,\n required: { type: Boolean, default: false }\n },\n emits: ['updatePassword', 'passwordError'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { checkStrength: boolean, disabled: boolean, id: string, password: string, placeholder?: string, required: boolean }\n\n \n const { checkStrength, disabled, id, password, placeholder, required } =\n toRefs(props)\n\n const showPassword: Ref = ref(false)\n const passwordValue: Ref = ref('')\n\n \n\n function togglePassword() {\n showPassword.value = !showPassword.value\n }\n function updatePassword(event: Event & { target: HTMLInputElement }) {\n emit('updatePassword', event.target.value)\n }\n function invalidPassword() {\n emit('passwordError')\n }\n\n watch(\n () => password.value,\n (newPassword) => {\n if (newPassword === '') {\n passwordValue.value = ''\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _withDirectives(_createElementVNode(\"input\", {\n id: _unref(id),\n disabled: _unref(disabled),\n placeholder: _unref(placeholder),\n required: _unref(required),\n type: showPassword.value ? 'text' : 'password',\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((passwordValue).value = $event)),\n minlength: \"8\",\n onInput: updatePassword,\n onInvalid: invalidPassword\n }, null, 40, _hoisted_2), [\n [_vModelDynamic, passwordValue.value]\n ]),\n _createElementVNode(\"div\", {\n class: \"show-password\",\n onClick: togglePassword\n }, [\n _createTextVNode(_toDisplayString(_ctx.$t(`user.${showPassword.value ? 'HIDE' : 'SHOW'}_PASSWORD`)) + \" \", 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa\", `fa-eye${showPassword.value ? '-slash' : ''}`]),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n (_unref(checkStrength))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _hoisted_4,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.PASSWORD_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(checkStrength))\n ? (_openBlock(), _createBlock(PasswordStrength, {\n key: 1,\n password: passwordValue.value\n }, null, 8, [\"password\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./PasswordInput.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordInput.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordInput.vue?vue&type=style&index=0&id=5a126514&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5a126514\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"map-attribution\" }, [\n /*#__PURE__*/_createElementVNode(\"span\", { class: \"map-attribution-text\" }, \"©\"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n class: \"map-attribution-text\",\n href: \"https://www.openstreetmap.org/copyright\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \" OpenStreetMap \")\n], -1)\n\nimport { toRefs, withDefaults } from 'vue'\n\n import { IWorkout } from '@/types/workouts'\n import { getApiUrl } from '@/utils'\n\n interface Props {\n workout: IWorkout\n displayHover?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StaticMap',\n props: {\n workout: null,\n displayHover: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { workout: IWorkout, displayHover: boolean }\n\n \n const { displayHover } = toRefs(props)\n const imageUrl = `${getApiUrl()}workouts/map/${props.workout.map}`\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"static-map\", { 'display-hover': _unref(displayHover) }])\n }, [\n (_unref(displayHover))\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: imageUrl,\n alt: \"\"\n }))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"bg-map-image\",\n style: _normalizeStyle({\n backgroundImage: `url(${imageUrl})`,\n })\n }, null, 4)),\n _hoisted_1\n ], 2))\n}\n}\n\n})","import script from \"./StaticMap.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StaticMap.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StaticMap.vue?vue&type=style&index=0&id=6b7e4baf&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-d5e9b348\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"start-chart\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { key: 1 }\nconst _hoisted_4 = { class: \"chart-radio\" }\nconst _hoisted_5 = [\"checked\"]\nconst _hoisted_6 = [\"checked\"]\nconst _hoisted_7 = [\"checked\"]\nconst _hoisted_8 = { key: 0 }\nconst _hoisted_9 = [\"checked\"]\nconst _hoisted_10 = { key: 1 }\nconst _hoisted_11 = [\"checked\"]\nconst _hoisted_12 = { key: 2 }\nconst _hoisted_13 = [\"checked\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Chart = _resolveComponent(\"Chart\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.hideChartIfNoData && _ctx.emptyStats)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('workouts.NO_WORKOUTS')), 1))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_distance\",\n checked: _ctx.displayedData === 'total_distance',\n onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_5),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_duration\",\n checked: _ctx.displayedData === 'total_duration',\n onClick: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_6),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DURATION')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"nb_workouts\",\n checked: _ctx.displayedData === 'nb_workouts',\n onClick: _cache[2] || (_cache[2] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_7),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.WORKOUT', 2)), 1)\n ]),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_8, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"average_speed\",\n checked: _ctx.displayedData === 'average_speed',\n onClick: _cache[3] || (_cache[3] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_9),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.AVERAGE_SPEED')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_10, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_ascent\",\n checked: _ctx.displayedData === 'total_ascent',\n onClick: _cache[4] || (_cache[4] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_11),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.ASCENT')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_12, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_descent\",\n checked: _ctx.displayedData === 'total_descent',\n onClick: _cache[5] || (_cache[5] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_13),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DESCENT')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n (_ctx.labels.length > 0)\n ? (_openBlock(), _createBlock(_component_Chart, {\n key: 0,\n datasets: _ctx.datasets,\n labels: _ctx.labels,\n displayedData: _ctx.displayedData,\n displayedSportIds: _ctx.displayedSportIds,\n fullStats: _ctx.fullStats,\n useImperialUnits: _ctx.user.imperial_units\n }, null, 8, [\"datasets\", \"labels\", \"displayedData\", \"displayedSportIds\", \"fullStats\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n}","import { resolveComponent as _resolveComponent, mergeProps as _mergeProps, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"chart\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BarChart = _resolveComponent(\"BarChart\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_BarChart, _mergeProps(_ctx.barChartProps, { class: \"bar-chart\" }), null, 16)\n ]))\n}","export const formatDuration = (\n totalSeconds: number,\n formatWithUnits = false\n): string => {\n let days = '0'\n if (formatWithUnits) {\n days = String(Math.floor(totalSeconds / 86400))\n totalSeconds %= 86400\n }\n const hours = String(Math.floor(totalSeconds / 3600)).padStart(2, '0')\n totalSeconds %= 3600\n const minutes = String(Math.floor(totalSeconds / 60)).padStart(2, '0')\n const seconds = String(totalSeconds % 60).padStart(2, '0')\n if (formatWithUnits) {\n return `${days === '0' ? '' : `${days}d `}${\n hours === '00' ? '' : `${hours}h `\n }${minutes}m ${seconds}s`\n }\n return `${hours === '00' ? '' : `${hours}:`}${minutes}:${seconds}`\n}\n","import { TStatisticsDatasetKeys } from '@/types/statistics'\nimport { formatDuration } from '@/utils/duration'\nimport { units } from '@/utils/units'\n\nexport const formatTooltipValue = (\n displayedData: TStatisticsDatasetKeys,\n value: number,\n useImperialUnits: boolean,\n formatWithUnits = true,\n unitFrom = 'km'\n): string => {\n const unitTo = useImperialUnits ? units[unitFrom].defaultTarget : unitFrom\n switch (displayedData) {\n case 'average_speed':\n return `${value.toFixed(2)} ${unitTo}/h`\n case 'total_duration':\n return formatDuration(value, formatWithUnits)\n case 'total_distance':\n case 'total_ascent':\n case 'total_descent':\n return `${value.toFixed(2)} ${unitTo}`\n default:\n return value.toString()\n }\n}\n","\n import { ChartData, ChartOptions, LayoutItem } from 'chart.js'\n import { ComputedRef, PropType, computed, defineComponent } from 'vue'\n import { BarChart, useBarChart } from 'vue-chart-3'\n import { useI18n } from 'vue-i18n'\n\n import { IChartDataset } from '@/types/chart'\n import { TStatisticsDatasetKeys } from '@/types/statistics'\n import { formatTooltipValue } from '@/utils/tooltip'\n\n export default defineComponent({\n name: 'Chart',\n components: {\n BarChart,\n },\n props: {\n datasets: {\n type: Object as PropType,\n required: true,\n },\n labels: {\n type: Object as PropType,\n required: true,\n },\n displayedData: {\n type: String as PropType,\n required: true,\n },\n displayedSportIds: {\n type: Array as PropType,\n required: true,\n },\n fullStats: {\n type: Boolean,\n required: true,\n },\n useImperialUnits: {\n type: Boolean,\n required: true,\n },\n },\n setup(props) {\n const { t } = useI18n()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function getNumber(value: any): number {\n return isNaN(value) ? 0 : +value\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function getSum(total: any, value: any): number {\n return getNumber(total) + getNumber(value)\n }\n function getUnit(displayedData: string) {\n return ['total_ascent', 'total_descent'].includes(displayedData)\n ? 'm'\n : 'km'\n }\n const chartData: ComputedRef> = computed(() => ({\n labels: props.labels,\n // workaround to avoid dataset modification\n datasets: JSON.parse(JSON.stringify(props.datasets)),\n }))\n const options = computed>(() => ({\n responsive: true,\n maintainAspectRatio: true,\n animation: false,\n layout: {\n padding: {\n top: props.fullStats ? 40 : 22,\n },\n },\n scales: {\n x: {\n stacked: true,\n grid: {\n drawOnChartArea: false,\n },\n },\n y: {\n stacked: props.displayedData !== 'average_speed',\n grid: {\n drawOnChartArea: false,\n },\n ticks: {\n maxTicksLimit: 6,\n callback: function (value) {\n return formatTooltipValue(\n props.displayedData,\n +value,\n props.useImperialUnits,\n false,\n getUnit(props.displayedData)\n )\n },\n },\n afterFit: function (scale: LayoutItem) {\n scale.width = props.fullStats ? 90 : 60\n },\n },\n },\n plugins: {\n datalabels: {\n anchor: 'end',\n align: 'end',\n color: function (context) {\n return props.displayedData === 'average_speed' &&\n context.dataset.backgroundColor\n ? // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n context.dataset.backgroundColor[0]\n : '#666666'\n },\n rotation: function (context) {\n return props.fullStats && context.chart.chartArea.width < 580\n ? 310\n : 0\n },\n display: function (context) {\n return props.fullStats && context.chart.chartArea.width < 300\n ? false\n : props.displayedData === 'average_speed'\n ? props.displayedSportIds.length == 1\n ? 'auto'\n : false\n : true\n },\n formatter: function (value, context) {\n if (props.displayedData === 'average_speed') {\n return formatTooltipValue(\n props.displayedData,\n value,\n props.useImperialUnits,\n false\n )\n } else {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const total: number = context.chart.data.datasets\n .map((d) => d.data[context.dataIndex])\n .reduce((total, value) => getSum(total, value), 0)\n return context.datasetIndex ===\n props.displayedSportIds.length - 1 && total > 0\n ? formatTooltipValue(\n props.displayedData,\n total,\n props.useImperialUnits,\n false,\n getUnit(props.displayedData)\n )\n : null\n }\n },\n },\n legend: {\n display: false,\n },\n tooltip: {\n interaction: {\n intersect: true,\n mode: 'index',\n position:\n props.displayedData === 'average_speed' ? 'nearest' : 'average',\n },\n filter: function (tooltipItem) {\n return tooltipItem.formattedValue !== '0'\n },\n callbacks: {\n label: function (context) {\n let label = t(`sports.${context.dataset.label}.LABEL`) || ''\n if (label) {\n label += ': '\n }\n if (context.parsed.y !== null) {\n label += formatTooltipValue(\n props.displayedData,\n context.parsed.y,\n props.useImperialUnits,\n true,\n getUnit(props.displayedData)\n )\n }\n return label\n },\n footer: function (tooltipItems) {\n if (props.displayedData === 'average_speed') {\n return ''\n }\n let sum = 0\n tooltipItems.map((tooltipItem) => {\n sum += tooltipItem.parsed.y\n })\n return (\n `${t('common.TOTAL')}: ` +\n formatTooltipValue(\n props.displayedData,\n sum,\n props.useImperialUnits,\n true,\n getUnit(props.displayedData)\n )\n )\n },\n },\n },\n },\n }))\n const { barChartProps } = useBarChart({\n chartData,\n options,\n })\n return { barChartProps }\n },\n })\n","import { render } from \"./Chart.vue?vue&type=template&id=6c8b76cd&ts=true\"\nimport script from \"./Chart.vue?vue&type=script&lang=ts\"\nexport * from \"./Chart.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n import { format } from 'date-fns'\n import {\n ComputedRef,\n PropType,\n Ref,\n computed,\n defineComponent,\n ref,\n watch,\n onBeforeMount,\n } from 'vue'\n\n import Chart from '@/components/Common/StatsChart/Chart.vue'\n import { STATS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import {\n IStatisticsChartData,\n TStatisticsDatasetKeys,\n IStatisticsDateParams,\n TStatisticsFromApi,\n IStatisticsParams,\n } from '@/types/statistics'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatStats } from '@/utils/statistics'\n\n export default defineComponent({\n name: 'UserMonthStats',\n components: {\n Chart,\n },\n props: {\n sports: {\n type: Object as PropType,\n required: true,\n },\n user: {\n type: Object as PropType,\n required: true,\n },\n chartParams: {\n type: Object as PropType,\n required: true,\n },\n displayedSportIds: {\n type: Array as PropType,\n default: () => [],\n },\n fullStats: {\n type: Boolean,\n default: false,\n },\n hideChartIfNoData: {\n type: Boolean,\n default: false,\n },\n },\n setup(props) {\n const store = useStore()\n\n const displayedData: Ref = ref('total_distance')\n const statistics: ComputedRef = computed(\n () => store.getters[STATS_STORE.GETTERS.USER_STATS]\n )\n const formattedStats: ComputedRef = computed(() =>\n formatStats(\n props.chartParams,\n props.user.weekm,\n props.sports,\n props.displayedSportIds,\n statistics.value,\n props.user.imperial_units,\n props.user.date_format\n )\n )\n\n onBeforeMount(() =>\n getStatistics(getApiParams(props.chartParams, props.user))\n )\n\n function getStatistics(apiParams: IStatisticsParams) {\n store.dispatch(STATS_STORE.ACTIONS.GET_USER_STATS, {\n username: props.user.username,\n filterType: 'by_time',\n params: apiParams,\n })\n }\n function updateDisplayData(\n event: Event & {\n target: HTMLInputElement & { name: TStatisticsDatasetKeys }\n }\n ) {\n displayedData.value = event.target.name\n }\n function getApiParams(\n chartParams: IStatisticsDateParams,\n user: IAuthUserProfile\n ): IStatisticsParams {\n return {\n from: format(chartParams.start, 'yyyy-MM-dd'),\n to: format(chartParams.end, 'yyyy-MM-dd'),\n time:\n chartParams.duration === 'week'\n ? `week${user.weekm ? 'm' : ''}`\n : chartParams.duration,\n }\n }\n\n watch(\n () => props.chartParams,\n async (newParams) => {\n getStatistics(getApiParams(newParams, props.user))\n }\n )\n\n return {\n datasets: computed(\n () => formattedStats.value.datasets[displayedData.value]\n ),\n labels: computed(() => formattedStats.value.labels),\n emptyStats: computed(() => Object.keys(statistics.value).length === 0),\n displayedData,\n updateDisplayData,\n }\n },\n })\n","import { render } from \"./index.vue?vue&type=template&id=d5e9b348&scoped=true&ts=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=d5e9b348&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-d5e9b348\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-20291951\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"box user-header\" }\nconst _hoisted_2 = { class: \"user-details\" }\nconst _hoisted_3 = { class: \"user-name\" }\nconst _hoisted_4 = { class: \"user-stats\" }\nconst _hoisted_5 = { class: \"user-stat\" }\nconst _hoisted_6 = { class: \"stat-number\" }\nconst _hoisted_7 = { class: \"stat-label\" }\nconst _hoisted_8 = { class: \"user-stat\" }\nconst _hoisted_9 = { class: \"stat-label\" }\nconst _hoisted_10 = { class: \"user-stat hide-small\" }\nconst _hoisted_11 = { class: \"stat-number\" }\nconst _hoisted_12 = { class: \"stat-label\" }\n\nimport { computed, ComputedRef, toRefs } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE } from '@/store/constants'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserHeader',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const { user } = toRefs(props)\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_unref(user).username), 1),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"span\", _hoisted_6, _toDisplayString(_unref(user).nb_workouts), 1),\n _createElementVNode(\"span\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.WORKOUT', _unref(user).nb_workouts)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createVNode(_component_Distance, {\n distance: _unref(user).total_distance,\n unitFrom: \"km\",\n digits: 0,\n displayUnit: false,\n useImperialUnits: _unref(authUser).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_unref(authUser).imperial_units ? 'miles' : 'km'), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_unref(user).nb_sports), 1),\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('workouts.SPORT', _unref(user).nb_sports)), 1)\n ])\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./UserHeader.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserHeader.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserHeader.vue?vue&type=style&index=0&id=20291951&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-20291951\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-217519af\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"user-infos\",\n class: \"description-list\"\n}\nconst _hoisted_2 = {\n key: 1,\n class: \"info-box success-message\"\n}\nconst _hoisted_3 = {\n key: 4,\n class: \"email-form form-box\"\n}\nconst _hoisted_4 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_5 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_6 = { class: \"form-buttons\" }\nconst _hoisted_7 = {\n class: \"confirm\",\n type: \"submit\"\n}\nconst _hoisted_8 = [\"onClick\"]\nconst _hoisted_9 = { key: 5 }\nconst _hoisted_10 = { class: \"user-bio\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"profile-buttons\"\n}\nconst _hoisted_12 = [\"onClick\"]\nconst _hoisted_13 = {\n key: 1,\n class: \"profile-buttons\"\n}\n\nimport { format } from 'date-fns'\n import {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n withDefaults,\n watch,\n onUnmounted,\n } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate, getDateFormat } from '@/utils/dates'\n import { localeFromLanguage } from '@/utils/locales'\n\n interface Props {\n user: IUserProfile\n fromAdmin?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserInfos',\n props: {\n user: null,\n fromAdmin: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { user: IUserProfile, fromAdmin: boolean }\n\n \n\n const store = useStore()\n\n const { user, fromAdmin } = toRefs(props)\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const registrationDate = computed(() =>\n props.user.created_at\n ? formatDate(\n props.user.created_at,\n authUser.value.timezone,\n authUser.value.date_format\n )\n : ''\n )\n const birthDate = computed(() =>\n props.user.birth_date\n ? format(\n new Date(props.user.birth_date),\n `${getDateFormat(authUser.value.date_format, language.value)}`,\n { locale: localeFromLanguage[language.value] }\n )\n : ''\n )\n const isSuccess = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS_IS_SUCCESS]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const displayModal: Ref = ref('')\n const formErrors = ref(false)\n const displayUserEmailForm: Ref = ref(false)\n const newUserEmail: Ref = ref('')\n const currentAction: Ref = ref('')\n\n function updateDisplayModal(value: string) {\n displayModal.value = value\n if (value !== '') {\n store.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n }\n }\n function deleteUserAccount(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.DELETE_USER_ACCOUNT, { username })\n }\n function resetUserPassword(username: string) {\n currentAction.value = 'password-reset'\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n resetPassword: true,\n })\n }\n function confirmUserAccount(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n activate: true,\n })\n }\n function displayEmailForm() {\n resetErrorsAndSuccess()\n newUserEmail.value = user.value.email_to_confirm\n ? user.value.email_to_confirm\n : ''\n displayUserEmailForm.value = true\n currentAction.value = 'email-update'\n }\n function hideEmailForm() {\n newUserEmail.value = ''\n displayUserEmailForm.value = false\n }\n function updateUserEmail(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n new_email: newUserEmail.value,\n })\n }\n function resetErrorsAndSuccess() {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n currentAction.value = ''\n }\n\n onUnmounted(() => resetErrorsAndSuccess())\n\n watch(\n () => isSuccess.value,\n (newIsSuccess) => {\n if (newIsSuccess) {\n updateDisplayModal('')\n hideEmailForm()\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_AlertMessage = _resolveComponent(\"AlertMessage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: \n displayModal.value === 'delete'\n ? 'admin.CONFIRM_USER_ACCOUNT_DELETION'\n : 'admin.CONFIRM_USER_PASSWORD_RESET'\n ,\n strongMessage: _unref(user).username,\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (\n displayModal.value === 'delete'\n ? deleteUserAccount(_unref(user).username)\n : resetUserPassword(_unref(user).username)\n )),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal('')))\n }, null, 8, [\"title\", \"message\", \"strongMessage\"]))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\n `admin.${\n currentAction.value === 'password-reset'\n ? 'PASSWORD_RESET'\n : 'USER_EMAIL_UPDATE'\n }_SUCCESSFUL`\n )), 1))\n : _createCommentVNode(\"\", true),\n (!_unref(user).is_active)\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 2,\n message: \"user.THIS_USER_ACCOUNT_IS_INACTIVE\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 3,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (displayUserEmailForm.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (updateUserEmail(_unref(user).username)), [\"prevent\"]))\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.CURRENT_EMAIL')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"email\",\n type: \"email\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_unref(user).email) = $event)),\n disabled: \"\"\n }, null, 512), [\n [_vModelText, _unref(user).email]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_5, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.NEW_EMAIL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"new-email\",\n type: \"email\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((newUserEmail).value = $event))\n }, null, 512), [\n [_vModelText, newUserEmail.value]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"button\", _hoisted_7, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(hideEmailForm, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_8)\n ])\n ], 34)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(registrationDate)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).first_name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LAST_NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).last_name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.BIRTH_DATE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(birthDate)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LOCATION')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).location), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.BIO')) + \":\", 1),\n _createElementVNode(\"dd\", _hoisted_10, _toDisplayString(_unref(user).bio), 1)\n ]),\n (_unref(fromAdmin))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n (_unref(authUser).username !== _unref(user).username)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"danger\",\n onClick: _cache[5] || (_cache[5] = _withModifiers(($event: any) => (updateDisplayModal('delete')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.DELETE_USER')), 1))\n : _createCommentVNode(\"\", true),\n (!_unref(user).is_active)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 1,\n onClick: _cache[6] || (_cache[6] = _withModifiers(($event: any) => (confirmUserAccount(_unref(user).username)), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.ACTIVATE_USER_ACCOUNT')), 1))\n : _createCommentVNode(\"\", true),\n (_unref(authUser).username !== _unref(user).username)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 2,\n onClick: _withModifiers(displayEmailForm, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('admin.UPDATE_USER_EMAIL')), 9, _hoisted_12))\n : _createCommentVNode(\"\", true),\n (\n _unref(authUser).username !== _unref(user).username &&\n _unref(appConfig).is_email_sending_enabled\n )\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 3,\n onClick: _cache[7] || (_cache[7] = _withModifiers(($event: any) => (updateDisplayModal('reset')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.RESET_USER_PASSWORD')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.$router.go(-1)))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createElementVNode(\"button\", {\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.$router.push('/profile/edit')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]))\n ]))\n}\n}\n\n})","import script from \"./UserInfos.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserInfos.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserInfos.vue?vue&type=style&index=0&id=217519af&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-217519af\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, withDirectives as _withDirectives, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-b3c885de\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-form\" }\nconst _hoisted_2 = {\n key: 2,\n class: \"info-box success-message\"\n}\nconst _hoisted_3 = { class: \"form-items\" }\nconst _hoisted_4 = [\"disabled\", \"placeholder\"]\nconst _hoisted_5 = {\n key: 1,\n class: \"form-info\"\n}\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = [\"disabled\", \"placeholder\"]\nconst _hoisted_8 = {\n key: 3,\n class: \"form-info\"\n}\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = { key: 3 }\nconst _hoisted_12 = { key: 0 }\nconst _hoisted_13 = { key: 4 }\nconst _hoisted_14 = { class: \"account\" }\nconst _hoisted_15 = { key: 5 }\n\nimport {\n ComputedRef,\n computed,\n onUnmounted,\n reactive,\n ref,\n toRefs,\n watch,\n withDefaults,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import PasswordInput from '@/components/Common/PasswordInput.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { ILoginRegisterFormData } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n action: string\n token?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAuthForm',\n props: {\n action: null,\n token: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { action: string, token: string }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { action } = toRefs(props)\n const formData: ILoginRegisterFormData = reactive({\n username: '',\n email: '',\n password: '',\n })\n const buttonText: ComputedRef = computed(() =>\n getButtonText(props.action)\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const isRegistrationSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_REGISTRATION_SUCCESS]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const registration_disabled: ComputedRef = computed(\n () =>\n props.action === 'register' && !appConfig.value.is_registration_enabled\n )\n const sendingEmailDisabled: ComputedRef = computed(\n () =>\n ['reset-request', 'account-confirmation-resend'].includes(props.action) &&\n !appConfig.value.is_email_sending_enabled\n )\n const formErrors = ref(false)\n\n function getButtonText(action: string): string {\n switch (action) {\n case 'reset-request':\n case 'reset':\n return 'buttons.SUBMIT'\n default:\n return `buttons.${props.action.toUpperCase()}`\n }\n }\n function invalidateForm() {\n formErrors.value = true\n }\n function updatePassword(password: string) {\n formData.password = password\n }\n function onSubmit(actionType: string) {\n switch (actionType) {\n case 'reset':\n if (!props.token) {\n return store.commit(\n ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES,\n 'user.INVALID_TOKEN'\n )\n }\n return store.dispatch(AUTH_USER_STORE.ACTIONS.RESET_USER_PASSWORD, {\n password: formData.password,\n token: props.token,\n })\n case 'reset-request':\n return store.dispatch(\n AUTH_USER_STORE.ACTIONS.SEND_PASSWORD_RESET_REQUEST,\n {\n email: formData.email,\n }\n )\n case 'account-confirmation-resend':\n return store.dispatch(\n AUTH_USER_STORE.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL,\n {\n email: formData.email,\n }\n )\n default:\n formData['language'] = language.value\n store.dispatch(AUTH_USER_STORE.ACTIONS.LOGIN_OR_REGISTER, {\n actionType,\n formData,\n redirectUrl: route.query.from,\n })\n }\n }\n function resetFormData() {\n formData.username = ''\n formData.email = ''\n formData.password = ''\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\n watch(\n () => route.path,\n async () => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n store.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n false\n )\n formErrors.value = false\n resetFormData()\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_AlertMessage = _resolveComponent(\"AlertMessage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n id: \"user-auth-form\",\n class: _normalizeClass(`${\n ['reset', 'reset-request'].includes(_unref(action)) ? _unref(action) : 'user-form'\n }`)\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"form-box\", {\n disabled: _unref(registration_disabled),\n }])\n }, [\n (_unref(registration_disabled))\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 0,\n message: \"user.REGISTER_DISABLED\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(sendingEmailDisabled))\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 1,\n message: \"admin.EMAIL_SENDING_DISABLED\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess) || _unref(isRegistrationSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\n `user.PROFILE.SUCCESSFUL_${\n _unref(isRegistrationSuccess)\n ? `REGISTRATION${\n _unref(appConfig).is_email_sending_enabled ? '_WITH_EMAIL' : ''\n }`\n : 'UPDATE'\n }`\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (onSubmit(_unref(action))), [\"prevent\"]))\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(action) === 'register')\n ? _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n id: \"username\",\n disabled: _unref(registration_disabled),\n required: \"\",\n pattern: \"[a-zA-Z0-9_]+\",\n minlength: \"3\",\n maxlength: \"30\",\n onInvalid: invalidateForm,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((formData.username) = $event)),\n placeholder: _ctx.$t('user.USERNAME')\n }, null, 40, _hoisted_4)), [\n [_vModelText, formData.username]\n ])\n : _createCommentVNode(\"\", true),\n (_unref(action) === 'register')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _hoisted_6,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.USERNAME_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(action) !== 'reset')\n ? _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 2,\n id: \"email\",\n disabled: _unref(registration_disabled) || _unref(sendingEmailDisabled),\n required: \"\",\n onInvalid: invalidateForm,\n type: \"email\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((formData.email) = $event)),\n placeholder: _ctx.$t('user.EMAIL')\n }, null, 40, _hoisted_7)), [\n [_vModelText, formData.email]\n ])\n : _createCommentVNode(\"\", true),\n (\n [\n 'reset-request',\n 'register',\n 'account-confirmation-resend',\n ].includes(_unref(action))\n )\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _hoisted_9,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.EMAIL_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (\n !['account-confirmation-resend', 'reset-request'].includes(\n _unref(action)\n )\n )\n ? (_openBlock(), _createBlock(PasswordInput, {\n key: 4,\n disabled: _unref(registration_disabled),\n required: true,\n placeholder: \n _unref(action) === 'reset'\n ? _ctx.$t('user.ENTER_PASSWORD')\n : _ctx.$t('user.PASSWORD')\n ,\n password: formData.password,\n checkStrength: ['reset', 'register'].includes(_unref(action)),\n onUpdatePassword: updatePassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"placeholder\", \"password\", \"checkStrength\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"button\", {\n type: \"submit\",\n disabled: _unref(registration_disabled) || _unref(sendingEmailDisabled)\n }, _toDisplayString(_ctx.$t(_unref(buttonText))), 9, _hoisted_10)\n ], 34),\n (_unref(action) === 'login')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/register\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.REGISTER')), 1)\n ]),\n _: 1\n }),\n (_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_12, \"-\"))\n : _createCommentVNode(\"\", true),\n (_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n class: \"links\",\n to: \"/password-reset/request\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PASSWORD_FORGOTTEN')), 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(action) === 'register')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('user.ALREADY_HAVE_ACCOUNT')), 1),\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/login\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.LOGIN')), 1)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (\n ['login', 'register'].includes(_unref(action)) &&\n _unref(appConfig).is_email_sending_enabled\n )\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/account-confirmation/resend\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.ACCOUNT_CONFIRMATION_NOT_RECEIVED')), 1)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 6,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ])\n ], 2))\n}\n}\n\n})","import script from \"./UserAuthForm.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAuthForm.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAuthForm.vue?vue&type=style&index=0&id=b3c885de&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b3c885de\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"user-picture\" }\nconst _hoisted_2 = [\"alt\", \"src\"]\nconst _hoisted_3 = {\n key: 1,\n class: \"no-picture\"\n}\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-user-circle-o\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_5 = [\n _hoisted_4\n]\n\nimport { computed } from 'vue'\n\n import { IUserProfile } from '@/types/user'\n import { getApiUrl } from '@/utils'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPicture',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const authUserPictureUrl = computed(() =>\n props.user.picture\n ? `${getApiUrl()}users/${props.user.username}/picture?${Date.now()}`\n : ''\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(authUserPictureUrl) !== '')\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n class: \"profile-user-img\",\n alt: _ctx.$t('user.USER_PICTURE'),\n src: _unref(authUserPictureUrl)\n }, null, 8, _hoisted_2))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _hoisted_5))\n ]))\n}\n}\n\n})","import script from \"./UserPicture.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPicture.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPicture.vue?vue&type=style&index=0&id=26bea286&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","\n\n\n","import { render } from \"./NoWorkouts.vue?vue&type=template&id=4b4d15fb&scoped=true\"\nconst script = {}\n\nimport \"./NoWorkouts.vue?vue&type=style&index=0&id=4b4d15fb&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4b4d15fb\"]])\n\nexport default __exports__","var map = {\n\t\"./de/de.ts\": 9923,\n\t\"./en/en.ts\": 8757,\n\t\"./fr/fr.ts\": 6625,\n\t\"./nb/nb.ts\": 8891\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 4612;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + ({\"24\":\"reset\",\"193\":\"statistics\",\"328\":\"admin\",\"401\":\"workouts\",\"845\":\"profile\",\"881\":\"password\"}[chunkId] || chunkId) + \".\" + {\"24\":\"f6540a23\",\"93\":\"02cf293c\",\"193\":\"faaccb1e\",\"243\":\"e551248f\",\"328\":\"c8949458\",\"401\":\"f1d6cc45\",\"431\":\"e5102e07\",\"633\":\"81a8ddc8\",\"845\":\"ff8ee2f9\",\"858\":\"3f2a93f2\",\"881\":\"43430dfc\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/css/\" + {\"24\":\"reset\",\"193\":\"statistics\",\"328\":\"admin\",\"401\":\"workouts\",\"845\":\"profile\"}[chunkId] + \".\" + {\"24\":\"e2527ec6\",\"193\":\"40e24e75\",\"328\":\"73df498d\",\"401\":\"41709693\",\"845\":\"203e78e2\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"fittrackee_client:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"24\":1,\"193\":1,\"328\":1,\"401\":1,\"845\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkfittrackee_client\"] = self[\"webpackChunkfittrackee_client\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(4970); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["authApi","axios","baseURL","getApiUrl","interceptors","request","use","config","controller","AbortController","signal","requestKey","removeRequestIfPending","pendingRequests","authToken","store","AUTH_USER_STORE","auth","headers","Authorization","error","Promise","reject","response","message","Map","generateRequestKey","method","url","params","data","JSON","stringify","join","has","get","abort","delete","disabledLanguages","loadLocaleMessages","locales","require","messages","keys","forEach","key","matched","match","length","includes","locale","default","createI18n","legacy","fallbackLocale","globalInjection","ctx","normalize","_normalize","interpolate","_interpolate","list","_list","plural","_plural","about","AboutTranslations","admin","AdministrationTranslations","api","ApiTranslations","buttons","ButtonsTranslations","common","CommonTranslations","dashboard","DashboardTranslations","ErrorTranslations","oauth2","OAuth2Translations","sports","SportsTranslations","statistics","StatisticsTranslations","user","UserTranslations","workouts","WorkoutsTranslations","register","ready","console","log","registered","cached","updatefound","updated","offline","_withScopeId","n","_pushScopeId","_popScopeId","_hoisted_1","id","_hoisted_2","class","_hoisted_3","_hoisted_4","_createElementVNode","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","href","target","rel","_defineComponent","__name","props","version","adminContact","setup","__props","toRefs","_ctx","_cache","_component_router_link","_resolveComponent","_openBlock","_createElementBlock","_createTextVNode","_toDisplayString","_unref","_createVNode","to","_withCtx","$t","_","_createCommentVNode","__exports__","emits","emit","useStore","authUser","computed","getters","isAuthenticated","language","ROOT_STORE","isMenuOpen","ref","openMenu","value","closeMenu","updateLanguage","option","dispatch","toString","logout","_component_Dropdown","onClick","$event","$router","push","_normalizeClass","capitalize","_createBlock","UserPicture","username","availableLanguages","options","selected","onSelected","ErrorImg","innerHTML","appConfig","appLoading","hideScrollBar","displayScrollButton","updateHideScrollBar","isScrolledToBottom","element","getBoundingClientRect","top","window","innerHeight","bottom","scroll","onscroll","document","querySelector","scrollToTop","scrollTo","behavior","setTimeout","initLanguage","navigatorLanguage","navigator","split","localeFromLanguage","e","onBeforeMount","onMounted","_component_Loader","_component_router_view","_Fragment","NavBar","onMenuInteraction","NoConfig","Footer","admin_contact","name","charLimit","disabled","type","Boolean","input","text","updateText","event","watch","_withDirectives","maxLenght","onInput","_vModelText","distance","unitFrom","useImperialUnits","digits","displayUnit","speed","strong","unitTo","units","defaultTarget","convertedDistance","convertDistance","parseFloat","toFixed","route","useRoute","isOpen","dropdownOptions","map","toggleDropdown","updateSelected","path","_renderSlot","$slots","_renderList","index","label","Array","isArray","subMessage","xmlns","x","y","viewBox","style","d","render","cx","cy","r","sportLabel","color","title","sportColors","inject","_normalizeStyle","fill","CyclingSport","CyclingTransport","CyclingVirtual","Hiking","MountainBiking","MountainBikingElectric","Rowing","Running","SkiingAlpine","SkiingCrossCountry","Snowshoes","Trail","Walking","script","strongMessage","errorMessages","onUnmounted","commit","_component_i18n_t","_component_ErrorMessage","_component_Card","content","keypath","customComponents","AlertMessage","Card","CustomTextArea","Distance","Dropdown","ErrorMessage","Loader","Modal","SportImage","clickOutsideDirective","mounted","binding","clickOutsideEvent","contains","body","addEventListener","unmounted","removeEventListener","undefined","Chart","BarElement","LineElement","PointElement","Legend","Title","Tooltip","Filler","BarController","CategoryScale","LineController","LinearScale","ChartDataLabels","app","createApp","App","provide","i18n","router","VueFullscreen","directive","component","mount","for","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","edition","useRouter","appData","reactive","max_users","max_single_file_size","max_zip_file_size","gpx_limit_import","updateForm","Object","getFileSizeInMB","onCancel","onSubmit","formData","assign","_withModifiers","min","step","icon","appStatistics","uploadDirSize","getReadableFileSize","uploads_dir_size","StatCard","users","size","suffix","AppStatsCards","is_registration_enabled","is_email_sending_enabled","t","useI18n","translatedSports","translateSports","SPORTS_STORE","updateSportStatus","isActive","_component_SportImage","sport","translatedLabel","is_active","danger","has_workouts","query","q","searchUsers","resetFilter","onKeyup","_withKeys","placeholder","trim","orderByList","defaultOrderBy","getQuery","USERS_STORE","pagination","loadUsers","queryParams","reloadUsers","updateUser","queryParam","queryValue","page","newQuery","UsersNameFilter","onFilterOnUsername","FilterSelects","sort","sortList","order_by","onUpdateSelect","email","formatDate","created_at","timezone","date_format","nb_workouts","Pagination","tabs","selectedTab","getPath","tab","toLocaleLowerCase","checked","UserHeader","UserProfileTabs","appLanguage","userLanguage","languageLabels","fistDayOfWeek","weekm","display_ascent","getDateFormat","imperial_units","loading","userForm","password","new_password","isSuccess","emailUpdate","formErrors","displayModal","invalidateForm","updateUserForm","updatePassword","updateNewPassword","updateProfile","payload","updateDisplayModal","deleteAccount","async","isSuccessValue","_component_Modal","onConfirmAction","onCancelAction","errors","required","onInvalid","PasswordInput","onUpdatePassword","onPasswordError","checkStrength","first_name","last_name","birth_date","location","bio","registrationDate","format","Date","updateBio","_component_CustomTextArea","onUpdateValue","fileSizeLimit","pictureFile","deleteUserPicture","updatePictureFile","files","updateUserPicture","picture","accept","timeZones","tzList","focusItemIndex","matchTimezone","toLowerCase","onMouseOver","onUpdateTimezone","onEnter","preventDefault","firstElementChild","openDropdown","onKeydown","ref_key","filter","tz","focus","onMouseover","autofocus","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","weekStart","imperialUnits","ascentData","dateFormatOptions","availableDateFormatOptions","toUTCString","updateTZ","updateAscentDisplay","updateImperialUnit","updateWeekM","lang","_vModelSelect","TimezoneDropdown","dateFormat","start","unit","status","oauth2_scopes","admin_oauth2_scopes","appForm","client_name","client_uri","client_description","redirect_uri","scopes","filtered_scopes","getScopes","redirect_uris","scope","OAUTH2_STORE","updateDescription","updateScopes","indexOf","splice","admin_scopes","description","onChange","client","loadApp","client_id","authorizeApp","response_type","state","code_challenge","code_challenge_method","afterCreation","revocationSuccessful","messageToDisplay","idCopied","secretCopied","clipboardSupport","loadClient","updateMessageToDisplay","forDelete","confirmAction","clientId","copyIdToClipboard","clipboard","writeText","copySecretToClipboard","client_secret","newValue","issued_at","website","clients","getClientsQuery","clientsQuery","getNumberQueryValue","defaultPage","loadClients","isEdition","defaultColor","sports_list","sportPayload","sport_id","stopped_speed_threshold","updateSportInEdition","is_active_for_user","resetSportPayload","isSportInEdition","sportId","updateColor","updateThreshold","updateIsActive","updateSport","resetSport","newIsLoading","src","alt","BikePic","About","workout","_component_Distance","workoutId","workout_date","formatDistance","addSuffix","with_gpx","StaticMap","moving","min_alt","max_alt","ascent","descent","per_page","initWorkoutsCount","loadWorkouts","WORKOUTS_STORE","moreWorkoutsExist","previous_workout","defaultOrder","loadMoreWorkouts","WorkoutCard","s","NoWorkouts","displayHARecord","sportColor","records","record","record_type","height","width","colors","datasets","angleOffset","radius","circumference","Math","PI","calculateStrokeDashOffset","percentage","returnCircleTransformValue","rotation","entries","stroke","transform","isHidden","togglePane","stopPropagation","_directive_click_outside","_resolveDirective","DonutChart","CalendarWorkout","getSportLabel","getSportColor","chartDatasets","getDonutDatasets","sportIdColors","displayedWorkoutCount","slice","CalendarWorkoutsChart","currentDay","endDate","startDate","weekStartingMonday","rows","getDays","day","days","i","addDays","isWeekEnd","filterWorkouts","isSameDay","getDateWithTZ","reverse","row","isSameMonth","today","isToday","CalendarWorkouts","localeOptions","calendarDates","getCalendarStartAndEnd","calendarWorkouts","getCalendarWorkouts","apiParams","from","end","displayNextMonth","addMonths","displayPreviousMonth","subMonths","CalendarHeader","onDisplayNextMonth","onDisplayPreviousMonth","CalendarDays","CalendarCells","date","chartParams","duration","startOfMonth","endOfMonth","selectedSportIds","StatChart","formatRecord","distanceUnitFrom","distanceUnitTo","ascentUnitFrom","ascentUnitTo","Error","workout_id","sortRecords","a","b","recordALabel","recordBLabel","getRecordsBySports","reduce","sportList","find","sportTranslatedLabel","getTranslatedRecords","translatedRecords","recordsBySport","RecordsCard","userTotalDuration","total_duration","totalDuration","get_duration","totalDistance","total_distance","totalAscent","total_ascent","nb_sports","isSelected","updateDisplayColumn","UserStatsCards","UserMonthStats","UserRecords","UserCalendar","Timeline","NotFound","action","LoginOrRegisterForm","getTabFromPath","regex","tag","replace","toUpperCase","routes","Dashboard","LoginOrRegister","children","Profile","UserInfos","UserPreferences","UserSportPreferences","UserApps","UserAppsList","UserApp","AddUserApp","AuthorizeUserApp","ProfileEdition","UserInfosEdition","UserAccountEdition","UserPictureEdition","UserPreferencesEdition","displaySegment","AdminMenu","AdminApplication","AdminSports","fromAdmin","AdminUsers","AboutView","NotFoundView","createRouter","history","createWebHistory","process","pathsWithoutAuthentication","pathsWithoutChecks","beforeEach","next","then","fullPath","catch","AuthUserActions","AuthUserGetters","AuthUserMutations","OAuth2Actions","OAuth2Getters","OAuth2Mutations","RootActions","RootGetters","RootMutations","SportsActions","SportsGetters","SportsMutation","StatisticsActions","StatisticsGetters","StatisticsMutations","UsersActions","UsersGetters","UsersMutations","ACTIONS","GETTERS","MUTATIONS","STATS_STORE","WorkoutsActions","WorkoutsGetters","WorkoutsMutations","deleteUserAccount","context","res","handleError","actions","finally","resetPassword","reset_password","activate","new_email","removeAuthUserData","localStorage","removeItem","token","auth_token","setItem","refreshUser","actionType","redirectUrl","form","FormData","append","authUserProfile","isRegistrationSuccess","mutations","authUserState","get_client","set","redirect_url","oAuth2State","setAttribute","application","root","enUS","sportsState","filterType","statisticsState","updatedUser","usersState","getWorkouts","segmentUrl","segmentId","segments","chart_data","gpx","file","notes","calendar_workouts","timeline_workouts","user_workouts","workoutData","concat","chartData","workoutsState","modules","authUserModule","oAuthModule","sportsModule","statsModule","usersModule","workoutsModule","createStore","VuexStore","defaultPerPage","defaultValue","getStringQueryValue","availableValues","locationQuery","queryOptions","defaultSort","order","workoutsPayloadKeys","getRange","stop","rangePagination","pages","currentPage","getStartDate","startOfWeek","weekStartsOn","startOfYear","incrementDate","addYears","dateInUTC","utcToZonedTime","monthStart","monthEnd","endOfWeek","formatWorkoutDate","dateTime","timeFormat","workout_time","availableDateFormats","dateStringFormats","de","en","fr","dateString","withTime","inputDate","l","df","suffixes","fileSize","asText","floor","pow","msg","m","availableLocales","sortSports","sportATranslatedLabel","sportBTranslatedLabel","activeStatus","sportsToInclude","dateFormats","week","chart","month","year","datasetKeys","getDateKeys","getStatisticsChartDataset","isLineChart","dataset","backgroundColor","borderColor","spanGaps","getDatasets","displayedSports","average_speed","total_descent","convertStatsValue","datasetKey","convertStatsDistance","formatStats","displayedSportsId","apiStats","userDateFormat","dayKeys","labels","sportsId","displayedSport","getStatsDateParams","timeFrame","subYears","endOfYear","updateChartParams","backward","subWeeks","addWeeks","ft","system","multiplier","mi","km","factors","metric","imperial","borderWidth","yAxisID","elevation","distance_labels","duration_labels","coordinates","latitude","longitude","total","count","perPage","onSelectUpdate","nb","buttonText","timer","errorDisplayed","displayError","clearTimeout","cursor","has_prev","navigate","has_next","active","setZxcvbnOptions","zxcvbnCommonPackage","zxcvbnEnPackage","zxcvbnFrPackage","zxcvbnDePackage","zxcvbnLangPackages","zxcvbnPackage","graphs","adjacencyGraphs","dictionary","zxcvbnOptions","getPasswordStrength","strength","passwordScore","passwordStrength","passwordSuggestions","backgroundSize","calculatePasswordStrength","zxcvbnResult","zxcvbn","score","feedback","suggestions","newLanguageValue","newPassword","max","suggestion","showPassword","passwordValue","togglePassword","invalidPassword","minlength","_vModelDynamic","PasswordStrength","displayHover","imageUrl","backgroundImage","$props","$setup","$data","$options","_component_Chart","hideChartIfNoData","emptyStats","displayedData","args","updateDisplayData","fullStats","displayedSportIds","_component_BarChart","_mergeProps","barChartProps","formatDuration","totalSeconds","formatWithUnits","String","hours","padStart","minutes","seconds","formatTooltipValue","defineComponent","components","BarChart","getNumber","isNaN","getSum","getUnit","parse","responsive","maintainAspectRatio","animation","layout","padding","scales","stacked","grid","drawOnChartArea","ticks","maxTicksLimit","callback","afterFit","scale","plugins","datalabels","anchor","align","chartArea","display","formatter","dataIndex","datasetIndex","legend","tooltip","interaction","intersect","mode","position","tooltipItem","formattedValue","callbacks","parsed","footer","tooltipItems","sum","useBarChart","formattedStats","getStatistics","getApiParams","time","newParams","birthDate","displayUserEmailForm","newUserEmail","currentAction","resetUserPassword","confirmUserAccount","displayEmailForm","resetErrorsAndSuccess","email_to_confirm","hideEmailForm","updateUserEmail","newIsSuccess","_component_AlertMessage","go","getButtonText","registration_disabled","sendingEmailDisabled","resetFormData","pattern","maxlength","authUserPictureUrl","now","webpackContext","req","webpackContextResolve","__webpack_require__","o","code","resolve","module","exports","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","call","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","getter","__esModule","leafPrototypes","getProto","getPrototypeOf","obj","__proto__","this","ns","create","def","current","getOwnPropertyNames","definition","defineProperty","enumerable","f","chunkId","all","promises","u","miniCssF","g","globalThis","Function","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","done","needAttach","scripts","getElementsByTagName","getAttribute","createElement","charset","timeout","nc","onScriptComplete","prev","onerror","onload","doneFns","parentNode","removeChild","bind","head","appendChild","Symbol","toStringTag","p","createStylesheet","fullhref","linkTag","onLinkComplete","errorType","realHref","err","findStylesheet","existingLinkTags","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","promise","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/fittrackee/dist/static/js/profile.430ae7df.js b/fittrackee/dist/static/js/profile.ff8ee2f9.js similarity index 98% rename from fittrackee/dist/static/js/profile.430ae7df.js rename to fittrackee/dist/static/js/profile.ff8ee2f9.js index 380e1baa..67f590bd 100644 --- a/fittrackee/dist/static/js/profile.430ae7df.js +++ b/fittrackee/dist/static/js/profile.ff8ee2f9.js @@ -1,2 +1,2 @@ "use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[845],{4264:function(e,t,r){r.r(t),r.d(t,{default:function(){return m}});r(7658);var n=r(6252),a=r(2262),s=r(3577),u=r(2201),o=r(7167),i=r(5801),c=r(9917);const l={key:0,id:"account-confirmation",class:"center-card with-margin"},E={class:"error-message"};var _=(0,n.aZ)({__name:"AccountConfirmationView",setup(e){const t=(0,u.yj)(),r=(0,u.tv)(),_=(0,c.o)(),d=(0,n.Fl)((()=>_.getters[i.SY.GETTERS.ERROR_MESSAGES])),S=(0,n.Fl)((()=>t.query.token));function m(){S.value?_.dispatch(i.YN.ACTIONS.CONFIRM_ACCOUNT,{token:S.value}):r.push("/")}return(0,n.wF)((()=>m())),(0,n.Ah)((()=>_.commit(i.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(e,t)=>{const r=(0,n.up)("router-link");return(0,a.SU)(d)?((0,n.wg)(),(0,n.iD)("div",l,[(0,n.Wm)(o.Z),(0,n._)("p",E,[(0,n._)("span",null,(0,s.zw)(e.$t("error.SOMETHING_WRONG"))+".",1),(0,n.Wm)(r,{class:"links",to:"/account-confirmation/resend"},{default:(0,n.w5)((()=>[(0,n.Uk)((0,s.zw)(e.$t("buttons.ACCOUNT-CONFIRMATION-RESEND"))+"? ",1)])),_:1})])])):(0,n.kq)("",!0)}}}),d=r(3744);const S=(0,d.Z)(_,[["__scopeId","data-v-785df978"]]);var m=S},8160:function(e,t,r){r.r(t),r.d(t,{default:function(){return m}});r(7658);var n=r(6252),a=r(2262),s=r(3577),u=r(2201),o=r(7167),i=r(5801),c=r(9917);const l={key:0,id:"email-update",class:"center-card with-margin"},E={class:"error-message"};var _=(0,n.aZ)({__name:"EmailUpdateView",setup(e){const t=(0,u.yj)(),r=(0,u.tv)(),_=(0,c.o)(),d=(0,n.Fl)((()=>_.getters[i.YN.GETTERS.AUTH_USER_PROFILE])),S=(0,n.Fl)((()=>_.getters[i.YN.GETTERS.IS_AUTHENTICATED])),m=(0,n.Fl)((()=>_.getters[i.SY.GETTERS.ERROR_MESSAGES])),p=(0,n.Fl)((()=>t.query.token));function R(){p.value?_.dispatch(i.YN.ACTIONS.CONFIRM_EMAIL,{token:p.value,refreshUser:S.value}):r.push("/")}return(0,n.wF)((()=>R())),(0,n.Ah)((()=>_.commit(i.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(0,n.YP)((()=>m.value),(e=>{d.value.username&&e&&r.push("/")})),(e,t)=>{const r=(0,n.up)("router-link"),u=(0,n.up)("i18n-t");return(0,a.SU)(m)&&!(0,a.SU)(d).username?((0,n.wg)(),(0,n.iD)("div",l,[(0,n.Wm)(o.Z),(0,n._)("p",E,[(0,n._)("span",null,(0,s.zw)(e.$t("error.SOMETHING_WRONG"))+".",1),(0,n._)("span",null,[(0,n.Wm)(u,{keypath:"user.PROFILE.ERRORED_EMAIL_UPDATE"},{default:(0,n.w5)((()=>[(0,n.Wm)(r,{to:"/login"},{default:(0,n.w5)((()=>[(0,n.Uk)((0,s.zw)(e.$t("user.LOG_IN")),1)])),_:1})])),_:1})])])])):(0,n.kq)("",!0)}}}),d=r(3744);const S=(0,d.Z)(_,[["__scopeId","data-v-8c2ec9ce"]]);var m=S},6266:function(e,t,r){r.r(t),r.d(t,{default:function(){return d}});var n=r(6252),a=r(2262),s=r(5801),u=r(9917);const o=e=>((0,n.dD)("data-v-05463732"),e=e(),(0,n.Cn)(),e),i={key:0,id:"profile",class:"container view"},c=o((()=>(0,n._)("div",{id:"bottom"},null,-1)));var l=(0,n.aZ)({__name:"ProfileView",setup(e){const t=(0,u.o)(),r=(0,n.Fl)((()=>t.getters[s.YN.GETTERS.AUTH_USER_PROFILE]));return(e,t)=>{const s=(0,n.up)("router-view");return(0,a.SU)(r).username?((0,n.wg)(),(0,n.iD)("div",i,[(0,n.Wm)(s,{user:(0,a.SU)(r)},null,8,["user"]),c])):(0,n.kq)("",!0)}}}),E=r(3744);const _=(0,E.Z)(l,[["__scopeId","data-v-05463732"]]);var d=_},9453:function(e,t,r){r.r(t),r.d(t,{default:function(){return m}});var n=r(6252),a=r(2262),s=r(2201),u=r(2179),o=r(1585),i=r(5801),c=r(9917);const l={key:0,id:"user",class:"view"},E={class:"box"};var _=(0,n.aZ)({__name:"UserView",props:{fromAdmin:{type:Boolean}},setup(e){const t=e,{fromAdmin:r}=(0,a.BK)(t),_=(0,s.yj)(),d=(0,c.o)(),S=(0,n.Fl)((()=>d.getters[i.RT.GETTERS.USER]));return(0,n.wF)((()=>{_.params.username&&"string"===typeof _.params.username&&d.dispatch(i.RT.ACTIONS.GET_USER,_.params.username)})),(0,n.Jd)((()=>{d.dispatch(i.RT.ACTIONS.EMPTY_USER)})),(e,t)=>(0,a.SU)(S).username?((0,n.wg)(),(0,n.iD)("div",l,[(0,n.Wm)(u.Z,{user:(0,a.SU)(S)},null,8,["user"]),(0,n._)("div",E,[(0,n.Wm)(o.Z,{user:(0,a.SU)(S),"from-admin":(0,a.SU)(r)},null,8,["user","from-admin"])])])):(0,n.kq)("",!0)}}),d=r(3744);const S=(0,d.Z)(_,[["__scopeId","data-v-af7007f4"]]);var m=S}}]); -//# sourceMappingURL=profile.430ae7df.js.map \ No newline at end of file +//# sourceMappingURL=profile.ff8ee2f9.js.map \ No newline at end of file diff --git a/fittrackee/dist/static/js/profile.430ae7df.js.map b/fittrackee/dist/static/js/profile.ff8ee2f9.js.map similarity index 99% rename from fittrackee/dist/static/js/profile.430ae7df.js.map rename to fittrackee/dist/static/js/profile.ff8ee2f9.js.map index 6e39c452..97b1e846 100644 --- a/fittrackee/dist/static/js/profile.430ae7df.js.map +++ b/fittrackee/dist/static/js/profile.ff8ee2f9.js.map @@ -1 +1 @@ -{"version":3,"file":"static/js/profile.430ae7df.js","mappings":"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","sources":["webpack://fittrackee_client/./src/views/user/AccountConfirmationView.vue?226f","webpack://fittrackee_client/./src/views/user/AccountConfirmationView.vue","webpack://fittrackee_client/./src/views/user/EmailUpdateView.vue?502c","webpack://fittrackee_client/./src/views/user/EmailUpdateView.vue","webpack://fittrackee_client/./src/views/user/ProfileView.vue?f4e9","webpack://fittrackee_client/./src/views/user/ProfileView.vue","webpack://fittrackee_client/./src/views/user/UserView.vue?8f92","webpack://fittrackee_client/./src/views/user/UserView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-785df978\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"account-confirmation\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = { class: \"error-message\" }\n\nimport { computed, ComputedRef, onBeforeMount, onUnmounted } from 'vue'\n import { useRoute, LocationQueryValue, useRouter } from 'vue-router'\n\n import ErrorImg from '@/components/Common/Images/ErrorImg.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AccountConfirmationView',\n setup(__props) {\n\n const route = useRoute()\n const router = useRouter()\n const store = useStore()\n\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const token: ComputedRef =\n computed(() => route.query.token)\n\n onBeforeMount(() => confirmAccount())\n\n function confirmAccount() {\n if (token.value) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.CONFIRM_ACCOUNT, {\n token: token.value,\n })\n } else {\n router.push('/')\n }\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_unref(errorMessages))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(ErrorImg),\n _createElementVNode(\"p\", _hoisted_2, [\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('error.SOMETHING_WRONG')) + \".\", 1),\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/account-confirmation/resend\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('buttons.ACCOUNT-CONFIRMATION-RESEND')) + \"? \", 1)\n ]),\n _: 1\n })\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./AccountConfirmationView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AccountConfirmationView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AccountConfirmationView.vue?vue&type=style&index=0&id=785df978&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-785df978\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8c2ec9ce\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"email-update\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = { class: \"error-message\" }\n\nimport { computed, ComputedRef, onBeforeMount, onUnmounted, watch } from 'vue'\n import { useRoute, LocationQueryValue, useRouter } from 'vue-router'\n\n import ErrorImg from '@/components/Common/Images/ErrorImg.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'EmailUpdateView',\n setup(__props) {\n\n const route = useRoute()\n const router = useRouter()\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const isAuthenticated: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const token: ComputedRef =\n computed(() => route.query.token)\n\n onBeforeMount(() => confirmEmail())\n\n function confirmEmail() {\n if (token.value) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.CONFIRM_EMAIL, {\n token: token.value,\n refreshUser: isAuthenticated.value,\n })\n } else {\n router.push('/')\n }\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\n watch(\n () => errorMessages.value,\n (newValue) => {\n if (authUser.value.username && newValue) {\n router.push('/')\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n\n return (_unref(errorMessages) && !_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(ErrorImg),\n _createElementVNode(\"p\", _hoisted_2, [\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('error.SOMETHING_WRONG')) + \".\", 1),\n _createElementVNode(\"span\", null, [\n _createVNode(_component_i18n_t, { keypath: \"user.PROFILE.ERRORED_EMAIL_UPDATE\" }, {\n default: _withCtx(() => [\n _createVNode(_component_router_link, { to: \"/login\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.LOG_IN')), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./EmailUpdateView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./EmailUpdateView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./EmailUpdateView.vue?vue&type=style&index=0&id=8c2ec9ce&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8c2ec9ce\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-05463732\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"profile\",\n class: \"container view\"\n}\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\n\nimport { ComputedRef, computed } from 'vue'\n\n import { AUTH_USER_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'ProfileView',\n setup(__props) {\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_router_view, { user: _unref(authUser) }, null, 8, [\"user\"]),\n _hoisted_2\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./ProfileView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ProfileView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./ProfileView.vue?vue&type=style&index=0&id=05463732&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-05463732\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-af7007f4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"user\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"box\" }\n\nimport {\n ComputedRef,\n computed,\n onBeforeMount,\n onBeforeUnmount,\n toRefs,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import UserHeader from '@/components/User/ProfileDisplay/UserHeader.vue'\n import UserInfos from '@/components/User/ProfileDisplay/UserInfos.vue'\n import { USERS_STORE } from '@/store/constants'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n fromAdmin: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserView',\n props: {\n fromAdmin: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n fromAdmin: boolean\n }\n\n \n const { fromAdmin } = toRefs(props)\n\n const route = useRoute()\n const store = useStore()\n\n const user: ComputedRef = computed(\n () => store.getters[USERS_STORE.GETTERS.USER]\n )\n\n onBeforeMount(() => {\n if (route.params.username && typeof route.params.username === 'string') {\n store.dispatch(USERS_STORE.ACTIONS.GET_USER, route.params.username)\n }\n })\n\n onBeforeUnmount(() => {\n store.dispatch(USERS_STORE.ACTIONS.EMPTY_USER)\n })\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(user).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(UserHeader, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(UserInfos, {\n user: _unref(user),\n \"from-admin\": _unref(fromAdmin)\n }, null, 8, [\"user\", \"from-admin\"])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./UserView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserView.vue?vue&type=style&index=0&id=af7007f4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-af7007f4\"]])\n\nexport default __exports__"],"names":["_hoisted_1","key","id","class","_hoisted_2","_defineComponent","__name","setup","__props","route","useRoute","router","useRouter","store","useStore","errorMessages","computed","getters","ROOT_STORE","token","query","confirmAccount","value","dispatch","AUTH_USER_STORE","push","onBeforeMount","onUnmounted","commit","_ctx","_cache","_component_router_link","_resolveComponent","_unref","_openBlock","_createElementBlock","_createVNode","ErrorImg","_createElementVNode","_toDisplayString","$t","to","default","_withCtx","_createTextVNode","_","_createCommentVNode","__exports__","authUser","isAuthenticated","confirmEmail","refreshUser","watch","newValue","username","_component_i18n_t","keypath","_withScopeId","n","_pushScopeId","_popScopeId","_component_router_view","user","props","fromAdmin","type","Boolean","toRefs","USERS_STORE","params","onBeforeUnmount","UserHeader","UserInfos"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/profile.ff8ee2f9.js","mappings":"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","sources":["webpack://fittrackee_client/./src/views/user/AccountConfirmationView.vue?226f","webpack://fittrackee_client/./src/views/user/AccountConfirmationView.vue","webpack://fittrackee_client/./src/views/user/EmailUpdateView.vue?502c","webpack://fittrackee_client/./src/views/user/EmailUpdateView.vue","webpack://fittrackee_client/./src/views/user/ProfileView.vue?f4e9","webpack://fittrackee_client/./src/views/user/ProfileView.vue","webpack://fittrackee_client/./src/views/user/UserView.vue?8f92","webpack://fittrackee_client/./src/views/user/UserView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-785df978\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"account-confirmation\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = { class: \"error-message\" }\n\nimport { computed, ComputedRef, onBeforeMount, onUnmounted } from 'vue'\n import { useRoute, LocationQueryValue, useRouter } from 'vue-router'\n\n import ErrorImg from '@/components/Common/Images/ErrorImg.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AccountConfirmationView',\n setup(__props) {\n\n const route = useRoute()\n const router = useRouter()\n const store = useStore()\n\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const token: ComputedRef =\n computed(() => route.query.token)\n\n onBeforeMount(() => confirmAccount())\n\n function confirmAccount() {\n if (token.value) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.CONFIRM_ACCOUNT, {\n token: token.value,\n })\n } else {\n router.push('/')\n }\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_unref(errorMessages))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(ErrorImg),\n _createElementVNode(\"p\", _hoisted_2, [\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('error.SOMETHING_WRONG')) + \".\", 1),\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/account-confirmation/resend\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('buttons.ACCOUNT-CONFIRMATION-RESEND')) + \"? \", 1)\n ]),\n _: 1\n })\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./AccountConfirmationView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AccountConfirmationView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AccountConfirmationView.vue?vue&type=style&index=0&id=785df978&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-785df978\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8c2ec9ce\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"email-update\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = { class: \"error-message\" }\n\nimport { computed, ComputedRef, onBeforeMount, onUnmounted, watch } from 'vue'\n import { useRoute, LocationQueryValue, useRouter } from 'vue-router'\n\n import ErrorImg from '@/components/Common/Images/ErrorImg.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'EmailUpdateView',\n setup(__props) {\n\n const route = useRoute()\n const router = useRouter()\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const isAuthenticated: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const token: ComputedRef =\n computed(() => route.query.token)\n\n onBeforeMount(() => confirmEmail())\n\n function confirmEmail() {\n if (token.value) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.CONFIRM_EMAIL, {\n token: token.value,\n refreshUser: isAuthenticated.value,\n })\n } else {\n router.push('/')\n }\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\n watch(\n () => errorMessages.value,\n (newValue) => {\n if (authUser.value.username && newValue) {\n router.push('/')\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n\n return (_unref(errorMessages) && !_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(ErrorImg),\n _createElementVNode(\"p\", _hoisted_2, [\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('error.SOMETHING_WRONG')) + \".\", 1),\n _createElementVNode(\"span\", null, [\n _createVNode(_component_i18n_t, { keypath: \"user.PROFILE.ERRORED_EMAIL_UPDATE\" }, {\n default: _withCtx(() => [\n _createVNode(_component_router_link, { to: \"/login\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.LOG_IN')), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./EmailUpdateView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./EmailUpdateView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./EmailUpdateView.vue?vue&type=style&index=0&id=8c2ec9ce&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8c2ec9ce\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-05463732\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"profile\",\n class: \"container view\"\n}\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\n\nimport { ComputedRef, computed } from 'vue'\n\n import { AUTH_USER_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'ProfileView',\n setup(__props) {\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_router_view, { user: _unref(authUser) }, null, 8, [\"user\"]),\n _hoisted_2\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./ProfileView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ProfileView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./ProfileView.vue?vue&type=style&index=0&id=05463732&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-05463732\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-af7007f4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"user\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"box\" }\n\nimport {\n ComputedRef,\n computed,\n onBeforeMount,\n onBeforeUnmount,\n toRefs,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import UserHeader from '@/components/User/ProfileDisplay/UserHeader.vue'\n import UserInfos from '@/components/User/ProfileDisplay/UserInfos.vue'\n import { USERS_STORE } from '@/store/constants'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n fromAdmin: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserView',\n props: {\n fromAdmin: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n fromAdmin: boolean\n }\n\n \n const { fromAdmin } = toRefs(props)\n\n const route = useRoute()\n const store = useStore()\n\n const user: ComputedRef = computed(\n () => store.getters[USERS_STORE.GETTERS.USER]\n )\n\n onBeforeMount(() => {\n if (route.params.username && typeof route.params.username === 'string') {\n store.dispatch(USERS_STORE.ACTIONS.GET_USER, route.params.username)\n }\n })\n\n onBeforeUnmount(() => {\n store.dispatch(USERS_STORE.ACTIONS.EMPTY_USER)\n })\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(user).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(UserHeader, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(UserInfos, {\n user: _unref(user),\n \"from-admin\": _unref(fromAdmin)\n }, null, 8, [\"user\", \"from-admin\"])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./UserView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserView.vue?vue&type=style&index=0&id=af7007f4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-af7007f4\"]])\n\nexport default __exports__"],"names":["_hoisted_1","key","id","class","_hoisted_2","_defineComponent","__name","setup","__props","route","useRoute","router","useRouter","store","useStore","errorMessages","computed","getters","ROOT_STORE","token","query","confirmAccount","value","dispatch","AUTH_USER_STORE","push","onBeforeMount","onUnmounted","commit","_ctx","_cache","_component_router_link","_resolveComponent","_unref","_openBlock","_createElementBlock","_createVNode","ErrorImg","_createElementVNode","_toDisplayString","$t","to","default","_withCtx","_createTextVNode","_","_createCommentVNode","__exports__","authUser","isAuthenticated","confirmEmail","refreshUser","watch","newValue","username","_component_i18n_t","keypath","_withScopeId","n","_pushScopeId","_popScopeId","_component_router_view","user","props","fromAdmin","type","Boolean","toRefs","USERS_STORE","params","onBeforeUnmount","UserHeader","UserInfos"],"sourceRoot":""} \ No newline at end of file diff --git a/fittrackee/dist/static/js/reset.3194c9f0.js b/fittrackee/dist/static/js/reset.f6540a23.js similarity index 99% rename from fittrackee/dist/static/js/reset.3194c9f0.js rename to fittrackee/dist/static/js/reset.f6540a23.js index a7799245..15b9fbb4 100644 --- a/fittrackee/dist/static/js/reset.3194c9f0.js +++ b/fittrackee/dist/static/js/reset.f6540a23.js @@ -1,2 +1,2 @@ "use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[24],{3228:function(t,c,n){n.d(c,{Z:function(){return d}});var a=n(6252);const e={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 345.834 345.834",style:{"enable-background":"new 0 0 345.834 345.834"},"xml:space":"preserve"},s=(0,a._)("g",null,[(0,a._)("path",{d:"M339.798,260.429c0.13-0.026,0.257-0.061,0.385-0.094c0.109-0.028,0.219-0.051,0.326-0.084\n\t\tc0.125-0.038,0.247-0.085,0.369-0.129c0.108-0.039,0.217-0.074,0.324-0.119c0.115-0.048,0.226-0.104,0.338-0.157\n\t\tc0.109-0.052,0.22-0.1,0.327-0.158c0.107-0.057,0.208-0.122,0.312-0.184c0.107-0.064,0.215-0.124,0.319-0.194\n\t\tc0.111-0.074,0.214-0.156,0.321-0.236c0.09-0.067,0.182-0.13,0.27-0.202c0.162-0.133,0.316-0.275,0.466-0.421\n\t\tc0.027-0.026,0.056-0.048,0.083-0.075c0.028-0.028,0.052-0.059,0.079-0.088c0.144-0.148,0.284-0.3,0.416-0.46\n\t\tc0.077-0.094,0.144-0.192,0.216-0.289c0.074-0.1,0.152-0.197,0.221-0.301c0.074-0.111,0.139-0.226,0.207-0.34\n\t\tc0.057-0.096,0.118-0.19,0.171-0.289c0.062-0.115,0.114-0.234,0.169-0.351c0.049-0.104,0.101-0.207,0.146-0.314\n\t\tc0.048-0.115,0.086-0.232,0.128-0.349c0.041-0.114,0.085-0.227,0.12-0.343c0.036-0.118,0.062-0.238,0.092-0.358\n\t\tc0.029-0.118,0.063-0.234,0.086-0.353c0.028-0.141,0.045-0.283,0.065-0.425c0.014-0.1,0.033-0.199,0.043-0.3\n\t\tc0.025-0.249,0.038-0.498,0.038-0.748V92.76c0-4.143-3.357-7.5-7.5-7.5h-236.25c-0.066,0-0.13,0.008-0.196,0.01\n\t\tc-0.143,0.004-0.285,0.01-0.427,0.022c-0.113,0.009-0.225,0.022-0.337,0.037c-0.128,0.016-0.255,0.035-0.382,0.058\n\t\tc-0.119,0.021-0.237,0.046-0.354,0.073c-0.119,0.028-0.238,0.058-0.356,0.092c-0.117,0.033-0.232,0.069-0.346,0.107\n\t\tc-0.117,0.04-0.234,0.082-0.349,0.128c-0.109,0.043-0.216,0.087-0.322,0.135c-0.118,0.053-0.235,0.11-0.351,0.169\n\t\tc-0.099,0.051-0.196,0.103-0.292,0.158c-0.116,0.066-0.23,0.136-0.343,0.208c-0.093,0.06-0.184,0.122-0.274,0.185\n\t\tc-0.106,0.075-0.211,0.153-0.314,0.235c-0.094,0.075-0.186,0.152-0.277,0.231c-0.09,0.079-0.179,0.158-0.266,0.242\n\t\tc-0.099,0.095-0.194,0.194-0.288,0.294c-0.047,0.05-0.097,0.094-0.142,0.145c-0.027,0.03-0.048,0.063-0.074,0.093\n\t\tc-0.094,0.109-0.182,0.223-0.27,0.338c-0.064,0.084-0.13,0.168-0.19,0.254c-0.078,0.112-0.15,0.227-0.222,0.343\n\t\tc-0.059,0.095-0.12,0.189-0.174,0.286c-0.063,0.112-0.118,0.227-0.175,0.342c-0.052,0.105-0.106,0.21-0.153,0.317\n\t\tc-0.049,0.113-0.092,0.23-0.135,0.345c-0.043,0.113-0.087,0.225-0.124,0.339c-0.037,0.115-0.067,0.232-0.099,0.349\n\t\tc-0.032,0.12-0.066,0.239-0.093,0.36c-0.025,0.113-0.042,0.228-0.062,0.342c-0.022,0.13-0.044,0.26-0.06,0.39\n\t\tc-0.013,0.108-0.019,0.218-0.027,0.328c-0.01,0.14-0.019,0.28-0.021,0.421c-0.001,0.041-0.006,0.081-0.006,0.122v46.252\n\t\tc0,4.143,3.357,7.5,7.5,7.5s7.5-3.357,7.5-7.5v-29.595l66.681,59.037c-0.348,0.245-0.683,0.516-0.995,0.827l-65.687,65.687v-49.288\n\t\tc0-4.143-3.357-7.5-7.5-7.5s-7.5,3.357-7.5,7.5v9.164h-38.75c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h38.75v43.231\n\t\tc0,4.143,3.357,7.5,7.5,7.5h236.25c0.247,0,0.494-0.013,0.74-0.037c0.115-0.011,0.226-0.033,0.339-0.049\n\t\tC339.542,260.469,339.67,260.454,339.798,260.429z M330.834,234.967l-65.688-65.687c-0.042-0.042-0.087-0.077-0.13-0.117\n\t\tl49.383-41.897c3.158-2.68,3.546-7.412,0.866-10.571c-2.678-3.157-7.41-3.547-10.571-0.866l-84.381,71.59l-98.444-87.158h208.965\n\t\tV234.967z M185.878,179.888c0.535-0.535,0.969-1.131,1.308-1.765l28.051,24.835c1.418,1.255,3.194,1.885,4.972,1.885\n\t\tc1.726,0,3.451-0.593,4.853-1.781l28.587-24.254c0.26,0.38,0.553,0.743,0.89,1.08l65.687,65.687H120.191L185.878,179.888z"}),(0,a._)("path",{d:"M7.5,170.676h126.667c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5H7.5c-4.143,0-7.5,3.357-7.5,7.5\n\t\tS3.357,170.676,7.5,170.676z"}),(0,a._)("path",{d:"M20.625,129.345H77.5c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5H20.625c-4.143,0-7.5,3.357-7.5,7.5\n\t\tS16.482,129.345,20.625,129.345z"}),(0,a._)("path",{d:"M62.5,226.51h-55c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h55c4.143,0,7.5-3.357,7.5-7.5S66.643,226.51,62.5,226.51z"})],-1),o=[s];function r(t,c,n,s,r,i){return(0,a.wg)(),(0,a.iD)("svg",e,o)}var i={name:"EmailSent"},l=n(3744);const u=(0,l.Z)(i,[["render",r]]);var d=u},5639:function(t,c,n){n.r(c),n.d(c,{default:function(){return S}});var a=n(6252),e=n(2262),s=n(3577),o=n(3228),r=n(2411);const i={id:"account-confirmation-email",class:"center-card with-margin"},l={key:0,class:"email-sent"},u={class:"email-sent-message"},d={key:1};var v=(0,a.aZ)({__name:"AccountConfirmationEmail",props:{action:null},setup(t){const c=t,{action:n}=(0,e.BK)(c);return(t,c)=>{const v=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",i,["email-sent"===(0,e.SU)(n)?((0,a.wg)(),(0,a.iD)("div",l,[(0,a.Wm)(o.Z),(0,a._)("div",u,(0,s.zw)(t.$t("user.ACCOUNT_CONFIRMATION_SENT")),1)])):((0,a.wg)(),(0,a.iD)("div",d,[(0,a.Wm)(v,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(t.$t("user.RESENT_ACCOUNT_CONFIRMATION")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(r.Z,{action:(0,e.SU)(n)},null,8,["action"])])),_:1})]))])}}}),p=n(3744);const w=(0,p.Z)(v,[["__scopeId","data-v-66aca424"]]);var g=w;const _={id:"account-confirmation",class:"view"},h={class:"container"};var m=(0,a.aZ)({__name:"AccountConfirmationResendView",props:{action:null},setup(t){const c=t,{action:n}=(0,e.BK)(c);return(t,c)=>((0,a.wg)(),(0,a.iD)("div",_,[(0,a._)("div",h,[(0,a.Wm)(g,{action:(0,e.SU)(n)},null,8,["action"])])]))}});const k=(0,p.Z)(m,[["__scopeId","data-v-35aad344"]]);var S=k},1627:function(t,c,n){n.r(c),n.d(c,{default:function(){return A}});n(7658);var a=n(6252),e=n(2262),s=n(2201),o=n(3577),r=n(3228);const i={version:"1.1",id:"Layer_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 512.001 512.001",style:{"enable-background":"new 0 0 512.001 512.001"},"xml:space":"preserve"},l=(0,a.uE)('',7),u=[l];function d(t,c,n,e,s,o){return(0,a.wg)(),(0,a.iD)("svg",i,u)}var v={name:"Password"},p=n(3744);const w=(0,p.Z)(v,[["render",d]]);var g=w;const _={id:"password-action-done",class:"center-card with-margin"},h={class:"password-message"},m={key:0};var k=(0,a.aZ)({__name:"PasswordActionDone",props:{action:null},setup(t){const c=t,{action:n}=(0,e.BK)(c);return(t,c)=>{const s=(0,a.up)("router-link"),i=(0,a.up)("i18n-t");return(0,a.wg)(),(0,a.iD)("div",_,["request-sent"===(0,e.SU)(n)?((0,a.wg)(),(0,a.j4)(r.Z,{key:0})):((0,a.wg)(),(0,a.j4)(g,{key:1})),(0,a._)("div",h,["request-sent"===(0,e.SU)(n)?((0,a.wg)(),(0,a.iD)("span",m,(0,o.zw)(t.$t("user.PASSWORD_SENT_EMAIL_TEXT")),1)):((0,a.wg)(),(0,a.j4)(i,{key:1,keypath:"user.PASSWORD_UPDATED"},{default:(0,a.w5)((()=>[(0,a.Wm)(s,{to:"/login"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.$t("common.HERE")),1)])),_:1})])),_:1}))])])}}});const S=(0,p.Z)(k,[["__scopeId","data-v-eac78356"]]);var C=S,f=n(2411);const x={id:"password-reset-request",class:"center-card with-margin"};var z=(0,a.aZ)({__name:"PasswordResetForm",props:{action:null,token:{default:""}},setup(t){const c=t,{action:n,token:s}=(0,e.BK)(c);return(t,c)=>{const r=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",x,[(0,a.Wm)(r,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.$t("user.RESET_PASSWORD")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(f.Z,{action:(0,e.SU)(n),token:(0,e.SU)(s)},null,8,["action","token"])])),_:1})])}}});const U=(0,p.Z)(z,[["__scopeId","data-v-68377e44"]]);var Z=U;const y={id:"password-reset",class:"view"},D={class:"container"};var M=(0,a.aZ)({__name:"PasswordResetView",props:{action:null},setup(t){const c=t,n=(0,s.yj)(),o=(0,s.tv)(),{action:r}=(0,e.BK)(c),i=(0,a.Fl)((()=>n.query.token));return(0,a.wF)((()=>{"reset"!==c.action||i.value||o.push("/")})),(t,c)=>((0,a.wg)(),(0,a.iD)("div",y,[(0,a._)("div",D,[(0,e.SU)(r).startsWith("reset")?((0,a.wg)(),(0,a.j4)(Z,{key:0,action:(0,e.SU)(r),token:(0,e.SU)(i)},null,8,["action","token"])):((0,a.wg)(),(0,a.j4)(C,{key:1,action:(0,e.SU)(r)},null,8,["action"]))])]))}});const E=(0,p.Z)(M,[["__scopeId","data-v-a1cc55c4"]]);var A=E}}]); -//# sourceMappingURL=reset.3194c9f0.js.map \ No newline at end of file +//# sourceMappingURL=reset.f6540a23.js.map \ No newline at end of file diff --git a/fittrackee/dist/static/js/reset.3194c9f0.js.map b/fittrackee/dist/static/js/reset.f6540a23.js.map similarity index 99% rename from fittrackee/dist/static/js/reset.3194c9f0.js.map rename to fittrackee/dist/static/js/reset.f6540a23.js.map index baa2fd73..35fb8fea 100644 --- a/fittrackee/dist/static/js/reset.3194c9f0.js.map +++ b/fittrackee/dist/static/js/reset.f6540a23.js.map @@ -1 +1 @@ -{"version":3,"file":"static/js/reset.3194c9f0.js","mappings":"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","sources":["webpack://fittrackee_client/./src/components/Common/Images/EmailSent.vue","webpack://fittrackee_client/./src/components/Common/Images/EmailSent.vue?2d84","webpack://fittrackee_client/./src/components/User/AccountConfirmationEmail.vue?37ef","webpack://fittrackee_client/./src/components/User/AccountConfirmationEmail.vue","webpack://fittrackee_client/./src/views/user/AccountConfirmationResendView.vue?3fd8","webpack://fittrackee_client/./src/views/user/AccountConfirmationResendView.vue","webpack://fittrackee_client/./src/components/Common/Images/Password.vue","webpack://fittrackee_client/./src/components/Common/Images/Password.vue?2ae3","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordActionDone.vue?977e","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordActionDone.vue","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordResetForm.vue?e08b","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordResetForm.vue","webpack://fittrackee_client/./src/views/user/PasswordResetView.vue?1ecf","webpack://fittrackee_client/./src/views/user/PasswordResetView.vue"],"sourcesContent":["\n\n\n","import { render } from \"./EmailSent.vue?vue&type=template&id=3377e6a0\"\nimport script from \"./EmailSent.vue?vue&type=script&lang=js\"\nexport * from \"./EmailSent.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-66aca424\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"account-confirmation-email\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"email-sent\"\n}\nconst _hoisted_3 = { class: \"email-sent-message\" }\nconst _hoisted_4 = { key: 1 }\n\nimport { toRefs } from 'vue'\n\n import EmailSent from '@/components/Common/Images/EmailSent.vue'\n import UserAuthForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AccountConfirmationEmail',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(action) === 'email-sent')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(EmailSent),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('user.ACCOUNT_CONFIRMATION_SENT')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.RESENT_ACCOUNT_CONFIRMATION')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserAuthForm, { action: _unref(action) }, null, 8, [\"action\"])\n ]),\n _: 1\n })\n ]))\n ]))\n}\n}\n\n})","import script from \"./AccountConfirmationEmail.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AccountConfirmationEmail.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AccountConfirmationEmail.vue?vue&type=style&index=0&id=66aca424&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-66aca424\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-35aad344\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"account-confirmation\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { toRefs } from 'vue'\n\n import AccountConfirmationResend from '@/components/User/AccountConfirmationEmail.vue'\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AccountConfirmationResendView',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(AccountConfirmationResend, { action: _unref(action) }, null, 8, [\"action\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./AccountConfirmationResendView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AccountConfirmationResendView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AccountConfirmationResendView.vue?vue&type=style&index=0&id=35aad344&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-35aad344\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Password.vue?vue&type=template&id=356e77a2\"\nimport script from \"./Password.vue?vue&type=script&lang=js\"\nexport * from \"./Password.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-eac78356\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-action-done\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = { class: \"password-message\" }\nconst _hoisted_3 = { key: 0 }\n\nimport { toRefs } from 'vue'\n\n import EmailSent from '@/components/Common/Images/EmailSent.vue'\n import Password from '@/components/Common/Images/Password.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordActionDone',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(action) === 'request-sent')\n ? (_openBlock(), _createBlock(EmailSent, { key: 0 }))\n : (_openBlock(), _createBlock(Password, { key: 1 })),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(action) === 'request-sent')\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('user.PASSWORD_SENT_EMAIL_TEXT')), 1))\n : (_openBlock(), _createBlock(_component_i18n_t, {\n key: 1,\n keypath: \"user.PASSWORD_UPDATED\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_router_link, { to: \"/login\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('common.HERE')), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }))\n ])\n ]))\n}\n}\n\n})","import script from \"./PasswordActionDone.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordActionDone.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordActionDone.vue?vue&type=style&index=0&id=eac78356&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-eac78356\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-68377e44\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-reset-request\",\n class: \"center-card with-margin\"\n}\n\nimport { toRefs, withDefaults } from 'vue'\n\n import UserAuthForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n token?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordResetForm',\n props: {\n action: null,\n token: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { action: string, token: string }\n\n \n\n const { action, token } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.RESET_PASSWORD')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserAuthForm, {\n action: _unref(action),\n token: _unref(token)\n }, null, 8, [\"action\", \"token\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./PasswordResetForm.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordResetForm.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordResetForm.vue?vue&type=style&index=0&id=68377e44&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-68377e44\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-a1cc55c4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-reset\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { computed, toRefs, onBeforeMount } from 'vue'\n import { useRoute, useRouter } from 'vue-router'\n\n import PasswordEmailSent from '@/components/User/PasswordReset/PasswordActionDone.vue'\n import PasswordResetRequest from '@/components/User/PasswordReset/PasswordResetForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordResetView',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const route = useRoute()\n const router = useRouter()\n\n const { action } = toRefs(props)\n const token = computed(() => route.query.token)\n\n onBeforeMount(() => {\n if (props.action === 'reset' && !token.value) {\n router.push('/')\n }\n })\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(action).startsWith('reset'))\n ? (_openBlock(), _createBlock(PasswordResetRequest, {\n key: 0,\n action: _unref(action),\n token: _unref(token)\n }, null, 8, [\"action\", \"token\"]))\n : (_openBlock(), _createBlock(PasswordEmailSent, {\n key: 1,\n action: _unref(action)\n }, null, 8, [\"action\"]))\n ])\n ]))\n}\n}\n\n})","import script from \"./PasswordResetView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordResetView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordResetView.vue?vue&type=style&index=0&id=a1cc55c4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-a1cc55c4\"]])\n\nexport default __exports__"],"names":["version","id","xmlns","x","y","viewBox","style","_createElementVNode","d","_hoisted_2","_createElementBlock","_hoisted_1","name","__exports__","render","class","key","_hoisted_3","_hoisted_4","_defineComponent","__name","props","action","setup","__props","toRefs","_ctx","_cache","_component_Card","_resolveComponent","_openBlock","_unref","_createVNode","EmailSent","_toDisplayString","$t","title","_withCtx","_createTextVNode","content","UserAuthForm","_","AccountConfirmationResend","_component_router_link","_component_i18n_t","_createBlock","Password","keypath","default","to","token","route","useRoute","router","useRouter","computed","query","onBeforeMount","value","push","startsWith","PasswordResetRequest","PasswordEmailSent"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/reset.f6540a23.js","mappings":"uLAEIA,QAAQ,MACRC,GAAG,SACHC,MAAM,6BACN,cAAY,+BACZC,EAAE,MACFC,EAAE,MACFC,QAAQ,sBACRC,MAAA,gDACA,YAAU,Y,GAEVC,EAAAA,EAAAA,GA0CI,WAzCFA,EAAAA,EAAAA,GA6BE,QA5BAC,EAAE,upGA6BJD,EAAAA,EAAAA,GAGE,QAFAC,EAAE,uIAGJD,EAAAA,EAAAA,GAGE,QAFAC,EAAE,8IAGJD,EAAAA,EAAAA,GAEE,QADAC,EAAE,4HAAuH,G,GAxC7HC,G,0CAXFC,EAAAA,EAAAA,IAsDM,MAtDNC,EAsDM,E,CAIN,OACEC,KAAM,a,UCvDV,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,KAEpE,O,0HCJA,MACMH,EAAa,CACjBV,GAAI,6BACJc,MAAO,2BAEHN,EAAa,CACjBO,IAAK,EACLD,MAAO,cAEHE,EAAa,CAAEF,MAAO,sBACtBG,EAAa,CAAEF,IAAK,GAW1B,OAA4BG,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,2BACRC,MAAO,CACLC,OAAQ,MAEVC,MAAMC,GAER,MAAMH,EAAQG,GAMN,OAAEF,IAAWG,EAAAA,EAAAA,IAAOJ,GAE5B,MAAO,CAACK,EAAUC,KAChB,MAAMC,GAAkBC,EAAAA,EAAAA,IAAkB,QAE1C,OAAQC,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOC,EAAY,CACvC,gBAAnBoB,EAAAA,EAAAA,IAAOT,KACHQ,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOD,EAAY,EACpDuB,EAAAA,EAAAA,IAAaC,EAAAA,IACb1B,EAAAA,EAAAA,GAAoB,MAAOU,GAAYiB,EAAAA,EAAAA,IAAiBR,EAAKS,GAAG,mCAAoC,QAErGL,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOQ,EAAY,EACpDc,EAAAA,EAAAA,IAAaJ,EAAiB,KAAM,CAClCQ,OAAOC,EAAAA,EAAAA,KAAS,IAAM,EACpBC,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAiBR,EAAKS,GAAG,qCAAsC,MAElFI,SAASF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,IAAaQ,EAAAA,EAAc,CAAElB,QAAQS,EAAAA,EAAAA,IAAOT,IAAW,KAAM,EAAG,CAAC,cAEnEmB,EAAG,QAGX,CAEJ,I,UCvDA,MAAM5B,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,QCLA,MACMF,EAAa,CACjBV,GAAI,uBACJc,MAAO,QAEHN,EAAa,CAAEM,MAAO,aAS5B,OAA4BI,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,gCACRC,MAAO,CACLC,OAAQ,MAEVC,MAAMC,GAER,MAAMH,EAAQG,GAKN,OAAEF,IAAWG,EAAAA,EAAAA,IAAOJ,GAE5B,MAAO,CAACK,EAAUC,MACRG,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOC,EAAY,EAC3DJ,EAAAA,EAAAA,GAAoB,MAAOE,EAAY,EACrCuB,EAAAA,EAAAA,IAAaU,EAA2B,CAAEpB,QAAQS,EAAAA,EAAAA,IAAOT,IAAW,KAAM,EAAG,CAAC,eAIpF,IChCA,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,O,2ICNItB,QAAQ,MACRC,GAAG,UACHC,MAAM,6BACN,cAAY,+BACZC,EAAE,MACFC,EAAE,MACFC,QAAQ,sBACRC,MAAA,gDACA,YAAU,Y,mqHAEVG,G,0CAXFC,EAAAA,EAAAA,IAqFM,MArFNC,EAqFM,E,CAIN,OACEC,KAAM,Y,UCtFV,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,KAEpE,QCJA,MACMH,EAAa,CACjBV,GAAI,uBACJc,MAAO,2BAEHN,EAAa,CAAEM,MAAO,oBACtBE,EAAa,CAAED,IAAK,GAW1B,OAA4BG,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,qBACRC,MAAO,CACLC,OAAQ,MAEVC,MAAMC,GAER,MAAMH,EAAQG,GAMN,OAAEF,IAAWG,EAAAA,EAAAA,IAAOJ,GAE5B,MAAO,CAACK,EAAUC,KAChB,MAAMgB,GAAyBd,EAAAA,EAAAA,IAAkB,eAC3Ce,GAAoBf,EAAAA,EAAAA,IAAkB,UAE5C,OAAQC,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOC,EAAY,CACvC,kBAAnBoB,EAAAA,EAAAA,IAAOT,KACHQ,EAAAA,EAAAA,OAAce,EAAAA,EAAAA,IAAaZ,EAAAA,EAAW,CAAEjB,IAAK,OAC7Cc,EAAAA,EAAAA,OAAce,EAAAA,EAAAA,IAAaC,EAAU,CAAE9B,IAAK,MACjDT,EAAAA,EAAAA,GAAoB,MAAOE,EAAY,CACjB,kBAAnBsB,EAAAA,EAAAA,IAAOT,KACHQ,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,OAAQO,GAAYiB,EAAAA,EAAAA,IAAiBR,EAAKS,GAAG,kCAAmC,MAClHL,EAAAA,EAAAA,OAAce,EAAAA,EAAAA,IAAaD,EAAmB,CAC7C5B,IAAK,EACL+B,QAAS,yBACR,CACDC,SAASX,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,IAAaW,EAAwB,CAAEM,GAAI,UAAY,CACrDD,SAASX,EAAAA,EAAAA,KAAS,IAAM,EACtBC,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAiBR,EAAKS,GAAG,gBAAiB,MAE7DM,EAAG,OAGPA,EAAG,QAGX,CAEJ,ICzDA,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,Q,UCLA,MACM9B,EAAa,CACjBV,GAAI,yBACJc,MAAO,2BAYT,OAA4BI,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,oBACRC,MAAO,CACLC,OAAQ,KACR4B,MAAO,CAAEF,QAAS,KAEpBzB,MAAMC,GAER,MAAMH,EAAQG,GAIN,OAAEF,EAAM,MAAE4B,IAAUzB,EAAAA,EAAAA,IAAOJ,GAEnC,MAAO,CAACK,EAAUC,KAChB,MAAMC,GAAkBC,EAAAA,EAAAA,IAAkB,QAE1C,OAAQC,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOC,EAAY,EAC3DqB,EAAAA,EAAAA,IAAaJ,EAAiB,KAAM,CAClCQ,OAAOC,EAAAA,EAAAA,KAAS,IAAM,EACpBC,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAiBR,EAAKS,GAAG,wBAAyB,MAErEI,SAASF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,IAAaQ,EAAAA,EAAc,CACzBlB,QAAQS,EAAAA,EAAAA,IAAOT,GACf4B,OAAOnB,EAAAA,EAAAA,IAAOmB,IACb,KAAM,EAAG,CAAC,SAAU,aAEzBT,EAAG,KAEL,CAEJ,IC5CA,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,QCLA,MACM9B,EAAa,CACjBV,GAAI,iBACJc,MAAO,QAEHN,EAAa,CAAEM,MAAO,aAY5B,OAA4BI,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,oBACRC,MAAO,CACLC,OAAQ,MAEVC,MAAMC,GAER,MAAMH,EAAQG,EAMN2B,GAAQC,EAAAA,EAAAA,MACRC,GAASC,EAAAA,EAAAA,OAET,OAAEhC,IAAWG,EAAAA,EAAAA,IAAOJ,GACpB6B,GAAQK,EAAAA,EAAAA,KAAS,IAAMJ,EAAMK,MAAMN,QAQ3C,OANEO,EAAAA,EAAAA,KAAc,KACS,UAAjBpC,EAAMC,QAAuB4B,EAAMQ,OACrCL,EAAOM,KAAK,I,IAIX,CAACjC,EAAUC,MACRG,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOC,EAAY,EAC3DJ,EAAAA,EAAAA,GAAoB,MAAOE,EAAY,EACpCsB,EAAAA,EAAAA,IAAOT,GAAQsC,WAAW,WACtB9B,EAAAA,EAAAA,OAAce,EAAAA,EAAAA,IAAagB,EAAsB,CAChD7C,IAAK,EACLM,QAAQS,EAAAA,EAAAA,IAAOT,GACf4B,OAAOnB,EAAAA,EAAAA,IAAOmB,IACb,KAAM,EAAG,CAAC,SAAU,aACtBpB,EAAAA,EAAAA,OAAce,EAAAA,EAAAA,IAAaiB,EAAmB,CAC7C9C,IAAK,EACLM,QAAQS,EAAAA,EAAAA,IAAOT,IACd,KAAM,EAAG,CAAC,gBAIvB,ICvDA,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,O","sources":["webpack://fittrackee_client/./src/components/Common/Images/EmailSent.vue","webpack://fittrackee_client/./src/components/Common/Images/EmailSent.vue?2d84","webpack://fittrackee_client/./src/components/User/AccountConfirmationEmail.vue?37ef","webpack://fittrackee_client/./src/components/User/AccountConfirmationEmail.vue","webpack://fittrackee_client/./src/views/user/AccountConfirmationResendView.vue?3fd8","webpack://fittrackee_client/./src/views/user/AccountConfirmationResendView.vue","webpack://fittrackee_client/./src/components/Common/Images/Password.vue","webpack://fittrackee_client/./src/components/Common/Images/Password.vue?2ae3","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordActionDone.vue?977e","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordActionDone.vue","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordResetForm.vue?e08b","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordResetForm.vue","webpack://fittrackee_client/./src/views/user/PasswordResetView.vue?1ecf","webpack://fittrackee_client/./src/views/user/PasswordResetView.vue"],"sourcesContent":["\n\n\n","import { render } from \"./EmailSent.vue?vue&type=template&id=3377e6a0\"\nimport script from \"./EmailSent.vue?vue&type=script&lang=js\"\nexport * from \"./EmailSent.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-66aca424\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"account-confirmation-email\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"email-sent\"\n}\nconst _hoisted_3 = { class: \"email-sent-message\" }\nconst _hoisted_4 = { key: 1 }\n\nimport { toRefs } from 'vue'\n\n import EmailSent from '@/components/Common/Images/EmailSent.vue'\n import UserAuthForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AccountConfirmationEmail',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(action) === 'email-sent')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(EmailSent),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('user.ACCOUNT_CONFIRMATION_SENT')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.RESENT_ACCOUNT_CONFIRMATION')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserAuthForm, { action: _unref(action) }, null, 8, [\"action\"])\n ]),\n _: 1\n })\n ]))\n ]))\n}\n}\n\n})","import script from \"./AccountConfirmationEmail.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AccountConfirmationEmail.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AccountConfirmationEmail.vue?vue&type=style&index=0&id=66aca424&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-66aca424\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-35aad344\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"account-confirmation\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { toRefs } from 'vue'\n\n import AccountConfirmationResend from '@/components/User/AccountConfirmationEmail.vue'\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AccountConfirmationResendView',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(AccountConfirmationResend, { action: _unref(action) }, null, 8, [\"action\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./AccountConfirmationResendView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AccountConfirmationResendView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AccountConfirmationResendView.vue?vue&type=style&index=0&id=35aad344&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-35aad344\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Password.vue?vue&type=template&id=356e77a2\"\nimport script from \"./Password.vue?vue&type=script&lang=js\"\nexport * from \"./Password.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-eac78356\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-action-done\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = { class: \"password-message\" }\nconst _hoisted_3 = { key: 0 }\n\nimport { toRefs } from 'vue'\n\n import EmailSent from '@/components/Common/Images/EmailSent.vue'\n import Password from '@/components/Common/Images/Password.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordActionDone',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(action) === 'request-sent')\n ? (_openBlock(), _createBlock(EmailSent, { key: 0 }))\n : (_openBlock(), _createBlock(Password, { key: 1 })),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(action) === 'request-sent')\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('user.PASSWORD_SENT_EMAIL_TEXT')), 1))\n : (_openBlock(), _createBlock(_component_i18n_t, {\n key: 1,\n keypath: \"user.PASSWORD_UPDATED\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_router_link, { to: \"/login\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('common.HERE')), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }))\n ])\n ]))\n}\n}\n\n})","import script from \"./PasswordActionDone.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordActionDone.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordActionDone.vue?vue&type=style&index=0&id=eac78356&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-eac78356\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-68377e44\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-reset-request\",\n class: \"center-card with-margin\"\n}\n\nimport { toRefs, withDefaults } from 'vue'\n\n import UserAuthForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n token?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordResetForm',\n props: {\n action: null,\n token: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { action: string, token: string }\n\n \n\n const { action, token } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.RESET_PASSWORD')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserAuthForm, {\n action: _unref(action),\n token: _unref(token)\n }, null, 8, [\"action\", \"token\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./PasswordResetForm.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordResetForm.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordResetForm.vue?vue&type=style&index=0&id=68377e44&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-68377e44\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-a1cc55c4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-reset\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { computed, toRefs, onBeforeMount } from 'vue'\n import { useRoute, useRouter } from 'vue-router'\n\n import PasswordEmailSent from '@/components/User/PasswordReset/PasswordActionDone.vue'\n import PasswordResetRequest from '@/components/User/PasswordReset/PasswordResetForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordResetView',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const route = useRoute()\n const router = useRouter()\n\n const { action } = toRefs(props)\n const token = computed(() => route.query.token)\n\n onBeforeMount(() => {\n if (props.action === 'reset' && !token.value) {\n router.push('/')\n }\n })\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(action).startsWith('reset'))\n ? (_openBlock(), _createBlock(PasswordResetRequest, {\n key: 0,\n action: _unref(action),\n token: _unref(token)\n }, null, 8, [\"action\", \"token\"]))\n : (_openBlock(), _createBlock(PasswordEmailSent, {\n key: 1,\n action: _unref(action)\n }, null, 8, [\"action\"]))\n ])\n ]))\n}\n}\n\n})","import script from \"./PasswordResetView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordResetView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordResetView.vue?vue&type=style&index=0&id=a1cc55c4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-a1cc55c4\"]])\n\nexport default __exports__"],"names":["version","id","xmlns","x","y","viewBox","style","_createElementVNode","d","_hoisted_2","_createElementBlock","_hoisted_1","name","__exports__","render","class","key","_hoisted_3","_hoisted_4","_defineComponent","__name","props","action","setup","__props","toRefs","_ctx","_cache","_component_Card","_resolveComponent","_openBlock","_unref","_createVNode","EmailSent","_toDisplayString","$t","title","_withCtx","_createTextVNode","content","UserAuthForm","_","AccountConfirmationResend","_component_router_link","_component_i18n_t","_createBlock","Password","keypath","default","to","token","route","useRoute","router","useRouter","computed","query","onBeforeMount","value","push","startsWith","PasswordResetRequest","PasswordEmailSent"],"sourceRoot":""} \ No newline at end of file diff --git a/fittrackee/dist/static/js/statistics.04a17f2e.js b/fittrackee/dist/static/js/statistics.faaccb1e.js similarity index 98% rename from fittrackee/dist/static/js/statistics.04a17f2e.js rename to fittrackee/dist/static/js/statistics.faaccb1e.js index 961bf8f9..373f59e9 100644 --- a/fittrackee/dist/static/js/statistics.04a17f2e.js +++ b/fittrackee/dist/static/js/statistics.faaccb1e.js @@ -1,2 +1,2 @@ "use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[193],{7885:function(e,s,t){t.r(s),t.d(s,{default:function(){return A}});var a=t(6252),r=t(2262),l=t(3577),o=(t(7658),t(9150)),n=t(3170);const c={class:"chart-menu"},i={class:"chart-arrow"},u={class:"time-frames custom-checkboxes-group"},d={class:"time-frames-checkboxes custom-checkboxes"},p=["id","name","checked","onInput"],m={class:"chart-arrow"};var v=(0,a.aZ)({__name:"StatsMenu",emits:["arrowClick","timeFrameUpdate"],setup(e,{emit:s}){const t=(0,r.iH)("month"),o=["week","month","year"];function n(e){t.value=e,s("timeFrameUpdate",e)}return(e,r)=>((0,a.wg)(),(0,a.iD)("div",c,[(0,a._)("div",i,[(0,a._)("i",{class:"fa fa-chevron-left","aria-hidden":"true",onClick:r[0]||(r[0]=e=>s("arrowClick",!0))})]),(0,a._)("div",u,[(0,a._)("div",d,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(o,(s=>(0,a._)("div",{class:"time-frame custom-checkbox",key:s},[(0,a._)("label",null,[(0,a._)("input",{type:"radio",id:s,name:s,checked:t.value===s,onInput:e=>n(s)},null,40,p),(0,a._)("span",null,(0,l.zw)(e.$t(`statistics.TIME_FRAMES.${s}`)),1)])]))),64))])]),(0,a._)("div",m,[(0,a._)("i",{class:"fa fa-chevron-right","aria-hidden":"true",onClick:r[1]||(r[1]=e=>s("arrowClick",!1))})])]))}}),k=t(3744);const _=(0,k.Z)(v,[["__scopeId","data-v-22d55de2"]]);var S=_,w=t(631);const f={class:"sports-menu"},h=["id","name","checked","onInput"],U={class:"sport-label"};var b=(0,a.aZ)({__name:"StatsSportsMenu",props:{userSports:null,selectedSportIds:{default:()=>[]}},emits:["selectedSportIdsUpdate"],setup(e,{emit:s}){const t=e,{t:n}=(0,o.QT)(),c=(0,a.f3)("sportColors"),{selectedSportIds:i}=(0,r.BK)(t),u=(0,a.Fl)((()=>(0,w.xH)(t.userSports,n)));function d(e){s("selectedSportIdsUpdate",e)}return(e,s)=>{const t=(0,a.up)("SportImage");return(0,a.wg)(),(0,a.iD)("div",f,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,r.SU)(u),(e=>((0,a.wg)(),(0,a.iD)("label",{type:"checkbox",key:e.id,style:(0,l.j5)({color:e.color?e.color:(0,r.SU)(c)[e.label]})},[(0,a._)("input",{type:"checkbox",id:e.id,name:e.label,checked:(0,r.SU)(i).includes(e.id),onInput:s=>d(e.id)},null,40,h),(0,a.Wm)(t,{"sport-label":e.label,color:e.color},null,8,["sport-label","color"]),(0,a._)("span",U,(0,l.zw)(e.translatedLabel),1)],4)))),128))])}}});const I=b;var g=I,T=t(9318);const y={key:0,id:"user-statistics"};var C=(0,a.aZ)({__name:"index",props:{sports:null,user:null},setup(e){const s=e,{t:t}=(0,o.QT)(),{sports:l,user:c}=(0,r.BK)(s),i=(0,r.iH)("month"),u=(0,r.iH)(v(i.value)),d=(0,a.Fl)((()=>(0,w.xH)(s.sports,t))),p=(0,r.iH)(_(s.sports));function m(e){i.value=e,u.value=v(i.value)}function v(e){return(0,T.aZ)(new Date,e,s.user.weekm)}function k(e){u.value=(0,T.FN)(u.value,e,s.user.weekm)}function _(e){return e.map((e=>e.id))}function f(e){p.value.includes(e)?p.value=p.value.filter((s=>s!==e)):p.value.push(e)}return(0,a.YP)((()=>s.sports),(e=>{p.value=_(e)})),(e,s)=>(0,r.SU)(d)?((0,a.wg)(),(0,a.iD)("div",y,[(0,a.Wm)(S,{onTimeFrameUpdate:m,onArrowClick:k}),(0,a.Wm)(n.Z,{sports:(0,r.SU)(l),user:(0,r.SU)(c),chartParams:u.value,"displayed-sport-ids":p.value,fullStats:!0},null,8,["sports","user","chartParams","displayed-sport-ids"]),(0,a.Wm)(g,{"selected-sport-ids":p.value,"user-sports":(0,r.SU)(l),onSelectedSportIdsUpdate:f},null,8,["selected-sport-ids","user-sports"])])):(0,a.kq)("",!0)}});const F=(0,k.Z)(C,[["__scopeId","data-v-30799d13"]]);var Z=F,x=t(5630),D=t(5801),H=t(9917);const E={id:"statistics",class:"view"},R={key:0,class:"container"};var W=(0,a.aZ)({__name:"StatisticsView",setup(e){const s=(0,H.o)(),t=(0,a.Fl)((()=>s.getters[D.YN.GETTERS.AUTH_USER_PROFILE])),o=(0,a.Fl)((()=>s.getters[D.O8.GETTERS.SPORTS].filter((e=>t.value.sports_list.includes(e.id)))));return(e,s)=>{const n=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",E,[(0,r.SU)(t).username?((0,a.wg)(),(0,a.iD)("div",R,[(0,a.Wm)(n,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,l.zw)(e.$t("statistics.STATISTICS")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(Z,{class:(0,l.C_)({"stats-disabled":0===(0,r.SU)(t).nb_workouts}),user:(0,r.SU)(t),sports:(0,r.SU)(o)},null,8,["class","user","sports"])])),_:1}),0===(0,r.SU)(t).nb_workouts?((0,a.wg)(),(0,a.j4)(x.Z,{key:0})):(0,a.kq)("",!0)])):(0,a.kq)("",!0)])}}});const P=(0,k.Z)(W,[["__scopeId","data-v-2e341d4e"]]);var A=P}}]); -//# sourceMappingURL=statistics.04a17f2e.js.map \ No newline at end of file +//# sourceMappingURL=statistics.faaccb1e.js.map \ No newline at end of file diff --git a/fittrackee/dist/static/js/statistics.04a17f2e.js.map b/fittrackee/dist/static/js/statistics.faaccb1e.js.map similarity index 99% rename from fittrackee/dist/static/js/statistics.04a17f2e.js.map rename to fittrackee/dist/static/js/statistics.faaccb1e.js.map index 2d0db841..85558cfd 100644 --- a/fittrackee/dist/static/js/statistics.04a17f2e.js.map +++ b/fittrackee/dist/static/js/statistics.faaccb1e.js.map @@ -1 +1 @@ -{"version":3,"file":"static/js/statistics.04a17f2e.js","mappings":"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","sources":["webpack://fittrackee_client/./src/components/Statistics/StatsMenu.vue?b88a","webpack://fittrackee_client/./src/components/Statistics/StatsMenu.vue","webpack://fittrackee_client/./src/components/Statistics/StatsSportsMenu.vue?57e4","webpack://fittrackee_client/./src/components/Statistics/StatsSportsMenu.vue","webpack://fittrackee_client/./src/components/Statistics/index.vue?2efa","webpack://fittrackee_client/./src/components/Statistics/index.vue","webpack://fittrackee_client/./src/views/StatisticsView.vue?9d34","webpack://fittrackee_client/./src/views/StatisticsView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-22d55de2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"chart-menu\" }\nconst _hoisted_2 = { class: \"chart-arrow\" }\nconst _hoisted_3 = { class: \"time-frames custom-checkboxes-group\" }\nconst _hoisted_4 = { class: \"time-frames-checkboxes custom-checkboxes\" }\nconst _hoisted_5 = [\"id\", \"name\", \"checked\", \"onInput\"]\nconst _hoisted_6 = { class: \"chart-arrow\" }\n\nimport { ref } from 'vue'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatsMenu',\n emits: ['arrowClick', 'timeFrameUpdate'],\n setup(__props, { emit }) {\n\n \n\n const selectedTimeFrame = ref('month')\n const timeFrames = ['week', 'month', 'year']\n\n function onUpdateTimeFrame(timeFrame: string) {\n selectedTimeFrame.value = timeFrame\n emit('timeFrameUpdate', timeFrame)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('arrowClick', true)))\n })\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(timeFrames, (frame) => {\n return _createElementVNode(\"div\", {\n class: \"time-frame custom-checkbox\",\n key: frame\n }, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: frame,\n name: frame,\n checked: selectedTimeFrame.value === frame,\n onInput: ($event: any) => (onUpdateTimeFrame(frame))\n }, null, 40, _hoisted_5),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`statistics.TIME_FRAMES.${frame}`)), 1)\n ])\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('arrowClick', false)))\n })\n ])\n ]))\n}\n}\n\n})","import script from \"./StatsMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatsMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatsMenu.vue?vue&type=style&index=0&id=22d55de2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-22d55de2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = { class: \"sports-menu\" }\nconst _hoisted_2 = [\"id\", \"name\", \"checked\", \"onInput\"]\nconst _hoisted_3 = { class: \"sport-label\" }\n\nimport { ComputedRef, computed, inject, withDefaults, toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n userSports: ISport[]\n selectedSportIds?: number[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatsSportsMenu',\n props: {\n userSports: null,\n selectedSportIds: { default: () => [] }\n },\n emits: ['selectedSportIdsUpdate'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { userSports: ISport[], selectedSportIds: number[] }\n\n \n\n \n\n const { t } = useI18n()\n\n const sportColors = inject('sportColors')\n const { selectedSportIds } = toRefs(props)\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.userSports, t)\n )\n\n function updateSelectedSportIds(sportId: number) {\n emit('selectedSportIdsUpdate', sportId)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"label\", {\n type: \"checkbox\",\n key: sport.id,\n style: _normalizeStyle({ color: sport.color ? sport.color : _unref(sportColors)[sport.label] })\n }, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n id: sport.id,\n name: sport.label,\n checked: _unref(selectedSportIds).includes(sport.id),\n onInput: ($event: any) => (updateSelectedSportIds(sport.id))\n }, null, 40, _hoisted_2),\n _createVNode(_component_SportImage, {\n \"sport-label\": sport.label,\n color: sport.color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(sport.translatedLabel), 1)\n ], 4))\n }), 128))\n ]))\n}\n}\n\n})","import script from \"./StatsSportsMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatsSportsMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatsSportsMenu.vue?vue&type=style&index=0&id=31a8ca60&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-30799d13\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"user-statistics\"\n}\n\nimport { ComputedRef, Ref, computed, ref, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import StatChart from '@/components/Common/StatsChart/index.vue'\n import StatsMenu from '@/components/Statistics/StatsMenu.vue'\n import SportsMenu from '@/components/Statistics/StatsSportsMenu.vue'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IStatisticsDateParams } from '@/types/statistics'\n import { IAuthUserProfile } from '@/types/user'\n import { translateSports } from '@/utils/sports'\n import { getStatsDateParams, updateChartParams } from '@/utils/statistics'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const { sports, user } = toRefs(props)\n const selectedTimeFrame = ref('month')\n const chartParams: Ref = ref(\n getChartParams(selectedTimeFrame.value)\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.sports, t)\n )\n const selectedSportIds: Ref = ref(getSports(props.sports))\n\n function updateTimeFrame(timeFrame: string) {\n selectedTimeFrame.value = timeFrame\n chartParams.value = getChartParams(selectedTimeFrame.value)\n }\n function getChartParams(timeFrame: string): IStatisticsDateParams {\n return getStatsDateParams(new Date(), timeFrame, props.user.weekm)\n }\n function handleOnClickArrows(backward: boolean) {\n chartParams.value = updateChartParams(\n chartParams.value,\n backward,\n props.user.weekm\n )\n }\n function getSports(sports: ISport[]) {\n return sports.map((sport) => sport.id)\n }\n function updateSelectedSportIds(sportId: number) {\n if (selectedSportIds.value.includes(sportId)) {\n selectedSportIds.value = selectedSportIds.value.filter(\n (id) => id !== sportId\n )\n } else {\n selectedSportIds.value.push(sportId)\n }\n }\n\n watch(\n () => props.sports,\n (newSports) => {\n selectedSportIds.value = getSports(newSports)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(translatedSports))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatsMenu, {\n onTimeFrameUpdate: updateTimeFrame,\n onArrowClick: handleOnClickArrows\n }),\n _createVNode(StatChart, {\n sports: _unref(sports),\n user: _unref(user),\n chartParams: chartParams.value,\n \"displayed-sport-ids\": selectedSportIds.value,\n fullStats: true\n }, null, 8, [\"sports\", \"user\", \"chartParams\", \"displayed-sport-ids\"]),\n _createVNode(SportsMenu, {\n \"selected-sport-ids\": selectedSportIds.value,\n \"user-sports\": _unref(sports),\n onSelectedSportIdsUpdate: updateSelectedSportIds\n }, null, 8, [\"selected-sport-ids\", \"user-sports\"])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=30799d13&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-30799d13\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2e341d4e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"statistics\",\n class: \"view\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"container\"\n}\n\nimport { ComputedRef, computed } from 'vue'\n\n import Statistics from '@/components/Statistics/index.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatisticsView',\n setup(__props) {\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(() =>\n store.getters[SPORTS_STORE.GETTERS.SPORTS].filter((sport) =>\n authUser.value.sports_list.includes(sport.id)\n )\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('statistics.STATISTICS')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(Statistics, {\n class: _normalizeClass({ 'stats-disabled': _unref(authUser).nb_workouts === 0 }),\n user: _unref(authUser),\n sports: _unref(sports)\n }, null, 8, [\"class\", \"user\", \"sports\"])\n ]),\n _: 1\n }),\n (_unref(authUser).nb_workouts === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./StatisticsView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatisticsView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatisticsView.vue?vue&type=style&index=0&id=2e341d4e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2e341d4e\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_defineComponent","__name","emits","setup","__props","emit","selectedTimeFrame","ref","timeFrames","onUpdateTimeFrame","timeFrame","value","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","onClick","$event","_Fragment","_renderList","frame","key","type","id","name","checked","onInput","_toDisplayString","$t","__exports__","props","userSports","selectedSportIds","default","t","useI18n","sportColors","inject","toRefs","translatedSports","computed","translateSports","updateSelectedSportIds","sportId","_component_SportImage","_resolveComponent","_unref","sport","style","_normalizeStyle","color","label","includes","_createVNode","translatedLabel","sports","user","chartParams","getChartParams","getSports","updateTimeFrame","getStatsDateParams","Date","weekm","handleOnClickArrows","backward","updateChartParams","map","filter","push","watch","newSports","StatsMenu","onTimeFrameUpdate","onArrowClick","StatChart","fullStats","SportsMenu","onSelectedSportIdsUpdate","_createCommentVNode","store","useStore","authUser","getters","AUTH_USER_STORE","SPORTS_STORE","sports_list","_component_Card","username","title","_withCtx","_createTextVNode","content","Statistics","_normalizeClass","nb_workouts","_","_createBlock","NoWorkouts"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/statistics.faaccb1e.js","mappings":"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","sources":["webpack://fittrackee_client/./src/components/Statistics/StatsMenu.vue?b88a","webpack://fittrackee_client/./src/components/Statistics/StatsMenu.vue","webpack://fittrackee_client/./src/components/Statistics/StatsSportsMenu.vue?57e4","webpack://fittrackee_client/./src/components/Statistics/StatsSportsMenu.vue","webpack://fittrackee_client/./src/components/Statistics/index.vue?2efa","webpack://fittrackee_client/./src/components/Statistics/index.vue","webpack://fittrackee_client/./src/views/StatisticsView.vue?9d34","webpack://fittrackee_client/./src/views/StatisticsView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-22d55de2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"chart-menu\" }\nconst _hoisted_2 = { class: \"chart-arrow\" }\nconst _hoisted_3 = { class: \"time-frames custom-checkboxes-group\" }\nconst _hoisted_4 = { class: \"time-frames-checkboxes custom-checkboxes\" }\nconst _hoisted_5 = [\"id\", \"name\", \"checked\", \"onInput\"]\nconst _hoisted_6 = { class: \"chart-arrow\" }\n\nimport { ref } from 'vue'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatsMenu',\n emits: ['arrowClick', 'timeFrameUpdate'],\n setup(__props, { emit }) {\n\n \n\n const selectedTimeFrame = ref('month')\n const timeFrames = ['week', 'month', 'year']\n\n function onUpdateTimeFrame(timeFrame: string) {\n selectedTimeFrame.value = timeFrame\n emit('timeFrameUpdate', timeFrame)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('arrowClick', true)))\n })\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(timeFrames, (frame) => {\n return _createElementVNode(\"div\", {\n class: \"time-frame custom-checkbox\",\n key: frame\n }, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: frame,\n name: frame,\n checked: selectedTimeFrame.value === frame,\n onInput: ($event: any) => (onUpdateTimeFrame(frame))\n }, null, 40, _hoisted_5),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`statistics.TIME_FRAMES.${frame}`)), 1)\n ])\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('arrowClick', false)))\n })\n ])\n ]))\n}\n}\n\n})","import script from \"./StatsMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatsMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatsMenu.vue?vue&type=style&index=0&id=22d55de2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-22d55de2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = { class: \"sports-menu\" }\nconst _hoisted_2 = [\"id\", \"name\", \"checked\", \"onInput\"]\nconst _hoisted_3 = { class: \"sport-label\" }\n\nimport { ComputedRef, computed, inject, withDefaults, toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n userSports: ISport[]\n selectedSportIds?: number[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatsSportsMenu',\n props: {\n userSports: null,\n selectedSportIds: { default: () => [] }\n },\n emits: ['selectedSportIdsUpdate'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { userSports: ISport[], selectedSportIds: number[] }\n\n \n\n \n\n const { t } = useI18n()\n\n const sportColors = inject('sportColors')\n const { selectedSportIds } = toRefs(props)\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.userSports, t)\n )\n\n function updateSelectedSportIds(sportId: number) {\n emit('selectedSportIdsUpdate', sportId)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"label\", {\n type: \"checkbox\",\n key: sport.id,\n style: _normalizeStyle({ color: sport.color ? sport.color : _unref(sportColors)[sport.label] })\n }, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n id: sport.id,\n name: sport.label,\n checked: _unref(selectedSportIds).includes(sport.id),\n onInput: ($event: any) => (updateSelectedSportIds(sport.id))\n }, null, 40, _hoisted_2),\n _createVNode(_component_SportImage, {\n \"sport-label\": sport.label,\n color: sport.color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(sport.translatedLabel), 1)\n ], 4))\n }), 128))\n ]))\n}\n}\n\n})","import script from \"./StatsSportsMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatsSportsMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatsSportsMenu.vue?vue&type=style&index=0&id=31a8ca60&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-30799d13\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"user-statistics\"\n}\n\nimport { ComputedRef, Ref, computed, ref, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import StatChart from '@/components/Common/StatsChart/index.vue'\n import StatsMenu from '@/components/Statistics/StatsMenu.vue'\n import SportsMenu from '@/components/Statistics/StatsSportsMenu.vue'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IStatisticsDateParams } from '@/types/statistics'\n import { IAuthUserProfile } from '@/types/user'\n import { translateSports } from '@/utils/sports'\n import { getStatsDateParams, updateChartParams } from '@/utils/statistics'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const { sports, user } = toRefs(props)\n const selectedTimeFrame = ref('month')\n const chartParams: Ref = ref(\n getChartParams(selectedTimeFrame.value)\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.sports, t)\n )\n const selectedSportIds: Ref = ref(getSports(props.sports))\n\n function updateTimeFrame(timeFrame: string) {\n selectedTimeFrame.value = timeFrame\n chartParams.value = getChartParams(selectedTimeFrame.value)\n }\n function getChartParams(timeFrame: string): IStatisticsDateParams {\n return getStatsDateParams(new Date(), timeFrame, props.user.weekm)\n }\n function handleOnClickArrows(backward: boolean) {\n chartParams.value = updateChartParams(\n chartParams.value,\n backward,\n props.user.weekm\n )\n }\n function getSports(sports: ISport[]) {\n return sports.map((sport) => sport.id)\n }\n function updateSelectedSportIds(sportId: number) {\n if (selectedSportIds.value.includes(sportId)) {\n selectedSportIds.value = selectedSportIds.value.filter(\n (id) => id !== sportId\n )\n } else {\n selectedSportIds.value.push(sportId)\n }\n }\n\n watch(\n () => props.sports,\n (newSports) => {\n selectedSportIds.value = getSports(newSports)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(translatedSports))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatsMenu, {\n onTimeFrameUpdate: updateTimeFrame,\n onArrowClick: handleOnClickArrows\n }),\n _createVNode(StatChart, {\n sports: _unref(sports),\n user: _unref(user),\n chartParams: chartParams.value,\n \"displayed-sport-ids\": selectedSportIds.value,\n fullStats: true\n }, null, 8, [\"sports\", \"user\", \"chartParams\", \"displayed-sport-ids\"]),\n _createVNode(SportsMenu, {\n \"selected-sport-ids\": selectedSportIds.value,\n \"user-sports\": _unref(sports),\n onSelectedSportIdsUpdate: updateSelectedSportIds\n }, null, 8, [\"selected-sport-ids\", \"user-sports\"])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=30799d13&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-30799d13\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2e341d4e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"statistics\",\n class: \"view\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"container\"\n}\n\nimport { ComputedRef, computed } from 'vue'\n\n import Statistics from '@/components/Statistics/index.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatisticsView',\n setup(__props) {\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(() =>\n store.getters[SPORTS_STORE.GETTERS.SPORTS].filter((sport) =>\n authUser.value.sports_list.includes(sport.id)\n )\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('statistics.STATISTICS')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(Statistics, {\n class: _normalizeClass({ 'stats-disabled': _unref(authUser).nb_workouts === 0 }),\n user: _unref(authUser),\n sports: _unref(sports)\n }, null, 8, [\"class\", \"user\", \"sports\"])\n ]),\n _: 1\n }),\n (_unref(authUser).nb_workouts === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./StatisticsView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatisticsView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatisticsView.vue?vue&type=style&index=0&id=2e341d4e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2e341d4e\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_defineComponent","__name","emits","setup","__props","emit","selectedTimeFrame","ref","timeFrames","onUpdateTimeFrame","timeFrame","value","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","onClick","$event","_Fragment","_renderList","frame","key","type","id","name","checked","onInput","_toDisplayString","$t","__exports__","props","userSports","selectedSportIds","default","t","useI18n","sportColors","inject","toRefs","translatedSports","computed","translateSports","updateSelectedSportIds","sportId","_component_SportImage","_resolveComponent","_unref","sport","style","_normalizeStyle","color","label","includes","_createVNode","translatedLabel","sports","user","chartParams","getChartParams","getSports","updateTimeFrame","getStatsDateParams","Date","weekm","handleOnClickArrows","backward","updateChartParams","map","filter","push","watch","newSports","StatsMenu","onTimeFrameUpdate","onArrowClick","StatChart","fullStats","SportsMenu","onSelectedSportIdsUpdate","_createCommentVNode","store","useStore","authUser","getters","AUTH_USER_STORE","SPORTS_STORE","sports_list","_component_Card","username","title","_withCtx","_createTextVNode","content","Statistics","_normalizeClass","nb_workouts","_","_createBlock","NoWorkouts"],"sourceRoot":""} \ No newline at end of file diff --git a/fittrackee/dist/static/js/workouts.a514f12a.js b/fittrackee/dist/static/js/workouts.f1d6cc45.js similarity index 99% rename from fittrackee/dist/static/js/workouts.a514f12a.js rename to fittrackee/dist/static/js/workouts.f1d6cc45.js index b7b54e24..d3118812 100644 --- a/fittrackee/dist/static/js/workouts.a514f12a.js +++ b/fittrackee/dist/static/js/workouts.f1d6cc45.js @@ -1,2 +1,2 @@ "use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[401],{2528:function(t,e,o){o.d(e,{Z:function(){return Q}});o(7658);var a=o(6252),n=o(3577),l=o(2262),r=o(9963),s=o(9150),i=o(2201),u=o(5801),d=o(9917),c=o(6558),p=o(8966),m=o(631),w=o(3649);const k={id:"workout-form"},f=["onSubmit"],_={class:"form-items"},v={key:0,class:"form-item-radio"},g=["checked","disabled"],y={for:"withGpx"},S=["checked","disabled"],U={for:"withoutGpx"},h={class:"form-item"},b=["disabled"],T=["value"],E={key:1,class:"form-item"},D={for:"gpxFile"},O=["disabled"],I={class:"files-help info-box"},A={key:2,class:"form-item"},C={for:"title"},R=["required","disabled"],$={key:3},N={class:"workout-date-duration"},x={class:"form-item"},z={class:"workout-date-time"},L=["disabled"],j=["disabled"],W={class:"form-item"},P=["disabled"],B=["disabled"],F=["disabled"],H={class:"form-item"},M=["disabled"],Z={class:"form-item"},q={key:1},G={key:2,class:"form-buttons"},K=["disabled"],Y=["onClick"];var V=(0,a.aZ)({__name:"WorkoutEdition",props:{authUser:null,sports:null,isCreation:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},workout:{default:()=>({})}},setup(t){const e=t,{t:o}=(0,s.QT)(),V=(0,d.o)(),J=(0,i.tv)(),{authUser:X,workout:Q,isCreation:tt,loading:et}=(0,l.BK)(e),ot=(0,a.Fl)((()=>(0,m.xH)(e.sports,o,"is_active_for_user",Q.value.id?[Q.value.sport_id]:[]))),at=(0,a.Fl)((()=>V.getters[u.SY.GETTERS.APP_CONFIG])),nt=at.value.max_single_file_size?(0,p.Z)(at.value.max_single_file_size):"",lt=at.value.gpx_limit_import,rt=at.value.max_zip_file_size?(0,p.Z)(at.value.max_zip_file_size):"",st=(0,a.Fl)((()=>V.getters[u.SY.GETTERS.ERROR_MESSAGES])),it=(0,l.qj)({sport_id:"",title:"",notes:"",workoutDate:"",workoutTime:"",workoutDurationHour:"",workoutDurationMinutes:"",workoutDurationSeconds:"",workoutDistance:""}),ut=(0,l.iH)(e.workout.id?e.workout.with_gpx:e.isCreation);let dt=null;const ct=(0,l.iH)(!1);function pt(t){it.notes=t}function mt(){ut.value=!ut.value,ct.value=!1}function wt(t){t.target.files&&(dt=t.target.files[0])}function kt(t){if(it.sport_id=`${t.sport_id}`,it.title=t.title,it.notes=t.notes,!t.with_gpx){const o=(0,c.Jo)((0,c.eB)(t.workout_date,e.authUser.timezone),"yyyy-MM-dd"),a=t.duration.split(":");it.workoutDistance=`${X.value.imperial_units?(0,w.sC)(t.distance,"km","mi",2):parseFloat(t.distance.toFixed(2))}`,it.workoutDate=o.workout_date,it.workoutTime=o.workout_time,it.workoutDurationHour=a[0],it.workoutDurationMinutes=a[1],it.workoutDurationSeconds=a[2]}}function ft(t){t.title=it.title,t.distance=X.value.imperial_units?(0,w.sC)(+it.workoutDistance,"mi","km",3):+it.workoutDistance,t.duration=3600*+it.workoutDurationHour+60*+it.workoutDurationMinutes+ +it.workoutDurationSeconds,t.workout_date=`${it.workoutDate} ${it.workoutTime}`}function _t(){const t={sport_id:+it.sport_id,notes:it.notes};if(e.workout.id)e.workout.with_gpx?t.title=it.title:ft(t),V.dispatch(u.aX.ACTIONS.EDIT_WORKOUT,{workoutId:e.workout.id,data:t});else if(ut.value){if(!dt){const t="workouts.NO_FILE_PROVIDED";return void V.commit(u.SY.MUTATIONS.SET_ERROR_MESSAGES,t)}t.file=dt,V.dispatch(u.aX.ACTIONS.ADD_WORKOUT,t)}else ft(t),V.dispatch(u.aX.ACTIONS.ADD_WORKOUT_WITHOUT_GPX,t)}function vt(){e.workout.id?J.push({name:"Workout",params:{workoutId:e.workout.id}}):J.go(-1)}function gt(){ct.value=!0}return(0,a.bv)((()=>{e.workout.id&&kt(e.workout)})),(0,a.Ah)((()=>V.commit(u.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(0,a.YP)((()=>e.workout),(async(t,e)=>{t!==e&&t&&t.id&&kt(t)})),(t,e)=>{const o=(0,a.up)("CustomTextArea"),s=(0,a.up)("ErrorMessage"),i=(0,a.up)("Loader"),u=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",{id:"workout-edition",class:(0,n.C_)(["center-card with-margin",{"center-form":(0,l.SU)(Q)&&(0,l.SU)(Q).with_gpx}])},[(0,a.Wm)(u,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,n.zw)(t.$t(`workouts.${(0,l.SU)(tt)?"ADD":"EDIT"}_WORKOUT`)),1)])),content:(0,a.w5)((()=>[(0,a._)("div",k,[(0,a._)("form",{class:(0,n.C_)({errors:ct.value}),onSubmit:(0,r.iM)(_t,["prevent"])},[(0,a._)("div",_,[(0,l.SU)(tt)?((0,a.wg)(),(0,a.iD)("div",v,[(0,a._)("div",null,[(0,a._)("input",{id:"withGpx",type:"radio",checked:ut.value,disabled:(0,l.SU)(et),onClick:mt},null,8,g),(0,a._)("label",y,(0,n.zw)(t.$t("workouts.WITH_GPX")),1)]),(0,a._)("div",null,[(0,a._)("input",{id:"withoutGpx",type:"radio",checked:!ut.value,disabled:(0,l.SU)(et),onClick:mt},null,8,S),(0,a._)("label",U,(0,n.zw)(t.$t("workouts.WITHOUT_GPX")),1)])])):(0,a.kq)("",!0),(0,a._)("div",h,[(0,a._)("label",null,(0,n.zw)(t.$t("workouts.SPORT",1))+": ",1),(0,a.wy)((0,a._)("select",{id:"sport",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[0]||(e[0]=t=>it.sport_id=t)},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,l.SU)(ot),(t=>((0,a.wg)(),(0,a.iD)("option",{value:t.id,key:t.id},(0,n.zw)(t.translatedLabel),9,T)))),128))],40,b),[[r.bM,it.sport_id]])]),(0,l.SU)(tt)&&ut.value?((0,a.wg)(),(0,a.iD)("div",E,[(0,a._)("label",D,(0,n.zw)(t.$t("workouts.GPX_FILE"))+" "+(0,n.zw)(t.$t("workouts.ZIP_ARCHIVE_DESCRIPTION"))+": ",1),(0,a._)("input",{id:"gpxFile",name:"gpxFile",type:"file",accept:".gpx, .zip",disabled:(0,l.SU)(et),required:"",onInvalid:gt,onInput:wt},null,40,O),(0,a._)("div",I,[(0,a._)("div",null,[(0,a._)("strong",null,(0,n.zw)(t.$t("workouts.GPX_FILE"))+":",1),(0,a._)("ul",null,[(0,a._)("li",null,(0,n.zw)(t.$t("workouts.MAX_SIZE"))+": "+(0,n.zw)((0,l.SU)(nt)),1)])]),(0,a._)("div",null,[(0,a._)("strong",null,(0,n.zw)(t.$t("workouts.ZIP_ARCHIVE"))+":",1),(0,a._)("ul",null,[(0,a._)("li",null,(0,n.zw)(t.$t("workouts.NO_FOLDER")),1),(0,a._)("li",null,(0,n.zw)(t.$t("workouts.MAX_FILES"))+": "+(0,n.zw)((0,l.SU)(lt)),1),(0,a._)("li",null,(0,n.zw)(t.$t("workouts.MAX_SIZE"))+": "+(0,n.zw)((0,l.SU)(rt)),1)])])])])):((0,a.wg)(),(0,a.iD)("div",A,[(0,a._)("label",C,(0,n.zw)(t.$t("workouts.TITLE"))+": ",1),(0,a.wy)((0,a._)("input",{id:"title",name:"title",type:"text",required:!(0,l.SU)(tt),onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[1]||(e[1]=t=>it.title=t)},null,40,R),[[r.nr,it.title]])])),ut.value?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("div",$,[(0,a._)("div",N,[(0,a._)("div",x,[(0,a._)("label",null,(0,n.zw)(t.$t("workouts.WORKOUT_DATE"))+":",1),(0,a._)("div",z,[(0,a.wy)((0,a._)("input",{id:"workout-date",name:"workout-date",type:"date",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[2]||(e[2]=t=>it.workoutDate=t)},null,40,L),[[r.nr,it.workoutDate]]),(0,a.wy)((0,a._)("input",{id:"workout-time",name:"workout-time",class:"workout-time",type:"time",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[3]||(e[3]=t=>it.workoutTime=t)},null,40,j),[[r.nr,it.workoutTime]])])]),(0,a._)("div",W,[(0,a._)("label",null,(0,n.zw)(t.$t("workouts.DURATION"))+":",1),(0,a._)("div",null,[(0,a.wy)((0,a._)("input",{id:"workout-duration-hour",name:"workout-duration-hour",class:"workout-duration",type:"text",placeholder:"HH",minlength:"1",maxlength:"2",pattern:"^([0-1]?[0-9]|2[0-3])$",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[4]||(e[4]=t=>it.workoutDurationHour=t)},null,40,P),[[r.nr,it.workoutDurationHour]]),(0,a.Uk)(" : "),(0,a.wy)((0,a._)("input",{id:"workout-duration-minutes",name:"workout-duration-minutes",class:"workout-duration",type:"text",pattern:"^([0-5][0-9])$",minlength:"2",maxlength:"2",placeholder:"MM",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[5]||(e[5]=t=>it.workoutDurationMinutes=t)},null,40,B),[[r.nr,it.workoutDurationMinutes]]),(0,a.Uk)(" : "),(0,a.wy)((0,a._)("input",{id:"workout-duration-seconds",name:"workout-duration-seconds",class:"workout-duration",type:"text",pattern:"^([0-5][0-9])$",minlength:"2",maxlength:"2",placeholder:"SS",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[6]||(e[6]=t=>it.workoutDurationSeconds=t)},null,40,F),[[r.nr,it.workoutDurationSeconds]])])])]),(0,a._)("div",H,[(0,a._)("label",null,(0,n.zw)(t.$t("workouts.DISTANCE"))+" ("+(0,n.zw)((0,l.SU)(X).imperial_units?"mi":"km")+"): ",1),(0,a.wy)((0,a._)("input",{name:"workout-distance",type:"number",min:"0",step:"0.001",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[7]||(e[7]=t=>it.workoutDistance=t)},null,40,M),[[r.nr,it.workoutDistance]])])])),(0,a._)("div",Z,[(0,a._)("label",null,(0,n.zw)(t.$t("workouts.NOTES"))+": ",1),(0,a.Wm)(o,{name:"notes",input:it.notes,disabled:(0,l.SU)(et),onUpdateValue:pt},null,8,["input","disabled"])])]),(0,l.SU)(st)?((0,a.wg)(),(0,a.j4)(s,{key:0,message:(0,l.SU)(st)},null,8,["message"])):(0,a.kq)("",!0),(0,l.SU)(et)?((0,a.wg)(),(0,a.iD)("div",q,[(0,a.Wm)(i)])):((0,a.wg)(),(0,a.iD)("div",G,[(0,a._)("button",{class:"confirm",type:"submit",disabled:(0,l.SU)(et)},(0,n.zw)(t.$t("buttons.SUBMIT")),9,K),(0,a._)("button",{class:"cancel",onClick:(0,r.iM)(vt,["prevent"])},(0,n.zw)(t.$t("buttons.CANCEL")),9,Y)]))],42,f)])])),_:1})],2)}}}),J=o(3744);const X=(0,J.Z)(V,[["__scopeId","data-v-886f93f6"]]);var Q=X},4189:function(t,e,o){o.r(e),o.d(e,{default:function(){return p}});var a=o(6252),n=o(2262),l=o(2528),r=o(5801),s=o(9917);const i={id:"add-workout",class:"view"},u={class:"container"};var d=(0,a.aZ)({__name:"AddWorkout",setup(t){const e=(0,s.o)(),o=(0,a.Fl)((()=>e.getters[r.O8.GETTERS.SPORTS])),d=(0,a.Fl)((()=>e.getters[r.YN.GETTERS.AUTH_USER_PROFILE])),c=(0,a.Fl)((()=>e.getters[r.aX.GETTERS.WORKOUT_DATA]));return(t,e)=>((0,a.wg)(),(0,a.iD)("div",i,[(0,a._)("div",u,[(0,a.Wm)(l.Z,{authUser:(0,n.SU)(d),sports:(0,n.SU)(o),isCreation:!0,loading:(0,n.SU)(c).loading},null,8,["authUser","sports","loading"])])]))}});const c=d;var p=c},8237:function(t,e,o){o.r(e),o.d(e,{default:function(){return m}});var a=o(6252),n=o(2262),l=o(2201),r=o(2528),s=o(5801),i=o(9917);const u={id:"edit-workout",class:"view"},d={class:"container"};var c=(0,a.aZ)({__name:"EditWorkout",setup(t){const e=(0,l.yj)(),o=(0,i.o)(),c=(0,a.Fl)((()=>o.getters[s.YN.GETTERS.AUTH_USER_PROFILE])),p=(0,a.Fl)((()=>o.getters[s.O8.GETTERS.SPORTS])),m=(0,a.Fl)((()=>o.getters[s.aX.GETTERS.WORKOUT_DATA]));return(0,a.wF)((()=>{o.dispatch(s.aX.ACTIONS.GET_WORKOUT_DATA,{workoutId:e.params.workoutId})})),(0,a.YP)((()=>e.params.workoutId),(async t=>{t||o.commit(s.aX.MUTATIONS.EMPTY_WORKOUT)})),(t,e)=>((0,a.wg)(),(0,a.iD)("div",u,[(0,a._)("div",d,[(0,n.SU)(m).workout.id?((0,a.wg)(),(0,a.j4)(r.Z,{key:0,authUser:(0,n.SU)(c),sports:(0,n.SU)(p),workout:(0,n.SU)(m).workout,loading:(0,n.SU)(m).loading},null,8,["authUser","sports","workout","loading"])):(0,a.kq)("",!0)])]))}});const p=c;var m=p},4915:function(t,e,o){o.r(e),o.d(e,{default:function(){return Yo}});var a=o(6252),n=o(2262),l=o(2201),r=o(8273),s=(o(7658),o(3577)),i=o(9963),u=o(5167);const d=t=>((0,a.dD)("data-v-4d9f9a8a"),t=t(),(0,a.Cn)(),t),c={id:"workout-card-title"},p=["title"],m=d((()=>(0,a._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1))),w=[m],k={class:"workout-card-title"},f={class:"workout-title-date"},_={key:0,class:"workout-title"},v={key:1,class:"workout-title"},g={class:"workout-segment"},y=d((()=>(0,a._)("i",{class:"fa fa-map-marker","aria-hidden":"true"},null,-1))),S={class:"workout-date"},U={class:"workout-link"},h=["title"],b=d((()=>(0,a._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1))),T=[b];var E=(0,a.aZ)({__name:"WorkoutCardTitle",props:{sport:null,workoutObject:null},emits:["displayModal"],setup(t,{emit:e}){const o=t,{sport:l,workoutObject:r}=(0,n.BK)(o);async function d(t){await u.Z.get(`workouts/${t}/gpx/download`,{responseType:"blob"}).then((e=>{const o=window.URL.createObjectURL(new Blob([e.data],{type:"application/gpx+xml"})),a=document.createElement("a");a.href=o,a.setAttribute("download",`${t}.gpx`),document.body.appendChild(a),a.click()}))}return(t,o)=>{const u=(0,a.up)("SportImage"),m=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("div",c,[(0,a._)("div",{class:(0,s.C_)(["workout-previous workout-arrow",{inactive:!(0,n.SU)(r).previousUrl}]),title:(0,n.SU)(r).previousUrl?t.$t(`workouts.PREVIOUS_${(0,n.SU)(r).type}`):t.$t(`workouts.NO_PREVIOUS_${(0,n.SU)(r).type}`),onClick:o[0]||(o[0]=e=>(0,n.SU)(r).previousUrl?t.$router.push((0,n.SU)(r).previousUrl):null)},w,10,p),(0,a._)("div",k,[(0,a.Wm)(u,{"sport-label":(0,n.SU)(l).label,color:(0,n.SU)(l).color},null,8,["sport-label","color"]),(0,a._)("div",f,["WORKOUT"===(0,n.SU)(r).type?((0,a.wg)(),(0,a.iD)("div",_,[(0,a._)("span",null,(0,s.zw)((0,n.SU)(r).title),1),(0,a._)("i",{class:"fa fa-edit","aria-hidden":"true",onClick:o[1]||(o[1]=e=>t.$router.push({name:"EditWorkout",params:{workoutId:(0,n.SU)(r).workoutId}}))}),(0,n.SU)(r).with_gpx?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-download","aria-hidden":"true",onClick:o[2]||(o[2]=(0,i.iM)((t=>d((0,n.SU)(r).workoutId)),["prevent"]))})):(0,a.kq)("",!0),(0,a._)("i",{class:"fa fa-trash","aria-hidden":"true",onClick:o[3]||(o[3]=t=>e("displayModal",!0))})])):((0,a.wg)(),(0,a.iD)("div",v,[(0,a.Uk)((0,s.zw)((0,n.SU)(r).title)+" ",1),(0,a._)("span",g,[(0,a.Uk)(" — "),y,(0,a.Uk)(" "+(0,s.zw)(t.$t("workouts.SEGMENT"))+" "+(0,s.zw)((0,n.SU)(r).segmentId+1),1)])])),(0,a._)("div",S,[(0,a.Uk)((0,s.zw)((0,n.SU)(r).workoutDate)+" - "+(0,s.zw)((0,n.SU)(r).workoutTime)+" ",1),(0,a._)("span",U,["SEGMENT"===(0,n.SU)(r).type?((0,a.wg)(),(0,a.j4)(m,{key:0,to:{name:"Workout",params:{workoutId:(0,n.SU)(r).workoutId}}},{default:(0,a.w5)((()=>[(0,a.Uk)(" > "+(0,s.zw)(t.$t("workouts.BACK_TO_WORKOUT")),1)])),_:1},8,["to"])):(0,a.kq)("",!0)])])])]),(0,a._)("div",{class:(0,s.C_)(["workout-next workout-arrow",{inactive:!(0,n.SU)(r).nextUrl}]),title:(0,n.SU)(r).nextUrl?t.$t(`workouts.NEXT_${(0,n.SU)(r).type}`):t.$t(`workouts.NO_NEXT_${(0,n.SU)(r).type}`),onClick:o[4]||(o[4]=e=>(0,n.SU)(r).nextUrl?t.$router.push((0,n.SU)(r).nextUrl):null)},T,10,h)])}}}),D=o(3744);const O=(0,D.Z)(E,[["__scopeId","data-v-4d9f9a8a"]]);var I=O;const A=t=>((0,a.dD)("data-v-1a5282f6"),t=t(),(0,a.Cn)(),t),C={key:0,class:"workout-record"},R=A((()=>(0,a._)("sup",null,[(0,a._)("i",{class:"fa fa-trophy","aria-hidden":"true"})],-1))),$=[R];var N=(0,a.aZ)({__name:"WorkoutRecord",props:{recordType:null,workoutObject:null},setup(t){const e=t,{recordType:o,workoutObject:l}=(0,n.BK)(e);return(t,e)=>(0,n.SU)(l).records&&(0,n.SU)(l).records.find((t=>t.record_type===(0,n.SU)(o)))?((0,a.wg)(),(0,a.iD)("span",C,$)):(0,a.kq)("",!0)}});const x=(0,D.Z)(N,[["__scopeId","data-v-1a5282f6"]]);var z=x,L=o(9150);const j=["N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"],W=t=>{const e=Math.floor(t/22.5+.5);return j[e%16]},P={class:"wind"},B={class:"wind-bearing"},F=["title"];var H=(0,a.aZ)({__name:"WeatherWind",props:{weather:null,useImperialUnits:{type:Boolean}},setup(t){const e=t,{useImperialUnits:o,weather:l}=(0,n.BK)(e),{t:r}=(0,L.QT)();function i(t){return r(`workouts.WEATHER.WIND_DIRECTIONS.${W(t)}`)}return(t,e)=>{const r=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",P,[(0,a.Wm)(r,{distance:(0,n.SU)(l).wind,unitFrom:"m",digits:1,displayUnit:!1,useImperialUnits:(0,n.SU)(o)},null,8,["distance","useImperialUnits"]),(0,a.Uk)(" "+(0,s.zw)((0,n.SU)(o)?"ft":"m")+"/s ",1),(0,a._)("div",B,[(0,n.SU)(l).windBearing?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-long-arrow-down",style:(0,s.j5)({transform:`rotate(${(0,n.SU)(l).windBearing}deg)`}),"aria-hidden":"true",title:i((0,n.SU)(l).windBearing)},null,12,F)):(0,a.kq)("",!0)])])}}});const M=(0,D.Z)(H,[["__scopeId","data-v-46a7c31c"]]);var Z=M;const q=t=>((0,a.dD)("data-v-76e9ab62"),t=t(),(0,a.Cn)(),t),G={key:0,id:"workout-weather"},K={class:"weather-table"},Y=q((()=>(0,a._)("th",null,null,-1))),V={class:"weather-th"},J=["src","alt","title"],X={class:"weather-th"},Q=["src","alt","title"],tt=["alt","title"],et=["alt","title"],ot=["alt","title"];var at=(0,a.aZ)({__name:"WorkoutWeather",props:{workoutObject:null,useImperialUnits:{type:Boolean}},setup(t){const e=t,{useImperialUnits:o,workoutObject:l}=(0,n.BK)(e);return(t,e)=>(0,n.SU)(l).weatherStart&&(0,n.SU)(l).weatherEnd?((0,a.wg)(),(0,a.iD)("div",G,[(0,a._)("table",K,[(0,a._)("thead",null,[(0,a._)("tr",null,[Y,(0,a._)("th",null,[(0,a._)("div",V,[(0,a.Uk)((0,s.zw)(t.$t("workouts.START"))+" ",1),(0,a._)("img",{class:"weather-img",src:`/img/weather/${(0,n.SU)(l).weatherStart.icon}.svg`,alt:t.$t(`workouts.WEATHER.DARK_SKY.${(0,n.SU)(l).weatherStart.icon}`),title:t.$t(`workouts.WEATHER.DARK_SKY.${(0,n.SU)(l).weatherStart.icon}`)},null,8,J)])]),(0,a._)("th",null,[(0,a._)("div",X,[(0,a.Uk)((0,s.zw)(t.$t("workouts.END"))+" ",1),(0,a._)("img",{class:"weather-img",src:`/img/weather/${(0,n.SU)(l).weatherEnd.icon}.svg`,alt:t.$t(`workouts.WEATHER.DARK_SKY.${(0,n.SU)(l).weatherEnd.icon}`),title:t.$t(`workouts.WEATHER.DARK_SKY.${(0,n.SU)(l).weatherEnd.icon}`)},null,8,Q)])])])]),(0,a._)("tbody",null,[(0,a._)("tr",null,[(0,a._)("td",null,[(0,a._)("img",{class:"weather-img weather-img-small",src:"/img/weather/temperature.svg",alt:t.$t("workouts.WEATHER.TEMPERATURE"),title:t.$t("workouts.WEATHER.TEMPERATURE")},null,8,tt)]),(0,a._)("td",null,(0,s.zw)(Number((0,n.SU)(l).weatherStart.temperature).toFixed(1))+"°C ",1),(0,a._)("td",null,(0,s.zw)(Number((0,n.SU)(l).weatherEnd.temperature).toFixed(1))+"°C ",1)]),(0,a._)("tr",null,[(0,a._)("td",null,[(0,a._)("img",{class:"weather-img weather-img-small",src:"/img/weather/pour-rain.svg",alt:t.$t("workouts.WEATHER.HUMIDITY"),title:t.$t("workouts.WEATHER.HUMIDITY")},null,8,et)]),(0,a._)("td",null,(0,s.zw)(Number(100*(0,n.SU)(l).weatherStart.humidity).toFixed(1))+"% ",1),(0,a._)("td",null,(0,s.zw)(Number(100*(0,n.SU)(l).weatherEnd.humidity).toFixed(1))+"% ",1)]),(0,a._)("tr",null,[(0,a._)("td",null,[(0,a._)("img",{class:"weather-img weather-img-small",src:"/img/weather/breeze.svg",alt:t.$t("workouts.WEATHER.WIND"),title:t.$t("workouts.WEATHER.WIND")},null,8,ot)]),(0,a._)("td",null,[(0,a.Wm)(Z,{weather:(0,n.SU)(l).weatherStart,useImperialUnits:(0,n.SU)(o)},null,8,["weather","useImperialUnits"])]),(0,a._)("td",null,[(0,a.Wm)(Z,{weather:(0,n.SU)(l).weatherEnd,useImperialUnits:(0,n.SU)(o)},null,8,["weather","useImperialUnits"])])])])])])):(0,a.kq)("",!0)}});const nt=(0,D.Z)(at,[["__scopeId","data-v-76e9ab62"]]);var lt=nt;const rt=t=>((0,a.dD)("data-v-74c5993b"),t=t(),(0,a.Cn)(),t),st={id:"workout-info"},it={class:"workout-data"},ut=rt((()=>(0,a._)("i",{class:"fa fa-clock-o","aria-hidden":"true"},null,-1))),dt={class:"label"},ct={class:"value"},pt={key:0},mt={class:"value"},wt={class:"value"},kt={class:"workout-data"},ft=rt((()=>(0,a._)("i",{class:"fa fa-road","aria-hidden":"true"},null,-1))),_t={class:"label"},vt={class:"workout-data"},gt=rt((()=>(0,a._)("i",{class:"fa fa-tachometer","aria-hidden":"true"},null,-1))),yt={class:"label"},St=rt((()=>(0,a._)("br",null,null,-1))),Ut={class:"label"},ht={key:0,class:"workout-data"},bt=["alt"],Tt={class:"label"},Et=rt((()=>(0,a._)("br",null,null,-1))),Dt={class:"label"},Ot={key:1,class:"workout-data"},It=rt((()=>(0,a._)("i",{class:"fa fa-location-arrow","aria-hidden":"true"},null,-1))),At={class:"label"},Ct=rt((()=>(0,a._)("br",null,null,-1))),Rt={class:"label"};var $t=(0,a.aZ)({__name:"WorkoutData",props:{workoutObject:null,useImperialUnits:{type:Boolean},displayHARecord:{type:Boolean}},setup(t){const e=t,{displayHARecord:o,workoutObject:l,useImperialUnits:r}=(0,n.BK)(e),i=(0,a.Fl)((()=>"0:00:00"!==e.workoutObject.pauses&&null!==e.workoutObject.pauses));return(t,e)=>{const u=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",st,[(0,a._)("div",it,[ut,(0,a._)("span",dt,(0,s.zw)(t.$t("workouts.DURATION")),1),(0,a.Uk)(": "),(0,a._)("span",ct,(0,s.zw)((0,n.SU)(l).moving),1),(0,a.Wm)(z,{workoutObject:(0,n.SU)(l),recordType:"LD"},null,8,["workoutObject"]),(0,n.SU)(i)?((0,a.wg)(),(0,a.iD)("div",pt,[(0,a.Uk)(" ("+(0,s.zw)(t.$t("workouts.PAUSES"))+": ",1),(0,a._)("span",mt,(0,s.zw)((0,n.SU)(l).pauses),1),(0,a.Uk)(" - "+(0,s.zw)(t.$t("workouts.TOTAL_DURATION"))+": ",1),(0,a._)("span",wt,(0,s.zw)((0,n.SU)(l).duration)+")",1)])):(0,a.kq)("",!0)]),(0,a._)("div",kt,[ft,(0,a._)("span",_t,(0,s.zw)(t.$t("workouts.DISTANCE")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).distance,digits:3,unitFrom:"km",strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"]),(0,a.Wm)(z,{workoutObject:(0,n.SU)(l),recordType:"FD"},null,8,["workoutObject"])]),(0,a._)("div",vt,[gt,(0,a._)("span",yt,(0,s.zw)(t.$t("workouts.AVERAGE_SPEED")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).aveSpeed,unitFrom:"km",speed:!0,strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"]),(0,a.Wm)(z,{workoutObject:(0,n.SU)(l),recordType:"AS"},null,8,["workoutObject"]),St,(0,a._)("span",Ut,(0,s.zw)(t.$t("workouts.MAX_SPEED")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).maxSpeed,unitFrom:"km",speed:!0,strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"]),(0,a.Wm)(z,{workoutObject:(0,n.SU)(l),recordType:"MS"},null,8,["workoutObject"])]),null!==(0,n.SU)(l).maxAlt&&null!==(0,n.SU)(l).minAlt?((0,a.wg)(),(0,a.iD)("div",ht,[(0,a._)("img",{class:"mountains",src:"/img/workouts/mountains.svg",alt:t.$t("workouts.ELEVATION")},null,8,bt),(0,a._)("span",Tt,(0,s.zw)(t.$t("workouts.MIN_ALTITUDE")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).minAlt,unitFrom:"m",strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"]),Et,(0,a._)("span",Dt,(0,s.zw)(t.$t("workouts.MAX_ALTITUDE")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).maxAlt,unitFrom:"m",strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"])])):(0,a.kq)("",!0),null!==(0,n.SU)(l).ascent&&null!==(0,n.SU)(l).descent?((0,a.wg)(),(0,a.iD)("div",Ot,[It,(0,a._)("span",At,(0,s.zw)(t.$t("workouts.ASCENT")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).ascent,unitFrom:"m",strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"]),(0,n.SU)(o)?((0,a.wg)(),(0,a.j4)(z,{key:0,workoutObject:(0,n.SU)(l),recordType:"HA"},null,8,["workoutObject"])):(0,a.kq)("",!0),Ct,(0,a._)("span",Rt,(0,s.zw)(t.$t("workouts.DESCENT")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).descent,unitFrom:"m",strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"])])):(0,a.kq)("",!0),(0,a.Wm)(lt,{workoutObject:(0,n.SU)(l),useImperialUnits:(0,n.SU)(r)},null,8,["workoutObject","useImperialUnits"])])}}});const Nt=(0,D.Z)($t,[["__scopeId","data-v-74c5993b"]]);var xt=Nt;function zt(t,e){return Array.from(t.getElementsByTagName(e))}function Lt(t){return t?.normalize(),t&&t.textContent||""}function jt(t,e,o){const a=t.getElementsByTagName(e),n=a.length?a[0]:null;return n&&o&&o(n),n}function Wt(t,e,o){const a={};if(!t)return a;const n=t.getElementsByTagName(e),l=n.length?n[0]:null;return l&&o?o(l,a):a}function Pt(t,e,o){const a=Lt(jt(t,e));return a&&o&&o(a)||{}}function Bt(t,e,o){const a=parseFloat(Lt(jt(t,e)));if(!isNaN(a))return a&&o&&o(a)||{}}function Ft(t,e,o){const a=parseFloat(Lt(jt(t,e)));if(!isNaN(a))return a&&o&&o(a),a}function Ht(t,e){const o={};for(const a of e)Pt(t,a,(t=>{o[a]=t}));return o}function Mt(t){return 1===t?.nodeType}function Zt(t){return Wt(t,"line",(t=>{const e=Object.assign({},Pt(t,"color",(t=>({stroke:`#${t}`}))),Bt(t,"opacity",(t=>({"stroke-opacity":t}))),Bt(t,"width",(t=>({"stroke-width":96*t/25.4}))));return e}))}function qt(t){let e=[];if(null===t)return e;for(const o of Array.from(t.childNodes)){if(!Mt(o))continue;const t=Gt(o.nodeName);if("gpxtpx:TrackPointExtension"===t)e=e.concat(qt(o));else{const a=Lt(o);e.push([t,Kt(a)])}}return e}function Gt(t){return["heart","gpxtpx:hr","hr"].includes(t)?"heart":t}function Kt(t){const e=parseFloat(t);return isNaN(e)?t:e}function Yt(t){const e=[parseFloat(t.getAttribute("lon")||""),parseFloat(t.getAttribute("lat")||"")];if(isNaN(e[0])||isNaN(e[1]))return null;Ft(t,"ele",(t=>{e.push(t)}));const o=jt(t,"time");return{coordinates:e,time:o?Lt(o):null,extendedValues:qt(jt(t,"extensions"))}}function Vt(t){const e=Ht(t,["name","cmt","desc","type","time","keywords"]),o=Array.from(t.getElementsByTagNameNS("http://www.garmin.com/xmlschemas/GpxExtensions/v3","*"));for(const n of o)n.parentNode?.parentNode===t&&(e[n.tagName.replace(":","_")]=Lt(n));const a=zt(t,"link");return a.length&&(e.links=a.map((t=>Object.assign({href:t.getAttribute("href")},Ht(t,["text","type"]))))),e}function Jt(t,e){const o=zt(t,e),a=[],n=[],l={};for(let r=0;r1,r=Object.assign({_gpxType:"trk"},Vt(t),Zt(jt(t,"extensions")),a.length?{coordinateProperties:{times:l?a:a[0]}}:{});for(const s of n){o.push(s.line),r.coordinateProperties||(r.coordinateProperties={});const t=r.coordinateProperties,e=Object.entries(s.extendedValues);for(let o=0;onew Array(t.line.length).fill(null)))),t[a][o]=r):t[a]=r}}return{type:"Feature",properties:r,geometry:l?{type:"MultiLineString",coordinates:o}:{type:"LineString",coordinates:o[0]}}}function te(t){const e=Object.assign(Vt(t),Ht(t,["sym"])),o=Yt(t);return o?{type:"Feature",properties:e,geometry:{type:"Point",coordinates:o.coordinates}}:null}function*ee(t){for(const e of zt(t,"trk")){const t=Qt(e);t&&(yield t)}for(const e of zt(t,"rte")){const t=Xt(e);t&&(yield t)}for(const e of zt(t,"wpt")){const t=te(e);t&&(yield t)}}function oe(t){return{type:"FeatureCollection",features:Array.from(ee(t))}}Math.PI;const ae=(t,e)=>{let o;return function(...a){const n=this;o&&clearTimeout(o),o=setTimeout((()=>{t.apply(n,a),o=null}),e)}},ne=t=>t&&"function"===typeof t.charAt?t.charAt(0).toUpperCase()+t.slice(1):t,le=(t,e,o)=>{for(const n in o){const l="set"+ne(n);t[l]?(0,a.YP)((()=>o[n]),((e,o)=>{t[l](e,o)})):e[l]&&(0,a.YP)((()=>o[n]),(t=>{e[l](t)}))}},re=t=>{const e={};for(const o in t)if(o.startsWith("on")&&!o.startsWith("onUpdate")&&"onReady"!==o){const a=o.slice(2).toLocaleLowerCase();e[a]=t[o]}return e},se=async t=>{const e=await Promise.all([o.e(431).then(o.t.bind(o,6431,17)),o.e(93).then(o.t.bind(o,7093,17)),o.e(858).then(o.t.bind(o,8858,17))]);delete t.Default.prototype._getIconUrl,t.Default.mergeOptions({iconRetinaUrl:e[0].default,iconUrl:e[1].default,shadowUrl:e[2].default})},ie=t=>{const e=(0,n.iH)((()=>console.warn(`Method ${t} has been invoked without being replaced`))),o=(...t)=>e.value(...t);return o.wrapped=e,(0,a.JJ)(t,o),o},ue=(t,e)=>t.wrapped.value=e,de="object"===typeof self&&self.self===self&&self||"object"===typeof o.g&&o.g.global===o.g&&o.g||void 0,ce="useGlobalLeaflet",pe={options:{type:Object,default:()=>({})}},me=t=>({options:t.options,methods:{}}),we={...pe,pane:{type:String,default:"overlayPane"},attribution:{type:String,default:null},name:{type:String,custom:!0,default:void 0},layerType:{type:String,custom:!0,default:void 0},visible:{type:Boolean,custom:!0,default:!0}},ke=(t,e,o)=>{const n=(0,a.f3)("addLayer"),l=(0,a.f3)("removeLayer"),{options:r,methods:s}=me(t),i={...r,attribution:t.attribution,pane:t.pane},u=()=>n({leafletObject:e.value}),d=()=>l({leafletObject:e.value}),c={...s,setAttribution(t,e){const o=this.$parent.leafletObject.attributionControl;o.removeAttribution(e).addAttribution(t)},setName(){d(),t.visible&&u()},setLayerType(){d(),t.visible&&u()},setVisible(t){e.value&&(t?u():d())},bindPopup({leafletObject:t}){e.value.bindPopup(t)},bindTooltip({leafletObject:t}){e.value.bindTooltip(t)},unbindTooltip(){const t=e.value?e.value.getTooltip():null;t&&t.unbindTooltip()},unbindPopup(){const t=e.value?e.value.getPopup():null;t&&t.unbindPopup()},updateVisibleProp(t){o.emit("update:visible",t)}};return(0,a.JJ)("bindPopup",c.bindPopup),(0,a.JJ)("bindTooltip",c.bindTooltip),(0,a.JJ)("unbindTooltip",c.unbindTooltip),(0,a.JJ)("unbindPopup",c.unbindPopup),(0,a.Ah)((()=>{c.unbindPopup(),c.unbindTooltip(),d()})),{options:i,methods:c}},fe=(t,e)=>{if(t&&e.default)return(0,a.h)("div",{style:{display:"none"}},e.default())},_e={...pe,interactive:{type:Boolean,default:!0},bubblingMouseEvents:{type:Boolean,default:!0}},ve={...we,..._e,stroke:{type:Boolean,custom:!0,default:!0},color:{type:String,custom:!0,default:"#3388ff"},weight:{type:Number,custom:!0,default:3},opacity:{type:Number,custom:!0,default:1},lineCap:{type:String,custom:!0,default:"round"},lineJoin:{type:String,custom:!0,default:"round"},dashArray:{type:String,custom:!0,default:null},dashOffset:{type:String,custom:!0,default:null},fill:{type:Boolean,custom:!0,default:!1},fillColor:{type:String,custom:!0,default:"#3388ff"},fillOpacity:{type:Number,custom:!0,default:.2},fillRule:{type:String,custom:!0,default:"evenodd"},className:{type:String,custom:!0,default:null}},ge={...ve,latLng:{type:[Object,Array],custom:!0,default:null},radius:{type:Number,default:null}};const ye={...pe,position:{type:String,default:"topright"}},Se=(t,e)=>{const{options:o,methods:n}=me(t),l={...o,position:t.position},r={...n,setPosition(t){e.value&&e.value.setPosition(t)}};return(0,a.Ah)((()=>{e.value&&e.value.remove()})),{options:l,methods:r}},Ue=t=>t.default?(0,a.h)("div",{ref:"root"},t.default()):null;var he={name:"LControl",props:{...ye,disableClickPropagation:{type:Boolean,custom:!0,default:!0},disableScrollPropagation:{type:Boolean,custom:!0,default:!1}},setup(t,e){const l=(0,n.iH)({}),r=(0,n.iH)(null),s=(0,a.f3)(ce),i=(0,a.f3)("registerControl"),{options:u,methods:d}=Se(t,l);return(0,a.bv)((async()=>{const{Control:n,DomEvent:c}=s?de.L:await o.e(633).then(o.bind(o,6633)),p=n.extend({onAdd(){return r.value}});l.value=new p(u),le(d,l.value,t),i({leafletObject:l.value}),t.disableClickPropagation&&c.disableClickPropagation(r.value),t.disableScrollPropagation&&c.disableScrollPropagation(r.value),(0,a.Y3)((()=>e.emit("ready",l.value)))})),{root:r,leafletObject:l}},render(){return Ue(this.$slots)},__file:"src/components/LControl.vue"};const be={...ye,collapsed:{type:Boolean,default:!0},autoZIndex:{type:Boolean,default:!0},hideSingleBase:{type:Boolean,default:!1},sortLayers:{type:Boolean,default:!1},sortFunction:{type:Function,default:void 0}},Te=(t,e)=>{const{options:o}=Se(t,e),a={...o,collapsed:t.collapsed,autoZIndex:t.autoZIndex,hideSingleBase:t.hideSingleBase,sortLayers:t.sortLayers,sortFunction:t.sortFunction},n={addLayer(t){"base"===t.layerType?e.value.addBaseLayer(t.leafletObject,t.name):"overlay"===t.layerType&&e.value.addOverlay(t.leafletObject,t.name)},removeLayer(t){e.value.removeLayer(t.leafletObject)}};return{options:a,methods:n}};var Ee={name:"LControlLayers",props:be,setup(t,e){const l=(0,n.iH)({}),r=(0,a.f3)(ce),s=(0,a.f3)("registerLayerControl"),{options:i,methods:u}=Te(t,l);return(0,a.bv)((async()=>{const{control:n}=r?de.L:await o.e(633).then(o.bind(o,6633));l.value=n.layers(null,null,i),le(u,l.value,t),s({...t,...u,leafletObject:l.value}),(0,a.Y3)((()=>e.emit("ready",l.value)))})),{leafletObject:l.value}},render(){return null},__file:"src/components/LControlLayers.vue"};Boolean,Boolean,Boolean;const De={...we},Oe=(t,e,o)=>{const{options:n,methods:l}=ke(t,e,o),r={...n},s={...l,addLayer(t){e.value.addLayer(t.leafletObject)},removeLayer(t){e.value.removeLayer(t.leafletObject)}};return(0,a.JJ)("addLayer",s.addLayer),(0,a.JJ)("removeLayer",s.removeLayer),{options:r,methods:s}};const Ie={...De,geojson:{type:[Object,Array],default:()=>({})}},Ae=(t,e)=>{const{options:o,methods:a}=Oe(t,e),n={...o,...t},l={...a,setGeojson(t){e.value.clearLayers(),e.value.addData(t)},getGeoJSONData(){return e.value.toGeoJSON()},getBounds(){return e.value.getBounds()}};return{options:n,methods:l}};var Ce={props:Ie,setup(t,e){const l=(0,n.iH)({}),r=(0,n.iH)(!1),s=(0,a.f3)(ce),i=(0,a.f3)("addLayer"),{methods:u,options:d}=Ae(t,l);return(0,a.bv)((async()=>{const{geoJSON:n,DomEvent:c}=s?de.L:await o.e(633).then(o.bind(o,6633));l.value=n(t.geojson,d);const p=re(e.attrs);c.on(l.value,p),le(u,l.value,t),i({...t,...u,leafletObject:l.value}),r.value=!0,(0,a.Y3)((()=>e.emit("ready",l.value)))})),{ready:r,leafletObject:l}},render(){return fe(this.ready,this.$slots)},__file:"src/components/LGeoJson.vue"};const Re={...we,pane:{type:String,default:"tilePane"},opacity:{type:Number,custom:!1,default:1},zIndex:{type:Number,default:1},tileSize:{type:Number,default:256},noWrap:{type:Boolean,default:!1},minZoom:{type:Number,default:0},maxZoom:{type:Number,default:void 0}},$e=(t,e,o)=>{const{options:a,methods:n}=ke(t,e,o),l={...a,pane:t.pane,opacity:t.opacity,zIndex:t.zIndex,tileSize:t.tileSize,noWrap:t.noWrap,minZoom:t.minZoom,maxZoom:t.maxZoom};return{options:l,methods:{...n}}};const Ne={iconUrl:{type:String,custom:!0,default:null},iconRetinaUrl:{type:String,custom:!0,default:null},iconSize:{type:[Object,Array],custom:!0,default:null},iconAnchor:{type:[Object,Array],custom:!0,default:null},popupAnchor:{type:[Object,Array],custom:!0,default:()=>[0,0]},tooltipAnchor:{type:[Object,Array],custom:!0,default:()=>[0,0]},shadowUrl:{type:String,custom:!0,default:null},shadowRetinaUrl:{type:String,custom:!0,default:null},shadowSize:{type:[Object,Array],custom:!0,default:null},shadowAnchor:{type:[Object,Array],custom:!0,default:null},bgPos:{type:[Object,Array],custom:!0,default:()=>[0,0]},className:{type:String,custom:!0,default:""},options:{type:Object,custom:!0,default:()=>({})}};var xe={name:"LIcon",props:{...Ne,...pe},setup(t,e){const l=(0,n.iH)(null),r=(0,a.f3)(ce),s=(0,a.f3)("canSetParentHtml"),i=(0,a.f3)("setParentHtml"),u=(0,a.f3)("setIcon");let d,c,p,m,w;const k=(o,a,n)=>{const l=o&&o.innerHTML;if(!a)return void(n&&w&&s()&&i(l));const r=re(e.attrs);w&&c(w,r);const{options:k}=me(t),f={...k,iconUrl:t.iconUrl,iconRetinaUrl:t.iconRetinaUrl,iconSize:t.iconSize,iconAnchor:t.iconAnchor,popupAnchor:t.popupAnchor,tooltipAnchor:t.tooltipAnchor,shadowUrl:t.shadowUrl,shadowRetinaUrl:t.shadowRetinaUrl,shadowSize:t.shadowSize,shadowAnchor:t.shadowAnchor,bgPos:t.bgPos,className:t.className,html:l||t.html};w=f.html?p(f):m(f),d(w,r),u(w)},f=()=>{(0,a.Y3)((()=>k(l.value,!0,!1)))},_=()=>{(0,a.Y3)((()=>k(l.value,!1,!0)))},v={setIconUrl:f,setIconRetinaUrl:f,setIconSize:f,setIconAnchor:f,setPopupAnchor:f,setTooltipAnchor:f,setShadowUrl:f,setShadowRetinaUrl:f,setShadowAnchor:f,setBgPos:f,setClassName:f,setHtml:f};return(0,a.bv)((async()=>{const{DomEvent:e,divIcon:a,icon:n}=r?de.L:await o.e(633).then(o.bind(o,6633));d=e.on,c=e.off,p=a,m=n,le(v,{},t);const s=new MutationObserver(_);s.observe(l.value,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),f()})),{root:l}},render(){const t=this.$slots.default?this.$slots.default():void 0;return(0,a.h)("div",{ref:"root"},t)},__file:"src/components/LIcon.vue"};Boolean,Boolean;var ze={props:De,setup(t,e){const l=(0,n.iH)({}),r=(0,n.iH)(!1),s=(0,a.f3)(ce),i=(0,a.f3)("addLayer"),{methods:u}=Oe(t,l,e);return(0,a.bv)((async()=>{const{layerGroup:n,DomEvent:d}=s?de.L:await o.e(633).then(o.bind(o,6633));l.value=n(t.options);const c=re(e.attrs);d.on(l.value,c),le(u,l.value,t),i({...t,...u,leafletObject:l.value}),r.value=!0,(0,a.Y3)((()=>e.emit("ready",l.value)))})),{ready:r,leafletObject:l}},render(){return fe(this.ready,this.$slots)},__file:"src/components/LLayerGroup.vue"},Le={emits:["ready","update:zoom","update:center","update:bounds"],props:{...pe,center:{type:[Object,Array],default:()=>[0,0]},bounds:{type:[Array,Object],default:void 0},maxBounds:{type:[Array,Object],default:void 0},zoom:{type:Number,default:0},minZoom:{type:Number,default:void 0},maxZoom:{type:Number,default:void 0},paddingBottomRight:{type:Array,default:void 0},paddingTopLeft:{type:Array,default:void 0},padding:{type:Array,default:void 0},worldCopyJump:{type:Boolean,default:!1},crs:{type:[String,Object],default:"EPSG3857"},maxBoundsViscosity:{type:Number,default:void 0},inertia:{type:Boolean,default:void 0},inertiaDeceleration:{type:Number,default:void 0},inertiaMaxSpeed:{type:Number,default:void 0},easeLinearity:{type:Number,default:void 0},zoomAnimation:{type:Boolean,default:void 0},zoomAnimationThreshold:{type:Number,default:void 0},fadeAnimation:{type:Boolean,default:void 0},markerZoomAnimation:{type:Boolean,default:void 0},noBlockingAnimations:{type:Boolean,default:!1},useGlobalLeaflet:{type:Boolean,default:!1}},setup(t,e){const l=(0,n.iH)(null),r=(0,n.qj)({ready:!1,leafletRef:{},layersToAdd:[],layersInControl:[]}),{options:s}=me(t),i={...s,minZoom:t.minZoom,maxZoom:t.maxZoom,maxBounds:t.maxBounds,maxBoundsViscosity:t.maxBoundsViscosity,worldCopyJump:t.worldCopyJump,crs:t.crs,center:t.center,zoom:t.zoom,inertia:t.inertia,inertiaDeceleration:t.inertiaDeceleration,inertiaMaxSpeed:t.inertiaMaxSpeed,easeLinearity:t.easeLinearity,zoomAnimation:t.zoomAnimation,zoomAnimationThreshold:t.zoomAnimationThreshold,fadeAnimation:t.fadeAnimation,markerZoomAnimation:t.markerZoomAnimation},u=ie("addLayer"),d=ie("removeLayer"),c=ie("registerControl"),p=ie("registerLayerControl");(0,a.JJ)(ce,t.useGlobalLeaflet);const m={moveEndHandler(){e.emit("update:zoom",r.leafletRef.getZoom()),e.emit("update:center",r.leafletRef.getCenter()),e.emit("update:bounds",r.leafletRef.getBounds())},overlayAddHandler(t){const e=r.layersInControl.find((e=>e.name===t.name));e&&e.updateVisibleProp(!0)},overlayRemoveHandler(t){const e=r.layersInControl.find((e=>e.name===t.name));e&&e.updateVisibleProp(!1)}};(0,a.bv)((async()=>{t.useGlobalLeaflet&&(de.L=de.L||await o.e(243).then(o.t.bind(o,5243,23)));const{map:n,CRS:s,Icon:w,latLngBounds:k,latLng:f,DomEvent:_}=t.useGlobalLeaflet?de.L:await o.e(633).then(o.bind(o,6633));try{i.beforeMapMount&&await i.beforeMapMount()}catch(S){console.error(`The following error occurred running the provided beforeMapMount hook ${S.message}`)}await se(w);const v="string"==typeof i.crs?s[i.crs]:i.crs;i.crs=v||s.EPSG3857;const g={addLayer(t){if(void 0!==t.layerType)if(void 0===r.layerControl)r.layersToAdd.push(t);else{const e=r.layersInControl.find((e=>e.leafletObject._leaflet_id===t.leafletObject._leaflet_id));e||(r.layerControl.addLayer(t),r.layersInControl.push(t))}!1!==t.visible&&r.leafletRef.addLayer(t.leafletObject)},removeLayer(t){void 0!==t.layerType&&(void 0===r.layerControl?r.layersToAdd=r.layersToAdd.filter((e=>e.name!==t.name)):(r.layerControl.removeLayer(t.leafletObject),r.layersInControl=r.layersInControl.filter((e=>e.leafletObject._leaflet_id!==t.leafletObject._leaflet_id)))),r.leafletRef.removeLayer(t.leafletObject)},registerLayerControl(t){r.layerControl=t,r.layersToAdd.forEach((t=>{r.layerControl.addLayer(t)})),r.layersToAdd=[],c(t)},registerControl(t){r.leafletRef.addControl(t.leafletObject)},setZoom(e){const o=r.leafletRef.getZoom();e!==o&&r.leafletRef.setZoom(e,{animate:!t.noBlockingAnimations&&null})},setPaddingBottomRight(t){r.paddingBottomRight=t},setPaddingTopLeft(t){r.paddingTopLeft=t},setPadding(t){r.padding=t},setCrs(t){const e=r.leafletRef.getBounds();r.leafletRef.options.crs=t,r.leafletRef.fitBounds(e,{animate:!1,padding:[0,0]})},fitBounds(t){r.leafletRef.fitBounds(t,{animate:!this.noBlockingAnimations&&null})},setBounds(t){if(!t)return;const e=k(t);if(!e.isValid())return;const o=r.lastSetBounds||r.leafletRef.getBounds(),a=!o.equals(e,0);a&&(r.lastSetBounds=e,r.leafletRef.fitBounds(e,this.fitBoundsOptions))},setCenter(t){if(null==t)return;const e=f(t),o=r.lastSetCenter||r.leafletRef.getCenter();o.lat===e.lat&&o.lng===e.lng||(r.lastSetCenter=e,r.leafletRef.panTo(e,{animate:!this.noBlockingAnimations&&null}))}};ue(u,g.addLayer),ue(d,g.removeLayer),ue(c,g.registerControl),ue(p,g.registerLayerControl),r.leafletRef=n(l.value,i),le(g,r.leafletRef,t);const y=re(e.attrs);r.leafletRef.on("moveend",ae(m.moveEndHandler,100)),r.leafletRef.on("overlayadd",m.overlayAddHandler),r.leafletRef.on("overlayremove",m.overlayRemoveHandler),_.on(r.leafletRef,y),r.ready=!0,(0,a.Y3)((()=>e.emit("ready",r.leafletRef)))})),(0,a.Jd)((()=>{r.leafletRef&&r.leafletRef.remove()}));const w=(0,a.Fl)((()=>r.leafletRef)),k=(0,a.Fl)((()=>r.ready));return{root:l,ready:k,leafletObject:w}},render(){return(0,a.h)("div",{style:{width:"100%",height:"100%"},ref:"root"},this.ready?this.$slots.default():{})},__file:"src/components/LMap.vue"};const je={...we,pane:{type:String,default:"markerPane"},draggable:{type:Boolean,custom:!0,default:!1},latLng:{type:[Object,Array],custom:!0,default:null},icon:{type:[Object],default:()=>{},custom:!1},zIndexOffset:{type:Number,custom:!1,default:null}},We=(t,e,o)=>{const{options:a,methods:n}=ke(t,e,o),l={...a,...t},r={...n,setDraggable(t){e.value.dragging&&(t?e.value.dragging.enable():e.value.dragging.disable())},latLngSync(t){o.emit("update:latLng",t.latlng),o.emit("update:lat-lng",t.latlng)},setLatLng(t){if(null!=t&&e.value){const o=e.value.getLatLng();o&&o.equals(t)||e.value.setLatLng(t)}}};return{options:l,methods:r}};var Pe={name:"LMarker",props:je,setup(t,e){const l=(0,n.iH)({}),r=(0,n.iH)(!1),s=(0,a.f3)(ce),i=(0,a.f3)("addLayer");(0,a.JJ)("canSetParentHtml",(()=>!!l.value.getElement())),(0,a.JJ)("setParentHtml",(t=>l.value.getElement().innerHTML=t)),(0,a.JJ)("setIcon",(t=>l.value.setIcon&&l.value.setIcon(t)));const{options:u,methods:d}=We(t,l,e);return void 0===u.icon&&delete u.icon,(0,a.bv)((async()=>{const{marker:n,DomEvent:c}=s?de.L:await o.e(633).then(o.bind(o,6633));l.value=n(t.latLng,u);const p=re(e.attrs);c.on(l.value,p),l.value.on("move",ae(d.latLngSync,100)),le(d,l.value,t),i({...t,...d,leafletObject:l.value}),r.value=!0,(0,a.Y3)((()=>e.emit("ready",l.value)))})),{ready:r,leafletObject:l}},render(){return fe(this.ready,this.$slots)},__file:"src/components/LMarker.vue"};const Be={...ve,latLngs:{type:Array,default:()=>[]},smoothFactor:{type:Number,custom:!0,default:1},noClip:{type:Boolean,custom:!0,default:!1}},Fe={...Be};const He={...pe,content:{type:String,default:null}};const Me={...Re,tms:{type:Boolean,default:!1},subdomains:{type:String,default:"abc"},detectRetina:{type:Boolean,default:!1},url:{type:String,default:null}},Ze=(t,e)=>{const{options:o,methods:a}=$e(t,e),n={...o,tms:t.tms,subdomains:t.subdomains,detectRetina:t.detectRetina};return{options:n,methods:{...a}}};var qe={props:Me,setup(t,e){const l=(0,n.iH)({}),r=(0,a.f3)(ce),s=(0,a.f3)("addLayer"),{options:i,methods:u}=Ze(t,l);return(0,a.bv)((async()=>{const{tileLayer:n,DomEvent:d}=r?de.L:await o.e(633).then(o.bind(o,6633));l.value=n(t.url,i);const c=re(e.attrs);d.on(l.value,c),le(u,l.value,t),s({...t,...u,leafletObject:l.value}),(0,a.Y3)((()=>e.emit("ready",l.value)))})),{leafletObject:l}},render(){return null},__file:"src/components/LTileLayer.vue"};Boolean,Boolean;var Ge=(0,a.aZ)({__name:"CustomMarker",props:{markerCoordinates:null,isStart:{type:Boolean}},setup(t){const e=t,{isStart:o,markerCoordinates:l}=(0,n.BK)(e);return(t,e)=>(0,n.SU)(l).latitude?((0,a.wg)(),(0,a.j4)((0,n.SU)(Pe),{key:0,"lat-lng":[(0,n.SU)(l).latitude,(0,n.SU)(l).longitude]},{default:(0,a.w5)((()=>[(0,a.Wm)((0,n.SU)(xe),{"icon-url":`/img/workouts/${(0,n.SU)(o)?"start":"finish"}.svg`,iconSize:[15,15]},null,8,["icon-url"])])),_:1},8,["lat-lng"])):(0,a.kq)("",!0)}});const Ke=Ge;var Ye=Ke,Ve=o(5801),Je=o(9917),Xe=o(2024);const Qe=t=>((0,a.dD)("data-v-6b490f5d"),t=t(),(0,a.Cn)(),t),to={id:"workout-map"},eo={key:0,class:"leaflet-container"},oo={key:1},ao=Qe((()=>(0,a._)("i",{class:"fa fa-refresh","aria-hidden":"true"},null,-1))),no={key:1,class:"no-map"};var lo=(0,a.aZ)({__name:"index",props:{workoutData:null,markerCoordinates:{default:()=>({})}},setup(t){const e=t,o=(0,Je.o)(),{workoutData:l,markerCoordinates:r}=(0,n.BK)(e),i=(0,n.iH)(null),u=(0,a.Fl)((()=>g())),d=(0,a.Fl)((()=>o.getters[Ve.SY.GETTERS.APP_CONFIG])),c=(0,a.Fl)((()=>_(u))),p=(0,a.Fl)((()=>e.workoutData&&e.workoutData.gpx?f(e.workoutData.gpx):{})),m=(0,a.Fl)((()=>e.workoutData&&e.workoutData.chartData.length>0?{latitude:e.workoutData.chartData[0].latitude,longitude:e.workoutData.chartData[0].longitude}:{})),w=(0,a.Fl)((()=>e.workoutData&&e.workoutData.chartData.length>0?{latitude:e.workoutData.chartData[e.workoutData.chartData.length-1].latitude,longitude:e.workoutData.chartData[e.workoutData.chartData.length-1].longitude}:{})),k=(0,n.iH)(!1);function f(t){if(!t||""!==t)try{const e=oe((new DOMParser).parseFromString(t,"text/xml"));return{jsonData:e}}catch(e){return console.error("Invalid gpx content"),{}}return{}}function _(t){return[(t.value[0][0]+t.value[1][0])/2,(t.value[0][1]+t.value[1][1])/2]}function v(t){i.value?.leafletObject&&i.value?.leafletObject.fitBounds(t)}function g(){return e.workoutData?[[e.workoutData.workout.bounds[0],e.workoutData.workout.bounds[1]],[e.workoutData.workout.bounds[2],e.workoutData.workout.bounds[3]]]:[]}function y(){i.value?.leafletObject.fitBounds(g())}function S(){k.value=!k.value,k.value||setTimeout((()=>{y()}),100)}return(t,e)=>{const o=(0,a.up)("VFullscreen");return(0,a.wg)(),(0,a.iD)("div",to,[(0,n.SU)(l).loading?((0,a.wg)(),(0,a.iD)("div",eo)):((0,a.wg)(),(0,a.iD)("div",oo,[(0,n.SU)(l).workout.with_gpx?((0,a.wg)(),(0,a.j4)(o,{key:0,modelValue:k.value,"onUpdate:modelValue":e[1]||(e[1]=t=>k.value=t)},{default:(0,a.w5)((()=>[(0,a._)("div",{class:(0,s.C_)(["leaflet-container",{"fullscreen-map":k.value}])},[(0,n.SU)(p).jsonData&&(0,n.SU)(c)&&2===(0,n.SU)(u).length?((0,a.wg)(),(0,a.j4)((0,n.SU)(Le),{key:0,zoom:13,maxZoom:19,center:(0,n.SU)(c),bounds:(0,n.SU)(u),ref_key:"workoutMap",ref:i,onReady:e[0]||(e[0]=t=>v((0,n.SU)(u)))},{default:(0,a.w5)((()=>[(0,a.Wm)((0,n.SU)(Ee)),(0,a.Wm)((0,n.SU)(he),{position:"topleft",class:"map-control",onClick:y},{default:(0,a.w5)((()=>[ao])),_:1}),(0,a.Wm)((0,n.SU)(he),{position:"topleft",class:"map-control",onClick:S},{default:(0,a.w5)((()=>[(0,a._)("i",{class:(0,s.C_)("fa fa-"+(k.value?"compress":"arrows-alt")),"aria-hidden":"true"},null,2)])),_:1}),(0,a.Wm)((0,n.SU)(qe),{url:`${(0,n.SU)(Xe.k)()}workouts/map_tile/{s}/{z}/{x}/{y}.png`,attribution:(0,n.SU)(d).map_attribution,bounds:(0,n.SU)(u)},null,8,["url","attribution","bounds"]),(0,a.Wm)((0,n.SU)(Ce),{geojson:(0,n.SU)(p).jsonData},null,8,["geojson"]),(0,n.SU)(r).latitude?((0,a.wg)(),(0,a.j4)((0,n.SU)(Pe),{key:0,"lat-lng":[(0,n.SU)(r).latitude,(0,n.SU)(r).longitude]},null,8,["lat-lng"])):(0,a.kq)("",!0),(0,a.Wm)((0,n.SU)(ze),{name:t.$t("workouts.START_AND_FINISH"),"layer-type":"overlay"},{default:(0,a.w5)((()=>[(0,n.SU)(m).latitude?((0,a.wg)(),(0,a.j4)(Ye,{key:0,markerCoordinates:(0,n.SU)(m),isStart:!0},null,8,["markerCoordinates"])):(0,a.kq)("",!0),(0,n.SU)(w).latitude?((0,a.wg)(),(0,a.j4)(Ye,{key:1,markerCoordinates:(0,n.SU)(w),isStart:!1},null,8,["markerCoordinates"])):(0,a.kq)("",!0)])),_:1},8,["name"])])),_:1},8,["center","bounds"])):(0,a.kq)("",!0)],2)])),_:1},8,["modelValue"])):((0,a.wg)(),(0,a.iD)("div",no,(0,s.zw)(t.$t("workouts.NO_MAP")),1))]))])}}});const ro=(0,D.Z)(lo,[["__scopeId","data-v-6b490f5d"]]);var so=ro,io=o(6558);const uo={class:"workout-detail"};var co=(0,a.aZ)({__name:"index",props:{authUser:null,displaySegment:{type:Boolean},sports:null,workoutData:null,markerCoordinates:{default:()=>({})}},setup(t){const e=t,o=(0,l.yj)(),r=(0,Je.o)(),{authUser:s,markerCoordinates:i,workoutData:u}=(0,n.BK)(e),d=(0,a.Fl)((()=>e.workoutData.workout)),c=(0,n.iH)(o.params.workoutId?+o.params.segmentId:null),p=(0,a.Fl)((()=>d.value.segments.length>0&&c.value?d.value.segments[+c.value-1]:null)),m=(0,n.iH)(!1),w=(0,a.Fl)((()=>e.sports?e.sports.find((t=>t.id===e.workoutData.workout.sport_id)):{})),k=(0,a.Fl)((()=>_(d.value,p.value)));function f(t,e,o){const a=e&&o&&1!==o?`/workouts/${t.id}/segment/${o-1}`:!e&&t.previous_workout?`/workouts/${t.previous_workout}`:null,n=e&&o&&oo.params.segmentId),(async t=>{t&&(c.value=+t)})),(t,e)=>{const o=(0,a.up)("Modal"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",uo,[m.value?((0,a.wg)(),(0,a.j4)(o,{key:0,title:t.$t("common.CONFIRMATION"),message:t.$t("workouts.WORKOUT_DELETION_CONFIRMATION"),onConfirmAction:e[0]||(e[0]=t=>g((0,n.SU)(k).workoutId)),onCancelAction:e[1]||(e[1]=t=>v(!1))},null,8,["title","message"])):(0,a.kq)("",!0),(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Wm)(I,{sport:(0,n.SU)(w),workoutObject:(0,n.SU)(k),onDisplayModal:e[2]||(e[2]=t=>v(!0))},null,8,["sport","workoutObject"])])),content:(0,a.w5)((()=>[(0,a.Wm)(so,{workoutData:(0,n.SU)(u),markerCoordinates:(0,n.SU)(i)},null,8,["workoutData","markerCoordinates"]),(0,a.Wm)(xt,{workoutObject:(0,n.SU)(k),useImperialUnits:(0,n.SU)(s).imperial_units,displayHARecord:(0,n.SU)(s).display_ascent},null,8,["workoutObject","useImperialUnits","displayHARecord"])])),_:1})])}}});const po=(0,D.Z)(co,[["__scopeId","data-v-9fc0bab8"]]);var mo=po,wo=o(6518);const ko=t=>{const e=document.getElementById(t);if(e){let t=e.querySelector("ul");return t||(t=document.createElement("ul"),e.appendChild(t)),t}throw new Error("No legend container")},fo={id:"htmlLegend",afterUpdate(t,e,o){const a=ko(o.containerID);while(a.firstChild)a.firstChild.remove();const n=t.options.plugins?.legend?.labels?.generateLabels?t.options.plugins?.legend?.labels?.generateLabels(t):[];n.forEach((e=>{const o=document.createElement("li");o.onclick=()=>{void 0!==e.datasetIndex&&(t.setDatasetVisibility(e.datasetIndex,!t.isDatasetVisible(e.datasetIndex)),t.update())};const n=document.createElement("input");n&&(n.type="checkbox",n.id=e.text,n.checked=!e.hidden);const l=document.createTextNode(e.text),r=document.createElement("span");r&&(r.style.background=String(e.fillStyle),r.style.borderColor=String(e.strokeStyle)),o.appendChild(n),o.appendChild(l),o.appendChild(r),a.appendChild(o)}))}};var _o=o(3649),vo=o(3768);const go=t=>((0,a.dD)("data-v-dcea1168"),t=t(),(0,a.Cn)(),t),yo={id:"workout-chart"},So={class:"chart-radio"},Uo=["checked"],ho=["checked"],bo=go((()=>(0,a._)("div",{id:"chart-legend"},null,-1))),To={class:"chart-info"},Eo={class:"no-data-cleaning"},Do={class:"elevation-start"},Oo=["checked"];var Io=(0,a.aZ)({__name:"index",props:{authUser:null,workoutData:null},emits:["getCoordinates"],setup(t,{emit:e}){const o=t,{t:l}=(0,L.QT)(),r=(0,n.iH)(!0),i=(0,n.iH)(!0),u=(0,a.Fl)((()=>(0,vo.EX)(o.workoutData.chartData,l,o.authUser.imperial_units))),d=y("km"),c=y("m"),p=(0,a.Fl)((()=>({labels:r.value?u.value.distance_labels:u.value.duration_labels,datasets:JSON.parse(JSON.stringify([u.value.datasets.speed,u.value.datasets.elevation]))}))),m=(0,a.Fl)((()=>u.value.coordinates)),w=(0,a.Fl)((()=>({responsive:!0,maintainAspectRatio:!0,animation:!1,layout:{padding:{top:22}},scales:{[r.value?"xDistance":"xDuration"]:{grid:{drawOnChartArea:!1},ticks:{count:10,callback:function(t){return r.value?Number(t).toFixed(2):_(t)}},type:"linear",bounds:"data",title:{display:!0,text:r.value?l("workouts.DISTANCE")+` (${d})`:l("workouts.DURATION")}},ySpeed:{grid:{drawOnChartArea:!1},position:"left",title:{display:!0,text:l("workouts.SPEED")+` (${d}/h)`}},yElevation:{beginAtZero:i.value,grid:{drawOnChartArea:!1},position:"right",title:{display:!0,text:l("workouts.ELEVATION")+` (${c})`}}},elements:{point:{pointStyle:"circle",pointRadius:0}},plugins:{datalabels:{display:!1},tooltip:{interaction:{intersect:!1,mode:"index"},callbacks:{label:function(t){const e=` ${t.dataset.label}: ${t.formattedValue}`;return"yElevation"===t.dataset.yAxisID?e+` ${c}`:e+` ${d}/h`},title:function(t){return t.length>0&&v(m.value[t[0].dataIndex]),0===t.length?"":r.value?`${l("workouts.DISTANCE")}: ${t[0].label} ${d}`:`${l("workouts.DURATION")}: ${_(t[0].label.replace(",",""))}`}}},legend:{display:!1},htmlLegend:{containerID:"chart-legend"}}}))),{lineChartProps:k}=(0,wo.tn)({chartData:p,options:w,plugins:[fo]});function f(){r.value=!r.value}function _(t){return new Date(1e3*+t).toISOString().substr(11,8)}function v(t){e("getCoordinates",t)}function g(){v({latitude:null,longitude:null})}function y(t){return o.authUser.imperial_units?_o.Dl[t].defaultTarget:t}return(t,e)=>{const o=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",yo,[(0,a.Wm)(o,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(t.$t("workouts.ANALYSIS")),1)])),content:(0,a.w5)((()=>[(0,a._)("div",So,[(0,a._)("label",null,[(0,a._)("input",{type:"radio",name:"distance",checked:r.value,onClick:f},null,8,Uo),(0,a.Uk)(" "+(0,s.zw)(t.$t("workouts.DISTANCE")),1)]),(0,a._)("label",null,[(0,a._)("input",{type:"radio",name:"duration",checked:!r.value,onClick:f},null,8,ho),(0,a.Uk)(" "+(0,s.zw)(t.$t("workouts.DURATION")),1)])]),bo,(0,a.Wm)((0,n.SU)(wo.wW),(0,a.dG)((0,n.SU)(k),{class:"line-chart",onMouseleave:g}),null,16),(0,a._)("div",To,[(0,a._)("div",Eo,(0,s.zw)(t.$t("workouts.NO_DATA_CLEANING")),1),(0,a._)("div",Do,[(0,a._)("label",null,[(0,a._)("input",{type:"checkbox",checked:i.value,onClick:e[0]||(e[0]=t=>i.value=!i.value)},null,8,Oo),(0,a.Uk)(" "+(0,s.zw)(t.$t("workouts.START_ELEVATION_AT_ZERO")),1)])])])])),_:1})])}}});const Ao=(0,D.Z)(Io,[["__scopeId","data-v-dcea1168"]]);var Co=Ao;const Ro={id:"workout-note"};var $o=(0,a.aZ)({__name:"WorkoutNotes",props:{notes:{default:()=>null}},setup(t){const e=t,{notes:o}=(0,n.BK)(e);return(t,e)=>{const l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",Ro,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(t.$t("workouts.NOTES")),1)])),content:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)((0,n.SU)(o)&&""!==(0,n.SU)(o)?(0,n.SU)(o):t.$t("workouts.NO_NOTES")),1)])),_:1})])}}});const No=(0,D.Z)($o,[["__scopeId","data-v-028ad527"]]);var xo=No;const zo={id:"workout-segments"};var Lo=(0,a.aZ)({__name:"WorkoutSegments",props:{segments:null,useImperialUnits:{type:Boolean}},setup(t){const e=t,{segments:o,useImperialUnits:l}=(0,n.BK)(e);return(t,e)=>{const r=(0,a.up)("router-link"),i=(0,a.up)("Distance"),u=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",zo,[(0,a.Wm)(u,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(t.$t("workouts.SEGMENT",2)),1)])),content:(0,a.w5)((()=>[(0,a._)("ul",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,n.SU)(o),((e,o)=>((0,a.wg)(),(0,a.iD)("li",{key:e.segment_id},[(0,a.Wm)(r,{to:{name:"WorkoutSegment",params:{workoutId:e.workout_id,segmentId:o+1}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(t.$t("workouts.SEGMENT",1))+" "+(0,s.zw)(o+1),1)])),_:2},1032,["to"]),(0,a.Uk)(" ("+(0,s.zw)(t.$t("workouts.DISTANCE"))+": ",1),(0,a.Wm)(i,{distance:e.distance,unitFrom:"km",useImperialUnits:(0,n.SU)(l)},null,8,["distance","useImperialUnits"]),(0,a.Uk)(", "+(0,s.zw)(t.$t("workouts.DURATION"))+": "+(0,s.zw)(e.duration)+") ",1)])))),128))])])),_:1})])}}});const jo=(0,D.Z)(Lo,[["__scopeId","data-v-6b8a27cd"]]);var Wo=jo;const Po=t=>((0,a.dD)("data-v-53c4e53a"),t=t(),(0,a.Cn)(),t),Bo={id:"workout",class:"view"},Fo={class:"container"},Ho={key:0,class:"workout-container"},Mo={key:0},Zo=Po((()=>(0,a._)("div",{id:"bottom"},null,-1))),qo={key:1};var Go=(0,a.aZ)({__name:"Workout",props:{displaySegment:{type:Boolean}},setup(t){const e=t,o=(0,l.yj)(),s=(0,Je.o)(),{displaySegment:i}=(0,n.BK)(e),u=(0,a.Fl)((()=>s.getters[Ve.aX.GETTERS.WORKOUT_DATA])),d=(0,a.Fl)((()=>s.getters[Ve.YN.GETTERS.AUTH_USER_PROFILE])),c=(0,a.Fl)((()=>s.getters[Ve.O8.GETTERS.SPORTS])),p=(0,n.iH)({latitude:null,longitude:null});function m(t){p.value={latitude:t.latitude,longitude:t.longitude}}return(0,a.wF)((()=>{const t={workoutId:o.params.workoutId};e.displaySegment&&(t.segmentId=o.params.segmentId),s.dispatch(Ve.aX.ACTIONS.GET_WORKOUT_DATA,t)})),(0,a.Ah)((()=>{s.commit(Ve.aX.MUTATIONS.EMPTY_WORKOUT)})),(0,a.YP)((()=>o.params.workoutId),(async t=>{t&&s.dispatch(Ve.aX.ACTIONS.GET_WORKOUT_DATA,{workoutId:t})})),(0,a.YP)((()=>o.params.segmentId),(async t=>{if(o.params.workoutId){const e={workoutId:o.params.workoutId};t&&(e.segmentId=t),s.dispatch(Ve.aX.ACTIONS.GET_WORKOUT_DATA,e)}})),(t,e)=>((0,a.wg)(),(0,a.iD)("div",Bo,[(0,a._)("div",Fo,[(0,n.SU)(c).length>0?((0,a.wg)(),(0,a.iD)("div",Ho,[(0,n.SU)(u).workout.id?((0,a.wg)(),(0,a.iD)("div",Mo,[(0,a.Wm)(mo,{workoutData:(0,n.SU)(u),sports:(0,n.SU)(c),authUser:(0,n.SU)(d),markerCoordinates:p.value,displaySegment:(0,n.SU)(i)},null,8,["workoutData","sports","authUser","markerCoordinates","displaySegment"]),(0,n.SU)(u).workout.with_gpx&&(0,n.SU)(u).chartData.length>0?((0,a.wg)(),(0,a.j4)(Co,{key:0,workoutData:(0,n.SU)(u),authUser:(0,n.SU)(d),displaySegment:(0,n.SU)(i),onGetCoordinates:m},null,8,["workoutData","authUser","displaySegment"])):(0,a.kq)("",!0),!(0,n.SU)(i)&&(0,n.SU)(u).workout.segments.length>1?((0,a.wg)(),(0,a.j4)(Wo,{key:1,segments:(0,n.SU)(u).workout.segments,useImperialUnits:(0,n.SU)(d).imperial_units},null,8,["segments","useImperialUnits"])):(0,a.kq)("",!0),(0,n.SU)(i)?(0,a.kq)("",!0):((0,a.wg)(),(0,a.j4)(xo,{key:2,notes:(0,n.SU)(u).workout.notes},null,8,["notes"])),Zo])):((0,a.wg)(),(0,a.iD)("div",qo,[(0,n.SU)(u).loading?(0,a.kq)("",!0):((0,a.wg)(),(0,a.j4)(r.Z,{key:0,target:"WORKOUT"}))]))])):(0,a.kq)("",!0)])]))}});const Ko=(0,D.Z)(Go,[["__scopeId","data-v-53c4e53a"]]);var Yo=Ko},5651:function(t,e,o){o.r(e),o.d(e,{default:function(){return Bt}});var a=o(6252),n=o(2262),l=o(3577),r=o(9150),s=(o(7658),o(2201)),i=o(631),u=o(3649);const d=t=>((0,a.dD)("data-v-6c38593a"),t=t(),(0,a.Cn)(),t),c={class:"workouts-filters"},p={class:"box"},m={class:"form"},w={class:"form-items-group"},k={class:"form-item"},f=["value"],_={class:"form-item"},v=["value"],g={class:"form-items-group"},y={class:"form-item"},S=["value"],U=d((()=>(0,a._)("option",{value:""},null,-1))),h=["value"],b={class:"form-items-group"},T={class:"form-item"},E={class:"form-inputs-group"},D=["value"],O=["value"],I={class:"form-items-group"},A={class:"form-item"},C={class:"form-inputs-group"},R=["value"],$=["value"],N={class:"form-items-group"},x={class:"form-item"},z={class:"form-inputs-group"},L=["value"],j=["value"],W={class:"form-items-group"},P={class:"form-item"},B={class:"form-inputs-group"},F=["value"],H=["value"],M={class:"form-button"};var Z=(0,a.aZ)({__name:"WorkoutsFilters",props:{authUser:null,sports:null},emits:["filter"],setup(t,{emit:e}){const o=t,{t:d}=(0,r.QT)(),Z=(0,s.yj)(),q=(0,s.tv)(),{authUser:G}=(0,n.BK)(o),K=G.value.imperial_units?u.Dl.km.defaultTarget:"km",Y=(0,a.Fl)((()=>(0,i.xH)(o.sports,d)));let V=Object.assign({},Z.query);function J(t){""===t.target.value?delete V[t.target.name]:V[t.target.name]=t.target.value}function X(){e("filter"),"page"in V&&(V["page"]="1"),q.push({path:"/workouts",query:V})}function Q(){e("filter"),q.push({path:"/workouts",query:{}})}return(0,a.YP)((()=>Z.query),(t=>{V=Object.assign({},t)})),(t,e)=>((0,a.wg)(),(0,a.iD)("div",c,[(0,a._)("div",p,[(0,a._)("div",m,[(0,a._)("div",w,[(0,a._)("div",k,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.FROM"))+": ",1),(0,a._)("input",{name:"from",type:"date",value:t.$route.query.from,onChange:J},null,40,f)]),(0,a._)("div",_,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.TO"))+": ",1),(0,a._)("input",{name:"to",type:"date",value:t.$route.query.to,onChange:J},null,40,v)])]),(0,a._)("div",g,[(0,a._)("div",y,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.SPORT",1))+":",1),(0,a._)("select",{name:"sport_id",value:t.$route.query.sport_id,onChange:J},[U,((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,n.SU)(Y).filter((t=>(0,n.SU)(G).sports_list.includes(t.id))),(t=>((0,a.wg)(),(0,a.iD)("option",{value:t.id,key:t.id},(0,l.zw)(t.translatedLabel),9,h)))),128))],40,S)])]),(0,a._)("div",b,[(0,a._)("div",T,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.DISTANCE"))+" ("+(0,l.zw)((0,n.SU)(K))+"): ",1),(0,a._)("div",E,[(0,a._)("input",{name:"distance_from",type:"number",min:"0",step:"0.1",value:t.$route.query.distance_from,onChange:J},null,40,D),(0,a._)("span",null,(0,l.zw)(t.$t("workouts.TO")),1),(0,a._)("input",{name:"distance_to",type:"number",min:"0",step:"0.1",value:t.$route.query.distance_to,onChange:J},null,40,O)])])]),(0,a._)("div",I,[(0,a._)("div",A,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.DURATION"))+": ",1),(0,a._)("div",C,[(0,a._)("input",{name:"duration_from",value:t.$route.query.duration_from,onChange:J,pattern:"^([0-9]*[0-9]):([0-5][0-9])$",placeholder:"hh:mm",type:"text"},null,40,R),(0,a._)("span",null,(0,l.zw)(t.$t("workouts.TO")),1),(0,a._)("input",{name:"duration_to",value:t.$route.query.duration_to,onChange:J,pattern:"^([0-9]*[0-9]):([0-5][0-9])$",placeholder:"hh:mm",type:"text"},null,40,$)])])]),(0,a._)("div",N,[(0,a._)("div",x,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.AVE_SPEED"))+" ("+(0,l.zw)((0,n.SU)(K))+"/h): ",1),(0,a._)("div",z,[(0,a._)("input",{min:"0",name:"ave_speed_from",value:t.$route.query.ave_speed_from,onChange:J,step:"0.1",type:"number"},null,40,L),(0,a._)("span",null,(0,l.zw)(t.$t("workouts.TO")),1),(0,a._)("input",{min:"0",name:"ave_speed_to",value:t.$route.query.ave_speed_to,onChange:J,step:"0.1",type:"number"},null,40,j)])])]),(0,a._)("div",W,[(0,a._)("div",P,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.MAX_SPEED"))+" ("+(0,l.zw)((0,n.SU)(K))+"/h): ",1),(0,a._)("div",B,[(0,a._)("input",{min:"0",name:"max_speed_from",value:t.$route.query.max_speed_from,onChange:J,step:"0.1",type:"number"},null,40,F),(0,a._)("span",null,(0,l.zw)(t.$t("workouts.TO")),1),(0,a._)("input",{min:"0",name:"max_speed_to",value:t.$route.query.max_speed_to,onChange:J,step:"0.1",type:"number"},null,40,H)])])])]),(0,a._)("div",M,[(0,a._)("button",{class:"confirm",onClick:X},(0,l.zw)(t.$t("buttons.FILTER")),1),(0,a._)("button",{class:"confirm",onClick:Q},(0,l.zw)(t.$t("buttons.CLEAR_FILTER")),1)])])]))}}),q=o(3744);const G=(0,q.Z)(Z,[["__scopeId","data-v-6c38593a"]]);var K=G,Y=o(8626),V=o(5020),J=o(2056),X=o(5630),Q=o(5801),tt=o(9917),et=o(2766),ot=o(6558),at=o(3768);const nt=t=>((0,a.dD)("data-v-0f8ea7b0"),t=t(),(0,a.Cn)(),t),lt={class:"workouts-list"},rt={class:"total"},st={class:"total-label"},it={key:0},ut={key:0,class:"workouts-table responsive-table"},dt=nt((()=>(0,a._)("th",{class:"sport-col"},null,-1))),ct={class:"sport-col"},pt={class:"cell-heading"},mt=["onMouseover"],wt={class:"cell-heading"},kt={key:0,class:"fa fa-map-o","aria-hidden":"true"},ft={class:"title"},_t={class:"workout-date"},vt={class:"cell-heading"},gt={class:"text-right"},yt={class:"cell-heading"},St={class:"text-right"},Ut={class:"cell-heading"},ht={class:"text-right"},bt={class:"cell-heading"},Tt={class:"text-right"},Et={class:"cell-heading"},Dt={class:"text-right"},Ot={class:"cell-heading"},It={class:"text-right"},At={class:"cell-heading"},Ct=nt((()=>(0,a._)("div",{id:"bottom"},null,-1)));var Rt=(0,a.aZ)({__name:"WorkoutsList",props:{user:null,sports:null},setup(t){const e=t,o=(0,tt.o)(),r=(0,s.yj)(),d=(0,s.tv)(),{user:c,sports:p}=(0,n.BK)(e),m=["ave_speed","distance","duration","workout_date"],w=(0,a.Fl)((()=>o.getters[Q.aX.GETTERS.USER_WORKOUTS])),k=(0,a.Fl)((()=>o.getters[Q.aX.GETTERS.WORKOUTS_PAGINATION])),f=(0,a.Fl)((()=>o.getters[Q.SY.GETTERS.LANGUAGE]));let _=S(r.query);const v=(0,n.iH)(null);function g(t){o.dispatch(Q.aX.ACTIONS.GET_USER_WORKOUTS,c.value.imperial_units?U(t):t)}function y(t,e){const o=Object.assign({},r.query);o[t]=e,"per_page"===t&&(o["page"]="1"),_=S(o),d.push({path:"/workouts",query:_})}function S(t){const e=(0,et.pm)(t,m,at.eR.order_by,{defaultSort:at.eR.order});return Object.keys(t).filter((t=>et.Ne.includes(t))).map((o=>{"string"===typeof t[o]&&(e[o]=t[o])})),e}function U(t){const e={...t};return Object.entries(e).map((t=>{t[0].match("speed|distance")&&t[1]&&(e[t[0]]=(0,u.sC)(+t[1],"mi","km"))})),e}function h(t){v.value=t}return(0,a.wF)((()=>{g(_)})),(0,a.YP)((()=>r.query),(async t=>{_=S(t),g(_)})),(t,e)=>{const o=(0,a.up)("SportImage"),r=(0,a.up)("router-link"),s=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",lt,[(0,a._)("div",{class:(0,l.C_)(["box",{"empty-table":0===(0,n.SU)(w).length}])},[(0,a._)("div",rt,[(0,a._)("span",st,(0,l.zw)(t.$t("common.TOTAL").toLowerCase())+": ",1),null!==(0,n.SU)(k).total?((0,a.wg)(),(0,a.iD)("span",it,(0,l.zw)((0,n.SU)(k).total)+" "+(0,l.zw)(t.$t("workouts.WORKOUT",(0,n.SU)(k).total)),1)):(0,a.kq)("",!0)]),(0,a.Wm)(Y.Z,{sort:(0,n.SU)(et.fS),order_by:m,query:(0,n.SU)(_),message:"workouts",onUpdateSelect:y},null,8,["sort","query"]),(0,n.SU)(w).length>0?((0,a.wg)(),(0,a.iD)("div",ut,[(0,a.Wm)(V.Z,{class:"top-pagination",pagination:(0,n.SU)(k),path:"/workouts",query:(0,n.SU)(_)},null,8,["pagination","query"]),(0,a._)("table",null,[(0,a._)("thead",{class:(0,l.C_)({smaller:"de"===(0,n.SU)(f)})},[(0,a._)("tr",null,[dt,(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.WORKOUT",1))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.DATE"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.DISTANCE"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.DURATION"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.AVE_SPEED"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.MAX_SPEED"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.ASCENT"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.DESCENT"))),1)])],2),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,n.SU)(w),(u=>((0,a.wg)(),(0,a.iD)("tr",{key:u.id},[(0,a._)("td",ct,[(0,a._)("span",pt,(0,l.zw)(t.$t("workouts.SPORT",1)),1),(0,n.SU)(p).length>0?((0,a.wg)(),(0,a.j4)(o,{key:0,title:(0,n.SU)(p).find((t=>t.id===u.sport_id)).translatedLabel,"sport-label":(0,n.SU)(i.PA)(u,(0,n.SU)(p)),color:(0,n.SU)(i.CM)(u,(0,n.SU)(p))},null,8,["title","sport-label","color"])):(0,a.kq)("",!0)]),(0,a._)("td",{class:"workout-title",onMouseover:t=>h(u.id),onMouseleave:e[0]||(e[0]=t=>h(null))},[(0,a._)("span",wt,(0,l.zw)((0,l.kC)(t.$t("workouts.WORKOUT",1))),1),(0,a.Wm)(r,{class:"nav-item",to:{name:"Workout",params:{workoutId:u.id}}},{default:(0,a.w5)((()=>[u.with_gpx?((0,a.wg)(),(0,a.iD)("i",kt)):(0,a.kq)("",!0),(0,a._)("span",ft,(0,l.zw)(u.title),1)])),_:2},1032,["to"]),u.with_gpx&&v.value===u.id?((0,a.wg)(),(0,a.j4)(J.Z,{key:0,workout:u,"display-hover":!0},null,8,["workout"])):(0,a.kq)("",!0)],40,mt),(0,a._)("td",_t,[(0,a._)("span",vt,(0,l.zw)(t.$t("workouts.DATE")),1),(0,a.Uk)(" "+(0,l.zw)((0,n.SU)(ot.p6)(u.workout_date,(0,n.SU)(c).timezone,(0,n.SU)(c).date_format)),1)]),(0,a._)("td",gt,[(0,a._)("span",yt,(0,l.zw)(t.$t("workouts.DISTANCE")),1),(0,a.Wm)(s,{distance:u.distance,unitFrom:"km",useImperialUnits:(0,n.SU)(c).imperial_units},null,8,["distance","useImperialUnits"])]),(0,a._)("td",St,[(0,a._)("span",Ut,(0,l.zw)(t.$t("workouts.DURATION")),1),(0,a.Uk)(" "+(0,l.zw)(u.moving),1)]),(0,a._)("td",ht,[(0,a._)("span",bt,(0,l.zw)(t.$t("workouts.AVE_SPEED")),1),(0,a.Wm)(s,{distance:u.ave_speed,unitFrom:"km",speed:!0,useImperialUnits:(0,n.SU)(c).imperial_units},null,8,["distance","useImperialUnits"])]),(0,a._)("td",Tt,[(0,a._)("span",Et,(0,l.zw)(t.$t("workouts.MAX_SPEED")),1),(0,a.Wm)(s,{distance:u.max_speed,unitFrom:"km",speed:!0,useImperialUnits:(0,n.SU)(c).imperial_units},null,8,["distance","useImperialUnits"])]),(0,a._)("td",Dt,[(0,a._)("span",Ot,(0,l.zw)(t.$t("workouts.ASCENT")),1),u.with_gpx?((0,a.wg)(),(0,a.j4)(s,{key:0,distance:u.ascent,unitFrom:"m",useImperialUnits:(0,n.SU)(c).imperial_units},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)]),(0,a._)("td",It,[(0,a._)("span",At,(0,l.zw)(t.$t("workouts.DESCENT")),1),u.with_gpx?((0,a.wg)(),(0,a.j4)(s,{key:0,distance:u.descent,unitFrom:"m",useImperialUnits:(0,n.SU)(c).imperial_units},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)])])))),128))])]),(0,a.Wm)(V.Z,{pagination:(0,n.SU)(k),path:"/workouts",query:(0,n.SU)(_)},null,8,["pagination","query"])])):(0,a.kq)("",!0)],2),0===(0,n.SU)(w).length?((0,a.wg)(),(0,a.j4)(X.Z,{key:0})):(0,a.kq)("",!0),Ct])}}});const $t=(0,q.Z)(Rt,[["__scopeId","data-v-0f8ea7b0"]]);var Nt=$t;const xt={key:0,id:"workouts",class:"view"},zt={class:"container workouts-container"},Lt={class:"display-filters"},jt={class:"list-container"};var Wt=(0,a.aZ)({__name:"WorkoutsView",setup(t){const{t:e}=(0,r.QT)(),o=(0,tt.o)(),s=(0,a.Fl)((()=>o.getters[Q.YN.GETTERS.AUTH_USER_PROFILE])),u=(0,a.Fl)((()=>o.getters[Q.O8.GETTERS.SPORTS])),d=(0,a.Fl)((()=>(0,i.xH)(u.value,e))),c=(0,n.iH)(!0);function p(){c.value=!c.value}return(t,e)=>(0,n.SU)(s).username?((0,a.wg)(),(0,a.iD)("div",xt,[(0,a._)("div",zt,[(0,a._)("div",{class:(0,l.C_)(["filters-container",{hidden:c.value}])},[(0,a.Wm)(K,{sports:(0,n.SU)(d),authUser:(0,n.SU)(s),onFilter:p},null,8,["sports","authUser"])],2),(0,a._)("div",Lt,[(0,a._)("div",{onClick:p},[(0,a._)("i",{class:(0,l.C_)("fa fa-caret-"+(c.value?"down":"up")),"aria-hidden":"true"},null,2),(0,a._)("span",null,(0,l.zw)(t.$t(`workouts.${c.value?"DISPLAY":"HIDE"}_FILTERS`)),1)])]),(0,a._)("div",jt,[(0,a.Wm)(Nt,{user:(0,n.SU)(s),sports:(0,n.SU)(d)},null,8,["user","sports"])])])])):(0,a.kq)("",!0)}});const Pt=(0,q.Z)(Wt,[["__scopeId","data-v-77e54012"]]);var Bt=Pt}}]); -//# sourceMappingURL=workouts.a514f12a.js.map \ No newline at end of file +//# sourceMappingURL=workouts.f1d6cc45.js.map \ No newline at end of file diff --git a/fittrackee/dist/static/js/workouts.a514f12a.js.map b/fittrackee/dist/static/js/workouts.f1d6cc45.js.map similarity index 99% rename from fittrackee/dist/static/js/workouts.a514f12a.js.map rename to fittrackee/dist/static/js/workouts.f1d6cc45.js.map index 376668ba..0e192ce4 100644 --- a/fittrackee/dist/static/js/workouts.a514f12a.js.map +++ b/fittrackee/dist/static/js/workouts.f1d6cc45.js.map @@ -1 +1 @@ -{"version":3,"file":"static/js/workouts.a514f12a.js","mappings":"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","sources":["webpack://fittrackee_client/./src/components/Workout/WorkoutEdition.vue?1df7","webpack://fittrackee_client/./src/components/Workout/WorkoutEdition.vue","webpack://fittrackee_client/./src/views/workouts/AddWorkout.vue?212d","webpack://fittrackee_client/./src/views/workouts/AddWorkout.vue","webpack://fittrackee_client/./src/views/workouts/EditWorkout.vue?ba9e","webpack://fittrackee_client/./src/views/workouts/EditWorkout.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutCardTitle.vue?4e0b","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutCardTitle.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutRecord.vue?0a89","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutRecord.vue","webpack://fittrackee_client/./src/utils/weather.ts","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WeatherWind.vue?bd35","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WeatherWind.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutWeather.vue?84e1","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutWeather.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutData.vue?ef29","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutData.vue","webpack://fittrackee_client/./node_modules/@tmcw/togeojson/dist/togeojson.es.mjs","webpack://fittrackee_client/./node_modules/@vue-leaflet/vue-leaflet/dist/vue-leaflet.esm.js","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue?3193","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/index.vue?a62d","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/index.vue?8ebb","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/legend.ts","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/index.vue?65aa","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutNotes.vue?a827","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutNotes.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutSegments.vue?037e","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutSegments.vue","webpack://fittrackee_client/./src/views/workouts/Workout.vue?3305","webpack://fittrackee_client/./src/views/workouts/Workout.vue","webpack://fittrackee_client/./src/components/Workouts/WorkoutsFilters.vue?c3bc","webpack://fittrackee_client/./src/components/Workouts/WorkoutsFilters.vue","webpack://fittrackee_client/./src/components/Workouts/WorkoutsList.vue?72e6","webpack://fittrackee_client/./src/components/Workouts/WorkoutsList.vue","webpack://fittrackee_client/./src/views/workouts/WorkoutsView.vue?ee31","webpack://fittrackee_client/./src/views/workouts/WorkoutsView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, vModelSelect as _vModelSelect, withDirectives as _withDirectives, vModelText as _vModelText, resolveComponent as _resolveComponent, createVNode as _createVNode, createBlock as _createBlock, withModifiers as _withModifiers, normalizeClass as _normalizeClass, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-886f93f6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-form\" }\nconst _hoisted_2 = [\"onSubmit\"]\nconst _hoisted_3 = { class: \"form-items\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"form-item-radio\"\n}\nconst _hoisted_5 = [\"checked\", \"disabled\"]\nconst _hoisted_6 = { for: \"withGpx\" }\nconst _hoisted_7 = [\"checked\", \"disabled\"]\nconst _hoisted_8 = { for: \"withoutGpx\" }\nconst _hoisted_9 = { class: \"form-item\" }\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = [\"value\"]\nconst _hoisted_12 = {\n key: 1,\n class: \"form-item\"\n}\nconst _hoisted_13 = { for: \"gpxFile\" }\nconst _hoisted_14 = [\"disabled\"]\nconst _hoisted_15 = { class: \"files-help info-box\" }\nconst _hoisted_16 = {\n key: 2,\n class: \"form-item\"\n}\nconst _hoisted_17 = { for: \"title\" }\nconst _hoisted_18 = [\"required\", \"disabled\"]\nconst _hoisted_19 = { key: 3 }\nconst _hoisted_20 = { class: \"workout-date-duration\" }\nconst _hoisted_21 = { class: \"form-item\" }\nconst _hoisted_22 = { class: \"workout-date-time\" }\nconst _hoisted_23 = [\"disabled\"]\nconst _hoisted_24 = [\"disabled\"]\nconst _hoisted_25 = { class: \"form-item\" }\nconst _hoisted_26 = [\"disabled\"]\nconst _hoisted_27 = [\"disabled\"]\nconst _hoisted_28 = [\"disabled\"]\nconst _hoisted_29 = { class: \"form-item\" }\nconst _hoisted_30 = [\"disabled\"]\nconst _hoisted_31 = { class: \"form-item\" }\nconst _hoisted_32 = { key: 1 }\nconst _hoisted_33 = {\n key: 2,\n class: \"form-buttons\"\n}\nconst _hoisted_34 = [\"disabled\"]\nconst _hoisted_35 = [\"onClick\"]\n\nimport {\n ComputedRef,\n computed,\n reactive,\n ref,\n toRefs,\n watch,\n onMounted,\n onUnmounted,\n withDefaults,\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 { IAuthUserProfile } 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 import { convertDistance } from '@/utils/units'\n\n interface Props {\n authUser: IAuthUserProfile\n sports: ISport[]\n isCreation?: boolean\n loading?: boolean\n workout?: IWorkout\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutEdition',\n props: {\n authUser: null,\n sports: null,\n isCreation: { type: Boolean, default: false },\n loading: { type: Boolean, default: false },\n workout: { default: () => ({} as IWorkout) }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, sports: ISport[], isCreation: boolean, loading: boolean, workout: IWorkout }\n\n \n\n const { t } = useI18n()\n const store = useStore()\n const router = useRouter()\n\n const { authUser, workout, isCreation, loading } = toRefs(props)\n const translatedSports: ComputedRef = computed(() =>\n translateSports(\n props.sports,\n t,\n 'is_active_for_user',\n workout.value.id ? [workout.value.sport_id] : []\n )\n )\n const appConfig: ComputedRef = 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 = 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 const withGpx = ref(\n props.workout.id ? props.workout.with_gpx : props.isCreation\n )\n let gpxFile: File | null = null\n const formErrors = ref(false)\n\n onMounted(() => {\n if (props.workout.id) {\n formatWorkoutForm(props.workout)\n }\n })\n\n function updateNotes(value: string) {\n workoutForm.notes = value\n }\n function updateWithGpx() {\n withGpx.value = !withGpx.value\n formErrors.value = false\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 = `${\n authUser.value.imperial_units\n ? convertDistance(workout.distance, 'km', 'mi', 2)\n : parseFloat(workout.distance.toFixed(2))\n }`\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 = authUser.value.imperial_units\n ? convertDistance(+workoutForm.workoutDistance, 'mi', 'km', 3)\n : +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.id) {\n if (props.workout.with_gpx) {\n payload.title = workoutForm.title\n } else {\n formatPayload(payload)\n }\n store.dispatch(WORKOUTS_STORE.ACTIONS.EDIT_WORKOUT, {\n workoutId: props.workout.id,\n data: payload,\n })\n } else {\n if (withGpx.value) {\n if (!gpxFile) {\n const errorMessage = 'workouts.NO_FILE_PROVIDED'\n store.commit(ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES, errorMessage)\n return\n }\n payload.file = gpxFile\n store.dispatch(WORKOUTS_STORE.ACTIONS.ADD_WORKOUT, payload)\n } else {\n formatPayload(payload)\n store.dispatch(WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX, payload)\n }\n }\n }\n function onCancel() {\n if (props.workout.id) {\n router.push({\n name: 'Workout',\n params: { workoutId: props.workout.id },\n })\n } else {\n router.go(-1)\n }\n }\n function invalidateForm() {\n formErrors.value = true\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\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\nreturn (_ctx: any,_cache: any) => {\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Loader = _resolveComponent(\"Loader\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n id: \"workout-edition\",\n class: _normalizeClass([\"center-card with-margin\", { 'center-form': _unref(workout) && _unref(workout).with_gpx }])\n }, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(`workouts.${_unref(isCreation) ? 'ADD' : 'EDIT'}_WORKOUT`)), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _withModifiers(updateWorkout, [\"prevent\"])\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(isCreation))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"input\", {\n id: \"withGpx\",\n type: \"radio\",\n checked: withGpx.value,\n disabled: _unref(loading),\n onClick: updateWithGpx\n }, null, 8, _hoisted_5),\n _createElementVNode(\"label\", _hoisted_6, _toDisplayString(_ctx.$t('workouts.WITH_GPX')), 1)\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"input\", {\n id: \"withoutGpx\",\n type: \"radio\",\n checked: !withGpx.value,\n disabled: _unref(loading),\n onClick: updateWithGpx\n }, null, 8, _hoisted_7),\n _createElementVNode(\"label\", _hoisted_8, _toDisplayString(_ctx.$t('workouts.WITHOUT_GPX')), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.SPORT', 1)) + \": \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"sport\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((workoutForm.sport_id) = $event))\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: sport.id,\n key: sport.id\n }, _toDisplayString(sport.translatedLabel), 9, _hoisted_11))\n }), 128))\n ], 40, _hoisted_10), [\n [_vModelSelect, workoutForm.sport_id]\n ])\n ]),\n (_unref(isCreation) && withGpx.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n _createElementVNode(\"label\", _hoisted_13, _toDisplayString(_ctx.$t('workouts.GPX_FILE')) + \" \" + _toDisplayString(_ctx.$t('workouts.ZIP_ARCHIVE_DESCRIPTION')) + \": \", 1),\n _createElementVNode(\"input\", {\n id: \"gpxFile\",\n name: \"gpxFile\",\n type: \"file\",\n accept: \".gpx, .zip\",\n disabled: _unref(loading),\n required: \"\",\n onInvalid: invalidateForm,\n onInput: updateFile\n }, null, 40, _hoisted_14),\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.$t('workouts.GPX_FILE')) + \":\", 1),\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(fileSizeLimit)), 1)\n ])\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.$t('workouts.ZIP_ARCHIVE')) + \":\", 1),\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.NO_FOLDER')), 1),\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_FILES')) + \": \" + _toDisplayString(_unref(gpx_limit_import)), 1),\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(zipSizeLimit)), 1)\n ])\n ])\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_16, [\n _createElementVNode(\"label\", _hoisted_17, _toDisplayString(_ctx.$t('workouts.TITLE')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"title\",\n name: \"title\",\n type: \"text\",\n required: !_unref(isCreation),\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((workoutForm.title) = $event))\n }, null, 40, _hoisted_18), [\n [_vModelText, workoutForm.title]\n ])\n ])),\n (!withGpx.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_19, [\n _createElementVNode(\"div\", _hoisted_20, [\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.WORKOUT_DATE')) + \":\", 1),\n _createElementVNode(\"div\", _hoisted_22, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-date\",\n name: \"workout-date\",\n type: \"date\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((workoutForm.workoutDate) = $event))\n }, null, 40, _hoisted_23), [\n [_vModelText, workoutForm.workoutDate]\n ]),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-time\",\n name: \"workout-time\",\n class: \"workout-time\",\n type: \"time\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((workoutForm.workoutTime) = $event))\n }, null, 40, _hoisted_24), [\n [_vModelText, workoutForm.workoutTime]\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_25, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DURATION')) + \":\", 1),\n _createElementVNode(\"div\", null, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-duration-hour\",\n name: \"workout-duration-hour\",\n class: \"workout-duration\",\n type: \"text\",\n placeholder: \"HH\",\n minlength: \"1\",\n maxlength: \"2\",\n pattern: \"^([0-1]?[0-9]|2[0-3])$\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((workoutForm.workoutDurationHour) = $event))\n }, null, 40, _hoisted_26), [\n [_vModelText, workoutForm.workoutDurationHour]\n ]),\n _createTextVNode(\" : \"),\n _withDirectives(_createElementVNode(\"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 minlength: \"2\",\n maxlength: \"2\",\n placeholder: \"MM\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = ($event: any) => ((workoutForm.workoutDurationMinutes) = $event))\n }, null, 40, _hoisted_27), [\n [_vModelText, workoutForm.workoutDurationMinutes]\n ]),\n _createTextVNode(\" : \"),\n _withDirectives(_createElementVNode(\"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 minlength: \"2\",\n maxlength: \"2\",\n placeholder: \"SS\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = ($event: any) => ((workoutForm.workoutDurationSeconds) = $event))\n }, null, 40, _hoisted_28), [\n [_vModelText, workoutForm.workoutDurationSeconds]\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_29, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \" (\" + _toDisplayString(_unref(authUser).imperial_units ? 'mi' : 'km') + \"): \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n name: \"workout-distance\",\n type: \"number\",\n min: \"0\",\n step: \"0.001\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => ((workoutForm.workoutDistance) = $event))\n }, null, 40, _hoisted_30), [\n [_vModelText, workoutForm.workoutDistance]\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_31, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.NOTES')) + \": \", 1),\n _createVNode(_component_CustomTextArea, {\n name: \"notes\",\n input: workoutForm.notes,\n disabled: _unref(loading),\n onUpdateValue: updateNotes\n }, null, 8, [\"input\", \"disabled\"])\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(loading))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [\n _createVNode(_component_Loader)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_33, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n type: \"submit\",\n disabled: _unref(loading)\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_34),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(onCancel, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_35)\n ]))\n ], 42, _hoisted_2)\n ])\n ]),\n _: 1\n })\n ], 2))\n}\n}\n\n})","import script from \"./WorkoutEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutEdition.vue?vue&type=style&index=0&id=886f93f6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-886f93f6\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"add-workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { ComputedRef, computed } from 'vue'\n\n import WorkoutEdition from '@/components/Workout/WorkoutEdition.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AddWorkout',\n setup(__props) {\n\n const store = useStore()\n\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(WorkoutEdition, {\n authUser: _unref(authUser),\n sports: _unref(sports),\n isCreation: true,\n loading: _unref(workoutData).loading\n }, null, 8, [\"authUser\", \"sports\", \"loading\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./AddWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AddWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"edit-workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { computed, watch, onBeforeMount, ComputedRef } from 'vue'\n import { useRoute } from 'vue-router'\n\n import WorkoutEdition from '@/components/Workout/WorkoutEdition.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'EditWorkout',\n setup(__props) {\n\n const route = useRoute()\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n\n onBeforeMount(() => {\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, {\n workoutId: route.params.workoutId,\n })\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\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(workoutData).workout.id)\n ? (_openBlock(), _createBlock(WorkoutEdition, {\n key: 0,\n authUser: _unref(authUser),\n sports: _unref(sports),\n workout: _unref(workoutData).workout,\n loading: _unref(workoutData).loading\n }, null, 8, [\"authUser\", \"sports\", \"workout\", \"loading\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./EditWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./EditWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, withModifiers as _withModifiers, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4d9f9a8a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-card-title\" }\nconst _hoisted_2 = [\"title\"]\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = [\n _hoisted_3\n]\nconst _hoisted_5 = { class: \"workout-card-title\" }\nconst _hoisted_6 = { class: \"workout-title-date\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"workout-title\"\n}\nconst _hoisted_8 = {\n key: 1,\n class: \"workout-title\"\n}\nconst _hoisted_9 = { class: \"workout-segment\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-map-marker\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { class: \"workout-date\" }\nconst _hoisted_12 = { class: \"workout-link\" }\nconst _hoisted_13 = [\"title\"]\nconst _hoisted_14 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_15 = [\n _hoisted_14\n]\n\nimport { toRefs } from 'vue'\n\n import authApi from '@/api/authApi'\n import { ISport } from '@/types/sports'\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n sport: ISport\n workoutObject: IWorkoutObject\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutCardTitle',\n props: {\n sport: null,\n workoutObject: null\n },\n emits: ['displayModal'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n sport: ISport\n workoutObject: IWorkoutObject\n }\n\n \n\n \n\n const { sport, workoutObject } = toRefs(props)\n\n async function downloadGpx(workoutId: string) {\n await authApi\n .get(`workouts/${workoutId}/gpx/download`, {\n responseType: 'blob',\n })\n .then((response) => {\n const gpxFileUrl = window.URL.createObjectURL(\n new Blob([response.data], { type: 'application/gpx+xml' })\n )\n const gpxLink = document.createElement('a')\n gpxLink.href = gpxFileUrl\n gpxLink.setAttribute('download', `${workoutId}.gpx`)\n document.body.appendChild(gpxLink)\n gpxLink.click()\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-previous workout-arrow\", { inactive: !_unref(workoutObject).previousUrl }]),\n title: \n _unref(workoutObject).previousUrl\n ? _ctx.$t(`workouts.PREVIOUS_${_unref(workoutObject).type}`)\n : _ctx.$t(`workouts.NO_PREVIOUS_${_unref(workoutObject).type}`)\n ,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _unref(workoutObject).previousUrl\n ? _ctx.$router.push(_unref(workoutObject).previousUrl)\n : null\n ))\n }, _hoisted_4, 10, _hoisted_2),\n _createElementVNode(\"div\", _hoisted_5, [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(sport).label,\n color: _unref(sport).color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createElementVNode(\"div\", _hoisted_6, [\n (_unref(workoutObject).type === 'WORKOUT')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(workoutObject).title), 1),\n _createElementVNode(\"i\", {\n class: \"fa fa-edit\",\n \"aria-hidden\": \"true\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (\n _ctx.$router.push({\n name: 'EditWorkout',\n params: { workoutId: _unref(workoutObject).workoutId },\n })\n ))\n }),\n (_unref(workoutObject).with_gpx)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-download\",\n \"aria-hidden\": \"true\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (downloadGpx(_unref(workoutObject).workoutId)), [\"prevent\"]))\n }))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"i\", {\n class: \"fa fa-trash\",\n \"aria-hidden\": \"true\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (emit('displayModal', true)))\n })\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_unref(workoutObject).title) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_9, [\n _createTextVNode(\" — \"),\n _hoisted_10,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.SEGMENT')) + \" \" + _toDisplayString(_unref(workoutObject).segmentId + 1), 1)\n ])\n ])),\n _createElementVNode(\"div\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_unref(workoutObject).workoutDate) + \" - \" + _toDisplayString(_unref(workoutObject).workoutTime) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_12, [\n (_unref(workoutObject).type === 'SEGMENT')\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n to: {\n name: 'Workout',\n params: { workoutId: _unref(workoutObject).workoutId },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" > \" + _toDisplayString(_ctx.$t('workouts.BACK_TO_WORKOUT')), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-next workout-arrow\", { inactive: !_unref(workoutObject).nextUrl }]),\n title: \n _unref(workoutObject).nextUrl\n ? _ctx.$t(`workouts.NEXT_${_unref(workoutObject).type}`)\n : _ctx.$t(`workouts.NO_NEXT_${_unref(workoutObject).type}`)\n ,\n onClick: _cache[4] || (_cache[4] = ($event: any) => (\n _unref(workoutObject).nextUrl ? _ctx.$router.push(_unref(workoutObject).nextUrl) : null\n ))\n }, _hoisted_15, 10, _hoisted_13)\n ]))\n}\n}\n\n})","import script from \"./WorkoutCardTitle.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutCardTitle.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutCardTitle.vue?vue&type=style&index=0&id=4d9f9a8a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4d9f9a8a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1a5282f6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n class: \"workout-record\"\n}\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"sup\", null, [\n /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy\",\n \"aria-hidden\": \"true\"\n })\n], -1))\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nimport { toRefs } from 'vue'\n\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n recordType: string\n workoutObject: IWorkoutObject\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutRecord',\n props: {\n recordType: null,\n workoutObject: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n recordType: string\n workoutObject: IWorkoutObject\n }\n\n \n\n const { recordType, workoutObject } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (\n _unref(workoutObject).records &&\n _unref(workoutObject).records.find((record) => record.record_type === _unref(recordType))\n )\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_1, _hoisted_3))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutRecord.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutRecord.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutRecord.vue?vue&type=style&index=0&id=1a5282f6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1a5282f6\"]])\n\nexport default __exports__","const directions = [\n 'N',\n 'NNE',\n 'NE',\n 'ENE',\n 'E',\n 'ESE',\n 'SE',\n 'SSE',\n 'S',\n 'SSW',\n 'SW',\n 'WSW',\n 'W',\n 'WNW',\n 'NW',\n 'NNW',\n]\n\nexport const convertDegreeToDirection = (angle: number): string => {\n const value = Math.floor(angle / 22.5 + 0.5)\n return directions[value % 16]\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-46a7c31c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"wind\" }\nconst _hoisted_2 = { class: \"wind-bearing\" }\nconst _hoisted_3 = [\"title\"]\n\nimport { toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { IWeather } from '@/types/workouts'\n import { convertDegreeToDirection } from '@/utils/weather'\n\n interface Props {\n weather: IWeather\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WeatherWind',\n props: {\n weather: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n weather: IWeather\n useImperialUnits: boolean\n }\n\n \n\n const { useImperialUnits, weather } = toRefs(props)\n const { t } = useI18n()\n\n function getWindDirectionTitle(windBearing: number): string {\n return t(\n `workouts.WEATHER.WIND_DIRECTIONS.${convertDegreeToDirection(\n windBearing\n )}`\n )\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Distance, {\n distance: _unref(weather).wind,\n unitFrom: \"m\",\n digits: 1,\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createTextVNode(\" \" + _toDisplayString(_unref(useImperialUnits) ? 'ft' : 'm') + \"/s \", 1),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(weather).windBearing)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-long-arrow-down\",\n style: _normalizeStyle({\n transform: `rotate(${_unref(weather).windBearing}deg)`,\n }),\n \"aria-hidden\": \"true\",\n title: getWindDirectionTitle(_unref(weather).windBearing)\n }, null, 12, _hoisted_3))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./WeatherWind.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WeatherWind.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WeatherWind.vue?vue&type=style&index=0&id=46a7c31c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-46a7c31c\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-76e9ab62\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"workout-weather\"\n}\nconst _hoisted_2 = { class: \"weather-table\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, null, -1))\nconst _hoisted_4 = { class: \"weather-th\" }\nconst _hoisted_5 = [\"src\", \"alt\", \"title\"]\nconst _hoisted_6 = { class: \"weather-th\" }\nconst _hoisted_7 = [\"src\", \"alt\", \"title\"]\nconst _hoisted_8 = [\"alt\", \"title\"]\nconst _hoisted_9 = [\"alt\", \"title\"]\nconst _hoisted_10 = [\"alt\", \"title\"]\n\nimport { toRefs } from 'vue'\n\n import WeatherWind from '@/components/Workout/WorkoutDetail/WeatherWind.vue'\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutWeather',\n props: {\n workoutObject: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n }\n\n \n\n const { useImperialUnits, workoutObject } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(workoutObject).weatherStart && _unref(workoutObject).weatherEnd)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"table\", _hoisted_2, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_3,\n _createElementVNode(\"th\", null, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.START')) + \" \", 1),\n _createElementVNode(\"img\", {\n class: \"weather-img\",\n src: `/img/weather/${_unref(workoutObject).weatherStart.icon}.svg`,\n alt: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherStart.icon}`\n )\n ,\n title: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherStart.icon}`\n )\n \n }, null, 8, _hoisted_5)\n ])\n ]),\n _createElementVNode(\"th\", null, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.END')) + \" \", 1),\n _createElementVNode(\"img\", {\n class: \"weather-img\",\n src: `/img/weather/${_unref(workoutObject).weatherEnd.icon}.svg`,\n alt: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherEnd.icon}`\n )\n ,\n title: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherEnd.icon}`\n )\n \n }, null, 8, _hoisted_7)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/temperature.svg\",\n alt: _ctx.$t(`workouts.WEATHER.TEMPERATURE`),\n title: _ctx.$t(`workouts.WEATHER.TEMPERATURE`)\n }, null, 8, _hoisted_8)\n ]),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherStart.temperature).toFixed(1)) + \"°C \", 1),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherEnd.temperature).toFixed(1)) + \"°C \", 1)\n ]),\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/pour-rain.svg\",\n alt: _ctx.$t(`workouts.WEATHER.HUMIDITY`),\n title: _ctx.$t(`workouts.WEATHER.HUMIDITY`)\n }, null, 8, _hoisted_9)\n ]),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherStart.humidity * 100).toFixed(1)) + \"% \", 1),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherEnd.humidity * 100).toFixed(1)) + \"% \", 1)\n ]),\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/breeze.svg\",\n alt: _ctx.$t(`workouts.WEATHER.WIND`),\n title: _ctx.$t(`workouts.WEATHER.WIND`)\n }, null, 8, _hoisted_10)\n ]),\n _createElementVNode(\"td\", null, [\n _createVNode(WeatherWind, {\n weather: _unref(workoutObject).weatherStart,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"weather\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createVNode(WeatherWind, {\n weather: _unref(workoutObject).weatherEnd,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"weather\", \"useImperialUnits\"])\n ])\n ])\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutWeather.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutWeather.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutWeather.vue?vue&type=style&index=0&id=76e9ab62&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-76e9ab62\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, unref as _unref, createVNode as _createVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74c5993b\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-info\" }\nconst _hoisted_2 = { class: \"workout-data\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-clock-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { class: \"label\" }\nconst _hoisted_5 = { class: \"value\" }\nconst _hoisted_6 = { key: 0 }\nconst _hoisted_7 = { class: \"value\" }\nconst _hoisted_8 = { class: \"value\" }\nconst _hoisted_9 = { class: \"workout-data\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-road\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { class: \"label\" }\nconst _hoisted_12 = { class: \"workout-data\" }\nconst _hoisted_13 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-tachometer\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_14 = { class: \"label\" }\nconst _hoisted_15 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_16 = { class: \"label\" }\nconst _hoisted_17 = {\n key: 0,\n class: \"workout-data\"\n}\nconst _hoisted_18 = [\"alt\"]\nconst _hoisted_19 = { class: \"label\" }\nconst _hoisted_20 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_21 = { class: \"label\" }\nconst _hoisted_22 = {\n key: 1,\n class: \"workout-data\"\n}\nconst _hoisted_23 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-location-arrow\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_24 = { class: \"label\" }\nconst _hoisted_25 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_26 = { class: \"label\" }\n\nimport { computed, toRefs } 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 interface Props {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n displayHARecord: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutData',\n props: {\n workoutObject: null,\n useImperialUnits: { type: Boolean },\n displayHARecord: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n displayHARecord: boolean\n }\n\n \n\n const { displayHARecord, workoutObject, useImperialUnits } = toRefs(props)\n const withPause = computed(\n () =>\n props.workoutObject.pauses !== '0:00:00' &&\n props.workoutObject.pauses !== null\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('workouts.DURATION')), 1),\n _createTextVNode(\": \"),\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_unref(workoutObject).moving), 1),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"LD\"\n }, null, 8, [\"workoutObject\"]),\n (_unref(withPause))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createTextVNode(\" (\" + _toDisplayString(_ctx.$t('workouts.PAUSES')) + \": \", 1),\n _createElementVNode(\"span\", _hoisted_7, _toDisplayString(_unref(workoutObject).pauses), 1),\n _createTextVNode(\" - \" + _toDisplayString(_ctx.$t('workouts.TOTAL_DURATION')) + \": \", 1),\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_unref(workoutObject).duration) + \")\", 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).distance,\n digits: 3,\n unitFrom: \"km\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"FD\"\n }, null, 8, [\"workoutObject\"])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _hoisted_13,\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('workouts.AVERAGE_SPEED')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).aveSpeed,\n unitFrom: \"km\",\n speed: true,\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"AS\"\n }, null, 8, [\"workoutObject\"]),\n _hoisted_15,\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).maxSpeed,\n unitFrom: \"km\",\n speed: true,\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"MS\"\n }, null, 8, [\"workoutObject\"])\n ]),\n (_unref(workoutObject).maxAlt !== null && _unref(workoutObject).minAlt !== null)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createElementVNode(\"img\", {\n class: \"mountains\",\n src: \"/img/workouts/mountains.svg\",\n alt: _ctx.$t('workouts.ELEVATION')\n }, null, 8, _hoisted_18),\n _createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('workouts.MIN_ALTITUDE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).minAlt,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _hoisted_20,\n _createElementVNode(\"span\", _hoisted_21, _toDisplayString(_ctx.$t('workouts.MAX_ALTITUDE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).maxAlt,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(workoutObject).ascent !== null && _unref(workoutObject).descent !== null)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_22, [\n _hoisted_23,\n _createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('workouts.ASCENT')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).ascent,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n (_unref(displayHARecord))\n ? (_openBlock(), _createBlock(WorkoutRecord, {\n key: 0,\n workoutObject: _unref(workoutObject),\n recordType: \"HA\"\n }, null, 8, [\"workoutObject\"]))\n : _createCommentVNode(\"\", true),\n _hoisted_25,\n _createElementVNode(\"span\", _hoisted_26, _toDisplayString(_ctx.$t('workouts.DESCENT')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).descent,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(WorkoutWeather, {\n workoutObject: _unref(workoutObject),\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"workoutObject\", \"useImperialUnits\"])\n ]))\n}\n}\n\n})","import script from \"./WorkoutData.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutData.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutData.vue?vue&type=style&index=0&id=74c5993b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74c5993b\"]])\n\nexport default __exports__","function $(element, tagName) {\n return Array.from(element.getElementsByTagName(tagName));\n}\nfunction normalizeId(id) {\n return id[0] === \"#\" ? id : `#${id}`;\n}\nfunction $ns(element, tagName, ns) {\n return Array.from(element.getElementsByTagNameNS(ns, tagName));\n}\n/**\n * get the content of a text node, if any\n */\nfunction nodeVal(node) {\n node?.normalize();\n return (node && node.textContent) || \"\";\n}\n/**\n * Get one Y child of X, if any, otherwise null\n */\nfunction get1(node, tagName, callback) {\n const n = node.getElementsByTagName(tagName);\n const result = n.length ? n[0] : null;\n if (result && callback)\n callback(result);\n return result;\n}\nfunction get(node, tagName, callback) {\n const properties = {};\n if (!node)\n return properties;\n const n = node.getElementsByTagName(tagName);\n const result = n.length ? n[0] : null;\n if (result && callback) {\n return callback(result, properties);\n }\n return properties;\n}\nfunction val1(node, tagName, callback) {\n const val = nodeVal(get1(node, tagName));\n if (val && callback)\n return callback(val) || {};\n return {};\n}\nfunction $num(node, tagName, callback) {\n const val = parseFloat(nodeVal(get1(node, tagName)));\n if (isNaN(val))\n return undefined;\n if (val && callback)\n return callback(val) || {};\n return {};\n}\nfunction num1(node, tagName, callback) {\n const val = parseFloat(nodeVal(get1(node, tagName)));\n if (isNaN(val))\n return undefined;\n if (val && callback)\n callback(val);\n return val;\n}\nfunction getMulti(node, propertyNames) {\n const properties = {};\n for (const property of propertyNames) {\n val1(node, property, (val) => {\n properties[property] = val;\n });\n }\n return properties;\n}\nfunction isElement(node) {\n return node?.nodeType === 1;\n}\n\nfunction getLineStyle(node) {\n return get(node, \"line\", (lineStyle) => {\n const val = Object.assign({}, val1(lineStyle, \"color\", (color) => {\n return { stroke: `#${color}` };\n }), $num(lineStyle, \"opacity\", (opacity) => {\n return { \"stroke-opacity\": opacity };\n }), $num(lineStyle, \"width\", (width) => {\n // GPX width is in mm, convert to px with 96 px per inch\n return { \"stroke-width\": (width * 96) / 25.4 };\n }));\n return val;\n });\n}\n\nfunction getExtensions(node) {\n let values = [];\n if (node === null)\n return values;\n for (const child of Array.from(node.childNodes)) {\n if (!isElement(child))\n continue;\n const name = abbreviateName(child.nodeName);\n if (name === \"gpxtpx:TrackPointExtension\") {\n // loop again for nested garmin extensions (eg. \"gpxtpx:hr\")\n values = values.concat(getExtensions(child));\n }\n else {\n // push custom extension (eg. \"power\")\n const val = nodeVal(child);\n values.push([name, parseNumeric(val)]);\n }\n }\n return values;\n}\nfunction abbreviateName(name) {\n return [\"heart\", \"gpxtpx:hr\", \"hr\"].includes(name) ? \"heart\" : name;\n}\nfunction parseNumeric(val) {\n const num = parseFloat(val);\n return isNaN(num) ? val : num;\n}\n\nfunction coordPair$1(node) {\n const ll = [\n parseFloat(node.getAttribute(\"lon\") || \"\"),\n parseFloat(node.getAttribute(\"lat\") || \"\"),\n ];\n if (isNaN(ll[0]) || isNaN(ll[1])) {\n return null;\n }\n num1(node, \"ele\", (val) => {\n ll.push(val);\n });\n const time = get1(node, \"time\");\n return {\n coordinates: ll,\n time: time ? nodeVal(time) : null,\n extendedValues: getExtensions(get1(node, \"extensions\")),\n };\n}\n\nfunction extractProperties(node) {\n const properties = getMulti(node, [\n \"name\",\n \"cmt\",\n \"desc\",\n \"type\",\n \"time\",\n \"keywords\",\n ]);\n const extensions = Array.from(node.getElementsByTagNameNS(\"http://www.garmin.com/xmlschemas/GpxExtensions/v3\", \"*\"));\n for (const child of extensions) {\n if (child.parentNode?.parentNode === node) {\n properties[child.tagName.replace(\":\", \"_\")] = nodeVal(child);\n }\n }\n const links = $(node, \"link\");\n if (links.length) {\n properties.links = links.map((link) => Object.assign({ href: link.getAttribute(\"href\") }, getMulti(link, [\"text\", \"type\"])));\n }\n return properties;\n}\n\n/**\n * Extract points from a trkseg or rte element.\n */\nfunction getPoints$1(node, pointname) {\n const pts = $(node, pointname);\n const line = [];\n const times = [];\n const extendedValues = {};\n for (let i = 0; i < pts.length; i++) {\n const c = coordPair$1(pts[i]);\n if (!c) {\n continue;\n }\n line.push(c.coordinates);\n if (c.time)\n times.push(c.time);\n for (const [name, val] of c.extendedValues) {\n const plural = name === \"heart\" ? name : name.replace(\"gpxtpx:\", \"\") + \"s\";\n if (!extendedValues[plural]) {\n extendedValues[plural] = Array(pts.length).fill(null);\n }\n extendedValues[plural][i] = val;\n }\n }\n if (line.length < 2)\n return; // Invalid line in GeoJSON\n return {\n line: line,\n times: times,\n extendedValues: extendedValues,\n };\n}\n/**\n * Extract a LineString geometry from a rte\n * element.\n */\nfunction getRoute(node) {\n const line = getPoints$1(node, \"rtept\");\n if (!line)\n return;\n return {\n type: \"Feature\",\n properties: Object.assign({ _gpxType: \"rte\" }, extractProperties(node), getLineStyle(get1(node, \"extensions\"))),\n geometry: {\n type: \"LineString\",\n coordinates: line.line,\n },\n };\n}\nfunction getTrack(node) {\n const segments = $(node, \"trkseg\");\n const track = [];\n const times = [];\n const extractedLines = [];\n for (const segment of segments) {\n const line = getPoints$1(segment, \"trkpt\");\n if (line) {\n extractedLines.push(line);\n if (line.times && line.times.length)\n times.push(line.times);\n }\n }\n if (extractedLines.length === 0)\n return null;\n const multi = extractedLines.length > 1;\n const properties = Object.assign({ _gpxType: \"trk\" }, extractProperties(node), getLineStyle(get1(node, \"extensions\")), times.length\n ? {\n coordinateProperties: {\n times: multi ? times : times[0],\n },\n }\n : {});\n for (const line of extractedLines) {\n track.push(line.line);\n if (!properties.coordinateProperties) {\n properties.coordinateProperties = {};\n }\n const props = properties.coordinateProperties;\n const entries = Object.entries(line.extendedValues);\n for (let i = 0; i < entries.length; i++) {\n const [name, val] = entries[i];\n if (multi) {\n if (!props[name]) {\n props[name] = extractedLines.map((line) => new Array(line.line.length).fill(null));\n }\n props[name][i] = val;\n }\n else {\n props[name] = val;\n }\n }\n }\n return {\n type: \"Feature\",\n properties: properties,\n geometry: multi\n ? {\n type: \"MultiLineString\",\n coordinates: track,\n }\n : {\n type: \"LineString\",\n coordinates: track[0],\n },\n };\n}\n/**\n * Extract a point, if possible, from a given node,\n * which is usually a wpt or trkpt\n */\nfunction getPoint(node) {\n const properties = Object.assign(extractProperties(node), getMulti(node, [\"sym\"]));\n const pair = coordPair$1(node);\n if (!pair)\n return null;\n return {\n type: \"Feature\",\n properties,\n geometry: {\n type: \"Point\",\n coordinates: pair.coordinates,\n },\n };\n}\n/**\n * Convert GPX to GeoJSON incrementally, returning\n * a [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)\n * that yields output feature by feature.\n */\nfunction* gpxGen(node) {\n for (const track of $(node, \"trk\")) {\n const feature = getTrack(track);\n if (feature)\n yield feature;\n }\n for (const route of $(node, \"rte\")) {\n const feature = getRoute(route);\n if (feature)\n yield feature;\n }\n for (const waypoint of $(node, \"wpt\")) {\n const point = getPoint(waypoint);\n if (point)\n yield point;\n }\n}\n/**\n *\n * Convert a GPX document to GeoJSON. The first argument, `doc`, must be a GPX\n * document as an XML DOM - not as a string. You can get this using jQuery's default\n * `.ajax` function or using a bare XMLHttpRequest with the `.response` property\n * holding an XML DOM.\n *\n * The output is a JavaScript object of GeoJSON data, same as `.kml` outputs, with the\n * addition of a `_gpxType` property on each `LineString` feature that indicates whether\n * the feature was encoded as a route (`rte`) or track (`trk`) in the GPX document.\n */\nfunction gpx(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(gpxGen(node)),\n };\n}\n\nconst EXTENSIONS_NS = \"http://www.garmin.com/xmlschemas/ActivityExtension/v2\";\nconst TRACKPOINT_ATTRIBUTES = [\n [\"heartRate\", \"heartRates\"],\n [\"Cadence\", \"cadences\"],\n // Extended Trackpoint attributes\n [\"Speed\", \"speeds\"],\n [\"Watts\", \"watts\"],\n];\nconst LAP_ATTRIBUTES = [\n [\"TotalTimeSeconds\", \"totalTimeSeconds\"],\n [\"DistanceMeters\", \"distanceMeters\"],\n [\"MaximumSpeed\", \"maxSpeed\"],\n [\"AverageHeartRateBpm\", \"avgHeartRate\"],\n [\"MaximumHeartRateBpm\", \"maxHeartRate\"],\n // Extended Lap attributes\n [\"AvgSpeed\", \"avgSpeed\"],\n [\"AvgWatts\", \"avgWatts\"],\n [\"MaxWatts\", \"maxWatts\"],\n];\nfunction getProperties(node, attributeNames) {\n const properties = [];\n for (const [tag, alias] of attributeNames) {\n let elem = get1(node, tag);\n if (!elem) {\n const elements = node.getElementsByTagNameNS(EXTENSIONS_NS, tag);\n if (elements.length) {\n elem = elements[0];\n }\n }\n const val = parseFloat(nodeVal(elem));\n if (!isNaN(val)) {\n properties.push([alias, val]);\n }\n }\n return properties;\n}\nfunction coordPair(node) {\n const ll = [num1(node, \"LongitudeDegrees\"), num1(node, \"LatitudeDegrees\")];\n if (ll[0] === undefined ||\n isNaN(ll[0]) ||\n ll[1] === undefined ||\n isNaN(ll[1])) {\n return null;\n }\n const heartRate = get1(node, \"HeartRateBpm\");\n const time = nodeVal(get1(node, \"Time\"));\n get1(node, \"AltitudeMeters\", (alt) => {\n const a = parseFloat(nodeVal(alt));\n if (!isNaN(a)) {\n ll.push(a);\n }\n });\n return {\n coordinates: ll,\n time: time || null,\n heartRate: heartRate ? parseFloat(nodeVal(heartRate)) : null,\n extensions: getProperties(node, TRACKPOINT_ATTRIBUTES),\n };\n}\nfunction getPoints(node) {\n const pts = $(node, \"Trackpoint\");\n const line = [];\n const times = [];\n const heartRates = [];\n if (pts.length < 2)\n return null; // Invalid line in GeoJSON\n const extendedProperties = {};\n const result = { extendedProperties };\n for (let i = 0; i < pts.length; i++) {\n const c = coordPair(pts[i]);\n if (c === null)\n continue;\n line.push(c.coordinates);\n const { time, heartRate, extensions } = c;\n if (time)\n times.push(time);\n if (heartRate)\n heartRates.push(heartRate);\n for (const [alias, value] of extensions) {\n if (!extendedProperties[alias]) {\n extendedProperties[alias] = Array(pts.length).fill(null);\n }\n extendedProperties[alias][i] = value;\n }\n }\n if (line.length < 2)\n return null;\n return Object.assign(result, {\n line: line,\n times: times,\n heartRates: heartRates,\n });\n}\nfunction getLap(node) {\n const segments = $(node, \"Track\");\n const track = [];\n const times = [];\n const heartRates = [];\n const allExtendedProperties = [];\n let line;\n const properties = Object.assign(Object.fromEntries(getProperties(node, LAP_ATTRIBUTES)), get(node, \"Name\", (nameElement) => {\n return { name: nodeVal(nameElement) };\n }));\n for (const segment of segments) {\n line = getPoints(segment);\n if (line) {\n track.push(line.line);\n if (line.times.length)\n times.push(line.times);\n if (line.heartRates.length)\n heartRates.push(line.heartRates);\n allExtendedProperties.push(line.extendedProperties);\n }\n }\n for (let i = 0; i < allExtendedProperties.length; i++) {\n const extendedProperties = allExtendedProperties[i];\n for (const property in extendedProperties) {\n if (segments.length === 1) {\n if (line) {\n properties[property] = line.extendedProperties[property];\n }\n }\n else {\n if (!properties[property]) {\n properties[property] = track.map((track) => Array(track.length).fill(null));\n }\n properties[property][i] = extendedProperties[property];\n }\n }\n }\n if (track.length === 0)\n return null;\n if (times.length || heartRates.length) {\n properties.coordinateProperties = Object.assign(times.length\n ? {\n times: track.length === 1 ? times[0] : times,\n }\n : {}, heartRates.length\n ? {\n heart: track.length === 1 ? heartRates[0] : heartRates,\n }\n : {});\n }\n return {\n type: \"Feature\",\n properties: properties,\n geometry: track.length === 1\n ? {\n type: \"LineString\",\n coordinates: track[0],\n }\n : {\n type: \"MultiLineString\",\n coordinates: track,\n },\n };\n}\n/**\n * Incrementally convert a TCX document to GeoJSON. The\n * first argument, `doc`, must be a TCX\n * document as an XML DOM - not as a string.\n */\nfunction* tcxGen(node) {\n for (const lap of $(node, \"Lap\")) {\n const feature = getLap(lap);\n if (feature)\n yield feature;\n }\n for (const course of $(node, \"Courses\")) {\n const feature = getLap(course);\n if (feature)\n yield feature;\n }\n}\n/**\n * Convert a TCX document to GeoJSON. The first argument, `doc`, must be a TCX\n * document as an XML DOM - not as a string.\n */\nfunction tcx(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(tcxGen(node)),\n };\n}\n\nfunction fixColor(v, prefix) {\n const properties = {};\n const colorProp = prefix == \"stroke\" || prefix === \"fill\" ? prefix : prefix + \"-color\";\n if (v[0] === \"#\") {\n v = v.substring(1);\n }\n if (v.length === 6 || v.length === 3) {\n properties[colorProp] = \"#\" + v;\n }\n else if (v.length === 8) {\n properties[prefix + \"-opacity\"] = parseInt(v.substring(0, 2), 16) / 255;\n properties[colorProp] =\n \"#\" + v.substring(6, 8) + v.substring(4, 6) + v.substring(2, 4);\n }\n return properties;\n}\n\nfunction numericProperty(node, source, target) {\n const properties = {};\n num1(node, source, (val) => {\n properties[target] = val;\n });\n return properties;\n}\nfunction getColor(node, output) {\n return get(node, \"color\", (elem) => fixColor(nodeVal(elem), output));\n}\nfunction extractIconHref(node) {\n return get(node, \"Icon\", (icon, properties) => {\n val1(icon, \"href\", (href) => {\n properties.icon = href;\n });\n return properties;\n });\n}\nfunction extractIcon(node) {\n return get(node, \"IconStyle\", (iconStyle) => {\n return Object.assign(getColor(iconStyle, \"icon\"), numericProperty(iconStyle, \"scale\", \"icon-scale\"), numericProperty(iconStyle, \"heading\", \"icon-heading\"), get(iconStyle, \"hotSpot\", (hotspot) => {\n const left = parseFloat(hotspot.getAttribute(\"x\") || \"\");\n const top = parseFloat(hotspot.getAttribute(\"y\") || \"\");\n const xunits = hotspot.getAttribute(\"xunits\") || \"\";\n const yunits = hotspot.getAttribute(\"yunits\") || \"\";\n if (!isNaN(left) && !isNaN(top))\n return {\n \"icon-offset\": [left, top],\n \"icon-offset-units\": [xunits, yunits],\n };\n return {};\n }), extractIconHref(iconStyle));\n });\n}\nfunction extractLabel(node) {\n return get(node, \"LabelStyle\", (labelStyle) => {\n return Object.assign(getColor(labelStyle, \"label\"), numericProperty(labelStyle, \"scale\", \"label-scale\"));\n });\n}\nfunction extractLine(node) {\n return get(node, \"LineStyle\", (lineStyle) => {\n return Object.assign(getColor(lineStyle, \"stroke\"), numericProperty(lineStyle, \"width\", \"stroke-width\"));\n });\n}\nfunction extractPoly(node) {\n return get(node, \"PolyStyle\", (polyStyle, properties) => {\n return Object.assign(properties, get(polyStyle, \"color\", (elem) => fixColor(nodeVal(elem), \"fill\")), val1(polyStyle, \"fill\", (fill) => {\n if (fill === \"0\")\n return { \"fill-opacity\": 0 };\n }), val1(polyStyle, \"outline\", (outline) => {\n if (outline === \"0\")\n return { \"stroke-opacity\": 0 };\n }));\n });\n}\nfunction extractStyle(node) {\n return Object.assign({}, extractPoly(node), extractLine(node), extractLabel(node), extractIcon(node));\n}\n\nfunction extractExtendedData(node) {\n return get(node, \"ExtendedData\", (extendedData, properties) => {\n for (const data of $(extendedData, \"Data\")) {\n properties[data.getAttribute(\"name\") || \"\"] = nodeVal(get1(data, \"value\"));\n }\n for (const simpleData of $(extendedData, \"SimpleData\")) {\n properties[simpleData.getAttribute(\"name\") || \"\"] = nodeVal(simpleData);\n }\n return properties;\n });\n}\nfunction getMaybeHTMLDescription(node) {\n const descriptionNode = get1(node, \"description\");\n for (const c of Array.from(descriptionNode?.childNodes || [])) {\n if (c.nodeType === 4) {\n return {\n description: {\n \"@type\": \"html\",\n value: nodeVal(c),\n },\n };\n }\n }\n return {};\n}\nfunction extractTimeSpan(node) {\n return get(node, \"TimeSpan\", (timeSpan) => {\n return {\n timespan: {\n begin: nodeVal(get1(timeSpan, \"begin\")),\n end: nodeVal(get1(timeSpan, \"end\")),\n },\n };\n });\n}\nfunction extractTimeStamp(node) {\n return get(node, \"TimeStamp\", (timeStamp) => {\n return { timestamp: nodeVal(get1(timeStamp, \"when\")) };\n });\n}\nfunction extractCascadedStyle(node, styleMap) {\n return val1(node, \"styleUrl\", (styleUrl) => {\n styleUrl = normalizeId(styleUrl);\n if (styleMap[styleUrl]) {\n return Object.assign({ styleUrl }, styleMap[styleUrl]);\n }\n // For backward-compatibility. Should we still include\n // styleUrl even if it's not resolved?\n return { styleUrl };\n });\n}\n\nconst removeSpace = /\\s*/g;\nconst trimSpace = /^\\s*|\\s*$/g;\nconst splitSpace = /\\s+/;\n/**\n * Get one coordinate from a coordinate array, if any\n */\nfunction coord1(value) {\n return value\n .replace(removeSpace, \"\")\n .split(\",\")\n .map(parseFloat)\n .filter((num) => !isNaN(num))\n .slice(0, 3);\n}\n/**\n * Get all coordinates from a coordinate array as [[],[]]\n */\nfunction coord(value) {\n return value\n .replace(trimSpace, \"\")\n .split(splitSpace)\n .map(coord1)\n .filter((coord) => {\n return coord.length >= 2;\n });\n}\nfunction gxCoords(node) {\n let elems = $(node, \"coord\");\n if (elems.length === 0) {\n elems = $ns(node, \"coord\", \"*\");\n }\n const coordinates = elems.map((elem) => {\n return nodeVal(elem).split(\" \").map(parseFloat);\n });\n if (coordinates.length === 0) {\n return null;\n }\n return {\n geometry: coordinates.length > 2\n ? {\n type: \"LineString\",\n coordinates,\n }\n : {\n type: \"Point\",\n coordinates: coordinates[0],\n },\n times: $(node, \"when\").map((elem) => nodeVal(elem)),\n };\n}\nfunction fixRing(ring) {\n if (ring.length === 0)\n return ring;\n const first = ring[0];\n const last = ring[ring.length - 1];\n let equal = true;\n for (let i = 0; i < Math.max(first.length, last.length); i++) {\n if (first[i] !== last[i]) {\n equal = false;\n break;\n }\n }\n if (!equal) {\n return ring.concat([ring[0]]);\n }\n return ring;\n}\nfunction getCoordinates(node) {\n return nodeVal(get1(node, \"coordinates\"));\n}\nfunction getGeometry(node) {\n let geometries = [];\n let coordTimes = [];\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = node.childNodes.item(i);\n if (isElement(child)) {\n switch (child.tagName) {\n case \"MultiGeometry\":\n case \"MultiTrack\":\n case \"gx:MultiTrack\": {\n const childGeometries = getGeometry(child);\n geometries = geometries.concat(childGeometries.geometries);\n coordTimes = coordTimes.concat(childGeometries.coordTimes);\n break;\n }\n case \"Point\": {\n const coordinates = coord1(getCoordinates(child));\n if (coordinates.length >= 2) {\n geometries.push({\n type: \"Point\",\n coordinates,\n });\n }\n break;\n }\n case \"LineString\": {\n const coordinates = coord(getCoordinates(child));\n if (coordinates.length >= 2) {\n geometries.push({\n type: \"LineString\",\n coordinates,\n });\n }\n break;\n }\n case \"Polygon\": {\n const coords = [];\n for (const linearRing of $(child, \"LinearRing\")) {\n const ring = fixRing(coord(getCoordinates(linearRing)));\n if (ring.length >= 4) {\n coords.push(ring);\n }\n }\n if (coords.length) {\n geometries.push({\n type: \"Polygon\",\n coordinates: coords,\n });\n }\n break;\n }\n case \"Track\":\n case \"gx:Track\": {\n const gx = gxCoords(child);\n if (!gx)\n break;\n const { times, geometry } = gx;\n geometries.push(geometry);\n if (times.length)\n coordTimes.push(times);\n break;\n }\n }\n }\n }\n return {\n geometries,\n coordTimes,\n };\n}\n\nfunction geometryListToGeometry(geometries) {\n return geometries.length === 0\n ? null\n : geometries.length === 1\n ? geometries[0]\n : {\n type: \"GeometryCollection\",\n geometries,\n };\n}\nfunction getPlacemark(node, styleMap) {\n const { coordTimes, geometries } = getGeometry(node);\n const feature = {\n type: \"Feature\",\n geometry: geometryListToGeometry(geometries),\n properties: Object.assign(getMulti(node, [\n \"name\",\n \"address\",\n \"visibility\",\n \"open\",\n \"phoneNumber\",\n \"description\",\n ]), getMaybeHTMLDescription(node), extractCascadedStyle(node, styleMap), extractStyle(node), extractExtendedData(node), extractTimeSpan(node), extractTimeStamp(node), coordTimes.length\n ? {\n coordinateProperties: {\n times: coordTimes.length === 1 ? coordTimes[0] : coordTimes,\n },\n }\n : {}),\n };\n if (feature.properties?.visibility !== undefined) {\n feature.properties.visibility = feature.properties.visibility !== \"0\";\n }\n const id = node.getAttribute(\"id\");\n if (id !== null && id !== \"\")\n feature.id = id;\n return feature;\n}\n\nfunction getGroundOverlayBox(node) {\n const latLonQuad = get1(node, \"gx:LatLonQuad\");\n if (latLonQuad) {\n const ring = fixRing(coord(getCoordinates(node)));\n return {\n type: \"Polygon\",\n coordinates: [ring],\n };\n }\n return getLatLonBox(node);\n}\nconst DEGREES_TO_RADIANS = Math.PI / 180;\nfunction rotateBox(bbox, coordinates, rotation) {\n const center = [(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2];\n return [\n coordinates[0].map((coordinate) => {\n const dy = coordinate[1] - center[1];\n const dx = coordinate[0] - center[0];\n const distance = Math.sqrt(Math.pow(dy, 2) + Math.pow(dx, 2));\n const angle = Math.atan2(dy, dx) - rotation * DEGREES_TO_RADIANS;\n return [\n center[0] + Math.cos(angle) * distance,\n center[1] + Math.sin(angle) * distance,\n ];\n }),\n ];\n}\nfunction getLatLonBox(node) {\n const latLonBox = get1(node, \"LatLonBox\");\n if (latLonBox) {\n const north = num1(latLonBox, \"north\");\n const west = num1(latLonBox, \"west\");\n const east = num1(latLonBox, \"east\");\n const south = num1(latLonBox, \"south\");\n const rotation = num1(latLonBox, \"rotation\");\n if (typeof north === \"number\" &&\n typeof south === \"number\" &&\n typeof west === \"number\" &&\n typeof east === \"number\") {\n const bbox = [west, south, east, north];\n let coordinates = [\n [\n [west, north],\n [east, north],\n [east, south],\n [west, south],\n [west, north], // top left (again)\n ],\n ];\n if (typeof rotation === \"number\") {\n coordinates = rotateBox(bbox, coordinates, rotation);\n }\n return {\n type: \"Polygon\",\n coordinates,\n };\n }\n }\n return null;\n}\nfunction getGroundOverlay(node, styleMap) {\n const geometry = getGroundOverlayBox(node);\n const feature = {\n type: \"Feature\",\n geometry,\n properties: Object.assign(\n /**\n * Related to\n * https://gist.github.com/tmcw/037a1cb6660d74a392e9da7446540f46\n */\n { \"@geometry-type\": \"groundoverlay\" }, getMulti(node, [\n \"name\",\n \"address\",\n \"visibility\",\n \"open\",\n \"phoneNumber\",\n \"description\",\n ]), getMaybeHTMLDescription(node), extractCascadedStyle(node, styleMap), extractStyle(node), extractIconHref(node), extractExtendedData(node), extractTimeSpan(node), extractTimeStamp(node)),\n };\n if (feature.properties?.visibility !== undefined) {\n feature.properties.visibility = feature.properties.visibility !== \"0\";\n }\n const id = node.getAttribute(\"id\");\n if (id !== null && id !== \"\")\n feature.id = id;\n return feature;\n}\n\nfunction getStyleId(style) {\n let id = style.getAttribute(\"id\");\n const parentNode = style.parentNode;\n if (!id &&\n isElement(parentNode) &&\n parentNode.localName === \"CascadingStyle\") {\n id = parentNode.getAttribute(\"kml:id\") || parentNode.getAttribute(\"id\");\n }\n return normalizeId(id || \"\");\n}\nfunction buildStyleMap(node) {\n const styleMap = {};\n for (const style of $(node, \"Style\")) {\n styleMap[getStyleId(style)] = extractStyle(style);\n }\n for (const map of $(node, \"StyleMap\")) {\n const id = normalizeId(map.getAttribute(\"id\") || \"\");\n val1(map, \"styleUrl\", (styleUrl) => {\n styleUrl = normalizeId(styleUrl);\n if (styleMap[styleUrl]) {\n styleMap[id] = styleMap[styleUrl];\n }\n });\n }\n return styleMap;\n}\nconst FOLDER_PROPS = [\n \"name\",\n \"visibility\",\n \"open\",\n \"address\",\n \"description\",\n \"phoneNumber\",\n \"visibility\",\n];\nfunction getFolder(node) {\n const meta = {};\n for (const child of Array.from(node.childNodes)) {\n if (isElement(child) && FOLDER_PROPS.includes(child.tagName)) {\n meta[child.tagName] = nodeVal(child);\n }\n }\n return {\n type: \"folder\",\n meta,\n children: [],\n };\n}\n/**\n * Yield a nested tree with KML folder structure\n *\n * This generates a tree with the given structure:\n *\n * ```js\n * {\n * \"type\": \"root\",\n * \"children\": [\n * {\n * \"type\": \"folder\",\n * \"meta\": {\n * \"name\": \"Test\"\n * },\n * \"children\": [\n * // ...features and folders\n * ]\n * }\n * // ...features\n * ]\n * }\n * ```\n *\n * ### GroundOverlay\n *\n * GroundOverlay elements are converted into\n * `Feature` objects with `Polygon` geometries,\n * a property like:\n *\n * ```json\n * {\n * \"@geometry-type\": \"groundoverlay\"\n * }\n * ```\n *\n * And the ground overlay's image URL in the `href`\n * property. Ground overlays will need to be displayed\n * with a separate method to other features, depending\n * on which map framework you're using.\n */\nfunction kmlWithFolders(node) {\n const styleMap = buildStyleMap(node);\n const tree = { type: \"root\", children: [] };\n function traverse(node, pointer) {\n if (isElement(node)) {\n switch (node.tagName) {\n case \"GroundOverlay\": {\n const placemark = getGroundOverlay(node, styleMap);\n if (placemark) {\n pointer.children.push(placemark);\n }\n break;\n }\n case \"Placemark\": {\n const placemark = getPlacemark(node, styleMap);\n if (placemark) {\n pointer.children.push(placemark);\n }\n break;\n }\n case \"Folder\": {\n const folder = getFolder(node);\n pointer.children.push(folder);\n pointer = folder;\n break;\n }\n }\n }\n if (node.childNodes) {\n for (let i = 0; i < node.childNodes.length; i++) {\n traverse(node.childNodes[i], pointer);\n }\n }\n }\n traverse(node, tree);\n return tree;\n}\n/**\n * Convert KML to GeoJSON incrementally, returning\n * a [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)\n * that yields output feature by feature.\n */\nfunction* kmlGen(node) {\n const styleMap = buildStyleMap(node);\n for (const placemark of $(node, \"Placemark\")) {\n const feature = getPlacemark(placemark, styleMap);\n if (feature)\n yield feature;\n }\n for (const groundOverlay of $(node, \"GroundOverlay\")) {\n const feature = getGroundOverlay(groundOverlay, styleMap);\n if (feature)\n yield feature;\n }\n}\n/**\n * Convert a KML document to GeoJSON. The first argument, `doc`, must be a KML\n * document as an XML DOM - not as a string. You can get this using jQuery's default\n * `.ajax` function or using a bare XMLHttpRequest with the `.response` property\n * holding an XML DOM.\n *\n * The output is a JavaScript object of GeoJSON data. You can convert it to a string\n * with [JSON.stringify](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)\n * or use it directly in libraries.\n */\nfunction kml(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(kmlGen(node)),\n };\n}\n\nexport { gpx, gpxGen, kml, kmlGen, kmlWithFolders, tcx, tcxGen };\n//# sourceMappingURL=togeojson.es.mjs.map\n","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>} 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","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nimport { LIcon, LMarker } from '@vue-leaflet/vue-leaflet'\n import { toRefs } from 'vue'\n\n import { TCoordinates } from '@/types/workouts'\n\n interface Props {\n markerCoordinates: TCoordinates\n isStart: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CustomMarker',\n props: {\n markerCoordinates: null,\n isStart: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n markerCoordinates: TCoordinates\n isStart: boolean\n }\n\n \n\n const { isStart, markerCoordinates } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(markerCoordinates).latitude)\n ? (_openBlock(), _createBlock(_unref(LMarker), {\n key: 0,\n \"lat-lng\": [_unref(markerCoordinates).latitude, _unref(markerCoordinates).longitude]\n }, {\n default: _withCtx(() => [\n _createVNode(_unref(LIcon), {\n \"icon-url\": `/img/workouts/${_unref(isStart) ? 'start' : 'finish'}.svg`,\n iconSize: [15, 15]\n }, null, 8, [\"icon-url\"])\n ]),\n _: 1\n }, 8, [\"lat-lng\"]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./CustomMarker.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./CustomMarker.vue?vue&type=script&lang=ts&setup=true\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, normalizeClass as _normalizeClass, createBlock as _createBlock, resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6b490f5d\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-map\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"leaflet-container\"\n}\nconst _hoisted_3 = { key: 1 }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-refresh\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_5 = {\n key: 1,\n class: \"no-map\"\n}\n\nimport { gpx } from '@tmcw/togeojson'\n import {\n LControl,\n LControlLayers,\n LGeoJson,\n LLayerGroup,\n LMap,\n LMarker,\n LTileLayer,\n } from '@vue-leaflet/vue-leaflet'\n import { ComputedRef, computed, ref, toRefs, withDefaults } from 'vue'\n import 'leaflet/dist/leaflet.css'\n\n import CustomMarker from '@/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue'\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 interface Props {\n workoutData: IWorkoutData\n markerCoordinates?: TCoordinates\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n workoutData: null,\n markerCoordinates: { default: () => ({} as TCoordinates) }\n },\n setup(__props: any) {\n\nconst props = __props as { workoutData: IWorkoutData, markerCoordinates: TCoordinates }\n\n \n\n const store = useStore()\n\n const { workoutData, markerCoordinates } = toRefs(props)\n const workoutMap = ref null }\n }>(null)\n const bounds = computed(() => getBounds())\n const appConfig: ComputedRef = 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 const startMarkerCoordinates = computed(() =>\n props.workoutData && props.workoutData.chartData.length > 0\n ? {\n latitude: props.workoutData.chartData[0].latitude,\n longitude: props.workoutData.chartData[0].longitude,\n }\n : {}\n )\n const endMarkerCoordinates = computed(() =>\n props.workoutData && props.workoutData.chartData.length > 0\n ? {\n latitude:\n props.workoutData.chartData[props.workoutData.chartData.length - 1]\n .latitude,\n longitude:\n props.workoutData.chartData[props.workoutData.chartData.length - 1]\n .longitude,\n }\n : {}\n )\n const isFullscreen = ref(false)\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[] {\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 function getBounds() {\n return 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 function resetZoom() {\n workoutMap.value?.leafletObject.fitBounds(getBounds())\n }\n function toggleFullscreen() {\n isFullscreen.value = !isFullscreen.value\n if (!isFullscreen.value) {\n setTimeout(() => {\n resetZoom()\n }, 100)\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_VFullscreen = _resolveComponent(\"VFullscreen\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(workoutData).loading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_unref(workoutData).workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_VFullscreen, {\n key: 0,\n modelValue: isFullscreen.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((isFullscreen).value = $event))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"leaflet-container\", { 'fullscreen-map': isFullscreen.value }])\n }, [\n (_unref(geoJson).jsonData && _unref(center) && _unref(bounds).length === 2)\n ? (_openBlock(), _createBlock(_unref(LMap), {\n key: 0,\n zoom: 13,\n maxZoom: 19,\n center: _unref(center),\n bounds: _unref(bounds),\n ref_key: \"workoutMap\",\n ref: workoutMap,\n onReady: _cache[0] || (_cache[0] = ($event: any) => (fitBounds(_unref(bounds))))\n }, {\n default: _withCtx(() => [\n _createVNode(_unref(LControlLayers)),\n _createVNode(_unref(LControl), {\n position: \"topleft\",\n class: \"map-control\",\n onClick: resetZoom\n }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }),\n _createVNode(_unref(LControl), {\n position: \"topleft\",\n class: \"map-control\",\n onClick: toggleFullscreen\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa-${isFullscreen.value ? 'compress' : 'arrows-alt'}`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _: 1\n }),\n _createVNode(_unref(LTileLayer), {\n url: `${_unref(getApiUrl)()}workouts/map_tile/{s}/{z}/{x}/{y}.png`,\n attribution: _unref(appConfig).map_attribution,\n bounds: _unref(bounds)\n }, null, 8, [\"url\", \"attribution\", \"bounds\"]),\n _createVNode(_unref(LGeoJson), {\n geojson: _unref(geoJson).jsonData\n }, null, 8, [\"geojson\"]),\n (_unref(markerCoordinates).latitude)\n ? (_openBlock(), _createBlock(_unref(LMarker), {\n key: 0,\n \"lat-lng\": [\n _unref(markerCoordinates).latitude,\n _unref(markerCoordinates).longitude,\n ]\n }, null, 8, [\"lat-lng\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_unref(LLayerGroup), {\n name: _ctx.$t('workouts.START_AND_FINISH'),\n \"layer-type\": \"overlay\"\n }, {\n default: _withCtx(() => [\n (_unref(startMarkerCoordinates).latitude)\n ? (_openBlock(), _createBlock(CustomMarker, {\n key: 0,\n markerCoordinates: _unref(startMarkerCoordinates),\n isStart: true\n }, null, 8, [\"markerCoordinates\"]))\n : _createCommentVNode(\"\", true),\n (_unref(endMarkerCoordinates).latitude)\n ? (_openBlock(), _createBlock(CustomMarker, {\n key: 1,\n markerCoordinates: _unref(endMarkerCoordinates),\n isStart: false\n }, null, 8, [\"markerCoordinates\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"name\"])\n ]),\n _: 1\n }, 8, [\"center\", \"bounds\"]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ]),\n _: 1\n }, 8, [\"modelValue\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('workouts.NO_MAP')), 1))\n ]))\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=6b490f5d&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6b490f5d\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, withCtx as _withCtx, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9fc0bab8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workout-detail\" }\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n watch,\n withDefaults,\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/index.vue'\n import { WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } 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 interface Props {\n authUser: IAuthUserProfile\n displaySegment: boolean\n sports: ISport[]\n workoutData: IWorkoutData\n markerCoordinates?: TCoordinates\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n authUser: null,\n displaySegment: { type: Boolean },\n sports: null,\n workoutData: null,\n markerCoordinates: { default: () => ({} as TCoordinates) }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, displaySegment: boolean, sports: ISport[], workoutData: IWorkoutData, markerCoordinates: TCoordinates }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { authUser, markerCoordinates, workoutData } = toRefs(props)\n const workout: ComputedRef = computed(\n () => props.workoutData.workout\n )\n const segmentId: Ref = ref(\n route.params.workoutId ? +route.params.segmentId : null\n )\n const segment: ComputedRef = computed(() =>\n workout.value.segments.length > 0 && segmentId.value\n ? workout.value.segments[+segmentId.value - 1]\n : null\n )\n const displayModal: Ref = ref(false)\n const sport = computed(() =>\n props.sports\n ? props.sports.find(\n (sport) => sport.id === props.workoutData.workout.sport_id\n )\n : {}\n )\n const workoutObject = computed(() =>\n getWorkoutObject(workout.value, segment.value)\n )\n\n function getWorkoutObjectUrl(\n workout: IWorkout,\n displaySegment: boolean,\n segmentId: number | null\n ): Record {\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 props.authUser.date_format\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 weatherStart: segment ? null : workout.weather_start,\n with_gpx: workout.with_gpx,\n workoutId: workout.id,\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 watch(\n () => route.params.segmentId,\n async (newSegmentId) => {\n if (newSegmentId) {\n segmentId.value = +newSegmentId\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t('workouts.WORKOUT_DELETION_CONFIRMATION'),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (deleteWorkout(_unref(workoutObject).workoutId))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createVNode(WorkoutCardTitle, {\n sport: _unref(sport),\n workoutObject: _unref(workoutObject),\n onDisplayModal: _cache[2] || (_cache[2] = ($event: any) => (updateDisplayModal(true)))\n }, null, 8, [\"sport\", \"workoutObject\"])\n ]),\n content: _withCtx(() => [\n _createVNode(WorkoutMap, {\n workoutData: _unref(workoutData),\n markerCoordinates: _unref(markerCoordinates)\n }, null, 8, [\"workoutData\", \"markerCoordinates\"]),\n _createVNode(WorkoutData, {\n workoutObject: _unref(workoutObject),\n useImperialUnits: _unref(authUser).imperial_units,\n displayHARecord: _unref(authUser).display_ascent\n }, null, 8, [\"workoutObject\", \"useImperialUnits\", \"displayHARecord\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=9fc0bab8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9fc0bab8\"]])\n\nexport default __exports__","import { Chart, LegendItem } from 'chart.js'\n\nconst getOrCreateLegendList = (id: string): HTMLUListElement => {\n const legendContainer = document.getElementById(id)\n if (legendContainer) {\n let listContainer = legendContainer.querySelector('ul')\n if (!listContainer) {\n listContainer = document.createElement('ul')\n legendContainer.appendChild(listContainer)\n }\n return listContainer\n }\n throw new Error('No legend container')\n}\n\nexport const htmlLegendPlugin = {\n id: 'htmlLegend',\n afterUpdate(\n chart: Chart,\n args: Record,\n options: Record\n ): void {\n const ul = getOrCreateLegendList(options.containerID)\n while (ul.firstChild) {\n ul.firstChild.remove()\n }\n\n const legendItems = chart.options.plugins?.legend?.labels?.generateLabels\n ? chart.options.plugins?.legend?.labels?.generateLabels(chart)\n : []\n\n legendItems.forEach((item: LegendItem) => {\n const li = document.createElement('li')\n li.onclick = () => {\n if (item.datasetIndex !== undefined) {\n chart.setDatasetVisibility(\n item.datasetIndex,\n !chart.isDatasetVisible(item.datasetIndex)\n )\n chart.update()\n }\n }\n\n const checkBox = document.createElement('input')\n if (checkBox) {\n checkBox.type = 'checkbox'\n checkBox.id = item.text\n checkBox.checked = !item.hidden\n }\n\n const text = document.createTextNode(item.text)\n\n const boxSpan = document.createElement('span')\n if (boxSpan) {\n boxSpan.style.background = String(item.fillStyle)\n boxSpan.style.borderColor = String(item.strokeStyle)\n }\n\n li.appendChild(checkBox)\n li.appendChild(text)\n li.appendChild(boxSpan)\n ul.appendChild(li)\n })\n },\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, unref as _unref, mergeProps as _mergeProps, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-dcea1168\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-chart\" }\nconst _hoisted_2 = { class: \"chart-radio\" }\nconst _hoisted_3 = [\"checked\"]\nconst _hoisted_4 = [\"checked\"]\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"chart-legend\" }, null, -1))\nconst _hoisted_6 = { class: \"chart-info\" }\nconst _hoisted_7 = { class: \"no-data-cleaning\" }\nconst _hoisted_8 = { class: \"elevation-start\" }\nconst _hoisted_9 = [\"checked\"]\n\nimport { ChartData, ChartOptions } from 'chart.js'\n import { ComputedRef, computed, ref } from 'vue'\n import { LineChart, useLineChart } from 'vue-chart-3'\n import { useI18n } from 'vue-i18n'\n\n import { htmlLegendPlugin } from '@/components/Workout/WorkoutDetail/WorkoutChart/legend'\n import { TUnit } from '@/types/units'\n import { IAuthUserProfile } from '@/types/user'\n import {\n IWorkoutChartData,\n IWorkoutData,\n TCoordinates,\n } from '@/types/workouts'\n import { units } from '@/utils/units'\n import { getDatasets } from '@/utils/workouts'\n\n interface Props {\n authUser: IAuthUserProfile\n workoutData: IWorkoutData\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n authUser: null,\n workoutData: null\n },\n emits: ['getCoordinates'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n workoutData: IWorkoutData\n }\n\n \n\n \n\n const { t } = useI18n()\n\n const displayDistance = ref(true)\n const beginElevationAtZero = ref(true)\n const datasets: ComputedRef = computed(() =>\n getDatasets(props.workoutData.chartData, t, props.authUser.imperial_units)\n )\n const fromKmUnit = getUnitTo('km')\n const fromMUnit = getUnitTo('m')\n const chartData: ComputedRef> = 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 = computed(\n () => datasets.value.coordinates\n )\n const options = computed>(() => ({\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') + ` (${fromKmUnit})`\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') + ` (${fromKmUnit}/h)`,\n },\n },\n yElevation: {\n beginAtZero: beginElevationAtZero.value,\n grid: {\n drawOnChartArea: false,\n },\n position: 'right',\n title: {\n display: true,\n text: t('workouts.ELEVATION') + ` (${fromMUnit})`,\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 + ` ${fromMUnit}`\n : label + ` ${fromKmUnit}/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')}: ${\n tooltipItems[0].label\n } ${fromKmUnit}`\n : `${t('workouts.DURATION')}: ${formatDuration(\n tooltipItems[0].label.replace(',', '')\n )}`\n },\n },\n },\n legend: {\n display: false,\n },\n htmlLegend: {\n containerID: 'chart-legend',\n },\n },\n }))\n const { lineChartProps } = useLineChart({\n chartData,\n options,\n plugins: [htmlLegendPlugin],\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 function getUnitTo(unitFrom: TUnit): TUnit {\n return props.authUser.imperial_units\n ? units[unitFrom].defaultTarget\n : unitFrom\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.ANALYSIS')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"distance\",\n checked: displayDistance.value,\n onClick: updateDisplayDistance\n }, null, 8, _hoisted_3),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"duration\",\n checked: !displayDistance.value,\n onClick: updateDisplayDistance\n }, null, 8, _hoisted_4),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DURATION')), 1)\n ])\n ]),\n _hoisted_5,\n _createVNode(_unref(LineChart), _mergeProps(_unref(lineChartProps), {\n class: \"line-chart\",\n onMouseleave: emitEmptyCoordinates\n }), null, 16),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.NO_DATA_CLEANING')), 1),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n checked: beginElevationAtZero.value,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (beginElevationAtZero.value = !beginElevationAtZero.value))\n }, null, 8, _hoisted_9),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.START_ELEVATION_AT_ZERO')), 1)\n ])\n ])\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=dcea1168&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-dcea1168\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-028ad527\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-note\" }\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n notes?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutNotes',\n props: {\n notes: { default: () => null }\n },\n setup(__props: any) {\n\nconst props = __props as { notes: string | null }\n\n \n\n const { notes } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.NOTES')), 1)\n ]),\n content: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(notes) && _unref(notes) !== '' ? _unref(notes) : _ctx.$t('workouts.NO_NOTES')), 1)\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./WorkoutNotes.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutNotes.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutNotes.vue?vue&type=style&index=0&id=028ad527&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-028ad527\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6b8a27cd\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-segments\" }\n\nimport { toRefs } from 'vue'\n\n import { IWorkoutSegment } from '@/types/workouts'\n\n interface Props {\n segments: IWorkoutSegment[]\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutSegments',\n props: {\n segments: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n segments: IWorkoutSegment[]\n useImperialUnits: boolean\n }\n\n \n\n const { segments, useImperialUnits } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.SEGMENT', 2)), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"ul\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(segments), (segment, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: segment.segment_id\n }, [\n _createVNode(_component_router_link, {\n to: {\n name: 'WorkoutSegment',\n params: {\n workoutId: segment.workout_id,\n segmentId: index + 1,\n },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.SEGMENT', 1)) + \" \" + _toDisplayString(index + 1), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n _createTextVNode(\" (\" + _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \": \", 1),\n _createVNode(_component_Distance, {\n distance: segment.distance,\n unitFrom: \"km\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createTextVNode(\", \" + _toDisplayString(_ctx.$t('workouts.DURATION')) + \": \" + _toDisplayString(segment.duration) + \") \", 1)\n ]))\n }), 128))\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./WorkoutSegments.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutSegments.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutSegments.vue?vue&type=style&index=0&id=6b8a27cd&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6b8a27cd\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-53c4e53a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workout-container\"\n}\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\nconst _hoisted_6 = { key: 1 }\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\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 WorkoutDetail from '@/components/Workout/WorkoutDetail/index.vue'\n import WorkoutChart from '@/components/Workout/WorkoutDetail/WorkoutChart/index.vue'\n import WorkoutNotes from '@/components/Workout/WorkoutDetail/WorkoutNotes.vue'\n import WorkoutSegments from '@/components/Workout/WorkoutDetail/WorkoutSegments.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData, IWorkoutPayload, TCoordinates } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n displaySegment: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Workout',\n props: {\n displaySegment: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n displaySegment: boolean\n }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { displaySegment } = toRefs(props)\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const markerCoordinates: Ref = ref({\n latitude: null,\n longitude: null,\n })\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 onUnmounted(() => {\n store.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\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\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_unref(workoutData).workout.id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(WorkoutDetail, {\n workoutData: _unref(workoutData),\n sports: _unref(sports),\n authUser: _unref(authUser),\n markerCoordinates: markerCoordinates.value,\n displaySegment: _unref(displaySegment)\n }, null, 8, [\"workoutData\", \"sports\", \"authUser\", \"markerCoordinates\", \"displaySegment\"]),\n (\n _unref(workoutData).workout.with_gpx && _unref(workoutData).chartData.length > 0\n )\n ? (_openBlock(), _createBlock(WorkoutChart, {\n key: 0,\n workoutData: _unref(workoutData),\n authUser: _unref(authUser),\n displaySegment: _unref(displaySegment),\n onGetCoordinates: updateCoordinates\n }, null, 8, [\"workoutData\", \"authUser\", \"displaySegment\"]))\n : _createCommentVNode(\"\", true),\n (!_unref(displaySegment) && _unref(workoutData).workout.segments.length > 1)\n ? (_openBlock(), _createBlock(WorkoutSegments, {\n key: 1,\n segments: _unref(workoutData).workout.segments,\n useImperialUnits: _unref(authUser).imperial_units\n }, null, 8, [\"segments\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n (!_unref(displaySegment))\n ? (_openBlock(), _createBlock(WorkoutNotes, {\n key: 2,\n notes: _unref(workoutData).workout.notes\n }, null, 8, [\"notes\"]))\n : _createCommentVNode(\"\", true),\n _hoisted_5\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n (!_unref(workoutData).loading)\n ? (_openBlock(), _createBlock(NotFound, {\n key: 0,\n target: \"WORKOUT\"\n }))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./Workout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Workout.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Workout.vue?vue&type=style&index=0&id=53c4e53a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-53c4e53a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6c38593a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workouts-filters\" }\nconst _hoisted_2 = { class: \"box\" }\nconst _hoisted_3 = { class: \"form\" }\nconst _hoisted_4 = { class: \"form-items-group\" }\nconst _hoisted_5 = { class: \"form-item\" }\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = { class: \"form-item\" }\nconst _hoisted_8 = [\"value\"]\nconst _hoisted_9 = { class: \"form-items-group\" }\nconst _hoisted_10 = { class: \"form-item\" }\nconst _hoisted_11 = [\"value\"]\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"option\", { value: \"\" }, null, -1))\nconst _hoisted_13 = [\"value\"]\nconst _hoisted_14 = { class: \"form-items-group\" }\nconst _hoisted_15 = { class: \"form-item\" }\nconst _hoisted_16 = { class: \"form-inputs-group\" }\nconst _hoisted_17 = [\"value\"]\nconst _hoisted_18 = [\"value\"]\nconst _hoisted_19 = { class: \"form-items-group\" }\nconst _hoisted_20 = { class: \"form-item\" }\nconst _hoisted_21 = { class: \"form-inputs-group\" }\nconst _hoisted_22 = [\"value\"]\nconst _hoisted_23 = [\"value\"]\nconst _hoisted_24 = { class: \"form-items-group\" }\nconst _hoisted_25 = { class: \"form-item\" }\nconst _hoisted_26 = { class: \"form-inputs-group\" }\nconst _hoisted_27 = [\"value\"]\nconst _hoisted_28 = [\"value\"]\nconst _hoisted_29 = { class: \"form-items-group\" }\nconst _hoisted_30 = { class: \"form-item\" }\nconst _hoisted_31 = { class: \"form-inputs-group\" }\nconst _hoisted_32 = [\"value\"]\nconst _hoisted_33 = [\"value\"]\nconst _hoisted_34 = { class: \"form-button\" }\n\nimport { ComputedRef, computed, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { translateSports } from '@/utils/sports'\n import { units } from '@/utils/units'\n\n interface Props {\n authUser: IAuthUserProfile\n sports: ISport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsFilters',\n props: {\n authUser: null,\n sports: null\n },\n emits: ['filter'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n sports: ISport[]\n }\n\n \n\n \n\n const { t } = useI18n()\n const route = useRoute()\n const router = useRouter()\n\n const { authUser } = toRefs(props)\n\n const toUnit = authUser.value.imperial_units\n ? units['km'].defaultTarget\n : 'km'\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.sports, t)\n )\n let params: LocationQuery = Object.assign({}, route.query)\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')\n if ('page' in params) {\n params['page'] = '1'\n }\n router.push({ path: '/workouts', query: params })\n }\n function onClearFilter() {\n emit('filter')\n router.push({ path: '/workouts', query: {} })\n }\n\n watch(\n () => route.query,\n (newQuery) => {\n params = Object.assign({}, newQuery)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.FROM')) + \": \", 1),\n _createElementVNode(\"input\", {\n name: \"from\",\n type: \"date\",\n value: _ctx.$route.query.from,\n onChange: handleFilterChange\n }, null, 40, _hoisted_6)\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.TO')) + \": \", 1),\n _createElementVNode(\"input\", {\n name: \"to\",\n type: \"date\",\n value: _ctx.$route.query.to,\n onChange: handleFilterChange\n }, null, 40, _hoisted_8)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.SPORT', 1)) + \":\", 1),\n _createElementVNode(\"select\", {\n name: \"sport_id\",\n value: _ctx.$route.query.sport_id,\n onChange: handleFilterChange\n }, [\n _hoisted_12,\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports).filter((s) =>\n _unref(authUser).sports_list.includes(s.id)\n ), (sport) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: sport.id,\n key: sport.id\n }, _toDisplayString(sport.translatedLabel), 9, _hoisted_13))\n }), 128))\n ], 40, _hoisted_11)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"): \", 1),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"input\", {\n name: \"distance_from\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: _ctx.$route.query.distance_from,\n onChange: handleFilterChange\n }, null, 40, _hoisted_17),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n name: \"distance_to\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: _ctx.$route.query.distance_to,\n onChange: handleFilterChange\n }, null, 40, _hoisted_18)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"div\", _hoisted_20, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DURATION')) + \": \", 1),\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"input\", {\n name: \"duration_from\",\n value: _ctx.$route.query.duration_from,\n onChange: handleFilterChange,\n pattern: \"^([0-9]*[0-9]):([0-5][0-9])$\",\n placeholder: \"hh:mm\",\n type: \"text\"\n }, null, 40, _hoisted_22),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n name: \"duration_to\",\n value: _ctx.$route.query.duration_to,\n onChange: handleFilterChange,\n pattern: \"^([0-9]*[0-9]):([0-5][0-9])$\",\n placeholder: \"hh:mm\",\n type: \"text\"\n }, null, 40, _hoisted_23)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_24, [\n _createElementVNode(\"div\", _hoisted_25, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.AVE_SPEED')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"/h): \", 1),\n _createElementVNode(\"div\", _hoisted_26, [\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"ave_speed_from\",\n value: _ctx.$route.query.ave_speed_from,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_27),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"ave_speed_to\",\n value: _ctx.$route.query.ave_speed_to,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_28)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_29, [\n _createElementVNode(\"div\", _hoisted_30, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"/h): \", 1),\n _createElementVNode(\"div\", _hoisted_31, [\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"max_speed_from\",\n value: _ctx.$route.query.max_speed_from,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_32),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"max_speed_to\",\n value: _ctx.$route.query.max_speed_to,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_33)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_34, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: onFilter\n }, _toDisplayString(_ctx.$t('buttons.FILTER')), 1),\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: onClearFilter\n }, _toDisplayString(_ctx.$t('buttons.CLEAR_FILTER')), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./WorkoutsFilters.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsFilters.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsFilters.vue?vue&type=style&index=0&id=6c38593a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6c38593a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createBlock as _createBlock, withCtx as _withCtx, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0f8ea7b0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workouts-list\" }\nconst _hoisted_2 = { class: \"total\" }\nconst _hoisted_3 = { class: \"total-label\" }\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = {\n key: 0,\n class: \"workouts-table responsive-table\"\n}\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", { class: \"sport-col\" }, null, -1))\nconst _hoisted_7 = { class: \"sport-col\" }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = [\"onMouseover\"]\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"fa fa-map-o\",\n \"aria-hidden\": \"true\"\n}\nconst _hoisted_12 = { class: \"title\" }\nconst _hoisted_13 = { class: \"workout-date\" }\nconst _hoisted_14 = { class: \"cell-heading\" }\nconst _hoisted_15 = { class: \"text-right\" }\nconst _hoisted_16 = { class: \"cell-heading\" }\nconst _hoisted_17 = { class: \"text-right\" }\nconst _hoisted_18 = { class: \"cell-heading\" }\nconst _hoisted_19 = { class: \"text-right\" }\nconst _hoisted_20 = { class: \"cell-heading\" }\nconst _hoisted_21 = { class: \"text-right\" }\nconst _hoisted_22 = { class: \"cell-heading\" }\nconst _hoisted_23 = { class: \"text-right\" }\nconst _hoisted_24 = { class: \"cell-heading\" }\nconst _hoisted_25 = { class: \"text-right\" }\nconst _hoisted_26 = { class: \"cell-heading\" }\nconst _hoisted_27 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n watch,\n capitalize,\n onBeforeMount,\n } from 'vue'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import FilterSelects from '@/components/Common/FilterSelects.vue'\n import Pagination from '@/components/Common/Pagination.vue'\n import StaticMap from '@/components/Common/StaticMap.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { ROOT_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { IPagination } from '@/types/api'\n import { ITranslatedSport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkout, TWorkoutsPayload } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { getQuery, sortList, workoutsPayloadKeys } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n import { getSportColor, getSportLabel } from '@/utils/sports'\n import { convertDistance } from '@/utils/units'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n user: IAuthUserProfile\n sports: ITranslatedSport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsList',\n props: {\n user: null,\n sports: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n sports: ITranslatedSport[]\n }\n\n \n\n const store = useStore()\n const route = useRoute()\n const router = useRouter()\n\n const { user, sports } = toRefs(props)\n const orderByList: string[] = [\n 'ave_speed',\n 'distance',\n 'duration',\n 'workout_date',\n ]\n const workouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.USER_WORKOUTS]\n )\n const pagination: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUTS_PAGINATION]\n )\n const currentLanguage: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n let query: TWorkoutsPayload = getWorkoutsQuery(route.query)\n const hoverWorkoutId: Ref = ref(null)\n\n onBeforeMount(() => {\n loadWorkouts(query)\n })\n\n function loadWorkouts(payload: TWorkoutsPayload) {\n store.dispatch(\n WORKOUTS_STORE.ACTIONS.GET_USER_WORKOUTS,\n user.value.imperial_units ? getConvertedPayload(payload) : payload\n )\n }\n function reloadWorkouts(queryParam: string, queryValue: string) {\n const newQuery: LocationQuery = Object.assign({}, route.query)\n newQuery[queryParam] = queryValue\n if (queryParam === 'per_page') {\n newQuery['page'] = '1'\n }\n query = getWorkoutsQuery(newQuery)\n router.push({ path: '/workouts', query })\n }\n\n function getWorkoutsQuery(newQuery: LocationQuery): TWorkoutsPayload {\n const workoutQuery = getQuery(\n newQuery,\n orderByList,\n defaultOrder.order_by,\n {\n defaultSort: defaultOrder.order,\n }\n )\n Object.keys(newQuery)\n .filter((k) => workoutsPayloadKeys.includes(k))\n .map((k) => {\n if (typeof newQuery[k] === 'string') {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n workoutQuery[k] = newQuery[k]\n }\n })\n return workoutQuery\n }\n\n function getConvertedPayload(payload: TWorkoutsPayload): TWorkoutsPayload {\n const convertedPayload: TWorkoutsPayload = {\n ...payload,\n }\n Object.entries(convertedPayload).map((entry) => {\n if (entry[0].match('speed|distance') && entry[1]) {\n convertedPayload[entry[0]] = convertDistance(+entry[1], 'mi', 'km')\n }\n })\n return convertedPayload\n }\n\n function onHover(workoutId: string | null) {\n hoverWorkoutId.value = workoutId\n }\n\n watch(\n () => route.query,\n async (newQuery) => {\n query = getWorkoutsQuery(newQuery)\n loadWorkouts(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"box\", { 'empty-table': _unref(workouts).length === 0 }])\n }, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('common.TOTAL').toLowerCase()) + \": \", 1),\n (_unref(pagination).total !== null)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, _toDisplayString(_unref(pagination).total) + \" \" + _toDisplayString(_ctx.$t('workouts.WORKOUT', _unref(pagination).total)), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(FilterSelects, {\n sort: _unref(sortList),\n order_by: orderByList,\n query: _unref(query),\n message: \"workouts\",\n onUpdateSelect: reloadWorkouts\n }, null, 8, [\"sort\", \"query\"]),\n (_unref(workouts).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createVNode(Pagination, {\n class: \"top-pagination\",\n pagination: _unref(pagination),\n path: \"/workouts\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]),\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", {\n class: _normalizeClass({ smaller: 'de' === _unref(currentLanguage) })\n }, [\n _createElementVNode(\"tr\", null, [\n _hoisted_6,\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 1))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DATE'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DISTANCE'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DURATION'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.AVE_SPEED'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.MAX_SPEED'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.ASCENT'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DESCENT'))), 1)\n ])\n ], 2),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: workout.id\n }, [\n _createElementVNode(\"td\", _hoisted_7, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('workouts.SPORT', 1)), 1),\n (_unref(sports).length > 0)\n ? (_openBlock(), _createBlock(_component_SportImage, {\n key: 0,\n title: \n _unref(sports).find((s) => s.id === workout.sport_id)\n .translatedLabel\n ,\n \"sport-label\": _unref(getSportLabel)(workout, _unref(sports)),\n color: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"title\", \"sport-label\", \"color\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"td\", {\n class: \"workout-title\",\n onMouseover: ($event: any) => (onHover(workout.id)),\n onMouseleave: _cache[0] || (_cache[0] = ($event: any) => (onHover(null)))\n }, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 1))), 1),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: { name: 'Workout', params: { workoutId: workout.id } }\n }, {\n default: _withCtx(() => [\n (workout.with_gpx)\n ? (_openBlock(), _createElementBlock(\"i\", _hoisted_11))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(workout.title), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n (workout.with_gpx && hoverWorkoutId.value === workout.id)\n ? (_openBlock(), _createBlock(StaticMap, {\n key: 0,\n workout: workout,\n \"display-hover\": true\n }, null, 8, [\"workout\"]))\n : _createCommentVNode(\"\", true)\n ], 40, _hoisted_9),\n _createElementVNode(\"td\", _hoisted_13, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('workouts.DATE')), 1),\n _createTextVNode(\" \" + _toDisplayString(_unref(formatDate)(\n workout.workout_date,\n _unref(user).timezone,\n _unref(user).date_format\n )), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_15, [\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1),\n _createVNode(_component_Distance, {\n distance: workout.distance,\n unitFrom: \"km\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_17, [\n _createElementVNode(\"span\", _hoisted_18, _toDisplayString(_ctx.$t('workouts.DURATION')), 1),\n _createTextVNode(\" \" + _toDisplayString(workout.moving), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_19, [\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('workouts.AVE_SPEED')), 1),\n _createVNode(_component_Distance, {\n distance: workout.ave_speed,\n unitFrom: \"km\",\n speed: true,\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_21, [\n _createElementVNode(\"span\", _hoisted_22, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')), 1),\n _createVNode(_component_Distance, {\n distance: workout.max_speed,\n unitFrom: \"km\",\n speed: true,\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_23, [\n _createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('workouts.ASCENT')), 1),\n (workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: workout.ascent,\n unitFrom: \"m\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"td\", _hoisted_25, [\n _createElementVNode(\"span\", _hoisted_26, _toDisplayString(_ctx.$t('workouts.DESCENT')), 1),\n (workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: workout.descent,\n unitFrom: \"m\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n }), 128))\n ])\n ]),\n _createVNode(Pagination, {\n pagination: _unref(pagination),\n path: \"/workouts\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"])\n ]))\n : _createCommentVNode(\"\", true)\n ], 2),\n (_unref(workouts).length === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true),\n _hoisted_27\n ]))\n}\n}\n\n})","import script from \"./WorkoutsList.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsList.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsList.vue?vue&type=style&index=0&id=0f8ea7b0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0f8ea7b0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-77e54012\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"workouts\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container workouts-container\" }\nconst _hoisted_3 = { class: \"display-filters\" }\nconst _hoisted_4 = { class: \"list-container\" }\n\nimport { ComputedRef, computed, 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 { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsView',\n setup(__props) {\n\n const { t } = useI18n()\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(sports.value, t)\n )\n const hiddenFilters = ref(true)\n\n function toggleFilters() {\n hiddenFilters.value = !hiddenFilters.value\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"filters-container\", { hidden: hiddenFilters.value }])\n }, [\n _createVNode(WorkoutsFilters, {\n sports: _unref(translatedSports),\n authUser: _unref(authUser),\n onFilter: toggleFilters\n }, null, 8, [\"sports\", \"authUser\"])\n ], 2),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", { onClick: toggleFilters }, [\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa-caret-${hiddenFilters.value ? 'down' : 'up'}`),\n \"aria-hidden\": \"true\"\n }, null, 2),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`workouts.${hiddenFilters.value ? 'DISPLAY' : 'HIDE'}_FILTERS`)), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(WorkoutsList, {\n user: _unref(authUser),\n sports: _unref(translatedSports)\n }, null, 8, [\"user\", \"sports\"])\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutsView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsView.vue?vue&type=style&index=0&id=77e54012&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-77e54012\"]])\n\nexport default __exports__"],"names":["_hoisted_1","id","_hoisted_2","_hoisted_3","class","_hoisted_4","key","_hoisted_5","_hoisted_6","for","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_defineComponent","__name","props","authUser","sports","isCreation","type","Boolean","default","loading","workout","setup","__props","t","useI18n","store","useStore","router","useRouter","toRefs","translatedSports","computed","translateSports","value","sport_id","appConfig","getters","ROOT_STORE","fileSizeLimit","max_single_file_size","getReadableFileSize","gpx_limit_import","zipSizeLimit","max_zip_file_size","errorMessages","workoutForm","reactive","title","notes","workoutDate","workoutTime","workoutDurationHour","workoutDurationMinutes","workoutDurationSeconds","workoutDistance","withGpx","ref","with_gpx","gpxFile","formErrors","updateNotes","updateWithGpx","updateFile","event","target","files","formatWorkoutForm","workoutDateTime","formatWorkoutDate","getDateWithTZ","workout_date","timezone","duration","split","imperial_units","convertDistance","distance","parseFloat","toFixed","workout_time","formatPayload","payload","updateWorkout","dispatch","WORKOUTS_STORE","workoutId","data","errorMessage","commit","file","onCancel","push","name","params","go","invalidateForm","onMounted","onUnmounted","watch","async","newWorkout","previousWorkout","_ctx","_cache","_component_CustomTextArea","_resolveComponent","_component_ErrorMessage","_component_Loader","_component_Card","_openBlock","_createElementBlock","_normalizeClass","_unref","_createVNode","_withCtx","_createTextVNode","_toDisplayString","$t","content","_createElementVNode","errors","onSubmit","_withModifiers","checked","disabled","onClick","_createCommentVNode","_withDirectives","required","onInvalid","$event","_Fragment","_renderList","sport","translatedLabel","_vModelSelect","accept","onInput","_vModelText","placeholder","minlength","maxlength","pattern","min","step","input","onUpdateValue","_createBlock","message","_","__exports__","SPORTS_STORE","AUTH_USER_STORE","workoutData","WorkoutEdition","route","useRoute","onBeforeMount","newWorkoutId","_withScopeId","n","_pushScopeId","_popScopeId","workoutObject","emits","emit","downloadGpx","authApi","responseType","then","response","gpxFileUrl","window","URL","createObjectURL","Blob","gpxLink","document","createElement","href","setAttribute","body","appendChild","click","_component_SportImage","_component_router_link","inactive","previousUrl","$router","label","color","segmentId","to","nextUrl","recordType","records","find","record","record_type","directions","convertDegreeToDirection","angle","Math","floor","weather","useImperialUnits","getWindDirectionTitle","windBearing","_component_Distance","wind","unitFrom","digits","displayUnit","style","_normalizeStyle","transform","weatherStart","weatherEnd","src","icon","alt","Number","temperature","humidity","WeatherWind","displayHARecord","withPause","pauses","moving","WorkoutRecord","strong","aveSpeed","speed","maxSpeed","maxAlt","minAlt","ascent","descent","WorkoutWeather","$","element","tagName","Array","from","getElementsByTagName","nodeVal","node","normalize","textContent","get1","callback","result","length","get","properties","val1","val","$num","isNaN","num1","getMulti","propertyNames","property","isElement","nodeType","getLineStyle","lineStyle","Object","assign","stroke","opacity","width","getExtensions","values","child","childNodes","abbreviateName","nodeName","concat","parseNumeric","includes","num","coordPair$1","ll","getAttribute","time","coordinates","extendedValues","extractProperties","extensions","getElementsByTagNameNS","parentNode","replace","links","map","link","getPoints$1","pointname","pts","line","times","i","c","plural","fill","getRoute","_gpxType","geometry","getTrack","segments","track","extractedLines","segment","multi","coordinateProperties","entries","getPoint","pair","gpxGen","feature","waypoint","point","gpx","features","PI","debounce","fn","timeout","args","context","this","clearTimeout","setTimeout","apply","capitalizeFirstLetter","string","charAt","toUpperCase","slice","propsBinder","methods","leafletElement","setMethodName","newVal","oldVal","remapEvents","contextAttrs","attrName","startsWith","eventName","toLocaleLowerCase","resetWebpackIcon","Icon","modules","Promise","all","Default","prototype","_getIconUrl","mergeOptions","iconRetinaUrl","iconUrl","shadowUrl","provideLeafletWrapper","methodName","wrapped","console","warn","wrapper","updateLeafletWrapper","leafletMethod","WINDOW_OR_GLOBAL","self","g","global","undefined","GLOBAL_LEAFLET_OPT","options","props$1","pane","String","attribution","custom","layerType","visible","setup$1","leafletRef","addLayer","removeLayer","componentOptions","componentMethods","addThisLayer","leafletObject","removeThisLayer","setAttribution","old","attributionControl","$parent","removeAttribution","addAttribution","setName","setLayerType","setVisible","isVisible","bindPopup","bindTooltip","unbindTooltip","tooltip","getTooltip","unbindPopup","popup","getPopup","updateVisibleProp","render","ready","slots","h","display","props$2","interactive","bubblingMouseEvents","props$3","weight","lineCap","lineJoin","dashArray","dashOffset","fillColor","fillOpacity","fillRule","className","props$4","latLng","radius","props$6","position","setup$6","setPosition","remove","render$1","script$2","disableClickPropagation","disableScrollPropagation","root","useGlobalLeaflet","registerControl","Control","DomEvent","L","LControl","extend","onAdd","$slots","props$8","collapsed","autoZIndex","hideSingleBase","sortLayers","sortFunction","Function","setup$8","controlOptions","layer","addBaseLayer","addOverlay","script$4","registerLayerControl","control","layers","props$b","setup$b","layerOptions","layerMethods","props$d","geojson","setup$d","layerGroupMethods","setGeojson","clearLayers","addData","getGeoJSONData","toGeoJSON","getBounds","script$8","geoJSON","listeners","attrs","on","props$e","zIndex","tileSize","noWrap","minZoom","maxZoom","setup$e","props$f","iconSize","iconAnchor","popupAnchor","tooltipAnchor","shadowRetinaUrl","shadowSize","shadowAnchor","bgPos","script$a","canSetParentHtml","setParentHtml","setIcon","onDomEvent","offDomEvent","divIcon","iconObject","createIcon","el","recreationNeeded","htmlSwapNeeded","elHtml","innerHTML","html","scheduleCreateIcon","scheduleHtmlSwap","setIconUrl","setIconRetinaUrl","setIconSize","setIconAnchor","setPopupAnchor","setTooltipAnchor","setShadowUrl","setShadowRetinaUrl","setShadowAnchor","setBgPos","setClassName","setHtml","lDivIcon","lIcon","off","observer","MutationObserver","observe","attributes","childList","characterData","subtree","script$c","layerGroup","script$d","center","bounds","maxBounds","zoom","paddingBottomRight","paddingTopLeft","padding","worldCopyJump","crs","maxBoundsViscosity","inertia","inertiaDeceleration","inertiaMaxSpeed","easeLinearity","zoomAnimation","zoomAnimationThreshold","fadeAnimation","markerZoomAnimation","noBlockingAnimations","blueprint","layersToAdd","layersInControl","eventHandlers","moveEndHandler","getZoom","getCenter","overlayAddHandler","e","l","overlayRemoveHandler","CRS","latLngBounds","beforeMapMount","error","optionsCrs","EPSG3857","layerControl","exist","_leaflet_id","filter","lControlLayer","forEach","lControl","addControl","setZoom","animate","setPaddingBottomRight","setPaddingTopLeft","setPadding","setCrs","prevBounds","fitBounds","setBounds","newBounds","isValid","oldBounds","lastSetBounds","boundsChanged","equals","fitBoundsOptions","setCenter","newCenter","oldCenter","lastSetCenter","lat","lng","panTo","height","props$h","draggable","zIndexOffset","setup$g","setDraggable","dragging","enable","disable","latLngSync","latlng","setLatLng","oldLatLng","getLatLng","script$e","getElement","newIcon","marker","props$i","latLngs","smoothFactor","noClip","props$j","props$k","props$n","tms","subdomains","detectRetina","url","setup$m","gridLayerOptions","gridLayerMethods","script$j","tileLayer","markerCoordinates","isStart","latitude","LMarker","longitude","LIcon","workoutMap","geoJson","getGeoJson","startMarkerCoordinates","chartData","endMarkerCoordinates","isFullscreen","gpxContent","jsonData","DOMParser","parseFromString","resetZoom","toggleFullscreen","_component_VFullscreen","modelValue","LMap","ref_key","onReady","LControlLayers","LTileLayer","getApiUrl","map_attribution","LGeoJson","LLayerGroup","CustomMarker","displaySegment","displayModal","getWorkoutObject","getWorkoutObjectUrl","previous_workout","next_workout","urls","date_format","ave_speed","max_alt","max_speed","min_alt","segment_id","weather_end","weather_start","updateDisplayModal","deleteWorkout","newSegmentId","_component_Modal","onConfirmAction","onCancelAction","WorkoutCardTitle","onDisplayModal","WorkoutMap","WorkoutData","display_ascent","getOrCreateLegendList","legendContainer","getElementById","listContainer","querySelector","Error","htmlLegendPlugin","afterUpdate","chart","ul","containerID","firstChild","legendItems","plugins","legend","labels","generateLabels","item","li","onclick","datasetIndex","setDatasetVisibility","isDatasetVisible","update","checkBox","text","hidden","createTextNode","boxSpan","background","fillStyle","borderColor","strokeStyle","displayDistance","beginElevationAtZero","datasets","getDatasets","fromKmUnit","getUnitTo","fromMUnit","distance_labels","duration_labels","JSON","parse","stringify","elevation","responsive","maintainAspectRatio","animation","layout","top","scales","grid","drawOnChartArea","ticks","count","formatDuration","ySpeed","yElevation","beginAtZero","elements","pointStyle","pointRadius","datalabels","interaction","intersect","mode","callbacks","dataset","formattedValue","yAxisID","tooltipItems","emitCoordinates","dataIndex","htmlLegend","lineChartProps","useLineChart","updateDisplayDistance","Date","toISOString","substr","emitEmptyCoordinates","units","defaultTarget","LineChart","_mergeProps","onMouseleave","index","workout_id","updateCoordinates","WorkoutDetail","WorkoutChart","onGetCoordinates","WorkoutSegments","WorkoutNotes","NotFound","toUnit","query","handleFilterChange","onFilter","path","onClearFilter","newQuery","$route","onChange","s","sports_list","distance_from","distance_to","duration_from","duration_to","ave_speed_from","ave_speed_to","max_speed_from","max_speed_to","user","orderByList","workouts","pagination","currentLanguage","getWorkoutsQuery","hoverWorkoutId","loadWorkouts","getConvertedPayload","reloadWorkouts","queryParam","queryValue","workoutQuery","getQuery","defaultOrder","defaultSort","keys","k","workoutsPayloadKeys","convertedPayload","entry","match","onHover","toLowerCase","total","FilterSelects","sort","sortList","order_by","onUpdateSelect","Pagination","smaller","capitalize","getSportLabel","getSportColor","onMouseover","StaticMap","formatDate","NoWorkouts","hiddenFilters","toggleFilters","username","WorkoutsFilters","WorkoutsList"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/workouts.f1d6cc45.js","mappings":"oSAGA,MACMA,EAAa,CAAEC,GAAI,gBACnBC,EAAa,CAAC,YACdC,EAAa,CAAEC,MAAO,cACtBC,EAAa,CACjBC,IAAK,EACLF,MAAO,mBAEHG,EAAa,CAAC,UAAW,YACzBC,EAAa,CAAEC,IAAK,WACpBC,EAAa,CAAC,UAAW,YACzBC,EAAa,CAAEF,IAAK,cACpBG,EAAa,CAAER,MAAO,aACtBS,EAAc,CAAC,YACfC,EAAc,CAAC,SACfC,EAAc,CAClBT,IAAK,EACLF,MAAO,aAEHY,EAAc,CAAEP,IAAK,WACrBQ,EAAc,CAAC,YACfC,EAAc,CAAEd,MAAO,uBACvBe,EAAc,CAClBb,IAAK,EACLF,MAAO,aAEHgB,EAAc,CAAEX,IAAK,SACrBY,EAAc,CAAC,WAAY,YAC3BC,EAAc,CAAEhB,IAAK,GACrBiB,EAAc,CAAEnB,MAAO,yBACvBoB,EAAc,CAAEpB,MAAO,aACvBqB,EAAc,CAAErB,MAAO,qBACvBsB,EAAc,CAAC,YACfC,EAAc,CAAC,YACfC,EAAc,CAAExB,MAAO,aACvByB,EAAc,CAAC,YACfC,EAAc,CAAC,YACfC,EAAc,CAAC,YACfC,EAAc,CAAE5B,MAAO,aACvB6B,EAAc,CAAC,YACfC,EAAc,CAAE9B,MAAO,aACvB+B,EAAc,CAAE7B,IAAK,GACrB8B,EAAc,CAClB9B,IAAK,EACLF,MAAO,gBAEHiC,EAAc,CAAC,YACfC,EAAc,CAAC,WAmCrB,OAA4BC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,iBACRC,MAAO,CACLC,SAAU,KACVC,OAAQ,KACRC,WAAY,CAAEC,KAAMC,QAASC,SAAS,GACtCC,QAAS,CAAEH,KAAMC,QAASC,SAAS,GACnCE,QAAS,CAAEF,QAAS,KAAM,CAAgB,KAE5CG,MAAMC,GAER,MAAMV,EAAQU,GAIN,EAAEC,IAAMC,EAAAA,EAAAA,MACRC,GAAQC,EAAAA,EAAAA,KACRC,GAASC,EAAAA,EAAAA,OAET,SAAEf,EAAQ,QAAEO,EAAO,WAAEL,GAAU,QAAEI,KAAYU,EAAAA,EAAAA,IAAOjB,GACpDkB,IAA0CC,EAAAA,EAAAA,KAAS,KACvDC,EAAAA,EAAAA,IACEpB,EAAME,OACNS,EACA,qBACAH,EAAQa,MAAM7D,GAAK,CAACgD,EAAQa,MAAMC,UAAY,MAG5CC,IAAqCJ,EAAAA,EAAAA,KACzC,IAAMN,EAAMW,QAAQC,EAAAA,GAAAA,QAAAA,cAEhBC,GAAgBH,GAAUF,MAAMM,sBAClCC,EAAAA,EAAAA,GAAoBL,GAAUF,MAAMM,sBACpC,GACEE,GAAmBN,GAAUF,MAAMQ,iBACnCC,GAAeP,GAAUF,MAAMU,mBACjCH,EAAAA,EAAAA,GAAoBL,GAAUF,MAAMU,mBACpC,GACEC,IAAuDb,EAAAA,EAAAA,KAC3D,IAAMN,EAAMW,QAAQC,EAAAA,GAAAA,QAAAA,kBAEhBQ,IAAcC,EAAAA,EAAAA,IAAS,CAC3BZ,SAAU,GACVa,MAAO,GACPC,MAAO,GACPC,YAAa,GACbC,YAAa,GACbC,oBAAqB,GACrBC,uBAAwB,GACxBC,uBAAwB,GACxBC,gBAAiB,KAEbC,IAAUC,EAAAA,EAAAA,IACd5C,EAAMQ,QAAQhD,GAAKwC,EAAMQ,QAAQqC,SAAW7C,EAAMG,YAEpD,IAAI2C,GAAuB,KAC3B,MAAMC,IAAaH,EAAAA,EAAAA,KAAI,GAQvB,SAASI,GAAY3B,GACnBY,GAAYG,MAAQf,CACtB,CACA,SAAS4B,KACPN,GAAQtB,OAASsB,GAAQtB,MACzB0B,GAAW1B,OAAQ,CACrB,CACA,SAAS6B,GAAWC,GACdA,EAAMC,OAAOC,QACfP,GAAUK,EAAMC,OAAOC,MAAM,GAEjC,CACA,SAASC,GAAkB9C,GAIzB,GAHAyB,GAAYX,SAAW,GAAGd,EAAQc,WAClCW,GAAYE,MAAQ3B,EAAQ2B,MAC5BF,GAAYG,MAAQ5B,EAAQ4B,OACvB5B,EAAQqC,SAAU,CACrB,MAAMU,GAAkBC,EAAAA,EAAAA,KACtBC,EAAAA,EAAAA,IAAcjD,EAAQkD,aAAc1D,EAAMC,SAAS0D,UACnD,cAEIC,EAAWpD,EAAQoD,SAASC,MAAM,KACxC5B,GAAYS,gBAAkB,GAC5BzC,EAASoB,MAAMyC,gBACXC,EAAAA,EAAAA,IAAgBvD,EAAQwD,SAAU,KAAM,KAAM,GAC9CC,WAAWzD,EAAQwD,SAASE,QAAQ,MAE1CjC,GAAYI,YAAckB,EAAgBG,aAC1CzB,GAAYK,YAAciB,EAAgBY,aAC1ClC,GAAYM,oBAAsBqB,EAAS,GAC3C3B,GAAYO,uBAAyBoB,EAAS,GAC9C3B,GAAYQ,uBAAyBmB,EAAS,E,CAElD,CACA,SAASQ,GAAcC,GACrBA,EAAQlC,MAAQF,GAAYE,MAC5BkC,EAAQL,SAAW/D,EAASoB,MAAMyC,gBAC9BC,EAAAA,EAAAA,KAAiB9B,GAAYS,gBAAiB,KAAM,KAAM,IACzDT,GAAYS,gBACjB2B,EAAQT,SAC6B,MAAlC3B,GAAYM,oBACyB,IAArCN,GAAYO,yBACZP,GAAYQ,uBACf4B,EAAQX,aAAe,GAAGzB,GAAYI,eAAeJ,GAAYK,aACnE,CACA,SAASgC,KACP,MAAMD,EAAwB,CAC5B/C,UAAWW,GAAYX,SACvBc,MAAOH,GAAYG,OAErB,GAAIpC,EAAMQ,QAAQhD,GACZwC,EAAMQ,QAAQqC,SAChBwB,EAAQlC,MAAQF,GAAYE,MAE5BiC,GAAcC,GAEhBxD,EAAM0D,SAASC,EAAAA,GAAAA,QAAAA,aAAqC,CAClDC,UAAWzE,EAAMQ,QAAQhD,GACzBkH,KAAML,SAGR,GAAI1B,GAAQtB,MAAO,CACjB,IAAKyB,GAAS,CACZ,MAAM6B,EAAe,4BAErB,YADA9D,EAAM+D,OAAOnD,EAAAA,GAAAA,UAAAA,mBAAyCkD,E,CAGxDN,EAAQQ,KAAO/B,GACfjC,EAAM0D,SAASC,EAAAA,GAAAA,QAAAA,YAAoCH,E,MAEnDD,GAAcC,GACdxD,EAAM0D,SAASC,EAAAA,GAAAA,QAAAA,wBAAgDH,EAGrE,CACA,SAASS,KACH9E,EAAMQ,QAAQhD,GAChBuD,EAAOgE,KAAK,CACVC,KAAM,UACNC,OAAQ,CAAER,UAAWzE,EAAMQ,QAAQhD,MAGrCuD,EAAOmE,IAAI,EAEf,CACA,SAASC,KACPpC,GAAW1B,OAAQ,CACrB,CAgBF,OA7GE+D,EAAAA,EAAAA,KAAU,KACJpF,EAAMQ,QAAQhD,IAChB8F,GAAkBtD,EAAMQ,Q,KA6F5B6E,EAAAA,EAAAA,KAAY,IAAMxE,EAAM+D,OAAOnD,EAAAA,GAAAA,UAAAA,yBAE/B6D,EAAAA,EAAAA,KACE,IAAMtF,EAAMQ,UACZ+E,MACEC,EACAC,KAEID,IAAeC,GAAmBD,GAAcA,EAAWhI,IAC7D8F,GAAkBkC,E,IAKnB,CAACE,EAAUC,KAChB,MAAMC,GAA4BC,EAAAA,EAAAA,IAAkB,kBAC9CC,GAA0BD,EAAAA,EAAAA,IAAkB,gBAC5CE,GAAoBF,EAAAA,EAAAA,IAAkB,UACtCG,GAAkBH,EAAAA,EAAAA,IAAkB,QAE1C,OAAQI,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO,CAC/C1I,GAAI,kBACJG,OAAOwI,EAAAA,EAAAA,IAAgB,CAAC,0BAA2B,CAAE,eAAeC,EAAAA,EAAAA,IAAO5F,KAAY4F,EAAAA,EAAAA,IAAO5F,GAASqC,aACtG,EACDwD,EAAAA,EAAAA,IAAaL,EAAiB,KAAM,CAClC7D,OAAOmE,EAAAA,EAAAA,KAAS,IAAM,EACpBC,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,aAAYL,EAAAA,EAAAA,IAAOjG,IAAc,MAAQ,mBAAoB,MAEzGuG,SAASJ,EAAAA,EAAAA,KAAS,IAAM,EACtBK,EAAAA,EAAAA,GAAoB,MAAOpJ,EAAY,EACrCoJ,EAAAA,EAAAA,GAAoB,OAAQ,CAC1BhJ,OAAOwI,EAAAA,EAAAA,IAAgB,CAAES,OAAQ7D,GAAW1B,QAC5CwF,UAAUC,EAAAA,EAAAA,IAAexC,GAAe,CAAC,aACxC,EACDqC,EAAAA,EAAAA,GAAoB,MAAOjJ,EAAY,EACpC0I,EAAAA,EAAAA,IAAOjG,MACH8F,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOtI,EAAY,EACpD+I,EAAAA,EAAAA,GAAoB,MAAO,KAAM,EAC/BA,EAAAA,EAAAA,GAAoB,QAAS,CAC3BnJ,GAAI,UACJ4C,KAAM,QACN2G,QAASpE,GAAQtB,MACjB2F,UAAUZ,EAAAA,EAAAA,IAAO7F,IACjB0G,QAAShE,IACR,KAAM,EAAGnF,IACZ6I,EAAAA,EAAAA,GAAoB,QAAS5I,GAAYyI,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAuB,MAE3FE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,EAC/BA,EAAAA,EAAAA,GAAoB,QAAS,CAC3BnJ,GAAI,aACJ4C,KAAM,QACN2G,SAAUpE,GAAQtB,MAClB2F,UAAUZ,EAAAA,EAAAA,IAAO7F,IACjB0G,QAAShE,IACR,KAAM,EAAGhF,IACZ0I,EAAAA,EAAAA,GAAoB,QAASzI,GAAYsI,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,yBAA0B,SAGhGS,EAAAA,EAAAA,IAAoB,IAAI,IAC5BP,EAAAA,EAAAA,GAAoB,MAAOxI,EAAY,EACrCwI,EAAAA,EAAAA,GAAoB,QAAS,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,iBAAkB,IAAM,KAAM,IAC1FU,EAAAA,EAAAA,KAAgBR,EAAAA,EAAAA,GAAoB,SAAU,CAC5CnJ,GAAI,QACJ4J,SAAU,GACVC,UAAWlC,GACX6B,UAAUZ,EAAAA,EAAAA,IAAO7F,IACjB,sBAAuBoF,EAAO,KAAOA,EAAO,GAAM2B,GAAkBrF,GAAYX,SAAYgG,IAC3F,GACArB,EAAAA,EAAAA,KAAW,IAAOC,EAAAA,EAAAA,IAAoBqB,EAAAA,GAAW,MAAMC,EAAAA,EAAAA,KAAYpB,EAAAA,EAAAA,IAAOlF,KAAoBuG,KACrFxB,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,SAAU,CAClD7E,MAAOoG,EAAMjK,GACbK,IAAK4J,EAAMjK,KACVgJ,EAAAA,EAAAA,IAAiBiB,EAAMC,iBAAkB,EAAGrJ,MAC7C,OACH,GAAID,GAAc,CACnB,CAACuJ,EAAAA,GAAe1F,GAAYX,eAG/B8E,EAAAA,EAAAA,IAAOjG,KAAewC,GAAQtB,QAC1B4E,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO5H,EAAa,EACrDqI,EAAAA,EAAAA,GAAoB,QAASpI,GAAaiI,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAwB,KAAMD,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,qCAAuC,KAAM,IACvKE,EAAAA,EAAAA,GAAoB,QAAS,CAC3BnJ,GAAI,UACJwH,KAAM,UACN5E,KAAM,OACNwH,OAAQ,aACRZ,UAAUZ,EAAAA,EAAAA,IAAO7F,IACjB6G,SAAU,GACVC,UAAWlC,GACX0C,QAAS3E,IACR,KAAM,GAAI1E,IACbmI,EAAAA,EAAAA,GAAoB,MAAOlI,EAAa,EACtCkI,EAAAA,EAAAA,GAAoB,MAAO,KAAM,EAC/BA,EAAAA,EAAAA,GAAoB,SAAU,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAwB,IAAK,IAC1FE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAwB,MAAOD,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAO1E,KAAiB,QAGrIiF,EAAAA,EAAAA,GAAoB,MAAO,KAAM,EAC/BA,EAAAA,EAAAA,GAAoB,SAAU,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,yBAA2B,IAAK,IAC7FE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,uBAAwB,IACjFE,EAAAA,EAAAA,GAAoB,KAAM,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,uBAAyB,MAAOD,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAOvE,KAAoB,IACrI8E,EAAAA,EAAAA,GAAoB,KAAM,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAwB,MAAOD,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAOtE,KAAgB,cAKvImE,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOxH,EAAa,EACrDiI,EAAAA,EAAAA,GAAoB,QAAShI,GAAa6H,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,mBAAqB,KAAM,IAC9FU,EAAAA,EAAAA,KAAgBR,EAAAA,EAAAA,GAAoB,QAAS,CAC3CnJ,GAAI,QACJwH,KAAM,QACN5E,KAAM,OACNgH,WAAWhB,EAAAA,EAAAA,IAAOjG,IAClBkH,UAAWlC,GACX6B,UAAUZ,EAAAA,EAAAA,IAAO7F,IACjB,sBAAuBoF,EAAO,KAAOA,EAAO,GAAM2B,GAAkBrF,GAAYE,MAASmF,IACxF,KAAM,GAAI1I,GAAc,CACzB,CAACkJ,EAAAA,GAAa7F,GAAYE,YAGhCQ,GAAQtB,OAuGN6F,EAAAA,EAAAA,IAAoB,IAAI,KAtGvBjB,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOrH,EAAa,EACrD8H,EAAAA,EAAAA,GAAoB,MAAO7H,EAAa,EACtC6H,EAAAA,EAAAA,GAAoB,MAAO5H,EAAa,EACtC4H,EAAAA,EAAAA,GAAoB,QAAS,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,0BAA4B,IAAK,IAC7FE,EAAAA,EAAAA,GAAoB,MAAO3H,EAAa,EACtCmI,EAAAA,EAAAA,KAAgBR,EAAAA,EAAAA,GAAoB,QAAS,CAC3CnJ,GAAI,eACJwH,KAAM,eACN5E,KAAM,OACNgH,SAAU,GACVC,UAAWlC,GACX6B,UAAUZ,EAAAA,EAAAA,IAAO7F,IACjB,sBAAuBoF,EAAO,KAAOA,EAAO,GAAM2B,GAAkBrF,GAAYI,YAAeiF,IAC9F,KAAM,GAAIrI,GAAc,CACzB,CAAC6I,EAAAA,GAAa7F,GAAYI,gBAE5B8E,EAAAA,EAAAA,KAAgBR,EAAAA,EAAAA,GAAoB,QAAS,CAC3CnJ,GAAI,eACJwH,KAAM,eACNrH,MAAO,eACPyC,KAAM,OACNgH,SAAU,GACVC,UAAWlC,GACX6B,UAAUZ,EAAAA,EAAAA,IAAO7F,IACjB,sBAAuBoF,EAAO,KAAOA,EAAO,GAAM2B,GAAkBrF,GAAYK,YAAegF,IAC9F,KAAM,GAAIpI,GAAc,CACzB,CAAC4I,EAAAA,GAAa7F,GAAYK,oBAIhCqE,EAAAA,EAAAA,GAAoB,MAAOxH,EAAa,EACtCwH,EAAAA,EAAAA,GAAoB,QAAS,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAwB,IAAK,IACzFE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,EAC/BQ,EAAAA,EAAAA,KAAgBR,EAAAA,EAAAA,GAAoB,QAAS,CAC3CnJ,GAAI,wBACJwH,KAAM,wBACNrH,MAAO,mBACPyC,KAAM,OACN2H,YAAa,KACbC,UAAW,IACXC,UAAW,IACXC,QAAS,yBACTd,SAAU,GACVC,UAAWlC,GACX6B,UAAUZ,EAAAA,EAAAA,IAAO7F,IACjB,sBAAuBoF,EAAO,KAAOA,EAAO,GAAM2B,GAAkBrF,GAAYM,oBAAuB+E,IACtG,KAAM,GAAIlI,GAAc,CACzB,CAAC0I,EAAAA,GAAa7F,GAAYM,wBAE5BgE,EAAAA,EAAAA,IAAiB,QACjBY,EAAAA,EAAAA,KAAgBR,EAAAA,EAAAA,GAAoB,QAAS,CAC3CnJ,GAAI,2BACJwH,KAAM,2BACNrH,MAAO,mBACPyC,KAAM,OACN8H,QAAS,iBACTF,UAAW,IACXC,UAAW,IACXF,YAAa,KACbX,SAAU,GACVC,UAAWlC,GACX6B,UAAUZ,EAAAA,EAAAA,IAAO7F,IACjB,sBAAuBoF,EAAO,KAAOA,EAAO,GAAM2B,GAAkBrF,GAAYO,uBAA0B8E,IACzG,KAAM,GAAIjI,GAAc,CACzB,CAACyI,EAAAA,GAAa7F,GAAYO,2BAE5B+D,EAAAA,EAAAA,IAAiB,QACjBY,EAAAA,EAAAA,KAAgBR,EAAAA,EAAAA,GAAoB,QAAS,CAC3CnJ,GAAI,2BACJwH,KAAM,2BACNrH,MAAO,mBACPyC,KAAM,OACN8H,QAAS,iBACTF,UAAW,IACXC,UAAW,IACXF,YAAa,KACbX,SAAU,GACVC,UAAWlC,GACX6B,UAAUZ,EAAAA,EAAAA,IAAO7F,IACjB,sBAAuBoF,EAAO,KAAOA,EAAO,GAAM2B,GAAkBrF,GAAYQ,uBAA0B6E,IACzG,KAAM,GAAIhI,GAAc,CACzB,CAACwI,EAAAA,GAAa7F,GAAYQ,iCAKlCkE,EAAAA,EAAAA,GAAoB,MAAOpH,EAAa,EACtCoH,EAAAA,EAAAA,GAAoB,QAAS,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAwB,MAAOD,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAOnG,GAAU6D,eAAiB,KAAO,MAAQ,MAAO,IACpKqD,EAAAA,EAAAA,KAAgBR,EAAAA,EAAAA,GAAoB,QAAS,CAC3C3B,KAAM,mBACN5E,KAAM,SACN+H,IAAK,IACLC,KAAM,QACNhB,SAAU,GACVC,UAAWlC,GACX6B,UAAUZ,EAAAA,EAAAA,IAAO7F,IACjB,sBAAuBoF,EAAO,KAAOA,EAAO,GAAM2B,GAAkBrF,GAAYS,gBAAmB4E,IAClG,KAAM,GAAI9H,GAAc,CACzB,CAACsI,EAAAA,GAAa7F,GAAYS,yBAKpCiE,EAAAA,EAAAA,GAAoB,MAAOlH,EAAa,EACtCkH,EAAAA,EAAAA,GAAoB,QAAS,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,mBAAqB,KAAM,IACvFJ,EAAAA,EAAAA,IAAaT,EAA2B,CACtCZ,KAAM,QACNqD,MAAOpG,GAAYG,MACnB4E,UAAUZ,EAAAA,EAAAA,IAAO7F,IACjB+H,cAAetF,IACd,KAAM,EAAG,CAAC,QAAS,kBAGzBoD,EAAAA,EAAAA,IAAOpE,MACHiE,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAazC,EAAyB,CACnDjI,IAAK,EACL2K,SAASpC,EAAAA,EAAAA,IAAOpE,KACf,KAAM,EAAG,CAAC,cACbkF,EAAAA,EAAAA,IAAoB,IAAI,IAC3Bd,EAAAA,EAAAA,IAAO7F,MACH0F,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOxG,EAAa,EACrD2G,EAAAA,EAAAA,IAAaN,QAEdE,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOvG,EAAa,EACrDgH,EAAAA,EAAAA,GAAoB,SAAU,CAC5BhJ,MAAO,UACPyC,KAAM,SACN4G,UAAUZ,EAAAA,EAAAA,IAAO7F,MAChBiG,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,mBAAoB,EAAG7G,IACnD+G,EAAAA,EAAAA,GAAoB,SAAU,CAC5BhJ,MAAO,SACPsJ,SAASH,EAAAA,EAAAA,IAAehC,GAAU,CAAC,cAClC0B,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,mBAAoB,EAAG5G,OAExD,GAAIpC,QAGXgL,EAAG,KAEJ,EAAE,CAEP,I,UChfA,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,O,0HCLA,MAAMnL,EAAa,CACjBC,GAAI,cACJG,MAAO,QAEHF,EAAa,CAAEE,MAAO,aAgB5B,OAA4BmC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,aACRU,MAAMC,GAEN,MAAMG,GAAQC,EAAAA,EAAAA,KAERZ,GAAgCiB,EAAAA,EAAAA,KACpC,IAAMN,EAAMW,QAAQmH,EAAAA,GAAAA,QAAAA,UAEhB1I,GAA0CkB,EAAAA,EAAAA,KAC9C,IAAMN,EAAMW,QAAQoH,EAAAA,GAAAA,QAAAA,qBAEhBC,GAAyC1H,EAAAA,EAAAA,KAC7C,IAAMN,EAAMW,QAAQgD,EAAAA,GAAAA,QAAAA,gBAGxB,MAAO,CAACkB,EAAUC,MACRM,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3I,EAAY,EAC3DoJ,EAAAA,EAAAA,GAAoB,MAAOlJ,EAAY,EACrC4I,EAAAA,EAAAA,IAAayC,EAAAA,EAAgB,CAC3B7I,UAAUmG,EAAAA,EAAAA,IAAOnG,GACjBC,QAAQkG,EAAAA,EAAAA,IAAOlG,GACfC,YAAY,EACZI,SAAS6F,EAAAA,EAAAA,IAAOyC,GAAatI,SAC5B,KAAM,EAAG,CAAC,WAAY,SAAU,gBAIzC,IChDA,MAAMmI,EAAc,EAEpB,O,oICFA,MAAMnL,EAAa,CACjBC,GAAI,eACJG,MAAO,QAEHF,EAAa,CAAEE,MAAO,aAiB5B,OAA4BmC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,cACRU,MAAMC,GAEN,MAAMqI,GAAQC,EAAAA,EAAAA,MACRnI,GAAQC,EAAAA,EAAAA,KAERb,GAA0CkB,EAAAA,EAAAA,KAC9C,IAAMN,EAAMW,QAAQoH,EAAAA,GAAAA,QAAAA,qBAEhB1I,GAAgCiB,EAAAA,EAAAA,KACpC,IAAMN,EAAMW,QAAQmH,EAAAA,GAAAA,QAAAA,UAEhBE,GAAyC1H,EAAAA,EAAAA,KAC7C,IAAMN,EAAMW,QAAQgD,EAAAA,GAAAA,QAAAA,gBAkBxB,OAfEyE,EAAAA,EAAAA,KAAc,KACZpI,EAAM0D,SAASC,EAAAA,GAAAA,QAAAA,iBAAyC,CACtDC,UAAWsE,EAAM9D,OAAOR,WACxB,KAGJa,EAAAA,EAAAA,KACE,IAAMyD,EAAM9D,OAAOR,YACnBc,UACO2D,GACHrI,EAAM+D,OAAOJ,EAAAA,GAAAA,UAAAA,c,IAKd,CAACkB,EAAUC,MACRM,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3I,EAAY,EAC3DoJ,EAAAA,EAAAA,GAAoB,MAAOlJ,EAAY,EACpC2I,EAAAA,EAAAA,IAAOyC,GAAarI,QAAQhD,KACxByI,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAaO,EAAAA,EAAgB,CAC1CjL,IAAK,EACLoC,UAAUmG,EAAAA,EAAAA,IAAOnG,GACjBC,QAAQkG,EAAAA,EAAAA,IAAOlG,GACfM,SAAS4F,EAAAA,EAAAA,IAAOyC,GAAarI,QAC7BD,SAAS6F,EAAAA,EAAAA,IAAOyC,GAAatI,SAC5B,KAAM,EAAG,CAAC,WAAY,SAAU,UAAW,cAC9C2G,EAAAA,EAAAA,IAAoB,IAAI,OAIlC,ICpEA,MAAMwB,EAAc,EAEpB,O,yJCFA,MAAMS,EAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzE7L,EAAa,CAAEC,GAAI,sBACnBC,EAAa,CAAC,SACdC,EAA2ByL,GAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,IAAK,CACxFhJ,MAAO,qBACP,cAAe,QACd,MAAO,KACJC,EAAa,CACjBF,GAEII,EAAa,CAAEH,MAAO,sBACtBI,EAAa,CAAEJ,MAAO,sBACtBM,EAAa,CACjBJ,IAAK,EACLF,MAAO,iBAEHO,EAAa,CACjBL,IAAK,EACLF,MAAO,iBAEHQ,EAAa,CAAER,MAAO,mBACtBS,EAA4B+K,GAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,IAAK,CACzFhJ,MAAO,mBACP,cAAe,QACd,MAAO,KACJU,EAAc,CAAEV,MAAO,gBACvBW,EAAc,CAAEX,MAAO,gBACvBY,EAAc,CAAC,SACfC,EAA4B2K,GAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,IAAK,CACzFhJ,MAAO,sBACP,cAAe,QACd,MAAO,KACJc,EAAc,CAClBD,GAcF,OAA4BsB,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,mBACRC,MAAO,CACLyH,MAAO,KACP8B,cAAe,MAEjBC,MAAO,CAAC,gBACR/I,MAAMC,GAAc,KAAE+I,IAExB,MAAMzJ,EAAQU,GASN,MAAE+G,EAAK,cAAE8B,IAAkBtI,EAAAA,EAAAA,IAAOjB,GAExCuF,eAAemE,EAAYjF,SACnBkF,EAAAA,EAAAA,IACC,YAAYlF,iBAA0B,CACzCmF,aAAc,SAEfC,MAAMC,IACL,MAAMC,EAAaC,OAAOC,IAAIC,gBAC5B,IAAIC,KAAK,CAACL,EAASpF,MAAO,CAAEtE,KAAM,yBAE9BgK,EAAUC,SAASC,cAAc,KACvCF,EAAQG,KAAOR,EACfK,EAAQI,aAAa,WAAY,GAAG/F,SACpC4F,SAASI,KAAKC,YAAYN,GAC1BA,EAAQO,OAAO,GAErB,CAEF,MAAO,CAACjF,EAAUC,KAChB,MAAMiF,GAAwB/E,EAAAA,EAAAA,IAAkB,cAC1CgF,GAAyBhF,EAAAA,EAAAA,IAAkB,eAEjD,OAAQI,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3I,EAAY,EAC3DoJ,EAAAA,EAAAA,GAAoB,MAAO,CACzBhJ,OAAOwI,EAAAA,EAAAA,IAAgB,CAAC,iCAAkC,CAAE2E,WAAW1E,EAAAA,EAAAA,IAAOmD,GAAewB,eAC7F5I,OACEiE,EAAAA,EAAAA,IAAOmD,GAAewB,YAClBrF,EAAKe,GAAG,sBAAqBL,EAAAA,EAAAA,IAAOmD,GAAenJ,QACnDsF,EAAKe,GAAG,yBAAwBL,EAAAA,EAAAA,IAAOmD,GAAenJ,QAE5D6G,QAAStB,EAAO,KAAOA,EAAO,GAAM2B,IAClClB,EAAAA,EAAAA,IAAOmD,GAAewB,YAClBrF,EAAKsF,QAAQjG,MAAKqB,EAAAA,EAAAA,IAAOmD,GAAewB,aACxC,OAELnN,EAAY,GAAIH,IACnBkJ,EAAAA,EAAAA,GAAoB,MAAO7I,EAAY,EACrCuI,EAAAA,EAAAA,IAAauE,EAAuB,CAClC,eAAexE,EAAAA,EAAAA,IAAOqB,GAAOwD,MAC7BC,OAAO9E,EAAAA,EAAAA,IAAOqB,GAAOyD,OACpB,KAAM,EAAG,CAAC,cAAe,WAC5BvE,EAAAA,EAAAA,GAAoB,MAAO5I,EAAY,CACL,aAA/BqI,EAAAA,EAAAA,IAAOmD,GAAenJ,OAClB6F,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOjI,EAAY,EACpD0I,EAAAA,EAAAA,GAAoB,OAAQ,MAAMH,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAOmD,GAAepH,OAAQ,IACjFwE,EAAAA,EAAAA,GAAoB,IAAK,CACvBhJ,MAAO,aACP,cAAe,OACfsJ,QAAStB,EAAO,KAAOA,EAAO,GAAM2B,GACtC5B,EAAKsF,QAAQjG,KAAK,CAChBC,KAAM,cACNC,OAAQ,CAAER,WAAW2B,EAAAA,EAAAA,IAAOmD,GAAe9E,iBAI5C2B,EAAAA,EAAAA,IAAOmD,GAAe1G,WAClBoD,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,IAAK,CACtCrI,IAAK,EACLF,MAAO,iBACP,cAAe,OACfsJ,QAAStB,EAAO,KAAOA,EAAO,IAAKmB,EAAAA,EAAAA,KAAgBQ,GAAiBoC,GAAYtD,EAAAA,EAAAA,IAAOmD,GAAe9E,YAAa,CAAC,iBAEtHyC,EAAAA,EAAAA,IAAoB,IAAI,IAC5BP,EAAAA,EAAAA,GAAoB,IAAK,CACvBhJ,MAAO,cACP,cAAe,OACfsJ,QAAStB,EAAO,KAAOA,EAAO,GAAM2B,GAAiBmC,EAAK,gBAAgB,WAG7ExD,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOhI,EAAY,EACpDqI,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAOmD,GAAepH,OAAS,IAAK,IACtEwE,EAAAA,EAAAA,GAAoB,OAAQxI,EAAY,EACtCoI,EAAAA,EAAAA,IAAiB,OACjBnI,GACAmI,EAAAA,EAAAA,IAAiB,KAAMC,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,qBAAuB,KAAMD,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAOmD,GAAe4B,UAAY,GAAI,SAG5IxE,EAAAA,EAAAA,GAAoB,MAAOtI,EAAa,EACtCkI,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAOmD,GAAelH,aAAe,OAAQmE,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAOmD,GAAejH,aAAe,IAAK,IAC1IqE,EAAAA,EAAAA,GAAoB,OAAQrI,EAAa,CACP,aAA/B8H,EAAAA,EAAAA,IAAOmD,GAAenJ,OAClB6F,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAasC,EAAwB,CAClDhN,IAAK,EACLuN,GAAI,CACNpG,KAAM,UACNC,OAAQ,CAAER,WAAW2B,EAAAA,EAAAA,IAAOmD,GAAe9E,aAExC,CACDnE,SAASgG,EAAAA,EAAAA,KAAS,IAAM,EACtBC,EAAAA,EAAAA,IAAiB,OAAQC,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,6BAA8B,MAElFgC,EAAG,GACF,EAAG,CAAC,SACPvB,EAAAA,EAAAA,IAAoB,IAAI,YAKpCP,EAAAA,EAAAA,GAAoB,MAAO,CACzBhJ,OAAOwI,EAAAA,EAAAA,IAAgB,CAAC,6BAA8B,CAAE2E,WAAW1E,EAAAA,EAAAA,IAAOmD,GAAe8B,WACzFlJ,OACEiE,EAAAA,EAAAA,IAAOmD,GAAe8B,QAClB3F,EAAKe,GAAG,kBAAiBL,EAAAA,EAAAA,IAAOmD,GAAenJ,QAC/CsF,EAAKe,GAAG,qBAAoBL,EAAAA,EAAAA,IAAOmD,GAAenJ,QAExD6G,QAAStB,EAAO,KAAOA,EAAO,GAAM2B,IAClClB,EAAAA,EAAAA,IAAOmD,GAAe8B,QAAU3F,EAAKsF,QAAQjG,MAAKqB,EAAAA,EAAAA,IAAOmD,GAAe8B,SAAW,OAEpF5M,EAAa,GAAIF,IACpB,CAEJ,I,UC9KA,MAAMmK,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,QCLA,MAAMS,EAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzE7L,EAAa,CACjBM,IAAK,EACLF,MAAO,kBAEHF,EAA2B0L,GAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,MAAO,KAAM,EACnFA,EAAAA,EAAAA,GAAoB,IAAK,CACpChJ,MAAO,eACP,cAAe,WAEf,KACED,EAAa,CACjBD,GAYF,OAA4BqC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,gBACRC,MAAO,CACLsL,WAAY,KACZ/B,cAAe,MAEjB9I,MAAMC,GAER,MAAMV,EAAQU,GAON,WAAE4K,EAAU,cAAE/B,IAAkBtI,EAAAA,EAAAA,IAAOjB,GAE/C,MAAO,CAAC0F,EAAUC,KAEZS,EAAAA,EAAAA,IAAOmD,GAAegC,UACtBnF,EAAAA,EAAAA,IAAOmD,GAAegC,QAAQC,MAAMC,GAAWA,EAAOC,eAAgBtF,EAAAA,EAAAA,IAAOkF,OAE5ErF,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,OAAQ3I,EAAYG,KACvDwJ,EAAAA,EAAAA,IAAoB,IAAI,EAE9B,IC9CA,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,Q,UCRA,MAAMyE,EAAa,CACjB,IACA,MACA,KACA,MACA,IACA,MACA,KACA,MACA,IACA,MACA,KACA,MACA,IACA,MACA,KACA,OAGWC,EAA4BC,IACvC,MAAMxK,EAAQyK,KAAKC,MAAMF,EAAQ,KAAO,IACxC,OAAOF,EAAWtK,EAAQ,GAAG,ECjBzB9D,EAAa,CAAEI,MAAO,QACtBF,EAAa,CAAEE,MAAO,gBACtBD,EAAa,CAAC,SAapB,OAA4BoC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,cACRC,MAAO,CACLgM,QAAS,KACTC,iBAAkB,CAAE7L,KAAMC,UAE5BI,MAAMC,GAER,MAAMV,EAAQU,GAON,iBAAEuL,EAAgB,QAAED,IAAY/K,EAAAA,EAAAA,IAAOjB,IACvC,EAAEW,IAAMC,EAAAA,EAAAA,MAEd,SAASsL,EAAsBC,GAC7B,OAAOxL,EACL,oCAAoCiL,EAClCO,KAGN,CAEF,MAAO,CAACzG,EAAUC,KAChB,MAAMyG,GAAsBvG,EAAAA,EAAAA,IAAkB,YAE9C,OAAQI,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3I,EAAY,EAC3D8I,EAAAA,EAAAA,IAAa+F,EAAqB,CAChCpI,UAAUoC,EAAAA,EAAAA,IAAO4F,GAASK,KAC1BC,SAAU,IACVC,OAAQ,EACRC,aAAa,EACbP,kBAAkB7F,EAAAA,EAAAA,IAAO6F,IACxB,KAAM,EAAG,CAAC,WAAY,sBACzB1F,EAAAA,EAAAA,IAAiB,KAAMC,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAO6F,GAAoB,KAAO,KAAO,MAAO,IACxFtF,EAAAA,EAAAA,GAAoB,MAAOlJ,EAAY,EACpC2I,EAAAA,EAAAA,IAAO4F,GAASG,cACZlG,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,IAAK,CACtCrI,IAAK,EACLF,MAAO,wBACP8O,OAAOC,EAAAA,EAAAA,IAAgB,CACzBC,UAAW,WAAUvG,EAAAA,EAAAA,IAAO4F,GAASG,oBAEnC,cAAe,OACfhK,MAAO+J,GAAsB9F,EAAAA,EAAAA,IAAO4F,GAASG,cAC5C,KAAM,GAAIzO,KACbwJ,EAAAA,EAAAA,IAAoB,IAAI,MAE9B,CAEJ,IClEA,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,QCLA,MAAMiC,EAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzE7L,EAAa,CACjBM,IAAK,EACLL,GAAI,mBAEAC,EAAa,CAAEE,MAAO,iBACtBD,EAA2ByL,GAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,KAAM,KAAM,MAAO,KAClG/I,EAAa,CAAED,MAAO,cACtBG,EAAa,CAAC,MAAO,MAAO,SAC5BC,EAAa,CAAEJ,MAAO,cACtBM,EAAa,CAAC,MAAO,MAAO,SAC5BC,GAAa,CAAC,MAAO,SACrBC,GAAa,CAAC,MAAO,SACrBC,GAAc,CAAC,MAAO,SAY5B,QAA4B0B,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,iBACRC,MAAO,CACLuJ,cAAe,KACf0C,iBAAkB,CAAE7L,KAAMC,UAE5BI,MAAMC,GAER,MAAMV,EAAQU,GAON,iBAAEuL,EAAgB,cAAE1C,IAAkBtI,EAAAA,EAAAA,IAAOjB,GAErD,MAAO,CAAC0F,EAAUC,KACRS,EAAAA,EAAAA,IAAOmD,GAAeqD,eAAgBxG,EAAAA,EAAAA,IAAOmD,GAAesD,aAC/D5G,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3I,EAAY,EACpDoJ,EAAAA,EAAAA,GAAoB,QAASlJ,EAAY,EACvCkJ,EAAAA,EAAAA,GAAoB,QAAS,KAAM,EACjCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9BjJ,GACAiJ,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,MAAO/I,EAAY,EACrC2I,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,mBAAqB,IAAK,IACpEE,EAAAA,EAAAA,GAAoB,MAAO,CACzBhJ,MAAO,cACPmP,IAAK,iBAAgB1G,EAAAA,EAAAA,IAAOmD,GAAeqD,aAAaG,WACxDC,IACFtH,EAAKe,GACH,8BAA6BL,EAAAA,EAAAA,IAAOmD,GAAeqD,aAAaG,QAGhE5K,MACFuD,EAAKe,GACH,8BAA6BL,EAAAA,EAAAA,IAAOmD,GAAeqD,aAAaG,SAG/D,KAAM,EAAGjP,QAGhB6I,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,MAAO5I,EAAY,EACrCwI,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,iBAAmB,IAAK,IAClEE,EAAAA,EAAAA,GAAoB,MAAO,CACzBhJ,MAAO,cACPmP,IAAK,iBAAgB1G,EAAAA,EAAAA,IAAOmD,GAAesD,WAAWE,WACtDC,IACFtH,EAAKe,GACH,8BAA6BL,EAAAA,EAAAA,IAAOmD,GAAesD,WAAWE,QAG9D5K,MACFuD,EAAKe,GACH,8BAA6BL,EAAAA,EAAAA,IAAOmD,GAAesD,WAAWE,SAG7D,KAAM,EAAG9O,YAKpB0I,EAAAA,EAAAA,GAAoB,QAAS,KAAM,EACjCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,MAAO,CACzBhJ,MAAO,gCACPmP,IAAK,+BACLE,IAAKtH,EAAKe,GAAG,gCACbtE,MAAOuD,EAAKe,GAAG,iCACd,KAAM,EAAGvI,OAEdyI,EAAAA,EAAAA,GAAoB,KAAM,MAAMH,EAAAA,EAAAA,IAAiByG,QAAO7G,EAAAA,EAAAA,IAAOmD,GAAeqD,aAAaM,aAAahJ,QAAQ,IAAM,MAAO,IAC7HyC,EAAAA,EAAAA,GAAoB,KAAM,MAAMH,EAAAA,EAAAA,IAAiByG,QAAO7G,EAAAA,EAAAA,IAAOmD,GAAesD,WAAWK,aAAahJ,QAAQ,IAAM,MAAO,MAE7HyC,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,MAAO,CACzBhJ,MAAO,gCACPmP,IAAK,6BACLE,IAAKtH,EAAKe,GAAG,6BACbtE,MAAOuD,EAAKe,GAAG,8BACd,KAAM,EAAGtI,OAEdwI,EAAAA,EAAAA,GAAoB,KAAM,MAAMH,EAAAA,EAAAA,IAAiByG,OAAqD,KAA9C7G,EAAAA,EAAAA,IAAOmD,GAAeqD,aAAaO,UAAgBjJ,QAAQ,IAAM,KAAM,IAC/HyC,EAAAA,EAAAA,GAAoB,KAAM,MAAMH,EAAAA,EAAAA,IAAiByG,OAAmD,KAA5C7G,EAAAA,EAAAA,IAAOmD,GAAesD,WAAWM,UAAgBjJ,QAAQ,IAAM,KAAM,MAE/HyC,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,MAAO,CACzBhJ,MAAO,gCACPmP,IAAK,0BACLE,IAAKtH,EAAKe,GAAG,yBACbtE,MAAOuD,EAAKe,GAAG,0BACd,KAAM,EAAGrI,OAEduI,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BN,EAAAA,EAAAA,IAAa+G,EAAa,CACxBpB,SAAS5F,EAAAA,EAAAA,IAAOmD,GAAeqD,aAC/BX,kBAAkB7F,EAAAA,EAAAA,IAAO6F,IACxB,KAAM,EAAG,CAAC,UAAW,wBAE1BtF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BN,EAAAA,EAAAA,IAAa+G,EAAa,CACxBpB,SAAS5F,EAAAA,EAAAA,IAAOmD,GAAesD,WAC/BZ,kBAAkB7F,EAAAA,EAAAA,IAAO6F,IACxB,KAAM,EAAG,CAAC,UAAW,iCAMlC/E,EAAAA,EAAAA,IAAoB,IAAI,EAE9B,IC1IA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,UCLA,MAAMiC,GAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzE7L,GAAa,CAAEC,GAAI,gBACnBC,GAAa,CAAEE,MAAO,gBACtBD,GAA2ByL,IAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,IAAK,CACxFhJ,MAAO,gBACP,cAAe,QACd,MAAO,KACJC,GAAa,CAAED,MAAO,SACtBG,GAAa,CAAEH,MAAO,SACtBI,GAAa,CAAEF,IAAK,GACpBI,GAAa,CAAEN,MAAO,SACtBO,GAAa,CAAEP,MAAO,SACtBQ,GAAa,CAAER,MAAO,gBACtBS,GAA4B+K,IAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,IAAK,CACzFhJ,MAAO,aACP,cAAe,QACd,MAAO,KACJU,GAAc,CAAEV,MAAO,SACvBW,GAAc,CAAEX,MAAO,gBACvBY,GAA4B4K,IAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,IAAK,CACzFhJ,MAAO,mBACP,cAAe,QACd,MAAO,KACJa,GAAc,CAAEb,MAAO,SACvBc,GAA4B0K,IAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,KAAM,KAAM,MAAO,KACnGjI,GAAc,CAAEf,MAAO,SACvBgB,GAAc,CAClBd,IAAK,EACLF,MAAO,gBAEHiB,GAAc,CAAC,OACfC,GAAc,CAAElB,MAAO,SACvBmB,GAA4BqK,IAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,KAAM,KAAM,MAAO,KACnG5H,GAAc,CAAEpB,MAAO,SACvBqB,GAAc,CAClBnB,IAAK,EACLF,MAAO,gBAEHsB,GAA4BkK,IAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,IAAK,CACzFhJ,MAAO,uBACP,cAAe,QACd,MAAO,KACJuB,GAAc,CAAEvB,MAAO,SACvBwB,GAA4BgK,IAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,KAAM,KAAM,MAAO,KACnGvH,GAAc,CAAEzB,MAAO,SAc7B,QAA4BmC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,cACRC,MAAO,CACLuJ,cAAe,KACf0C,iBAAkB,CAAE7L,KAAMC,SAC1BgN,gBAAiB,CAAEjN,KAAMC,UAE3BI,MAAMC,GAER,MAAMV,EAAQU,GAQN,gBAAE2M,EAAe,cAAE9D,EAAa,iBAAE0C,IAAqBhL,EAAAA,EAAAA,IAAOjB,GAC9DsN,GAAYnM,EAAAA,EAAAA,KAChB,IACiC,YAA/BnB,EAAMuJ,cAAcgE,QACW,OAA/BvN,EAAMuJ,cAAcgE,SAG1B,MAAO,CAAC7H,EAAUC,KAChB,MAAMyG,GAAsBvG,EAAAA,EAAAA,IAAkB,YAE9C,OAAQI,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3I,GAAY,EAC3DoJ,EAAAA,EAAAA,GAAoB,MAAOlJ,GAAY,CACrCC,IACAiJ,EAAAA,EAAAA,GAAoB,OAAQ/I,IAAY4I,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAuB,IACxFF,EAAAA,EAAAA,IAAiB,OACjBI,EAAAA,EAAAA,GAAoB,OAAQ7I,IAAY0I,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAOmD,GAAeiE,QAAS,IACxFnH,EAAAA,EAAAA,IAAaoH,EAAe,CAC1BlE,eAAenD,EAAAA,EAAAA,IAAOmD,GACtB+B,WAAY,MACX,KAAM,EAAG,CAAC,mBACZlF,EAAAA,EAAAA,IAAOkH,KACHrH,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOnI,GAAY,EACpDwI,EAAAA,EAAAA,IAAiB,MAAOC,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,oBAAsB,KAAM,IAC7EE,EAAAA,EAAAA,GAAoB,OAAQ1I,IAAYuI,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAOmD,GAAegE,QAAS,IACxFhH,EAAAA,EAAAA,IAAiB,OAAQC,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,4BAA8B,KAAM,IACtFE,EAAAA,EAAAA,GAAoB,OAAQzI,IAAYsI,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAOmD,GAAe3F,UAAY,IAAK,OAElGsD,EAAAA,EAAAA,IAAoB,IAAI,MAE9BP,EAAAA,EAAAA,GAAoB,MAAOxI,GAAY,CACrCC,IACAuI,EAAAA,EAAAA,GAAoB,OAAQtI,IAAamI,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAuB,IACzFF,EAAAA,EAAAA,IAAiB,OACjBF,EAAAA,EAAAA,IAAa+F,EAAqB,CAChCpI,UAAUoC,EAAAA,EAAAA,IAAOmD,GAAevF,SAChCuI,OAAQ,EACRD,SAAU,KACVoB,QAAQ,EACRzB,kBAAkB7F,EAAAA,EAAAA,IAAO6F,IACxB,KAAM,EAAG,CAAC,WAAY,sBACzB5F,EAAAA,EAAAA,IAAaoH,EAAe,CAC1BlE,eAAenD,EAAAA,EAAAA,IAAOmD,GACtB+B,WAAY,MACX,KAAM,EAAG,CAAC,qBAEf3E,EAAAA,EAAAA,GAAoB,MAAOrI,GAAa,CACtCC,IACAoI,EAAAA,EAAAA,GAAoB,OAAQnI,IAAagI,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,2BAA4B,IAC9FF,EAAAA,EAAAA,IAAiB,OACjBF,EAAAA,EAAAA,IAAa+F,EAAqB,CAChCpI,UAAUoC,EAAAA,EAAAA,IAAOmD,GAAeoE,SAChCrB,SAAU,KACVsB,OAAO,EACPF,QAAQ,EACRzB,kBAAkB7F,EAAAA,EAAAA,IAAO6F,IACxB,KAAM,EAAG,CAAC,WAAY,sBACzB5F,EAAAA,EAAAA,IAAaoH,EAAe,CAC1BlE,eAAenD,EAAAA,EAAAA,IAAOmD,GACtB+B,WAAY,MACX,KAAM,EAAG,CAAC,kBACb7M,IACAkI,EAAAA,EAAAA,GAAoB,OAAQjI,IAAa8H,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,uBAAwB,IAC1FF,EAAAA,EAAAA,IAAiB,OACjBF,EAAAA,EAAAA,IAAa+F,EAAqB,CAChCpI,UAAUoC,EAAAA,EAAAA,IAAOmD,GAAesE,SAChCvB,SAAU,KACVsB,OAAO,EACPF,QAAQ,EACRzB,kBAAkB7F,EAAAA,EAAAA,IAAO6F,IACxB,KAAM,EAAG,CAAC,WAAY,sBACzB5F,EAAAA,EAAAA,IAAaoH,EAAe,CAC1BlE,eAAenD,EAAAA,EAAAA,IAAOmD,GACtB+B,WAAY,MACX,KAAM,EAAG,CAAC,oBAEmB,QAAjClF,EAAAA,EAAAA,IAAOmD,GAAeuE,QAAoD,QAAjC1H,EAAAA,EAAAA,IAAOmD,GAAewE,SAC3D9H,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOvH,GAAa,EACrDgI,EAAAA,EAAAA,GAAoB,MAAO,CACzBhJ,MAAO,YACPmP,IAAK,8BACLE,IAAKtH,EAAKe,GAAG,uBACZ,KAAM,EAAG7H,KACZ+H,EAAAA,EAAAA,GAAoB,OAAQ9H,IAAa2H,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,0BAA2B,IAC7FF,EAAAA,EAAAA,IAAiB,OACjBF,EAAAA,EAAAA,IAAa+F,EAAqB,CAChCpI,UAAUoC,EAAAA,EAAAA,IAAOmD,GAAewE,OAChCzB,SAAU,IACVoB,QAAQ,EACRzB,kBAAkB7F,EAAAA,EAAAA,IAAO6F,IACxB,KAAM,EAAG,CAAC,WAAY,qBACzBnN,IACA6H,EAAAA,EAAAA,GAAoB,OAAQ5H,IAAayH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,0BAA2B,IAC7FF,EAAAA,EAAAA,IAAiB,OACjBF,EAAAA,EAAAA,IAAa+F,EAAqB,CAChCpI,UAAUoC,EAAAA,EAAAA,IAAOmD,GAAeuE,OAChCxB,SAAU,IACVoB,QAAQ,EACRzB,kBAAkB7F,EAAAA,EAAAA,IAAO6F,IACxB,KAAM,EAAG,CAAC,WAAY,yBAE3B/E,EAAAA,EAAAA,IAAoB,IAAI,GACM,QAAjCd,EAAAA,EAAAA,IAAOmD,GAAeyE,QAAqD,QAAlC5H,EAAAA,EAAAA,IAAOmD,GAAe0E,UAC3DhI,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOlH,GAAa,CACrDC,IACA0H,EAAAA,EAAAA,GAAoB,OAAQzH,IAAasH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,oBAAqB,IACvFF,EAAAA,EAAAA,IAAiB,OACjBF,EAAAA,EAAAA,IAAa+F,EAAqB,CAChCpI,UAAUoC,EAAAA,EAAAA,IAAOmD,GAAeyE,OAChC1B,SAAU,IACVoB,QAAQ,EACRzB,kBAAkB7F,EAAAA,EAAAA,IAAO6F,IACxB,KAAM,EAAG,CAAC,WAAY,sBACxB7F,EAAAA,EAAAA,IAAOiH,KACHpH,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAakF,EAAe,CACzC5P,IAAK,EACL0L,eAAenD,EAAAA,EAAAA,IAAOmD,GACtB+B,WAAY,MACX,KAAM,EAAG,CAAC,oBACbpE,EAAAA,EAAAA,IAAoB,IAAI,GAC5B/H,IACAwH,EAAAA,EAAAA,GAAoB,OAAQvH,IAAaoH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,qBAAsB,IACxFF,EAAAA,EAAAA,IAAiB,OACjBF,EAAAA,EAAAA,IAAa+F,EAAqB,CAChCpI,UAAUoC,EAAAA,EAAAA,IAAOmD,GAAe0E,QAChC3B,SAAU,IACVoB,QAAQ,EACRzB,kBAAkB7F,EAAAA,EAAAA,IAAO6F,IACxB,KAAM,EAAG,CAAC,WAAY,yBAE3B/E,EAAAA,EAAAA,IAAoB,IAAI,IAC5Bb,EAAAA,EAAAA,IAAa6H,GAAgB,CAC3B3E,eAAenD,EAAAA,EAAAA,IAAOmD,GACtB0C,kBAAkB7F,EAAAA,EAAAA,IAAO6F,IACxB,KAAM,EAAG,CAAC,gBAAiB,sBAC9B,CAEJ,IChNA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,UCRA,SAASkC,GAAEC,EAASC,GAChB,OAAOC,MAAMC,KAAKH,EAAQI,qBAAqBH,GACnD,CAUA,SAASI,GAAQC,GAEb,OADAA,GAAMC,YACED,GAAQA,EAAKE,aAAgB,EACzC,CAIA,SAASC,GAAKH,EAAML,EAASS,GACzB,MAAM1F,EAAIsF,EAAKF,qBAAqBH,GAC9BU,EAAS3F,EAAE4F,OAAS5F,EAAE,GAAK,KAGjC,OAFI2F,GAAUD,GACVA,EAASC,GACNA,CACX,CACA,SAASE,GAAIP,EAAML,EAASS,GACxB,MAAMI,EAAa,CAAC,EACpB,IAAKR,EACD,OAAOQ,EACX,MAAM9F,EAAIsF,EAAKF,qBAAqBH,GAC9BU,EAAS3F,EAAE4F,OAAS5F,EAAE,GAAK,KACjC,OAAI2F,GAAUD,EACHA,EAASC,EAAQG,GAErBA,CACX,CACA,SAASC,GAAKT,EAAML,EAASS,GACzB,MAAMM,EAAMX,GAAQI,GAAKH,EAAML,IAC/B,OAAIe,GAAON,GACAA,EAASM,IACb,CAAC,CACZ,CACA,SAASC,GAAKX,EAAML,EAASS,GACzB,MAAMM,EAAMnL,WAAWwK,GAAQI,GAAKH,EAAML,KAC1C,IAAIiB,MAAMF,GAEV,OAAIA,GAAON,GACAA,EAASM,IACb,CAAC,CACZ,CACA,SAASG,GAAKb,EAAML,EAASS,GACzB,MAAMM,EAAMnL,WAAWwK,GAAQI,GAAKH,EAAML,KAC1C,IAAIiB,MAAMF,GAIV,OAFIA,GAAON,GACPA,EAASM,GACNA,CACX,CACA,SAASI,GAASd,EAAMe,GACpB,MAAMP,EAAa,CAAC,EACpB,IAAK,MAAMQ,KAAYD,EACnBN,GAAKT,EAAMgB,GAAWN,IAClBF,EAAWQ,GAAYN,CAAG,IAGlC,OAAOF,CACX,CACA,SAASS,GAAUjB,GACf,OAA0B,IAAnBA,GAAMkB,QACjB,CAEA,SAASC,GAAanB,GAClB,OAAOO,GAAIP,EAAM,QAASoB,IACtB,MAAMV,EAAMW,OAAOC,OAAO,CAAC,EAAGb,GAAKW,EAAW,SAAU5E,IAC7C,CAAE+E,OAAQ,IAAI/E,QACrBmE,GAAKS,EAAW,WAAYI,IACrB,CAAE,iBAAkBA,MAC3Bb,GAAKS,EAAW,SAAUK,IAEnB,CAAE,eAAyB,GAARA,EAAc,UAE5C,OAAOf,CAAG,GAElB,CAEA,SAASgB,GAAc1B,GACnB,IAAI2B,EAAS,GACb,GAAa,OAAT3B,EACA,OAAO2B,EACX,IAAK,MAAMC,KAAShC,MAAMC,KAAKG,EAAK6B,YAAa,CAC7C,IAAKZ,GAAUW,GACX,SACJ,MAAMtL,EAAOwL,GAAeF,EAAMG,UAClC,GAAa,+BAATzL,EAEAqL,EAASA,EAAOK,OAAON,GAAcE,QAEpC,CAED,MAAMlB,EAAMX,GAAQ6B,GACpBD,EAAOtL,KAAK,CAACC,EAAM2L,GAAavB,IACpC,CACJ,CACA,OAAOiB,CACX,CACA,SAASG,GAAexL,GACpB,MAAO,CAAC,QAAS,YAAa,MAAM4L,SAAS5L,GAAQ,QAAUA,CACnE,CACA,SAAS2L,GAAavB,GAClB,MAAMyB,EAAM5M,WAAWmL,GACvB,OAAOE,MAAMuB,GAAOzB,EAAMyB,CAC9B,CAEA,SAASC,GAAYpC,GACjB,MAAMqC,EAAK,CACP9M,WAAWyK,EAAKsC,aAAa,QAAU,IACvC/M,WAAWyK,EAAKsC,aAAa,QAAU,KAE3C,GAAI1B,MAAMyB,EAAG,KAAOzB,MAAMyB,EAAG,IACzB,OAAO,KAEXxB,GAAKb,EAAM,OAAQU,IACf2B,EAAGhM,KAAKqK,EAAI,IAEhB,MAAM6B,EAAOpC,GAAKH,EAAM,QACxB,MAAO,CACHwC,YAAaH,EACbE,KAAMA,EAAOxC,GAAQwC,GAAQ,KAC7BE,eAAgBf,GAAcvB,GAAKH,EAAM,eAEjD,CAEA,SAAS0C,GAAkB1C,GACvB,MAAMQ,EAAaM,GAASd,EAAM,CAC9B,OACA,MACA,OACA,OACA,OACA,aAEE2C,EAAa/C,MAAMC,KAAKG,EAAK4C,uBAAuB,oDAAqD,MAC/G,IAAK,MAAMhB,KAASe,EACZf,EAAMiB,YAAYA,aAAe7C,IACjCQ,EAAWoB,EAAMjC,QAAQmD,QAAQ,IAAK,MAAQ/C,GAAQ6B,IAG9D,MAAMmB,EAAQtD,GAAEO,EAAM,QAItB,OAHI+C,EAAMzC,SACNE,EAAWuC,MAAQA,EAAMC,KAAKC,GAAS5B,OAAOC,OAAO,CAAEzF,KAAMoH,EAAKX,aAAa,SAAWxB,GAASmC,EAAM,CAAC,OAAQ,aAE/GzC,CACX,CAKA,SAAS0C,GAAYlD,EAAMmD,GACvB,MAAMC,EAAM3D,GAAEO,EAAMmD,GACdE,EAAO,GACPC,EAAQ,GACRb,EAAiB,CAAC,EACxB,IAAK,IAAIc,EAAI,EAAGA,EAAIH,EAAI9C,OAAQiD,IAAK,CACjC,MAAMC,EAAIpB,GAAYgB,EAAIG,IAC1B,GAAKC,EAAL,CAGAH,EAAKhN,KAAKmN,EAAEhB,aACRgB,EAAEjB,MACFe,EAAMjN,KAAKmN,EAAEjB,MACjB,IAAK,MAAOjM,EAAMoK,KAAQ8C,EAAEf,eAAgB,CACxC,MAAMgB,EAAkB,UAATnN,EAAmBA,EAAOA,EAAKwM,QAAQ,UAAW,IAAM,IAClEL,EAAegB,KAChBhB,EAAegB,GAAU7D,MAAMwD,EAAI9C,QAAQoD,KAAK,OAEpDjB,EAAegB,GAAQF,GAAK7C,CAChC,CAVA,CAWJ,CACA,KAAI2C,EAAK/C,OAAS,GAElB,MAAO,CACH+C,KAAMA,EACNC,MAAOA,EACPb,eAAgBA,EAExB,CAKA,SAASkB,GAAS3D,GACd,MAAMqD,EAAOH,GAAYlD,EAAM,SAC/B,GAAKqD,EAEL,MAAO,CACH3R,KAAM,UACN8O,WAAYa,OAAOC,OAAO,CAAEsC,SAAU,OAASlB,GAAkB1C,GAAOmB,GAAahB,GAAKH,EAAM,gBAChG6D,SAAU,CACNnS,KAAM,aACN8Q,YAAaa,EAAKA,MAG9B,CACA,SAASS,GAAS9D,GACd,MAAM+D,EAAWtE,GAAEO,EAAM,UACnBgE,EAAQ,GACRV,EAAQ,GACRW,EAAiB,GACvB,IAAK,MAAMC,KAAWH,EAAU,CAC5B,MAAMV,EAAOH,GAAYgB,EAAS,SAC9Bb,IACAY,EAAe5N,KAAKgN,GAChBA,EAAKC,OAASD,EAAKC,MAAMhD,QACzBgD,EAAMjN,KAAKgN,EAAKC,OAE5B,CACA,GAA8B,IAA1BW,EAAe3D,OACf,OAAO,KACX,MAAM6D,EAAQF,EAAe3D,OAAS,EAChCE,EAAaa,OAAOC,OAAO,CAAEsC,SAAU,OAASlB,GAAkB1C,GAAOmB,GAAahB,GAAKH,EAAM,eAAgBsD,EAAMhD,OACvH,CACE8D,qBAAsB,CAClBd,MAAOa,EAAQb,EAAQA,EAAM,KAGnC,CAAC,GACP,IAAK,MAAMD,KAAQY,EAAgB,CAC/BD,EAAM3N,KAAKgN,EAAKA,MACX7C,EAAW4D,uBACZ5D,EAAW4D,qBAAuB,CAAC,GAEvC,MAAM9S,EAAQkP,EAAW4D,qBACnBC,EAAUhD,OAAOgD,QAAQhB,EAAKZ,gBACpC,IAAK,IAAIc,EAAI,EAAGA,EAAIc,EAAQ/D,OAAQiD,IAAK,CACrC,MAAOjN,EAAMoK,GAAO2D,EAAQd,GACxBY,GACK7S,EAAMgF,KACPhF,EAAMgF,GAAQ2N,EAAejB,KAAKK,GAAS,IAAIzD,MAAMyD,EAAKA,KAAK/C,QAAQoD,KAAK,SAEhFpS,EAAMgF,GAAMiN,GAAK7C,GAGjBpP,EAAMgF,GAAQoK,CAEtB,CACJ,CACA,MAAO,CACHhP,KAAM,UACN8O,WAAYA,EACZqD,SAAUM,EACJ,CACEzS,KAAM,kBACN8Q,YAAawB,GAEf,CACEtS,KAAM,aACN8Q,YAAawB,EAAM,IAGnC,CAKA,SAASM,GAAStE,GACd,MAAMQ,EAAaa,OAAOC,OAAOoB,GAAkB1C,GAAOc,GAASd,EAAM,CAAC,SACpEuE,EAAOnC,GAAYpC,GACzB,OAAKuE,EAEE,CACH7S,KAAM,UACN8O,aACAqD,SAAU,CACNnS,KAAM,QACN8Q,YAAa+B,EAAK/B,cANf,IASf,CAMA,SAAUgC,GAAOxE,GACb,IAAK,MAAMgE,KAASvE,GAAEO,EAAM,OAAQ,CAChC,MAAMyE,EAAUX,GAASE,GACrBS,UACMA,EACd,CACA,IAAK,MAAMpK,KAASoF,GAAEO,EAAM,OAAQ,CAChC,MAAMyE,EAAUd,GAAStJ,GACrBoK,UACMA,EACd,CACA,IAAK,MAAMC,KAAYjF,GAAEO,EAAM,OAAQ,CACnC,MAAM2E,EAAQL,GAASI,GACnBC,UACMA,EACd,CACJ,CAYA,SAASC,GAAI5E,GACT,MAAO,CACHtO,KAAM,oBACNmT,SAAUjF,MAAMC,KAAK2E,GAAOxE,IAEpC,CA0f2B5C,KAAK0H,GCrzBhC,MAAMC,GAAW,CAACC,EAAIzC,KACpB,IAAI0C,EAEJ,OAAO,YAAaC,GAClB,MAAMC,EAAUC,KACZH,GACFI,aAAaJ,GAEfA,EAAUK,YAAW,KACnBN,EAAGO,MAAMJ,EAASD,GAClBD,EAAU,IAAI,GACb1C,EACL,CAAC,EAGGiD,GAAyBC,GACxBA,GAAmC,oBAAlBA,EAAOC,OAGtBD,EAAOC,OAAO,GAAGC,cAAgBF,EAAOG,MAAM,GAF5CH,EAKLI,GAAc,CAACC,EAASC,EAAgBzU,KAC5C,IAAK,MAAMnC,KAAOmC,EAAO,CACvB,MAAM0U,EAAgB,MAAQR,GAAsBrW,GAChD2W,EAAQE,IACV,SACE,IAAM1U,EAAMnC,KACZ,CAAC8W,EAAQC,KACPJ,EAAQE,GAAeC,EAAQC,EAAO,IAGjCH,EAAeC,KACxB,SACE,IAAM1U,EAAMnC,KACX8W,IACCF,EAAeC,GAAeC,EAAO,GAI7C,GAGIE,GAAeC,IACnB,MAAM/F,EAAS,CAAC,EAChB,IAAK,MAAMgG,KAAYD,EACrB,GACEC,EAASC,WAAW,QACnBD,EAASC,WAAW,aACR,YAAbD,EACA,CACA,MAAME,EAAYF,EAAST,MAAM,GAAGY,oBACpCnG,EAAOkG,GAAaH,EAAaC,EACnC,CAEF,OAAOhG,CAAM,EAGToG,GAAmB5P,MAAO6P,IAC9B,MAAMC,QAAgBC,QAAQC,IAAI,CAChC,mCACA,kCACA,4CAGKH,EAAKI,QAAQC,UAAUC,YAE9BN,EAAKI,QAAQG,aAAa,CACxBC,cAAeP,EAAQ,GAAG/U,QAC1BuV,QAASR,EAAQ,GAAG/U,QACpBwV,UAAWT,EAAQ,GAAG/U,SACtB,EAUEyV,GAAyBC,IAC7B,MAAMC,GAAU,SAAI,IAClBC,QAAQC,KAAK,UAAUH,+CAEnBI,EAAU,IAAIxC,IAASqC,EAAQ5U,SAASuS,GAK9C,OAHAwC,EAAQH,QAAUA,GAClB,QAAQD,EAAYI,GAEbA,CAAO,EAUVC,GAAuB,CAACD,EAASE,IACpCF,EAAQH,QAAQ5U,MAAQiV,EAErBC,GACa,kBAATC,MAAqBA,KAAKA,OAASA,MAAQA,MAChC,kBAAX,EAAAC,GAAuB,EAAAA,EAAOC,SAAW,EAAAD,GAAU,EAAAA,QAC3DE,EAEIC,GAAqB,mBAErB5W,GAAQ,CACZ6W,QAAS,CACPzW,KAAM2P,OACNzP,QAAS,KAAM,CAAG,KAIhBG,GAAST,IACN,CAAE6W,QAAS7W,EAAM6W,QAASrC,QAAS,CAAC,IAGvCsC,GAAU,IACX9W,GACH+W,KAAM,CACJ3W,KAAM4W,OACN1W,QAAS,eAEX2W,YAAa,CACX7W,KAAM4W,OACN1W,QAAS,MAEX0E,KAAM,CACJ5E,KAAM4W,OACNE,QAAQ,EACR5W,aAASqW,GAEXQ,UAAW,CACT/W,KAAM4W,OACNE,QAAQ,EACR5W,aAASqW,GAEXS,QAAS,CACPhX,KAAMC,QACN6W,QAAQ,EACR5W,SAAS,IAIP+W,GAAU,CAACrX,EAAOsX,EAAYzD,KAClC,MAAM0D,GAAW,QAAO,YAClBC,GAAc,QAAO,gBAEzBX,QAASY,EACTjD,QAASkD,GACPjX,GAAMT,GAEJ6W,EAAU,IACXY,EACHR,YAAajX,EAAMiX,YACnBF,KAAM/W,EAAM+W,MAGRY,EAAe,IAAMJ,EAAS,CAAEK,cAAeN,EAAWjW,QAC1DwW,EAAkB,IACtBL,EAAY,CAAEI,cAAeN,EAAWjW,QAEpCmT,EAAU,IACXkD,EACHI,eAAe1I,EAAK2I,GAClB,MAAMC,EAAqBlE,KAAKmE,QAAQL,cAAcI,mBACtDA,EAAmBE,kBAAkBH,GAAKI,eAAe/I,EAC3D,EACAgJ,UACEP,IACI7X,EAAMoX,SACRO,GAEJ,EACAU,eACER,IACI7X,EAAMoX,SACRO,GAEJ,EACAW,WAAWC,GACLjB,EAAWjW,QACTkX,EACFZ,IAEAE,IAGN,EACAW,WAAU,cAAEZ,IACVN,EAAWjW,MAAMmX,UAAUZ,EAC7B,EACAa,aAAY,cAAEb,IACZN,EAAWjW,MAAMoX,YAAYb,EAC/B,EACAc,gBACE,MAAMC,EAAUrB,EAAWjW,MAAQiW,EAAWjW,MAAMuX,aAAe,KAC/DD,GACFA,EAAQD,eAEZ,EACAG,cACE,MAAMC,EAAQxB,EAAWjW,MAAQiW,EAAWjW,MAAM0X,WAAa,KAC3DD,GACFA,EAAMD,aAEV,EACAG,kBAAkB3X,GAMhBwS,EAAQpK,KAAK,iBAAkBpI,EACjC,GAcF,OAXA,QAAQ,YAAamT,EAAQgE,YAC7B,QAAQ,cAAehE,EAAQiE,cAC/B,QAAQ,gBAAiBjE,EAAQkE,gBACjC,QAAQ,cAAelE,EAAQqE,cAE/B,SAAY,KACVrE,EAAQqE,cACRrE,EAAQkE,gBACRb,GAAiB,IAGZ,CAAEhB,UAASrC,UAAS,EAGvByE,GAAS,CAACC,EAAOC,KACrB,GAAID,GAASC,EAAM7Y,QACjB,OAAO,IAAA8Y,GAAE,MAAO,CAAE3M,MAAO,CAAE4M,QAAS,SAAYF,EAAM7Y,UACxD,EAGIgZ,GAAU,IACXtZ,GACHuZ,YAAa,CACXnZ,KAAMC,QACNC,SAAS,GAEXkZ,oBAAqB,CACnBpZ,KAAMC,QACNC,SAAS,IAePmZ,GAAU,IACX3C,MACAwC,GACHrJ,OAAQ,CACN7P,KAAMC,QACN6W,QAAQ,EACR5W,SAAS,GAEX4K,MAAO,CACL9K,KAAM4W,OACNE,QAAQ,EACR5W,QAAS,WAEXoZ,OAAQ,CACNtZ,KAAM6M,OACNiK,QAAQ,EACR5W,QAAS,GAEX4P,QAAS,CACP9P,KAAM6M,OACNiK,QAAQ,EACR5W,QAAS,GAEXqZ,QAAS,CACPvZ,KAAM4W,OACNE,QAAQ,EACR5W,QAAS,SAEXsZ,SAAU,CACRxZ,KAAM4W,OACNE,QAAQ,EACR5W,QAAS,SAEXuZ,UAAW,CACTzZ,KAAM4W,OACNE,QAAQ,EACR5W,QAAS,MAEXwZ,WAAY,CACV1Z,KAAM4W,OACNE,QAAQ,EACR5W,QAAS,MAEX8R,KAAM,CACJhS,KAAMC,QACN6W,QAAQ,EACR5W,SAAS,GAEXyZ,UAAW,CACT3Z,KAAM4W,OACNE,QAAQ,EACR5W,QAAS,WAEX0Z,YAAa,CACX5Z,KAAM6M,OACNiK,QAAQ,EACR5W,QAAS,IAEX2Z,SAAU,CACR7Z,KAAM4W,OACNE,QAAQ,EACR5W,QAAS,WAEX4Z,UAAW,CACT9Z,KAAM4W,OACNE,QAAQ,EACR5W,QAAS,OAqFP6Z,GAAU,IACXV,GACHW,OAAQ,CACNha,KAAM,CAAC2P,OAAQzB,OACf4I,QAAQ,EACR5W,QAAS,MAKX+Z,OAAQ,CACNja,KAAM6M,OACN3M,QAAS,OAgJb,MAAMga,GAAU,IACXta,GACHua,SAAU,CACRna,KAAM4W,OACN1W,QAAS,aAIPka,GAAU,CAACxa,EAAOsX,KACtB,MACET,QAASY,EACTjD,QAASkD,GACPjX,GAAMT,GACJ6W,EAAU,IACXY,EACH8C,SAAUva,EAAMua,UAGZ/F,EAAU,IACXkD,EACH+C,YAAYF,GACNjD,EAAWjW,OACbiW,EAAWjW,MAAMoZ,YAAYF,EAEjC,GASF,OANA,SAAY,KACNjD,EAAWjW,OACbiW,EAAWjW,MAAMqZ,QACnB,IAGK,CAAE7D,UAASrC,UAAS,EAGvBmG,GAAYxB,GACZA,EAAM7Y,SACD,IAAA8Y,GAAE,MAAO,CAAExW,IAAK,QAAUuW,EAAM7Y,WAElC,KAGT,IAAIsa,GAAW,CACb5V,KAAM,WACNhF,MAAO,IACFsa,GACHO,wBAAyB,CACvBza,KAAMC,QACN6W,QAAQ,EACR5W,SAAS,GAEXwa,yBAA0B,CACxB1a,KAAMC,QACN6W,QAAQ,EACR5W,SAAS,IAGbG,MAAMT,EAAO6T,GACX,MAAMyD,GAAa,QAAI,CAAC,GAClByD,GAAO,QAAI,MAEXC,GAAmB,QAAOpE,IAC1BqE,GAAkB,QAAO,oBAEzB,QAAEpE,EAAO,QAAErC,GAAYgG,GAAQxa,EAAOsX,GAyB5C,OAvBA,SAAU/R,UACR,MAAM,QAAE2V,EAAO,SAAEC,GAAaH,EAC1BzE,GAAiB6E,QACX,8BAEJC,EAAWH,EAAQI,OAAO,CAC9BC,QACE,OAAOR,EAAK1Z,KACd,IAGFiW,EAAWjW,MAAQ,IAAIga,EAASxE,GAChCtC,GAAYC,EAAS8C,EAAWjW,MAAOrB,GACvCib,EAAgB,CAAErD,cAAeN,EAAWjW,QAExCrB,EAAM6a,yBACRM,EAASN,wBAAwBE,EAAK1Z,OAEpCrB,EAAM8a,0BACRK,EAASL,yBAAyBC,EAAK1Z,QAEzC,SAAS,IAAMwS,EAAQpK,KAAK,QAAS6N,EAAWjW,QAAO,IAElD,CAAE0Z,OAAMnD,cAAeN,EAChC,EACA2B,SACE,OAAO0B,GAAS7G,KAAK0H,OACvB,EAGFZ,OAAkB,+BA6DlB,MAAMa,GAAU,IACXnB,GACHoB,UAAW,CACTtb,KAAMC,QACNC,SAAS,GAEXqb,WAAY,CACVvb,KAAMC,QACNC,SAAS,GAEXsb,eAAgB,CACdxb,KAAMC,QACNC,SAAS,GAEXub,WAAY,CACVzb,KAAMC,QACNC,SAAS,GAEXwb,aAAc,CACZ1b,KAAM2b,SACNzb,aAASqW,IAIPqF,GAAU,CAAChc,EAAOsX,KACtB,MAAQT,QAASoF,GAAmBzB,GAAQxa,EAAOsX,GAC7CT,EAAU,IACXoF,EACHP,UAAW1b,EAAM0b,UACjBC,WAAY3b,EAAM2b,WAClBC,eAAgB5b,EAAM4b,eACtBC,WAAY7b,EAAM6b,WAClBC,aAAc9b,EAAM8b,cAGhBtH,EAAU,CACd+C,SAAS2E,GACiB,SAApBA,EAAM/E,UACRG,EAAWjW,MAAM8a,aAAaD,EAAMtE,cAAesE,EAAMlX,MAC5B,YAApBkX,EAAM/E,WACfG,EAAWjW,MAAM+a,WAAWF,EAAMtE,cAAesE,EAAMlX,KAE3D,EACAwS,YAAY0E,GACV5E,EAAWjW,MAAMmW,YAAY0E,EAAMtE,cACrC,GAEF,MAAO,CAAEf,UAASrC,UAAS,EAG7B,IAAI6H,GAAW,CACbrX,KAAM,iBACNhF,MAAOyb,GACPhb,MAAMT,EAAO6T,GACX,MAAMyD,GAAa,QAAI,CAAC,GAElB0D,GAAmB,QAAOpE,IAC1B0F,GAAuB,QAAO,yBAE9B,QAAEzF,EAAO,QAAErC,GAAYwH,GAAQhc,EAAOsX,GAkB5C,OAhBA,SAAU/R,UACR,MAAM,QAAEgX,GAAYvB,EAChBzE,GAAiB6E,QACX,8BAEV9D,EAAWjW,MAAQkb,EAAQC,OAAO,KAAM,KAAM3F,GAE9CtC,GAAYC,EAAS8C,EAAWjW,MAAOrB,GAEvCsc,EAAqB,IAChBtc,KACAwU,EACHoD,cAAeN,EAAWjW,SAE5B,SAAS,IAAMwS,EAAQpK,KAAK,QAAS6N,EAAWjW,QAAO,IAElD,CAAEuW,cAAeN,EAAWjW,MACrC,EACA4X,SACE,OAAO,IACT,EAGFoD,OAAkB,qCASRhc,QAIAA,QAIAA,QAqHV,MAAMoc,GAAU,IACX3F,IAGC4F,GAAU,CAAC1c,EAAOsX,EAAYzD,KAClC,MAAQgD,QAAS8F,EAAcnI,QAASoI,GAAiBvF,GACvDrX,EACAsX,EACAzD,GAGIgD,EAAU,IACX8F,GAGCnI,EAAU,IACXoI,EACHrF,SAAS2E,GACP5E,EAAWjW,MAAMkW,SAAS2E,EAAMtE,cAClC,EACAJ,YAAY0E,GACV5E,EAAWjW,MAAMmW,YAAY0E,EAAMtE,cACrC,GAMF,OAHA,QAAQ,WAAYpD,EAAQ+C,WAC5B,QAAQ,cAAe/C,EAAQgD,aAExB,CAAEX,UAASrC,UAAS,EAgE7B,MAAMqI,GAAU,IACXJ,GACHK,QAAS,CACP1c,KAAM,CAAC2P,OAAQzB,OACfhO,QAAS,KAAM,CAAG,KAIhByc,GAAU,CAAC/c,EAAOsX,KACtB,MAAQT,QAAS8F,EAAcnI,QAASwI,GAAsBN,GAC5D1c,EACAsX,GAGIT,EAAU,IACX8F,KACA3c,GAGCwU,EAAU,IACXwI,EACHC,WAAWtI,GACT2C,EAAWjW,MAAM6b,cACjB5F,EAAWjW,MAAM8b,QAAQxI,EAC3B,EACAyI,iBACE,OAAO9F,EAAWjW,MAAMgc,WAC1B,EACAC,YACE,OAAOhG,EAAWjW,MAAMic,WAC1B,GAGF,MAAO,CAAEzG,UAASrC,UAAS,EAG7B,IAAI+I,GAAW,CACbvd,MAAO6c,GACPpc,MAAMT,EAAO6T,GACX,MAAMyD,GAAa,QAAI,CAAC,GAClB4B,GAAQ,SAAI,GAEZ8B,GAAmB,QAAOpE,IAC1BW,GAAW,QAAO,aAElB,QAAE/C,EAAO,QAAEqC,GAAYkG,GAAQ/c,EAAOsX,GAqB5C,OAnBA,SAAU/R,UACR,MAAM,QAAEiY,EAAO,SAAErC,GAAaH,EAC1BzE,GAAiB6E,QACX,8BAEV9D,EAAWjW,MAAQmc,EAAQxd,EAAM8c,QAASjG,GAE1C,MAAM4G,EAAY5I,GAAYhB,EAAQ6J,OACtCvC,EAASwC,GAAGrG,EAAWjW,MAAOoc,GAE9BlJ,GAAYC,EAAS8C,EAAWjW,MAAOrB,GACvCuX,EAAS,IACJvX,KACAwU,EACHoD,cAAeN,EAAWjW,QAE5B6X,EAAM7X,OAAQ,GACd,SAAS,IAAMwS,EAAQpK,KAAK,QAAS6N,EAAWjW,QAAO,IAElD,CAAE6X,QAAOtB,cAAeN,EACjC,EACA2B,SACE,OAAOA,GAAOnF,KAAKoF,MAAOpF,KAAK0H,OACjC,EAGF+B,OAAkB,+BAElB,MAAMK,GAAU,IACX9G,GACHC,KAAM,CACJ3W,KAAM4W,OACN1W,QAAS,YAEX4P,QAAS,CACP9P,KAAM6M,OACNiK,QAAQ,EACR5W,QAAS,GAEXud,OAAQ,CACNzd,KAAM6M,OACN3M,QAAS,GAEXwd,SAAU,CACR1d,KAAM6M,OACN3M,QAAS,KAEXyd,OAAQ,CACN3d,KAAMC,QACNC,SAAS,GAEX0d,QAAS,CACP5d,KAAM6M,OACN3M,QAAS,GAEX2d,QAAS,CACP7d,KAAM6M,OACN3M,aAASqW,IAIPuH,GAAU,CAACle,EAAOsX,EAAYzD,KAClC,MAAQgD,QAAS8F,EAAcnI,QAASoI,GAAiBvF,GACvDrX,EACAsX,EACAzD,GAEIgD,EAAU,IACX8F,EACH5F,KAAM/W,EAAM+W,KACZ7G,QAASlQ,EAAMkQ,QACf2N,OAAQ7d,EAAM6d,OACdC,SAAU9d,EAAM8d,SAChBC,OAAQ/d,EAAM+d,OACdC,QAAShe,EAAMge,QACfC,QAASje,EAAMie,SAEjB,MAAO,CAAEpH,UAASrC,QAAS,IAAKoI,GAAgB,EAuFlD,MAAMuB,GAAU,CACdtI,QAAS,CACPzV,KAAM4W,OACNE,QAAQ,EACR5W,QAAS,MAEXsV,cAAe,CACbxV,KAAM4W,OACNE,QAAQ,EACR5W,QAAS,MAEX8d,SAAU,CACRhe,KAAM,CAAC2P,OAAQzB,OACf4I,QAAQ,EACR5W,QAAS,MAEX+d,WAAY,CACVje,KAAM,CAAC2P,OAAQzB,OACf4I,QAAQ,EACR5W,QAAS,MAEXge,YAAa,CACXle,KAAM,CAAC2P,OAAQzB,OACf4I,QAAQ,EACR5W,QAAS,IAAM,CAAC,EAAG,IAErBie,cAAe,CACbne,KAAM,CAAC2P,OAAQzB,OACf4I,QAAQ,EACR5W,QAAS,IAAM,CAAC,EAAG,IAErBwV,UAAW,CACT1V,KAAM4W,OACNE,QAAQ,EACR5W,QAAS,MAEXke,gBAAiB,CACfpe,KAAM4W,OACNE,QAAQ,EACR5W,QAAS,MAEXme,WAAY,CACVre,KAAM,CAAC2P,OAAQzB,OACf4I,QAAQ,EACR5W,QAAS,MAEXoe,aAAc,CACZte,KAAM,CAAC2P,OAAQzB,OACf4I,QAAQ,EACR5W,QAAS,MAEXqe,MAAO,CACLve,KAAM,CAAC2P,OAAQzB,OACf4I,QAAQ,EACR5W,QAAS,IAAM,CAAC,EAAG,IAErB4Z,UAAW,CACT9Z,KAAM4W,OACNE,QAAQ,EACR5W,QAAS,IAEXuW,QAAS,CACPzW,KAAM2P,OACNmH,QAAQ,EACR5W,QAAS,KAAM,CAAG,KAOtB,IAAIse,GAAW,CACb5Z,KAAM,QACNhF,MAAO,IACFme,MACAne,IAELS,MAAMT,EAAO6T,GACX,MAAMkH,GAAO,QAAI,MAEXC,GAAmB,QAAOpE,IAC1BiI,GAAmB,QAAO,oBAC1BC,GAAgB,QAAO,iBACvBC,GAAU,QAAO,WAEvB,IAAIC,EACAC,EACAC,EACAnS,EACAoS,EAEJ,MAAMC,EAAa,CAACC,EAAIC,EAAkBC,KACxC,MAAMC,EAASH,GAAMA,EAAGI,UACxB,IAAKH,EAIH,YAHIC,GAAkBJ,GAAcN,KAClCC,EAAcU,IAKlB,MAAM/B,EAAY5I,GAAYhB,EAAQ6J,OAClCyB,GACFF,EAAYE,EAAY1B,GAG1B,MAAQ5G,QAASY,GAAqBhX,GAAMT,GACtC6W,EAAU,IACXY,EACH5B,QAAS7V,EAAM6V,QACfD,cAAe5V,EAAM4V,cACrBwI,SAAUpe,EAAMoe,SAChBC,WAAYre,EAAMqe,WAClBC,YAAate,EAAMse,YACnBC,cAAeve,EAAMue,cACrBzI,UAAW9V,EAAM8V,UACjB0I,gBAAiBxe,EAAMwe,gBACvBC,WAAYze,EAAMye,WAClBC,aAAc1e,EAAM0e,aACpBC,MAAO3e,EAAM2e,MACbzE,UAAWla,EAAMka,UACjBwF,KAAMF,GAAUxf,EAAM0f,MAGxBP,EAAatI,EAAQ6I,KAAOR,EAAQrI,GAAW9J,EAAK8J,GACpDmI,EAAWG,EAAY1B,GACvBsB,EAAQI,EAAW,EAGfQ,EAAqB,MACzB,SAAS,IAAMP,EAAWrE,EAAK1Z,OAAO,GAAM,IAAO,EAG/Cue,EAAmB,MACvB,SAAS,IAAMR,EAAWrE,EAAK1Z,OAAO,GAAO,IAAM,EAG/CmT,EAAU,CACdqL,WAAYF,EACZG,iBAAkBH,EAClBI,YAAaJ,EACbK,cAAeL,EACfM,eAAgBN,EAChBO,iBAAkBP,EAClBQ,aAAcR,EACdS,mBAAoBT,EACpBU,gBAAiBV,EACjBW,SAAUX,EACVY,aAAcZ,EACda,QAASb,GAyBX,OAtBA,SAAUpa,UACR,MAAM,SAAE4V,EAAU+D,QAASuB,EAAU1T,KAAM2T,GAAU1F,EACjDzE,GAAiB6E,QACX,8BAEV4D,EAAa7D,EAASwC,GACtBsB,EAAc9D,EAASwF,IACvBzB,EAAUuB,EACV1T,EAAO2T,EAEPnM,GAAYC,EAAS,CAAC,EAAGxU,GAEzB,MAAM4gB,EAAW,IAAIC,iBAAiBjB,GACtCgB,EAASE,QAAQ/F,EAAK1Z,MAAO,CAC3B0f,YAAY,EACZC,WAAW,EACXC,eAAe,EACfC,SAAS,IAEXvB,GAAoB,IAGf,CAAE5E,OACX,EACA9B,SACE,MAAMvS,EAAUoN,KAAK0H,OAAOlb,QAAUwT,KAAK0H,OAAOlb,eAAYqW,EAC9D,OAAO,IAAAyC,GAAE,MAAO,CAAExW,IAAK,QAAU8D,EACnC,EAGFkY,OAAkB,4BA0BRve,QAIAA,QA8FV,IAuCI8gB,GAAW,CACbnhB,MAAOyc,GACPhc,MAAMT,EAAO6T,GACX,MAAMyD,GAAa,QAAI,CAAC,GAClB4B,GAAQ,SAAI,GAEZ8B,GAAmB,QAAOpE,IAC1BW,GAAW,QAAO,aAElB,QAAE/C,GAAYkI,GAAQ1c,EAAOsX,EAAYzD,GAoB/C,OAlBA,SAAUtO,UACR,MAAM,WAAE6b,EAAU,SAAEjG,GAAaH,EAC7BzE,GAAiB6E,QACX,8BACV9D,EAAWjW,MAAQ+f,EAAWphB,EAAM6W,SAEpC,MAAM4G,EAAY5I,GAAYhB,EAAQ6J,OACtCvC,EAASwC,GAAGrG,EAAWjW,MAAOoc,GAE9BlJ,GAAYC,EAAS8C,EAAWjW,MAAOrB,GACvCuX,EAAS,IACJvX,KACAwU,EACHoD,cAAeN,EAAWjW,QAE5B6X,EAAM7X,OAAQ,GACd,SAAS,IAAMwS,EAAQpK,KAAK,QAAS6N,EAAWjW,QAAO,IAElD,CAAE6X,QAAOtB,cAAeN,EACjC,EACA2B,SACE,OAAOA,GAAOnF,KAAKoF,MAAOpF,KAAK0H,OACjC,EAGF2F,OAAkB,kCAEdE,GAAW,CACb7X,MAAO,CAAC,QAAS,cAAe,gBAAiB,iBACjDxJ,MAAO,IACFA,GAIHshB,OAAQ,CACNlhB,KAAM,CAAC2P,OAAQzB,OACfhO,QAAS,IAAM,CAAC,EAAG,IAKrBihB,OAAQ,CACNnhB,KAAM,CAACkO,MAAOyB,QACdzP,aAASqW,GAKX6K,UAAW,CACTphB,KAAM,CAACkO,MAAOyB,QACdzP,aAASqW,GAKX8K,KAAM,CACJrhB,KAAM6M,OACN3M,QAAS,GAKX0d,QAAS,CACP5d,KAAM6M,OACN3M,aAASqW,GAKXsH,QAAS,CACP7d,KAAM6M,OACN3M,aAASqW,GAKX+K,mBAAoB,CAClBthB,KAAMkO,MACNhO,aAASqW,GAKXgL,eAAgB,CACdvhB,KAAMkO,MACNhO,aAASqW,GAKXiL,QAAS,CACPxhB,KAAMkO,MACNhO,aAASqW,GAKXkL,cAAe,CACbzhB,KAAMC,QACNC,SAAS,GAQXwhB,IAAK,CACH1hB,KAAM,CAAC4W,OAAQjH,QACfzP,QAAS,YAEXyhB,mBAAoB,CAClB3hB,KAAM6M,OACN3M,aAASqW,GAEXqL,QAAS,CACP5hB,KAAMC,QACNC,aAASqW,GAEXsL,oBAAqB,CACnB7hB,KAAM6M,OACN3M,aAASqW,GAEXuL,gBAAiB,CACf9hB,KAAM6M,OACN3M,aAASqW,GAEXwL,cAAe,CACb/hB,KAAM6M,OACN3M,aAASqW,GAEXyL,cAAe,CACbhiB,KAAMC,QACNC,aAASqW,GAEX0L,uBAAwB,CACtBjiB,KAAM6M,OACN3M,aAASqW,GAEX2L,cAAe,CACbliB,KAAMC,QACNC,aAASqW,GAEX4L,oBAAqB,CACnBniB,KAAMC,QACNC,aAASqW,GAEX6L,qBAAsB,CACpBpiB,KAAMC,QACNC,SAAS,GAEX0a,iBAAkB,CAChB5a,KAAMC,QACNC,SAAS,IAGbG,MAAMT,EAAO6T,GACX,MAAMkH,GAAO,QAAI,MACX0H,GAAY,QAAS,CACzBvJ,OAAO,EACP5B,WAAY,CAAC,EACboL,YAAa,GACbC,gBAAiB,MAEX9L,QAASY,GAAqBhX,GAAMT,GACtC6W,EAAU,IACXY,EACHuG,QAAShe,EAAMge,QACfC,QAASje,EAAMie,QACfuD,UAAWxhB,EAAMwhB,UACjBO,mBAAoB/hB,EAAM+hB,mBAC1BF,cAAe7hB,EAAM6hB,cACrBC,IAAK9hB,EAAM8hB,IACXR,OAAQthB,EAAMshB,OACdG,KAAMzhB,EAAMyhB,KACZO,QAAShiB,EAAMgiB,QACfC,oBAAqBjiB,EAAMiiB,oBAC3BC,gBAAiBliB,EAAMkiB,gBACvBC,cAAeniB,EAAMmiB,cACrBC,cAAepiB,EAAMoiB,cACrBC,uBAAwBriB,EAAMqiB,uBAC9BC,cAAetiB,EAAMsiB,cACrBC,oBAAqBviB,EAAMuiB,qBAGvBhL,EAAWxB,GAAsB,YACjCyB,EAAczB,GAAsB,eACpCkF,EAAkBlF,GAAsB,mBACxCuG,EAAuBvG,GAAsB,yBACnD,QAAQa,GAAoB5W,EAAMgb,kBAElC,MAAM4H,EAAgB,CACpBC,iBAKEhP,EAAQpK,KAAK,cAAegZ,EAAUnL,WAAWwL,WAKjDjP,EAAQpK,KAAK,gBAAiBgZ,EAAUnL,WAAWyL,aAMnDlP,EAAQpK,KAAK,gBAAiBgZ,EAAUnL,WAAWgG,YACrD,EACA0F,kBAAkBC,GAChB,MAAM/G,EAAQuG,EAAUE,gBAAgBnX,MAAM0X,GAAMA,EAAEle,OAASie,EAAEje,OAC7DkX,GACFA,EAAMlD,mBAAkB,EAE5B,EACAmK,qBAAqBF,GACnB,MAAM/G,EAAQuG,EAAUE,gBAAgBnX,MAAM0X,GAAMA,EAAEle,OAASie,EAAEje,OAC7DkX,GACFA,EAAMlD,mBAAkB,EAE5B,IAGF,SAAUzT,UACJvF,EAAMgb,mBACRzE,GAAiB6E,EAAI7E,GAAiB6E,SAAY,oCAEpD,MAAM,IACJ1J,EAAG,IACH0R,EAAG,KACHhO,EAAI,aACJiO,EAAY,OACZjJ,EAAM,SACNe,GACEnb,EAAMgb,iBACNzE,GAAiB6E,QACX,8BAEV,IACEvE,EAAQyM,sBAAyBzM,EAAQyM,gBAK3C,CAJE,MAAOC,GACPrN,QAAQqN,MACN,yEAAyEA,EAAM/a,UAEnF,OAEM2M,GAAiBC,GAEvB,MAAMoO,EACkB,iBAAf3M,EAAQiL,IAAkBsB,EAAIvM,EAAQiL,KAAOjL,EAAQiL,IAC9DjL,EAAQiL,IAAM0B,GAAcJ,EAAIK,SAEhC,MAAMjP,EAAU,CACd+C,SAAS2E,GACP,QAAwBvF,IAApBuF,EAAM/E,UACR,QAA+BR,IAA3B8L,EAAUiB,aACZjB,EAAUC,YAAY3d,KAAKmX,OACtB,CACL,MAAMyH,EAAQlB,EAAUE,gBAAgBnX,MACrC0X,GACCA,EAAEtL,cAAcgM,cAChB1H,EAAMtE,cAAcgM,cAEnBD,IACHlB,EAAUiB,aAAanM,SAAS2E,GAChCuG,EAAUE,gBAAgB5d,KAAKmX,GAEnC,EAEoB,IAAlBA,EAAM9E,SACRqL,EAAUnL,WAAWC,SAAS2E,EAAMtE,cAExC,EACAJ,YAAY0E,QACcvF,IAApBuF,EAAM/E,iBACuBR,IAA3B8L,EAAUiB,aACZjB,EAAUC,YAAcD,EAAUC,YAAYmB,QAC3CX,GAAMA,EAAEle,OAASkX,EAAMlX,QAG1Byd,EAAUiB,aAAalM,YAAY0E,EAAMtE,eACzC6K,EAAUE,gBAAkBF,EAAUE,gBAAgBkB,QACnDX,GACCA,EAAEtL,cAAcgM,cAChB1H,EAAMtE,cAAcgM,gBAI5BnB,EAAUnL,WAAWE,YAAY0E,EAAMtE,cACzC,EAEA0E,qBAAqBwH,GACnBrB,EAAUiB,aAAeI,EACzBrB,EAAUC,YAAYqB,SAAS7H,IAC7BuG,EAAUiB,aAAanM,SAAS2E,EAAM,IAExCuG,EAAUC,YAAc,GAExBzH,EAAgB6I,EAClB,EAEA7I,gBAAgB+I,GACdvB,EAAUnL,WAAW2M,WAAWD,EAASpM,cAC3C,EAEAsM,QAAQvP,GACN,MAAM8M,EAAOgB,EAAUnL,WAAWwL,UAC9BnO,IAAW8M,GACbgB,EAAUnL,WAAW4M,QAAQvP,EAAQ,CACnCwP,SAASnkB,EAAMwiB,sBAA+B,MAGpD,EAEA4B,sBAAsBzP,GACpB8N,EAAUf,mBAAqB/M,CACjC,EACA0P,kBAAkB1P,GAChB8N,EAAUd,eAAiBhN,CAC7B,EACA2P,WAAW3P,GACT8N,EAAUb,QAAUjN,CACtB,EACA4P,OAAO5P,GACL,MAAM6P,EAAa/B,EAAUnL,WAAWgG,YACxCmF,EAAUnL,WAAWT,QAAQiL,IAAMnN,EACnC8N,EAAUnL,WAAWmN,UAAUD,EAAY,CACzCL,SAAS,EACTvC,QAAS,CAAC,EAAG,IAEjB,EACA6C,UAAUlD,GACRkB,EAAUnL,WAAWmN,UAAUlD,EAAQ,CACrC4C,SAASrQ,KAAK0O,sBAA+B,MAEjD,EACAkC,UAAU/P,GACR,IAAKA,EACH,OAEF,MAAMgQ,EAAYtB,EAAa1O,GAC/B,IAAKgQ,EAAUC,UACb,OAEF,MAAMC,EACJpC,EAAUqC,eAAiBrC,EAAUnL,WAAWgG,YAC5CyH,GAAiBF,EAAUG,OAAOL,EAAW,GAC/CI,IACFtC,EAAUqC,cAAgBH,EAC1BlC,EAAUnL,WAAWmN,UAAUE,EAAW7Q,KAAKmR,kBAEnD,EAEAC,UAAUvQ,GACR,GAAc,MAAVA,EACF,OAEF,MAAMwQ,EAAY/K,EAAOzF,GACnByQ,EACJ3C,EAAU4C,eAAiB5C,EAAUnL,WAAWyL,YAEhDqC,EAAUE,MAAQH,EAAUG,KAC5BF,EAAUG,MAAQJ,EAAUI,MAE5B9C,EAAU4C,cAAgBF,EAC1B1C,EAAUnL,WAAWkO,MAAML,EAAW,CACpChB,SAASrQ,KAAK0O,sBAA+B,OAGnD,GAGFnM,GAAqBkB,EAAU/C,EAAQ+C,UACvClB,GAAqBmB,EAAahD,EAAQgD,aAC1CnB,GAAqB4E,EAAiBzG,EAAQyG,iBAC9C5E,GAAqBiG,EAAsB9H,EAAQ8H,sBAEnDmG,EAAUnL,WAAa5F,EAAIqJ,EAAK1Z,MAAOwV,GAEvCtC,GAAYC,EAASiO,EAAUnL,WAAYtX,GAC3C,MAAMyd,EAAY5I,GAAYhB,EAAQ6J,OAEtC+E,EAAUnL,WAAWqG,GACnB,UACAlK,GAASmP,EAAcC,eAAgB,MAEzCJ,EAAUnL,WAAWqG,GAAG,aAAciF,EAAcI,mBACpDP,EAAUnL,WAAWqG,GACnB,gBACAiF,EAAcO,sBAEhBhI,EAASwC,GAAG8E,EAAUnL,WAAYmG,GAClCgF,EAAUvJ,OAAQ,GAClB,SAAS,IAAMrF,EAAQpK,KAAK,QAASgZ,EAAUnL,aAAY,KAG7D,SAAgB,KACVmL,EAAUnL,YACZmL,EAAUnL,WAAWoD,QACvB,IAGF,MAAM9C,GAAgB,SAAS,IAAM6K,EAAUnL,aACzC4B,GAAQ,SAAS,IAAMuJ,EAAUvJ,QACvC,MAAO,CAAE6B,OAAM7B,QAAOtB,gBACxB,EACAqB,SACE,OAAO,IAAAG,GACL,MACA,CAAE3M,MAAO,CAAE0D,MAAO,OAAQsV,OAAQ,QAAU7iB,IAAK,QACjDkR,KAAKoF,MAAQpF,KAAK0H,OAAOlb,UAAY,CAAC,EAE1C,EAGF+gB,OAAkB,2BAElB,MAAMqE,GAAU,IACX5O,GACHC,KAAM,CACJ3W,KAAM4W,OACN1W,QAAS,cAEXqlB,UAAW,CACTvlB,KAAMC,QACN6W,QAAQ,EACR5W,SAAS,GAEX8Z,OAAQ,CACNha,KAAM,CAAC2P,OAAQzB,OACf4I,QAAQ,EACR5W,QAAS,MAEXyM,KAAM,CACJ3M,KAAM,CAAC2P,QACPzP,QAAS,KAAe,EACxB4W,QAAQ,GAEV0O,aAAc,CACZxlB,KAAM6M,OACNiK,QAAQ,EACR5W,QAAS,OAIPulB,GAAU,CAAC7lB,EAAOsX,EAAYzD,KAClC,MAAQgD,QAAS8F,EAAcnI,QAASoI,GAAiBvF,GACvDrX,EACAsX,EACAzD,GAEIgD,EAAU,IACX8F,KACA3c,GAGCwU,EAAU,IACXoI,EACHkJ,aAAazkB,GACPiW,EAAWjW,MAAM0kB,WACnB1kB,EACIiW,EAAWjW,MAAM0kB,SAASC,SAC1B1O,EAAWjW,MAAM0kB,SAASE,UAElC,EACAC,WAAW/iB,GACT0Q,EAAQpK,KAAK,gBAAiBtG,EAAMgjB,QACpCtS,EAAQpK,KAAK,iBAAkBtG,EAAMgjB,OACvC,EACAC,UAAUzR,GACR,GAAc,MAAVA,GAIA2C,EAAWjW,MAAO,CACpB,MAAMglB,EAAY/O,EAAWjW,MAAMilB,YAC9BD,GAAcA,EAAUrB,OAAOrQ,IAClC2C,EAAWjW,MAAM+kB,UAAUzR,EAE/B,CACF,GAEF,MAAO,CAAEkC,UAASrC,UAAS,EAM7B,IAAI+R,GAAW,CACbvhB,KAAM,UACNhF,MAAO0lB,GACPjlB,MAAMT,EAAO6T,GACX,MAAMyD,GAAa,QAAI,CAAC,GAClB4B,GAAQ,SAAI,GAEZ8B,GAAmB,QAAOpE,IAC1BW,GAAW,QAAO,aAExB,QAAQ,oBAAoB,MAAQD,EAAWjW,MAAMmlB,gBACrD,QACE,iBACC9G,GAAUpI,EAAWjW,MAAMmlB,aAAa/G,UAAYC,KAEvD,QACE,WACC+G,GAAYnP,EAAWjW,MAAM0d,SAAWzH,EAAWjW,MAAM0d,QAAQ0H,KAEpE,MAAM,QAAE5P,EAAO,QAAErC,GAAYqR,GAAQ7lB,EAAOsX,EAAYzD,GA4BxD,YA3BqB8C,IAAjBE,EAAQ9J,aAIH8J,EAAQ9J,MAGjB,SAAUxH,UACR,MAAM,OAAEmhB,EAAM,SAAEvL,GAAaH,EACzBzE,GAAiB6E,QACX,8BACV9D,EAAWjW,MAAQqlB,EAAO1mB,EAAMoa,OAAQvD,GAExC,MAAM4G,EAAY5I,GAAYhB,EAAQ6J,OACtCvC,EAASwC,GAAGrG,EAAWjW,MAAOoc,GAE9BnG,EAAWjW,MAAMsc,GAAG,OAAQlK,GAASe,EAAQ0R,WAAY,MACzD3R,GAAYC,EAAS8C,EAAWjW,MAAOrB,GACvCuX,EAAS,IACJvX,KACAwU,EACHoD,cAAeN,EAAWjW,QAE5B6X,EAAM7X,OAAQ,GACd,SAAS,IAAMwS,EAAQpK,KAAK,QAAS6N,EAAWjW,QAAO,IAGlD,CAAE6X,QAAOtB,cAAeN,EACjC,EACA2B,SACE,OAAOA,GAAOnF,KAAKoF,MAAOpF,KAAK0H,OACjC,EAGF+K,OAAkB,8BAElB,MAAMI,GAAU,IACXlN,GACHmN,QAAS,CACPxmB,KAAMkO,MACNhO,QAAS,IAAM,IAEjBumB,aAAc,CACZzmB,KAAM6M,OACNiK,QAAQ,EACR5W,QAAS,GAEXwmB,OAAQ,CACN1mB,KAAMC,QACN6W,QAAQ,EACR5W,SAAS,IA8BPymB,GAAU,IACXJ,IAiHL,MAAMK,GAAU,IACXhnB,GACH0G,QAAS,CACPtG,KAAM4W,OACN1W,QAAS,OA0Kb,MAAM2mB,GAAU,IACXrJ,GACHsJ,IAAK,CACH9mB,KAAMC,QACNC,SAAS,GAEX6mB,WAAY,CACV/mB,KAAM4W,OACN1W,QAAS,OAEX8mB,aAAc,CACZhnB,KAAMC,QACNC,SAAS,GAEX+mB,IAAK,CACHjnB,KAAM4W,OACN1W,QAAS,OAIPgnB,GAAU,CAACtnB,EAAOsX,KACtB,MACET,QAAS0Q,EACT/S,QAASgT,GACPtJ,GAAQle,EAAOsX,GACbT,EAAU,IACX0Q,EACHL,IAAKlnB,EAAMknB,IACXC,WAAYnnB,EAAMmnB,WAClBC,aAAcpnB,EAAMonB,cAEtB,MAAO,CACLvQ,UACArC,QAAS,IACJgT,GAEN,EAGH,IAAIC,GAAW,CACbznB,MAAOinB,GACPxmB,MAAMT,EAAO6T,GACX,MAAMyD,GAAa,QAAI,CAAC,GAElB0D,GAAmB,QAAOpE,IAC1BW,GAAW,QAAO,aAElB,QAAEV,EAAO,QAAErC,GAAY8S,GAAQtnB,EAAOsX,GAoB5C,OAlBA,SAAU/R,UACR,MAAM,UAAEmiB,EAAS,SAAEvM,GAAaH,EAC5BzE,GAAiB6E,QACX,8BACV9D,EAAWjW,MAAQqmB,EAAU1nB,EAAMqnB,IAAKxQ,GAExC,MAAM4G,EAAY5I,GAAYhB,EAAQ6J,OACtCvC,EAASwC,GAAGrG,EAAWjW,MAAOoc,GAE9BlJ,GAAYC,EAAS8C,EAAWjW,MAAOrB,GACvCuX,EAAS,IACJvX,KACAwU,EACHoD,cAAeN,EAAWjW,SAE5B,SAAS,IAAMwS,EAAQpK,KAAK,QAAS6N,EAAWjW,QAAO,IAGlD,CAAEuW,cAAeN,EAC1B,EACA2B,SACE,OAAO,IACT,EAGFwO,OAAkB,iCA2ERpnB,QAWAA,QA4BV,ICnmFA,IAA4BP,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,eACRC,MAAO,CACL2nB,kBAAmB,KACnBC,QAAS,CAAExnB,KAAMC,UAEnBI,MAAMC,GAER,MAAMV,EAAQU,GAON,QAAEknB,EAAO,kBAAED,IAAsB1mB,EAAAA,EAAAA,IAAOjB,GAEhD,MAAO,CAAC0F,EAAUC,KACRS,EAAAA,EAAAA,IAAOuhB,GAAmBE,WAC7B5hB,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,KAAanC,EAAAA,EAAAA,IAAO0hB,IAAU,CAC3CjqB,IAAK,EACL,UAAW,EAACuI,EAAAA,EAAAA,IAAOuhB,GAAmBE,UAAUzhB,EAAAA,EAAAA,IAAOuhB,GAAmBI,YACzE,CACDznB,SAASgG,EAAAA,EAAAA,KAAS,IAAM,EACtBD,EAAAA,EAAAA,KAAaD,EAAAA,EAAAA,IAAO4hB,IAAQ,CAC1B,WAAY,kBAAiB5hB,EAAAA,EAAAA,IAAOwhB,GAAW,QAAU,eACzDxJ,SAAU,CAAC,GAAI,KACd,KAAM,EAAG,CAAC,gBAEf3V,EAAG,GACF,EAAG,CAAC,cACPvB,EAAAA,EAAAA,IAAoB,IAAI,EAE9B,IC3CA,MAAM,GAAc,GAEpB,U,iCCFA,MAAMiC,GAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzE7L,GAAa,CAAEC,GAAI,eACnBC,GAAa,CACjBI,IAAK,EACLF,MAAO,qBAEHD,GAAa,CAAEG,IAAK,GACpBD,GAA2BuL,IAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,IAAK,CACxFhJ,MAAO,gBACP,cAAe,QACd,MAAO,KACJG,GAAa,CACjBD,IAAK,EACLF,MAAO,UA6BT,QAA4BmC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,QACRC,MAAO,CACL6I,YAAa,KACb8e,kBAAmB,CAAErnB,QAAS,KAAM,CAAoB,KAE1DG,MAAMC,GAER,MAAMV,EAAQU,EAING,GAAQC,EAAAA,GAAAA,MAER,YAAE+H,EAAW,kBAAE8e,IAAsB1mB,EAAAA,EAAAA,IAAOjB,GAC5CioB,GAAarlB,EAAAA,EAAAA,IAEhB,MACG2e,GAASpgB,EAAAA,EAAAA,KAAS,IAAMmc,MACxB/b,GAAqCJ,EAAAA,EAAAA,KACzC,IAAMN,EAAMW,QAAQC,GAAAA,GAAAA,QAAAA,cAEhB6f,GAASngB,EAAAA,EAAAA,KAAS,IAAM4hB,EAAUxB,KAClC2G,GAAU/mB,EAAAA,EAAAA,KAAS,IACvBnB,EAAM6I,aAAe7I,EAAM6I,YAAYyK,IACnC6U,EAAWnoB,EAAM6I,YAAYyK,KAC7B,CAAC,IAED8U,GAAyBjnB,EAAAA,EAAAA,KAAS,IACtCnB,EAAM6I,aAAe7I,EAAM6I,YAAYwf,UAAUrZ,OAAS,EACtD,CACE6Y,SAAU7nB,EAAM6I,YAAYwf,UAAU,GAAGR,SACzCE,UAAW/nB,EAAM6I,YAAYwf,UAAU,GAAGN,WAE5C,CAAC,IAEDO,GAAuBnnB,EAAAA,EAAAA,KAAS,IACpCnB,EAAM6I,aAAe7I,EAAM6I,YAAYwf,UAAUrZ,OAAS,EACtD,CACE6Y,SACE7nB,EAAM6I,YAAYwf,UAAUroB,EAAM6I,YAAYwf,UAAUrZ,OAAS,GAC9D6Y,SACLE,UACE/nB,EAAM6I,YAAYwf,UAAUroB,EAAM6I,YAAYwf,UAAUrZ,OAAS,GAC9D+Y,WAEP,CAAC,IAEDQ,GAAe3lB,EAAAA,EAAAA,KAAI,GAEzB,SAASulB,EAAWK,GAClB,IAAKA,GAA6B,KAAfA,EACjB,IACE,MAAMC,EAAWnV,IACf,IAAIoV,WAAYC,gBAAgBH,EAAY,aAE9C,MAAO,CAAEC,W,CACT,MAAOxF,GAEP,OADA/M,QAAQqN,MAAM,uBACP,CAAC,C,CAGZ,MAAO,CAAC,CACV,CACA,SAASR,EAAUxB,GACjB,MAAO,EACJA,EAAOlgB,MAAM,GAAG,GAAKkgB,EAAOlgB,MAAM,GAAG,IAAM,GAC3CkgB,EAAOlgB,MAAM,GAAG,GAAKkgB,EAAOlgB,MAAM,GAAG,IAAM,EAEhD,CACA,SAASojB,EAAUlD,GACb0G,EAAW5mB,OAAOuW,eACpBqQ,EAAW5mB,OAAOuW,cAAc6M,UAAUlD,EAE9C,CACA,SAASjE,IACP,OAAOtd,EAAM6I,YACT,CACE,CACE7I,EAAM6I,YAAYrI,QAAQ+gB,OAAO,GACjCvhB,EAAM6I,YAAYrI,QAAQ+gB,OAAO,IAEnC,CACEvhB,EAAM6I,YAAYrI,QAAQ+gB,OAAO,GACjCvhB,EAAM6I,YAAYrI,QAAQ+gB,OAAO,KAGrC,EACN,CACA,SAASqH,IACPX,EAAW5mB,OAAOuW,cAAc6M,UAAUnH,IAC5C,CACA,SAASuL,IACPN,EAAalnB,OAASknB,EAAalnB,MAC9BknB,EAAalnB,OAChB2S,YAAW,KACT4U,GAAW,GACV,IAEP,CAEF,MAAO,CAACljB,EAAUC,KAChB,MAAMmjB,GAAyBjjB,EAAAA,EAAAA,IAAkB,eAEjD,OAAQI,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3I,GAAY,EAC1D6I,EAAAA,EAAAA,IAAOyC,GAAatI,UAChB0F,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOzI,OACzCwI,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOxI,GAAY,EACnD0I,EAAAA,EAAAA,IAAOyC,GAAarI,QAAQqC,WACxBoD,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAaugB,EAAwB,CAClDjrB,IAAK,EACLkrB,WAAYR,EAAalnB,MACzB,sBAAuBsE,EAAO,KAAOA,EAAO,GAAM2B,GAAkBihB,EAAclnB,MAAQiG,IACzF,CACDhH,SAASgG,EAAAA,EAAAA,KAAS,IAAM,EACtBK,EAAAA,EAAAA,GAAoB,MAAO,CACzBhJ,OAAOwI,EAAAA,EAAAA,IAAgB,CAAC,oBAAqB,CAAE,iBAAkBoiB,EAAalnB,UAC7E,EACA+E,EAAAA,EAAAA,IAAO8hB,GAASO,WAAYriB,EAAAA,EAAAA,IAAOkb,IAAqC,KAA1Blb,EAAAA,EAAAA,IAAOmb,GAAQvS,SACzD/I,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,KAAanC,EAAAA,EAAAA,IAAO4iB,IAAO,CACxCnrB,IAAK,EACL4jB,KAAM,GACNxD,QAAS,GACTqD,QAAQlb,EAAAA,EAAAA,IAAOkb,GACfC,QAAQnb,EAAAA,EAAAA,IAAOmb,GACf0H,QAAS,aACTrmB,IAAKqlB,EACLiB,QAASvjB,EAAO,KAAOA,EAAO,GAAM2B,GAAiBmd,GAAUre,EAAAA,EAAAA,IAAOmb,MACrE,CACDjhB,SAASgG,EAAAA,EAAAA,KAAS,IAAM,EACtBD,EAAAA,EAAAA,KAAaD,EAAAA,EAAAA,IAAO+iB,MACpB9iB,EAAAA,EAAAA,KAAaD,EAAAA,EAAAA,IAAOiV,IAAW,CAC7Bd,SAAU,UACV5c,MAAO,cACPsJ,QAAS2hB,GACR,CACDtoB,SAASgG,EAAAA,EAAAA,KAAS,IAAM,CACtB1I,MAEF6K,EAAG,KAELpC,EAAAA,EAAAA,KAAaD,EAAAA,EAAAA,IAAOiV,IAAW,CAC7Bd,SAAU,UACV5c,MAAO,cACPsJ,QAAS4hB,GACR,CACDvoB,SAASgG,EAAAA,EAAAA,KAAS,IAAM,EACtBK,EAAAA,EAAAA,GAAoB,IAAK,CACvBhJ,OAAOwI,EAAAA,EAAAA,IAAgB,UAASoiB,EAAalnB,MAAQ,WAAa,eAClE,cAAe,QACd,KAAM,MAEXoH,EAAG,KAELpC,EAAAA,EAAAA,KAAaD,EAAAA,EAAAA,IAAOgjB,IAAa,CAC/B/B,IAAK,IAAGjhB,EAAAA,EAAAA,IAAOijB,GAAAA,EAAPjjB,0CACR6Q,aAAa7Q,EAAAA,EAAAA,IAAO7E,GAAW+nB,gBAC/B/H,QAAQnb,EAAAA,EAAAA,IAAOmb,IACd,KAAM,EAAG,CAAC,MAAO,cAAe,YACnClb,EAAAA,EAAAA,KAAaD,EAAAA,EAAAA,IAAOmjB,IAAW,CAC7BzM,SAAS1W,EAAAA,EAAAA,IAAO8hB,GAASO,UACxB,KAAM,EAAG,CAAC,aACZriB,EAAAA,EAAAA,IAAOuhB,GAAmBE,WACtB5hB,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,KAAanC,EAAAA,EAAAA,IAAO0hB,IAAU,CAC3CjqB,IAAK,EACL,UAAW,EAC7BuI,EAAAA,EAAAA,IAAOuhB,GAAmBE,UAC1BzhB,EAAAA,EAAAA,IAAOuhB,GAAmBI,YAEP,KAAM,EAAG,CAAC,cACb7gB,EAAAA,EAAAA,IAAoB,IAAI,IAC5Bb,EAAAA,EAAAA,KAAaD,EAAAA,EAAAA,IAAOojB,IAAc,CAChCxkB,KAAMU,EAAKe,GAAG,6BACd,aAAc,WACb,CACDnG,SAASgG,EAAAA,EAAAA,KAAS,IAAM,EACrBF,EAAAA,EAAAA,IAAOgiB,GAAwBP,WAC3B5hB,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAakhB,GAAc,CACxC5rB,IAAK,EACL8pB,mBAAmBvhB,EAAAA,EAAAA,IAAOgiB,GAC1BR,SAAS,GACR,KAAM,EAAG,CAAC,wBACb1gB,EAAAA,EAAAA,IAAoB,IAAI,IAC3Bd,EAAAA,EAAAA,IAAOkiB,GAAsBT,WACzB5hB,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAakhB,GAAc,CACxC5rB,IAAK,EACL8pB,mBAAmBvhB,EAAAA,EAAAA,IAAOkiB,GAC1BV,SAAS,GACR,KAAM,EAAG,CAAC,wBACb1gB,EAAAA,EAAAA,IAAoB,IAAI,MAE9BuB,EAAG,GACF,EAAG,CAAC,YAETA,EAAG,GACF,EAAG,CAAC,SAAU,aACjBvB,EAAAA,EAAAA,IAAoB,IAAI,IAC3B,MAELuB,EAAG,GACF,EAAG,CAAC,kBACNxC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOpI,IAAY0I,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,oBAAqB,QAE9G,CAEJ,ICpPA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,U,WCLA,MACMlJ,GAAa,CAAEI,MAAO,kBAqC5B,QAA4BmC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,QACRC,MAAO,CACLC,SAAU,KACVypB,eAAgB,CAAEtpB,KAAMC,SACxBH,OAAQ,KACR2I,YAAa,KACb8e,kBAAmB,CAAErnB,QAAS,KAAM,CAAoB,KAE1DG,MAAMC,GAER,MAAMV,EAAQU,EAINqI,GAAQC,EAAAA,EAAAA,MACRnI,GAAQC,EAAAA,GAAAA,MAER,SAAEb,EAAQ,kBAAE0nB,EAAiB,YAAE9e,IAAgB5H,EAAAA,EAAAA,IAAOjB,GACtDQ,GAAiCW,EAAAA,EAAAA,KACrC,IAAMnB,EAAM6I,YAAYrI,UAEpB2K,GAAgCvI,EAAAA,EAAAA,IACpCmG,EAAM9D,OAAOR,WAAasE,EAAM9D,OAAOkG,UAAY,MAE/CyH,GAA+CzR,EAAAA,EAAAA,KAAS,IAC5DX,EAAQa,MAAMoR,SAASzD,OAAS,GAAK7D,EAAU9J,MAC3Cb,EAAQa,MAAMoR,UAAUtH,EAAU9J,MAAQ,GAC1C,OAEAsoB,GAA6B/mB,EAAAA,EAAAA,KAAI,GACjC6E,GAAQtG,EAAAA,EAAAA,KAAS,IACrBnB,EAAME,OACFF,EAAME,OAAOsL,MACV/D,GAAUA,EAAMjK,KAAOwC,EAAM6I,YAAYrI,QAAQc,WAEpD,CAAC,IAEDiI,GAAgBpI,EAAAA,EAAAA,KAAS,IAC7ByoB,EAAiBppB,EAAQa,MAAOuR,EAAQvR,SAG1C,SAASwoB,EACPrpB,EACAkpB,EACAve,GAEA,MAAMJ,EACJ2e,GAAkBve,GAA2B,IAAdA,EAC3B,aAAa3K,EAAQhD,cAAc2N,EAAY,KAC9Cue,GAAkBlpB,EAAQspB,iBAC3B,aAAatpB,EAAQspB,mBACrB,KACAze,EACJqe,GAAkBve,GAAaA,EAAY3K,EAAQiS,SAASzD,OACxD,aAAaxO,EAAQhD,cAAc2N,EAAY,KAC9Cue,GAAkBlpB,EAAQupB,aAC3B,aAAavpB,EAAQupB,eACrB,KACN,MAAO,CACLhf,cACAM,UAEJ,CACA,SAASue,EACPppB,EACAoS,GAEA,MAAMoX,EAAOH,EACXrpB,EACAR,EAAM0pB,eACNve,EAAU9J,OAAS8J,EAAU9J,MAAQ,MAEjCgB,GAAcmB,EAAAA,GAAAA,KAClBC,EAAAA,GAAAA,IACEzD,EAAM6I,YAAYrI,QAAQkD,aAC1B1D,EAAMC,SAAS0D,UAEjB3D,EAAMC,SAASgqB,aAEjB,MAAO,CACLjc,OAAQ4E,EAAUA,EAAQ5E,OAASxN,EAAQwN,OAC3CL,SAAUiF,EAAUA,EAAQsX,UAAY1pB,EAAQ0pB,UAChDlmB,SAAU4O,EAAUA,EAAQ5O,SAAWxD,EAAQwD,SAC/CiK,QAAS2E,EAAUA,EAAQ3E,QAAUzN,EAAQyN,QAC7CrK,SAAUgP,EAAUA,EAAQhP,SAAWpD,EAAQoD,SAC/CkK,OAAQ8E,EAAUA,EAAQuX,QAAU3pB,EAAQ2pB,QAC5Ctc,SAAU+E,EAAUA,EAAQwX,UAAY5pB,EAAQ4pB,UAChDrc,OAAQ6E,EAAUA,EAAQyX,QAAU7pB,EAAQ6pB,QAC5C7c,OAAQoF,EAAUA,EAAQpF,OAAShN,EAAQgN,OAC3CnC,QAAS2e,EAAK3e,QACdkC,OAAQqF,EAAUA,EAAQrF,OAAS/M,EAAQ+M,OAC3CxC,YAAaif,EAAKjf,YAClBQ,QAASqH,EAAU,GAAKpS,EAAQ+K,QAChCJ,UAAWyH,EAAUA,EAAQ0X,WAAa,KAC1CnoB,MAAO3B,EAAQ2B,MACf/B,KAAMJ,EAAM0pB,eAAiB,UAAY,UACzCrnB,YAAaA,EAAYqB,aACzBmJ,WAAY+F,EAAU,KAAOpS,EAAQ+pB,YACrC3d,aAAcgG,EAAU,KAAOpS,EAAQgqB,cACvC3nB,SAAUrC,EAAQqC,SAClB4B,UAAWjE,EAAQhD,GACnB8E,YAAaD,EAAY8B,aAE7B,CACA,SAASsmB,EAAmBppB,GAC1BsoB,EAAatoB,MAAQA,CACvB,CACA,SAASqpB,EAAcjmB,GACrB5D,EAAM0D,SAASC,GAAAA,GAAAA,QAAAA,eAAuC,CACpDC,UAAWA,GAEf,CAWF,OATEa,EAAAA,EAAAA,KACE,IAAMyD,EAAM9D,OAAOkG,YACnB5F,UACMolB,IACFxf,EAAU9J,OAASspB,E,IAKpB,CAACjlB,EAAUC,KAChB,MAAMilB,GAAmB/kB,EAAAA,EAAAA,IAAkB,SACrCG,GAAkBH,EAAAA,EAAAA,IAAkB,QAE1C,OAAQI,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3I,GAAY,CAC1DosB,EAAatoB,QACT4E,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAaqiB,EAAkB,CAC5C/sB,IAAK,EACLsE,MAAOuD,EAAKe,GAAG,uBACf+B,QAAS9C,EAAKe,GAAG,0CACjBokB,gBAAiBllB,EAAO,KAAOA,EAAO,GAAM2B,GAAiBojB,GAActkB,EAAAA,EAAAA,IAAOmD,GAAe9E,YACjGqmB,eAAgBnlB,EAAO,KAAOA,EAAO,GAAM2B,GAAiBmjB,GAAmB,KAC9E,KAAM,EAAG,CAAC,QAAS,cACtBvjB,EAAAA,EAAAA,IAAoB,IAAI,IAC5Bb,EAAAA,EAAAA,IAAaL,EAAiB,KAAM,CAClC7D,OAAOmE,EAAAA,EAAAA,KAAS,IAAM,EACpBD,EAAAA,EAAAA,IAAa0kB,EAAkB,CAC7BtjB,OAAOrB,EAAAA,EAAAA,IAAOqB,GACd8B,eAAenD,EAAAA,EAAAA,IAAOmD,GACtByhB,eAAgBrlB,EAAO,KAAOA,EAAO,GAAM2B,GAAiBmjB,GAAmB,KAC9E,KAAM,EAAG,CAAC,QAAS,qBAExB/jB,SAASJ,EAAAA,EAAAA,KAAS,IAAM,EACtBD,EAAAA,EAAAA,IAAa4kB,GAAY,CACvBpiB,aAAazC,EAAAA,EAAAA,IAAOyC,GACpB8e,mBAAmBvhB,EAAAA,EAAAA,IAAOuhB,IACzB,KAAM,EAAG,CAAC,cAAe,uBAC5BthB,EAAAA,EAAAA,IAAa6kB,GAAa,CACxB3hB,eAAenD,EAAAA,EAAAA,IAAOmD,GACtB0C,kBAAkB7F,EAAAA,EAAAA,IAAOnG,GAAU6D,eACnCuJ,iBAAiBjH,EAAAA,EAAAA,IAAOnG,GAAUkrB,gBACjC,KAAM,EAAG,CAAC,gBAAiB,mBAAoB,uBAEpD1iB,EAAG,KAEL,CAEJ,ICnMA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,U,WCNA,MAAM2iB,GAAyB5tB,IAC7B,MAAM6tB,EAAkBhhB,SAASihB,eAAe9tB,GAChD,GAAI6tB,EAAiB,CACnB,IAAIE,EAAgBF,EAAgBG,cAAc,MAKlD,OAJKD,IACHA,EAAgBlhB,SAASC,cAAc,MACvC+gB,EAAgB3gB,YAAY6gB,IAEvBA,C,CAET,MAAM,IAAIE,MAAM,sBAAsB,EAG3BC,GAAmB,CAC9BluB,GAAI,aACJmuB,YACEC,EACAhY,EACAiD,GAEA,MAAMgV,EAAKT,GAAsBvU,EAAQiV,aACzC,MAAOD,EAAGE,WACRF,EAAGE,WAAWrR,SAGhB,MAAMsR,EAAcJ,EAAM/U,QAAQoV,SAASC,QAAQC,QAAQC,eACvDR,EAAM/U,QAAQoV,SAASC,QAAQC,QAAQC,eAAeR,GACtD,GAEJI,EAAYjI,SAASsI,IACnB,MAAMC,EAAKjiB,SAASC,cAAc,MAClCgiB,EAAGC,QAAU,UACe5V,IAAtB0V,EAAKG,eACPZ,EAAMa,qBACJJ,EAAKG,cACJZ,EAAMc,iBAAiBL,EAAKG,eAE/BZ,EAAMe,S,EAIV,MAAMC,EAAWviB,SAASC,cAAc,SACpCsiB,IACFA,EAASxsB,KAAO,WAChBwsB,EAASpvB,GAAK6uB,EAAKQ,KACnBD,EAAS7lB,SAAWslB,EAAKS,QAG3B,MAAMD,EAAOxiB,SAAS0iB,eAAeV,EAAKQ,MAEpCG,EAAU3iB,SAASC,cAAc,QACnC0iB,IACFA,EAAQvgB,MAAMwgB,WAAajW,OAAOqV,EAAKa,WACvCF,EAAQvgB,MAAM0gB,YAAcnW,OAAOqV,EAAKe,cAG1Cd,EAAG5hB,YAAYkiB,GACfN,EAAG5hB,YAAYmiB,GACfP,EAAG5hB,YAAYsiB,GACfnB,EAAGnhB,YAAY4hB,EAAG,GAEtB,G,0BC5DF,MAAMnjB,GAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzE7L,GAAa,CAAEC,GAAI,iBACnBC,GAAa,CAAEE,MAAO,eACtBD,GAAa,CAAC,WACdE,GAAa,CAAC,WACdE,GAA2BqL,IAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,MAAO,CAAEnJ,GAAI,gBAAkB,MAAO,KACrHO,GAAa,CAAEJ,MAAO,cACtBM,GAAa,CAAEN,MAAO,oBACtBO,GAAa,CAAEP,MAAO,mBACtBQ,GAAa,CAAC,WAuBpB,QAA4B2B,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,QACRC,MAAO,CACLC,SAAU,KACV4I,YAAa,MAEfW,MAAO,CAAC,kBACR/I,MAAMC,GAAc,KAAE+I,IAExB,MAAMzJ,EAAQU,GASN,EAAEC,IAAMC,EAAAA,EAAAA,MAERysB,GAAkBzqB,EAAAA,EAAAA,KAAI,GACtB0qB,GAAuB1qB,EAAAA,EAAAA,KAAI,GAC3B2qB,GAA2CpsB,EAAAA,EAAAA,KAAS,KACxDqsB,EAAAA,GAAAA,IAAYxtB,EAAM6I,YAAYwf,UAAW1nB,EAAGX,EAAMC,SAAS6D,kBAEvD2pB,EAAaC,EAAU,MACvBC,EAAYD,EAAU,KACtBrF,GAA4ClnB,EAAAA,EAAAA,KAAS,KAAM,CAC/DgrB,OAAQkB,EAAgBhsB,MACpBksB,EAASlsB,MAAMusB,gBACfL,EAASlsB,MAAMwsB,gBACnBN,SAAUO,KAAKC,MACbD,KAAKE,UAAU,CACbT,EAASlsB,MAAMksB,SAAS3f,MACxB2f,EAASlsB,MAAMksB,SAASU,iBAIxB/c,GAA2C/P,EAAAA,EAAAA,KAC/C,IAAMosB,EAASlsB,MAAM6P,cAEjB2F,GAAU1V,EAAAA,EAAAA,KAA+B,KAAM,CACnD+sB,YAAY,EACZC,qBAAqB,EACrBC,WAAW,EACXC,OAAQ,CACNzM,QAAS,CACP0M,IAAK,KAGTC,OAAQ,CACN,CAAClB,EAAgBhsB,MAAQ,YAAc,aAAc,CACnDmtB,KAAM,CACJC,iBAAiB,GAEnBC,MAAO,CACLC,MAAO,GACP7f,SAAU,SAAUzN,GAClB,OAAOgsB,EAAgBhsB,MACnB4L,OAAO5L,GAAO6C,QAAQ,GACtB0qB,EAAevtB,EACrB,GAEFjB,KAAM,SACNmhB,OAAQ,OACRpf,MAAO,CACLkX,SAAS,EACTwT,KAAMQ,EAAgBhsB,MAClBV,EAAE,qBAAuB,KAAK8sB,KAC9B9sB,EAAE,uBAGVkuB,OAAQ,CACNL,KAAM,CACJC,iBAAiB,GAEnBlU,SAAU,OACVpY,MAAO,CACLkX,SAAS,EACTwT,KAAMlsB,EAAE,kBAAoB,KAAK8sB,SAGrCqB,WAAY,CACVC,YAAazB,EAAqBjsB,MAClCmtB,KAAM,CACJC,iBAAiB,GAEnBlU,SAAU,QACVpY,MAAO,CACLkX,SAAS,EACTwT,KAAMlsB,EAAE,sBAAwB,KAAKgtB,QAI3CqB,SAAU,CACR3b,MAAO,CACL4b,WAAY,SACZC,YAAa,IAGjBjD,QAAS,CACPkD,WAAY,CACV9V,SAAS,GAEXV,QAAS,CACPyW,YAAa,CACXC,WAAW,EACXC,KAAM,SAERC,UAAW,CACTtkB,MAAO,SAAU4I,GACf,MAAM5I,EAAQ,IAAI4I,EAAQ2b,QAAQvkB,UAAU4I,EAAQ4b,iBACpD,MAAmC,eAA5B5b,EAAQ2b,QAAQE,QACnBzkB,EAAQ,IAAI0iB,IACZ1iB,EAAQ,IAAIwiB,KAClB,EACAtrB,MAAO,SAAUwtB,GAIf,OAHIA,EAAa3gB,OAAS,GACxB4gB,EAAgB1e,EAAY7P,MAAMsuB,EAAa,GAAGE,YAErB,IAAxBF,EAAa3gB,OAChB,GACAqe,EAAgBhsB,MAChB,GAAGV,EAAE,yBACHgvB,EAAa,GAAG1kB,SACdwiB,IACJ,GAAG9sB,EAAE,yBAAyBiuB,EAC5Be,EAAa,GAAG1kB,MAAMuG,QAAQ,IAAK,MAE3C,IAGJ0a,OAAQ,CACN7S,SAAS,GAEXyW,WAAY,CACVhE,YAAa,sBAIb,eAAEiE,IAAmBC,EAAAA,GAAAA,IAAa,CACtC3H,YACAxR,UACAoV,QAAS,CAACP,MAGZ,SAASuE,IACP5C,EAAgBhsB,OAASgsB,EAAgBhsB,KAC3C,CACA,SAASutB,EAAehrB,GACtB,OAAO,IAAIssB,KAAiB,KAAXtsB,GAAiBusB,cAAcC,OAAO,GAAI,EAC7D,CACA,SAASR,EAAgB1e,GACvBzH,EAAK,iBAAkByH,EACzB,CACA,SAASmf,IACPT,EAAgB,CAAE/H,SAAU,KAAME,UAAW,MAC/C,CACA,SAAS2F,EAAUphB,GACjB,OAAOtM,EAAMC,SAAS6D,eAClBwsB,GAAAA,GAAMhkB,GAAUikB,cAChBjkB,CACN,CAEF,MAAO,CAAC5G,EAAUC,KAChB,MAAMK,GAAkBH,EAAAA,EAAAA,IAAkB,QAE1C,OAAQI,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3I,GAAY,EAC3D8I,EAAAA,EAAAA,IAAaL,EAAiB,KAAM,CAClC7D,OAAOmE,EAAAA,EAAAA,KAAS,IAAM,EACpBC,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAuB,MAEnEC,SAASJ,EAAAA,EAAAA,KAAS,IAAM,EACtBK,EAAAA,EAAAA,GAAoB,MAAOlJ,GAAY,EACrCkJ,EAAAA,EAAAA,GAAoB,QAAS,KAAM,EACjCA,EAAAA,EAAAA,GAAoB,QAAS,CAC3BvG,KAAM,QACN4E,KAAM,WACN+B,QAASsmB,EAAgBhsB,MACzB4F,QAASgpB,GACR,KAAM,EAAGvyB,KACZ6I,EAAAA,EAAAA,IAAiB,KAAMC,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAuB,MAEzEE,EAAAA,EAAAA,GAAoB,QAAS,KAAM,EACjCA,EAAAA,EAAAA,GAAoB,QAAS,CAC3BvG,KAAM,QACN4E,KAAM,WACN+B,SAAUsmB,EAAgBhsB,MAC1B4F,QAASgpB,GACR,KAAM,EAAGryB,KACZ2I,EAAAA,EAAAA,IAAiB,KAAMC,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAuB,OAG3E3I,IACAuI,EAAAA,EAAAA,KAAaD,EAAAA,EAAAA,IAAOoqB,GAAAA,KAAYC,EAAAA,EAAAA,KAAYrqB,EAAAA,EAAAA,IAAO2pB,GAAiB,CAClEpyB,MAAO,aACP+yB,aAAcL,IACZ,KAAM,KACV1pB,EAAAA,EAAAA,GAAoB,MAAO5I,GAAY,EACrC4I,EAAAA,EAAAA,GAAoB,MAAO1I,IAAYuI,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,8BAA+B,IAC/FE,EAAAA,EAAAA,GAAoB,MAAOzI,GAAY,EACrCyI,EAAAA,EAAAA,GAAoB,QAAS,KAAM,EACjCA,EAAAA,EAAAA,GAAoB,QAAS,CAC3BvG,KAAM,WACN2G,QAASumB,EAAqBjsB,MAC9B4F,QAAStB,EAAO,KAAOA,EAAO,GAAM2B,GAAiBgmB,EAAqBjsB,OAASisB,EAAqBjsB,QACvG,KAAM,EAAGlD,KACZoI,EAAAA,EAAAA,IAAiB,KAAMC,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,qCAAsC,YAK9FgC,EAAG,KAEL,CAEJ,ICrPA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,UCLA,MACMlL,GAAa,CAAEC,GAAI,gBAQzB,QAA4BsC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,eACRC,MAAO,CACLoC,MAAO,CAAE9B,QAAS,IAAM,OAE1BG,MAAMC,GAER,MAAMV,EAAQU,GAIN,MAAE0B,IAAUnB,EAAAA,EAAAA,IAAOjB,GAE3B,MAAO,CAAC0F,EAAUC,KAChB,MAAMK,GAAkBH,EAAAA,EAAAA,IAAkB,QAE1C,OAAQI,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3I,GAAY,EAC3D8I,EAAAA,EAAAA,IAAaL,EAAiB,KAAM,CAClC7D,OAAOmE,EAAAA,EAAAA,KAAS,IAAM,EACpBC,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,mBAAoB,MAEhEC,SAASJ,EAAAA,EAAAA,KAAS,IAAM,EACtBC,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAOhE,IAA4B,MAAlBgE,EAAAA,EAAAA,IAAOhE,IAAgBgE,EAAAA,EAAAA,IAAOhE,GAASsD,EAAKe,GAAG,sBAAuB,MAE3HgC,EAAG,KAEL,CAEJ,IClCA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,UCLA,MACMlL,GAAa,CAAEC,GAAI,oBAWzB,QAA4BsC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,kBACRC,MAAO,CACLyS,SAAU,KACVxG,iBAAkB,CAAE7L,KAAMC,UAE5BI,MAAMC,GAER,MAAMV,EAAQU,GAON,SAAE+R,EAAQ,iBAAExG,IAAqBhL,EAAAA,EAAAA,IAAOjB,GAEhD,MAAO,CAAC0F,EAAUC,KAChB,MAAMkF,GAAyBhF,EAAAA,EAAAA,IAAkB,eAC3CuG,GAAsBvG,EAAAA,EAAAA,IAAkB,YACxCG,GAAkBH,EAAAA,EAAAA,IAAkB,QAE1C,OAAQI,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3I,GAAY,EAC3D8I,EAAAA,EAAAA,IAAaL,EAAiB,KAAM,CAClC7D,OAAOmE,EAAAA,EAAAA,KAAS,IAAM,EACpBC,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,mBAAoB,IAAK,MAErEC,SAASJ,EAAAA,EAAAA,KAAS,IAAM,EACtBK,EAAAA,EAAAA,GAAoB,KAAM,KAAM,GAC7BV,EAAAA,EAAAA,KAAW,IAAOC,EAAAA,EAAAA,IAAoBqB,EAAAA,GAAW,MAAMC,EAAAA,EAAAA,KAAYpB,EAAAA,EAAAA,IAAOqM,IAAW,CAACG,EAAS+d,MACtF1qB,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,KAAM,CAC9CrI,IAAK+U,EAAQ0X,YACZ,EACDjkB,EAAAA,EAAAA,IAAawE,EAAwB,CACnCO,GAAI,CACJpG,KAAM,iBACNC,OAAQ,CACNR,UAAWmO,EAAQge,WACnBzlB,UAAWwlB,EAAQ,KAGpB,CACDrwB,SAASgG,EAAAA,EAAAA,KAAS,IAAM,EACtBC,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,mBAAoB,IAAM,KAAMD,EAAAA,EAAAA,IAAiBmqB,EAAQ,GAAI,MAEzGloB,EAAG,GACF,KAAM,CAAC,QACVlC,EAAAA,EAAAA,IAAiB,MAAOC,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAwB,KAAM,IAC/EJ,EAAAA,EAAAA,IAAa+F,EAAqB,CAChCpI,SAAU4O,EAAQ5O,SAClBsI,SAAU,KACVL,kBAAkB7F,EAAAA,EAAAA,IAAO6F,IACxB,KAAM,EAAG,CAAC,WAAY,sBACzB1F,EAAAA,EAAAA,IAAiB,MAAOC,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAwB,MAAOD,EAAAA,EAAAA,IAAiBoM,EAAQhP,UAAY,KAAM,QAE3H,WAGR6E,EAAG,KAEL,CAEJ,ICvEA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,UCLA,MAAMU,GAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzE7L,GAAa,CACjBC,GAAI,UACJG,MAAO,QAEHF,GAAa,CAAEE,MAAO,aACtBD,GAAa,CACjBG,IAAK,EACLF,MAAO,qBAEHC,GAAa,CAAEC,IAAK,GACpBC,GAA2BqL,IAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,MAAO,CAAEnJ,GAAI,UAAY,MAAO,KAC/GO,GAAa,CAAEF,IAAK,GAiC1B,QAA4BiC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,UACRC,MAAO,CACL0pB,eAAgB,CAAEtpB,KAAMC,UAE1BI,MAAMC,GAER,MAAMV,EAAQU,EAMNqI,GAAQC,EAAAA,EAAAA,MACRnI,GAAQC,EAAAA,GAAAA,MAER,eAAE4oB,IAAmBzoB,EAAAA,EAAAA,IAAOjB,GAC5B6I,GAAyC1H,EAAAA,EAAAA,KAC7C,IAAMN,EAAMW,QAAQgD,GAAAA,GAAAA,QAAAA,gBAEhBvE,GAA0CkB,EAAAA,EAAAA,KAC9C,IAAMN,EAAMW,QAAQoH,GAAAA,GAAAA,QAAAA,qBAEhB1I,GAAgCiB,EAAAA,EAAAA,KACpC,IAAMN,EAAMW,QAAQmH,GAAAA,GAAAA,QAAAA,UAEhBgf,GAAuC/kB,EAAAA,EAAAA,IAAI,CAC/CilB,SAAU,KACVE,UAAW,OAeb,SAAS8I,EAAkB3f,GACzByW,EAAkBtmB,MAAQ,CACxBwmB,SAAU3W,EAAY2W,SACtBE,UAAW7W,EAAY6W,UAE3B,CA2BF,OA5CE9e,EAAAA,EAAAA,KAAc,KACZ,MAAM5E,EAA2B,CAAEI,UAAWsE,EAAM9D,OAAOR,WACvDzE,EAAM0pB,iBACRrlB,EAAQ8G,UAAYpC,EAAM9D,OAAOkG,WAEnCtK,EAAM0D,SAASC,GAAAA,GAAAA,QAAAA,iBAAyCH,EAAQ,KAGlEgB,EAAAA,EAAAA,KAAY,KACVxE,EAAM+D,OAAOJ,GAAAA,GAAAA,UAAAA,cAAuC,KAUtDc,EAAAA,EAAAA,KACE,IAAMyD,EAAM9D,OAAOR,YACnBc,UACM2D,GACFrI,EAAM0D,SAASC,GAAAA,GAAAA,QAAAA,iBAAyC,CACtDC,UAAWyE,G,KAKnB5D,EAAAA,EAAAA,KACE,IAAMyD,EAAM9D,OAAOkG,YACnB5F,UACE,GAAIwD,EAAM9D,OAAOR,UAAW,CAC1B,MAAMJ,EAA2B,CAC/BI,UAAWsE,EAAM9D,OAAOR,WAEtBkmB,IACFtmB,EAAQ8G,UAAYwf,GAEtB9pB,EAAM0D,SAASC,GAAAA,GAAAA,QAAAA,iBAAyCH,E,KAKzD,CAACqB,EAAUC,MACRM,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3I,GAAY,EAC3DoJ,EAAAA,EAAAA,GAAoB,MAAOlJ,GAAY,EACpC2I,EAAAA,EAAAA,IAAOlG,GAAQ8O,OAAS,IACpB/I,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOxI,GAAY,EACnD0I,EAAAA,EAAAA,IAAOyC,GAAarI,QAAQhD,KACxByI,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOtI,GAAY,EACpDyI,EAAAA,EAAAA,IAAayqB,GAAe,CAC1BjoB,aAAazC,EAAAA,EAAAA,IAAOyC,GACpB3I,QAAQkG,EAAAA,EAAAA,IAAOlG,GACfD,UAAUmG,EAAAA,EAAAA,IAAOnG,GACjB0nB,kBAAmBA,EAAkBtmB,MACrCqoB,gBAAgBtjB,EAAAA,EAAAA,IAAOsjB,IACtB,KAAM,EAAG,CAAC,cAAe,SAAU,WAAY,oBAAqB,oBAE3EtjB,EAAAA,EAAAA,IAAOyC,GAAarI,QAAQqC,WAAYuD,EAAAA,EAAAA,IAAOyC,GAAawf,UAAUrZ,OAAS,IAEtE/I,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAawoB,GAAc,CACxClzB,IAAK,EACLgL,aAAazC,EAAAA,EAAAA,IAAOyC,GACpB5I,UAAUmG,EAAAA,EAAAA,IAAOnG,GACjBypB,gBAAgBtjB,EAAAA,EAAAA,IAAOsjB,GACvBsH,iBAAkBH,GACjB,KAAM,EAAG,CAAC,cAAe,WAAY,qBACxC3pB,EAAAA,EAAAA,IAAoB,IAAI,KAC1Bd,EAAAA,EAAAA,IAAOsjB,KAAmBtjB,EAAAA,EAAAA,IAAOyC,GAAarI,QAAQiS,SAASzD,OAAS,IACrE/I,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa0oB,GAAiB,CAC3CpzB,IAAK,EACL4U,UAAUrM,EAAAA,EAAAA,IAAOyC,GAAarI,QAAQiS,SACtCxG,kBAAkB7F,EAAAA,EAAAA,IAAOnG,GAAU6D,gBAClC,KAAM,EAAG,CAAC,WAAY,uBACzBoD,EAAAA,EAAAA,IAAoB,IAAI,IAC1Bd,EAAAA,EAAAA,IAAOsjB,IAKLxiB,EAAAA,EAAAA,IAAoB,IAAI,KAJvBjB,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa2oB,GAAc,CACxCrzB,IAAK,EACLuE,OAAOgE,EAAAA,EAAAA,IAAOyC,GAAarI,QAAQ4B,OAClC,KAAM,EAAG,CAAC,WAEjBtE,QAEDmI,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOnI,GAAY,EAClDqI,EAAAA,EAAAA,IAAOyC,GAAatI,SAKlB2G,EAAAA,EAAAA,IAAoB,IAAI,KAJvBjB,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa4oB,EAAAA,EAAU,CACpCtzB,IAAK,EACLuF,OAAQ,oBAKtB8D,EAAAA,EAAAA,IAAoB,IAAI,OAIlC,IC1KA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,S,wJCLA,MAAMiC,EAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzE7L,EAAa,CAAEI,MAAO,oBACtBF,EAAa,CAAEE,MAAO,OACtBD,EAAa,CAAEC,MAAO,QACtBC,EAAa,CAAED,MAAO,oBACtBG,EAAa,CAAEH,MAAO,aACtBI,EAAa,CAAC,SACdE,EAAa,CAAEN,MAAO,aACtBO,EAAa,CAAC,SACdC,EAAa,CAAER,MAAO,oBACtBS,EAAc,CAAET,MAAO,aACvBU,EAAc,CAAC,SACfC,EAA4B6K,GAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,SAAU,CAAEtF,MAAO,IAAM,MAAO,KAChH9C,EAAc,CAAC,SACfC,EAAc,CAAEb,MAAO,oBACvBc,EAAc,CAAEd,MAAO,aACvBe,EAAc,CAAEf,MAAO,qBACvBgB,EAAc,CAAC,SACfC,EAAc,CAAC,SACfC,EAAc,CAAElB,MAAO,oBACvBmB,EAAc,CAAEnB,MAAO,aACvBoB,EAAc,CAAEpB,MAAO,qBACvBqB,EAAc,CAAC,SACfC,EAAc,CAAC,SACfC,EAAc,CAAEvB,MAAO,oBACvBwB,EAAc,CAAExB,MAAO,aACvByB,EAAc,CAAEzB,MAAO,qBACvB0B,EAAc,CAAC,SACfC,EAAc,CAAC,SACfC,EAAc,CAAE5B,MAAO,oBACvB6B,EAAc,CAAE7B,MAAO,aACvB8B,EAAc,CAAE9B,MAAO,qBACvB+B,EAAc,CAAC,SACfC,EAAc,CAAC,SACfC,EAAc,CAAEjC,MAAO,eAgB7B,OAA4BmC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,kBACRC,MAAO,CACLC,SAAU,KACVC,OAAQ,MAEVsJ,MAAO,CAAC,UACR/I,MAAMC,GAAc,KAAE+I,IAExB,MAAMzJ,EAAQU,GASN,EAAEC,IAAMC,EAAAA,EAAAA,MACRmI,GAAQC,EAAAA,EAAAA,MACRjI,GAASC,EAAAA,EAAAA,OAET,SAAEf,IAAagB,EAAAA,EAAAA,IAAOjB,GAEtBoxB,EAASnxB,EAASoB,MAAMyC,eAC1BwsB,EAAAA,GAAAA,GAAAA,cACA,KACEpvB,GAA0CC,EAAAA,EAAAA,KAAS,KACvDC,EAAAA,EAAAA,IAAgBpB,EAAME,OAAQS,KAEhC,IAAIsE,EAAwB8K,OAAOC,OAAO,CAAC,EAAGjH,EAAMsoB,OAEpD,SAASC,EAAmBnuB,GACC,KAAvBA,EAAMC,OAAO/B,aACR4D,EAAO9B,EAAMC,OAAO4B,MAE3BC,EAAO9B,EAAMC,OAAO4B,MAAQ7B,EAAMC,OAAO/B,KAE7C,CACA,SAASkwB,IACP9nB,EAAK,UACD,SAAUxE,IACZA,EAAO,QAAU,KAEnBlE,EAAOgE,KAAK,CAAEysB,KAAM,YAAaH,MAAOpsB,GAC1C,CACA,SAASwsB,IACPhoB,EAAK,UACL1I,EAAOgE,KAAK,CAAEysB,KAAM,YAAaH,MAAO,CAAC,GAC3C,CASF,OAPE/rB,EAAAA,EAAAA,KACE,IAAMyD,EAAMsoB,QACXK,IACCzsB,EAAS8K,OAAOC,OAAO,CAAC,EAAG0hB,EAAS,IAInC,CAAChsB,EAAUC,MACRM,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3I,EAAY,EAC3DoJ,EAAAA,EAAAA,GAAoB,MAAOlJ,EAAY,EACrCkJ,EAAAA,EAAAA,GAAoB,MAAOjJ,EAAY,EACrCiJ,EAAAA,EAAAA,GAAoB,MAAO/I,EAAY,EACrC+I,EAAAA,EAAAA,GAAoB,MAAO7I,EAAY,EACrC6I,EAAAA,EAAAA,GAAoB,QAAS,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,kBAAoB,KAAM,IACtFE,EAAAA,EAAAA,GAAoB,QAAS,CAC3B3B,KAAM,OACN5E,KAAM,OACNiB,MAAOqE,EAAKisB,OAAON,MAAM9iB,KACzBqjB,SAAUN,GACT,KAAM,GAAIvzB,MAEf4I,EAAAA,EAAAA,GAAoB,MAAO1I,EAAY,EACrC0I,EAAAA,EAAAA,GAAoB,QAAS,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,gBAAkB,KAAM,IACpFE,EAAAA,EAAAA,GAAoB,QAAS,CAC3B3B,KAAM,KACN5E,KAAM,OACNiB,MAAOqE,EAAKisB,OAAON,MAAMjmB,GACzBwmB,SAAUN,GACT,KAAM,GAAIpzB,QAGjByI,EAAAA,EAAAA,GAAoB,MAAOxI,EAAY,EACrCwI,EAAAA,EAAAA,GAAoB,MAAOvI,EAAa,EACtCuI,EAAAA,EAAAA,GAAoB,QAAS,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,iBAAkB,IAAM,IAAK,IACzFE,EAAAA,EAAAA,GAAoB,SAAU,CAC5B3B,KAAM,WACN3D,MAAOqE,EAAKisB,OAAON,MAAM/vB,SACzBswB,SAAUN,GACT,CACDhzB,IACC2H,EAAAA,EAAAA,KAAW,IAAOC,EAAAA,EAAAA,IAAoBqB,EAAAA,GAAW,MAAMC,EAAAA,EAAAA,KAAYpB,EAAAA,EAAAA,IAAOlF,GAAkB2iB,QAAQgO,IACjGzrB,EAAAA,EAAAA,IAAOnG,GAAU6xB,YAAYlhB,SAASihB,EAAEr0B,OACtCiK,KACIxB,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,SAAU,CAClD7E,MAAOoG,EAAMjK,GACbK,IAAK4J,EAAMjK,KACVgJ,EAAAA,EAAAA,IAAiBiB,EAAMC,iBAAkB,EAAGnJ,MAC7C,OACH,GAAIF,QAGXsI,EAAAA,EAAAA,GAAoB,MAAOnI,EAAa,EACtCmI,EAAAA,EAAAA,GAAoB,MAAOlI,EAAa,EACtCkI,EAAAA,EAAAA,GAAoB,QAAS,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAwB,MAAOD,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAOgrB,IAAW,MAAO,IACrIzqB,EAAAA,EAAAA,GAAoB,MAAOjI,EAAa,EACtCiI,EAAAA,EAAAA,GAAoB,QAAS,CAC3B3B,KAAM,gBACN5E,KAAM,SACN+H,IAAK,IACLC,KAAM,MACN/G,MAAOqE,EAAKisB,OAAON,MAAMU,cACzBH,SAAUN,GACT,KAAM,GAAI3yB,IACbgI,EAAAA,EAAAA,GAAoB,OAAQ,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,gBAAiB,IAC5EE,EAAAA,EAAAA,GAAoB,QAAS,CAC3B3B,KAAM,cACN5E,KAAM,SACN+H,IAAK,IACLC,KAAM,MACN/G,MAAOqE,EAAKisB,OAAON,MAAMW,YACzBJ,SAAUN,GACT,KAAM,GAAI1yB,UAInB+H,EAAAA,EAAAA,GAAoB,MAAO9H,EAAa,EACtC8H,EAAAA,EAAAA,GAAoB,MAAO7H,EAAa,EACtC6H,EAAAA,EAAAA,GAAoB,QAAS,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAwB,KAAM,IAC1FE,EAAAA,EAAAA,GAAoB,MAAO5H,EAAa,EACtC4H,EAAAA,EAAAA,GAAoB,QAAS,CAC3B3B,KAAM,gBACN3D,MAAOqE,EAAKisB,OAAON,MAAMY,cACzBL,SAAUN,EACVppB,QAAS,+BACTH,YAAa,QACb3H,KAAM,QACL,KAAM,GAAIpB,IACb2H,EAAAA,EAAAA,GAAoB,OAAQ,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,gBAAiB,IAC5EE,EAAAA,EAAAA,GAAoB,QAAS,CAC3B3B,KAAM,cACN3D,MAAOqE,EAAKisB,OAAON,MAAMa,YACzBN,SAAUN,EACVppB,QAAS,+BACTH,YAAa,QACb3H,KAAM,QACL,KAAM,GAAInB,UAInB0H,EAAAA,EAAAA,GAAoB,MAAOzH,EAAa,EACtCyH,EAAAA,EAAAA,GAAoB,MAAOxH,EAAa,EACtCwH,EAAAA,EAAAA,GAAoB,QAAS,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,uBAAyB,MAAOD,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAOgrB,IAAW,QAAS,IACxIzqB,EAAAA,EAAAA,GAAoB,MAAOvH,EAAa,EACtCuH,EAAAA,EAAAA,GAAoB,QAAS,CAC3BwB,IAAK,IACLnD,KAAM,iBACN3D,MAAOqE,EAAKisB,OAAON,MAAMc,eACzBP,SAAUN,EACVlpB,KAAM,MACNhI,KAAM,UACL,KAAM,GAAIf,IACbsH,EAAAA,EAAAA,GAAoB,OAAQ,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,gBAAiB,IAC5EE,EAAAA,EAAAA,GAAoB,QAAS,CAC3BwB,IAAK,IACLnD,KAAM,eACN3D,MAAOqE,EAAKisB,OAAON,MAAMe,aACzBR,SAAUN,EACVlpB,KAAM,MACNhI,KAAM,UACL,KAAM,GAAId,UAInBqH,EAAAA,EAAAA,GAAoB,MAAOpH,EAAa,EACtCoH,EAAAA,EAAAA,GAAoB,MAAOnH,EAAa,EACtCmH,EAAAA,EAAAA,GAAoB,QAAS,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,uBAAyB,MAAOD,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAOgrB,IAAW,QAAS,IACxIzqB,EAAAA,EAAAA,GAAoB,MAAOlH,EAAa,EACtCkH,EAAAA,EAAAA,GAAoB,QAAS,CAC3BwB,IAAK,IACLnD,KAAM,iBACN3D,MAAOqE,EAAKisB,OAAON,MAAMgB,eACzBT,SAAUN,EACVlpB,KAAM,MACNhI,KAAM,UACL,KAAM,GAAIV,IACbiH,EAAAA,EAAAA,GAAoB,OAAQ,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,gBAAiB,IAC5EE,EAAAA,EAAAA,GAAoB,QAAS,CAC3BwB,IAAK,IACLnD,KAAM,eACN3D,MAAOqE,EAAKisB,OAAON,MAAMiB,aACzBV,SAAUN,EACVlpB,KAAM,MACNhI,KAAM,UACL,KAAM,GAAIT,YAKrBgH,EAAAA,EAAAA,GAAoB,MAAO/G,EAAa,EACtC+G,EAAAA,EAAAA,GAAoB,SAAU,CAC5BhJ,MAAO,UACPsJ,QAASsqB,IACR/qB,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,mBAAoB,IAChDE,EAAAA,EAAAA,GAAoB,SAAU,CAC5BhJ,MAAO,UACPsJ,QAASwqB,IACRjrB,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,yBAA0B,SAK9D,I,UCnQA,MAAMiC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,Q,8FCLA,MAAMS,GAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzE7L,GAAa,CAAEI,MAAO,iBACtBF,GAAa,CAAEE,MAAO,SACtBD,GAAa,CAAEC,MAAO,eACtBC,GAAa,CAAEC,IAAK,GACpBC,GAAa,CACjBD,IAAK,EACLF,MAAO,mCAEHI,GAA2BoL,IAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,KAAM,CAAEhJ,MAAO,aAAe,MAAO,KACpHM,GAAa,CAAEN,MAAO,aACtBO,GAAa,CAAEP,MAAO,gBACtBQ,GAAa,CAAC,eACdC,GAAc,CAAET,MAAO,gBACvBU,GAAc,CAClBR,IAAK,EACLF,MAAO,cACP,cAAe,QAEXW,GAAc,CAAEX,MAAO,SACvBY,GAAc,CAAEZ,MAAO,gBACvBa,GAAc,CAAEb,MAAO,gBACvBc,GAAc,CAAEd,MAAO,cACvBe,GAAc,CAAEf,MAAO,gBACvBgB,GAAc,CAAEhB,MAAO,cACvBiB,GAAc,CAAEjB,MAAO,gBACvBkB,GAAc,CAAElB,MAAO,cACvBmB,GAAc,CAAEnB,MAAO,gBACvBoB,GAAc,CAAEpB,MAAO,cACvBqB,GAAc,CAAErB,MAAO,gBACvBsB,GAAc,CAAEtB,MAAO,cACvBuB,GAAc,CAAEvB,MAAO,gBACvBwB,GAAc,CAAExB,MAAO,cACvByB,GAAc,CAAEzB,MAAO,gBACvB0B,GAA4B8J,IAAa,KAAmBxC,EAAAA,EAAAA,GAAoB,MAAO,CAAEnJ,GAAI,UAAY,MAAO,KAmCtH,QAA4BsC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,eACRC,MAAO,CACLuyB,KAAM,KACNryB,OAAQ,MAEVO,MAAMC,GAER,MAAMV,EAAQU,EAONG,GAAQC,EAAAA,GAAAA,KACRiI,GAAQC,EAAAA,EAAAA,MACRjI,GAASC,EAAAA,EAAAA,OAET,KAAEuxB,EAAI,OAAEryB,IAAWe,EAAAA,EAAAA,IAAOjB,GAC1BwyB,EAAwB,CAC5B,YACA,WACA,WACA,gBAEIC,GAAoCtxB,EAAAA,EAAAA,KACxC,IAAMN,EAAMW,QAAQgD,EAAAA,GAAAA,QAAAA,iBAEhBkuB,GAAuCvxB,EAAAA,EAAAA,KAC3C,IAAMN,EAAMW,QAAQgD,EAAAA,GAAAA,QAAAA,uBAEhBmuB,GAAuCxxB,EAAAA,EAAAA,KAC3C,IAAMN,EAAMW,QAAQC,EAAAA,GAAAA,QAAAA,YAEtB,IAAI4vB,EAA0BuB,EAAiB7pB,EAAMsoB,OACrD,MAAMwB,GAAqCjwB,EAAAA,EAAAA,IAAI,MAM/C,SAASkwB,EAAazuB,GACpBxD,EAAM0D,SACJC,EAAAA,GAAAA,QAAAA,kBACA+tB,EAAKlxB,MAAMyC,eAAiBivB,EAAoB1uB,GAAWA,EAE/D,CACA,SAAS2uB,EAAeC,EAAoBC,GAC1C,MAAMxB,EAA0B3hB,OAAOC,OAAO,CAAC,EAAGjH,EAAMsoB,OACxDK,EAASuB,GAAcC,EACJ,aAAfD,IACFvB,EAAS,QAAU,KAErBL,EAAQuB,EAAiBlB,GACzB3wB,EAAOgE,KAAK,CAAEysB,KAAM,YAAaH,SACnC,CAEA,SAASuB,EAAiBlB,GACxB,MAAMyB,GAAeC,EAAAA,GAAAA,IACnB1B,EACAc,EACAa,GAAAA,GAAAA,SACA,CACEC,YAAaD,GAAAA,GAAAA,QAYjB,OATAtjB,OAAOwjB,KAAK7B,GACT7N,QAAQ2P,GAAMC,GAAAA,GAAAA,SAA6BD,KAC3C9hB,KAAK8hB,IACuB,kBAAhB9B,EAAS8B,KAGlBL,EAAaK,GAAK9B,EAAS8B,G,IAG1BL,CACT,CAEA,SAASJ,EAAoB1uB,GAC3B,MAAMqvB,EAAqC,IACtCrvB,GAOL,OALA0L,OAAOgD,QAAQ2gB,GAAkBhiB,KAAKiiB,IAChCA,EAAM,GAAGC,MAAM,mBAAqBD,EAAM,KAC5CD,EAAiBC,EAAM,KAAM5vB,EAAAA,EAAAA,KAAiB4vB,EAAM,GAAI,KAAM,M,IAG3DD,CACT,CAEA,SAASG,EAAQpvB,GACfouB,EAAexxB,MAAQoD,CACzB,CAUF,OAjEEwE,EAAAA,EAAAA,KAAc,KACZ6pB,EAAazB,EAAM,KAwDrB/rB,EAAAA,EAAAA,KACE,IAAMyD,EAAMsoB,QACZ9rB,UACE8rB,EAAQuB,EAAiBlB,GACzBoB,EAAazB,EAAM,IAIlB,CAAC3rB,EAAUC,KAChB,MAAMiF,GAAwB/E,EAAAA,EAAAA,IAAkB,cAC1CgF,GAAyBhF,EAAAA,EAAAA,IAAkB,eAC3CuG,GAAsBvG,EAAAA,EAAAA,IAAkB,YAE9C,OAAQI,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3I,GAAY,EAC3DoJ,EAAAA,EAAAA,GAAoB,MAAO,CACzBhJ,OAAOwI,EAAAA,EAAAA,IAAgB,CAAC,MAAO,CAAE,cAA2C,KAA5BC,EAAAA,EAAAA,IAAOqsB,GAAUzjB,WAChE,EACDrI,EAAAA,EAAAA,GAAoB,MAAOlJ,GAAY,EACrCkJ,EAAAA,EAAAA,GAAoB,OAAQjJ,IAAY8I,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,gBAAgBqtB,eAAiB,KAAM,GAC1E,QAA7B1tB,EAAAA,EAAAA,IAAOssB,GAAYqB,QACf9tB,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,OAAQtI,IAAY4I,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAOssB,GAAYqB,OAAS,KAAMvtB,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,oBAAoBL,EAAAA,EAAAA,IAAOssB,GAAYqB,QAAS,KACnL7sB,EAAAA,EAAAA,IAAoB,IAAI,MAE9Bb,EAAAA,EAAAA,IAAa2tB,EAAAA,EAAe,CAC1BC,MAAM7tB,EAAAA,EAAAA,IAAO8tB,GAAAA,IACbC,SAAU3B,EACVnB,OAAOjrB,EAAAA,EAAAA,IAAOirB,GACd7oB,QAAS,WACT4rB,eAAgBpB,GACf,KAAM,EAAG,CAAC,OAAQ,WACpB5sB,EAAAA,EAAAA,IAAOqsB,GAAUzjB,OAAS,IACtB/I,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOpI,GAAY,EACpDuI,EAAAA,EAAAA,IAAaguB,EAAAA,EAAY,CACvB12B,MAAO,iBACP+0B,YAAYtsB,EAAAA,EAAAA,IAAOssB,GACnBlB,KAAM,YACNH,OAAOjrB,EAAAA,EAAAA,IAAOirB,IACb,KAAM,EAAG,CAAC,aAAc,WAC3B1qB,EAAAA,EAAAA,GAAoB,QAAS,KAAM,EACjCA,EAAAA,EAAAA,GAAoB,QAAS,CAC3BhJ,OAAOwI,EAAAA,EAAAA,IAAgB,CAAEmuB,QAAS,QAASluB,EAAAA,EAAAA,IAAOusB,MACjD,EACDhsB,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9B5I,IACA4I,EAAAA,EAAAA,GAAoB,KAAM,MAAMH,EAAAA,EAAAA,KAAiB+tB,EAAAA,EAAAA,IAAW7uB,EAAKe,GAAG,mBAAoB,KAAM,IAC9FE,EAAAA,EAAAA,GAAoB,KAAM,MAAMH,EAAAA,EAAAA,KAAiB+tB,EAAAA,EAAAA,IAAW7uB,EAAKe,GAAG,mBAAoB,IACxFE,EAAAA,EAAAA,GAAoB,KAAM,MAAMH,EAAAA,EAAAA,KAAiB+tB,EAAAA,EAAAA,IAAW7uB,EAAKe,GAAG,uBAAwB,IAC5FE,EAAAA,EAAAA,GAAoB,KAAM,MAAMH,EAAAA,EAAAA,KAAiB+tB,EAAAA,EAAAA,IAAW7uB,EAAKe,GAAG,uBAAwB,IAC5FE,EAAAA,EAAAA,GAAoB,KAAM,MAAMH,EAAAA,EAAAA,KAAiB+tB,EAAAA,EAAAA,IAAW7uB,EAAKe,GAAG,wBAAyB,IAC7FE,EAAAA,EAAAA,GAAoB,KAAM,MAAMH,EAAAA,EAAAA,KAAiB+tB,EAAAA,EAAAA,IAAW7uB,EAAKe,GAAG,wBAAyB,IAC7FE,EAAAA,EAAAA,GAAoB,KAAM,MAAMH,EAAAA,EAAAA,KAAiB+tB,EAAAA,EAAAA,IAAW7uB,EAAKe,GAAG,qBAAsB,IAC1FE,EAAAA,EAAAA,GAAoB,KAAM,MAAMH,EAAAA,EAAAA,KAAiB+tB,EAAAA,EAAAA,IAAW7uB,EAAKe,GAAG,sBAAuB,MAE5F,IACHE,EAAAA,EAAAA,GAAoB,QAAS,KAAM,GAChCV,EAAAA,EAAAA,KAAW,IAAOC,EAAAA,EAAAA,IAAoBqB,EAAAA,GAAW,MAAMC,EAAAA,EAAAA,KAAYpB,EAAAA,EAAAA,IAAOqsB,IAAYjyB,KAC7EyF,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,KAAM,CAC9CrI,IAAK2C,EAAQhD,IACZ,EACDmJ,EAAAA,EAAAA,GAAoB,KAAM1I,GAAY,EACpC0I,EAAAA,EAAAA,GAAoB,OAAQzI,IAAYsI,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,iBAAkB,IAAK,IACvFL,EAAAA,EAAAA,IAAOlG,GAAQ8O,OAAS,IACpB/I,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAaqC,EAAuB,CACjD/M,IAAK,EACLsE,OACRiE,EAAAA,EAAAA,IAAOlG,GAAQsL,MAAMqmB,GAAMA,EAAEr0B,KAAOgD,EAAQc,WACzCoG,gBAEK,eAAetB,EAAAA,EAAAA,IAAOouB,EAAAA,GAAPpuB,CAAsB5F,GAAS4F,EAAAA,EAAAA,IAAOlG,IACrDgL,OAAO9E,EAAAA,EAAAA,IAAOquB,EAAAA,GAAPruB,CAAsB5F,GAAS4F,EAAAA,EAAAA,IAAOlG,KAC5C,KAAM,EAAG,CAAC,QAAS,cAAe,YACrCgH,EAAAA,EAAAA,IAAoB,IAAI,MAE9BP,EAAAA,EAAAA,GAAoB,KAAM,CACxBhJ,MAAO,gBACP+2B,YAAcptB,GAAiBusB,EAAQrzB,EAAQhD,IAC/CkzB,aAAc/qB,EAAO,KAAOA,EAAO,GAAM2B,GAAiBusB,EAAQ,QACjE,EACDltB,EAAAA,EAAAA,GAAoB,OAAQvI,IAAaoI,EAAAA,EAAAA,KAAiB+tB,EAAAA,EAAAA,IAAW7uB,EAAKe,GAAG,mBAAoB,KAAM,IACvGJ,EAAAA,EAAAA,IAAawE,EAAwB,CACnClN,MAAO,WACPyN,GAAI,CAAEpG,KAAM,UAAWC,OAAQ,CAAER,UAAWjE,EAAQhD,MACnD,CACD8C,SAASgG,EAAAA,EAAAA,KAAS,IAAM,CACrB9F,EAAQqC,WACJoD,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,IAAK7H,MACxC6I,EAAAA,EAAAA,IAAoB,IAAI,IAC5BP,EAAAA,EAAAA,GAAoB,OAAQrI,IAAakI,EAAAA,EAAAA,IAAiBhG,EAAQ2B,OAAQ,MAE5EsG,EAAG,GACF,KAAM,CAAC,OACTjI,EAAQqC,UAAYgwB,EAAexxB,QAAUb,EAAQhD,KACjDyI,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAaosB,EAAAA,EAAW,CACrC92B,IAAK,EACL2C,QAASA,EACT,iBAAiB,GAChB,KAAM,EAAG,CAAC,cACb0G,EAAAA,EAAAA,IAAoB,IAAI,IAC3B,GAAI/I,KACPwI,EAAAA,EAAAA,GAAoB,KAAMpI,GAAa,EACrCoI,EAAAA,EAAAA,GAAoB,OAAQnI,IAAagI,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,kBAAmB,IACrFF,EAAAA,EAAAA,IAAiB,KAAMC,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAOwuB,GAAAA,GAAPxuB,CAC1C5F,EAAQkD,cACR0C,EAAAA,EAAAA,IAAOmsB,GAAM5uB,UACbyC,EAAAA,EAAAA,IAAOmsB,GAAMtI,cACX,MAEFtjB,EAAAA,EAAAA,GAAoB,KAAMlI,GAAa,EACrCkI,EAAAA,EAAAA,GAAoB,OAAQjI,IAAa8H,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAuB,IACzFJ,EAAAA,EAAAA,IAAa+F,EAAqB,CAChCpI,SAAUxD,EAAQwD,SAClBsI,SAAU,KACVL,kBAAkB7F,EAAAA,EAAAA,IAAOmsB,GAAMzuB,gBAC9B,KAAM,EAAG,CAAC,WAAY,wBAE3B6C,EAAAA,EAAAA,GAAoB,KAAMhI,GAAa,EACrCgI,EAAAA,EAAAA,GAAoB,OAAQ/H,IAAa4H,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,sBAAuB,IACzFF,EAAAA,EAAAA,IAAiB,KAAMC,EAAAA,EAAAA,IAAiBhG,EAAQgN,QAAS,MAE3D7G,EAAAA,EAAAA,GAAoB,KAAM9H,GAAa,EACrC8H,EAAAA,EAAAA,GAAoB,OAAQ7H,IAAa0H,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,uBAAwB,IAC1FJ,EAAAA,EAAAA,IAAa+F,EAAqB,CAChCpI,SAAUxD,EAAQ0pB,UAClB5d,SAAU,KACVsB,OAAO,EACP3B,kBAAkB7F,EAAAA,EAAAA,IAAOmsB,GAAMzuB,gBAC9B,KAAM,EAAG,CAAC,WAAY,wBAE3B6C,EAAAA,EAAAA,GAAoB,KAAM5H,GAAa,EACrC4H,EAAAA,EAAAA,GAAoB,OAAQ3H,IAAawH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,uBAAwB,IAC1FJ,EAAAA,EAAAA,IAAa+F,EAAqB,CAChCpI,SAAUxD,EAAQ4pB,UAClB9d,SAAU,KACVsB,OAAO,EACP3B,kBAAkB7F,EAAAA,EAAAA,IAAOmsB,GAAMzuB,gBAC9B,KAAM,EAAG,CAAC,WAAY,wBAE3B6C,EAAAA,EAAAA,GAAoB,KAAM1H,GAAa,EACrC0H,EAAAA,EAAAA,GAAoB,OAAQzH,IAAasH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,oBAAqB,GACtFjG,EAAQqC,WACJoD,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa6D,EAAqB,CAC/CvO,IAAK,EACLmG,SAAUxD,EAAQwN,OAClB1B,SAAU,IACVL,kBAAkB7F,EAAAA,EAAAA,IAAOmsB,GAAMzuB,gBAC9B,KAAM,EAAG,CAAC,WAAY,uBACzBoD,EAAAA,EAAAA,IAAoB,IAAI,MAE9BP,EAAAA,EAAAA,GAAoB,KAAMxH,GAAa,EACrCwH,EAAAA,EAAAA,GAAoB,OAAQvH,IAAaoH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,qBAAsB,GACvFjG,EAAQqC,WACJoD,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa6D,EAAqB,CAC/CvO,IAAK,EACLmG,SAAUxD,EAAQyN,QAClB3B,SAAU,IACVL,kBAAkB7F,EAAAA,EAAAA,IAAOmsB,GAAMzuB,gBAC9B,KAAM,EAAG,CAAC,WAAY,uBACzBoD,EAAAA,EAAAA,IAAoB,IAAI,UAG9B,WAGRb,EAAAA,EAAAA,IAAaguB,EAAAA,EAAY,CACvB3B,YAAYtsB,EAAAA,EAAAA,IAAOssB,GACnBlB,KAAM,YACNH,OAAOjrB,EAAAA,EAAAA,IAAOirB,IACb,KAAM,EAAG,CAAC,aAAc,cAE7BnqB,EAAAA,EAAAA,IAAoB,IAAI,IAC3B,GAC0B,KAA5Bd,EAAAA,EAAAA,IAAOqsB,GAAUzjB,SACb/I,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAassB,EAAAA,EAAY,CAAEh3B,IAAK,MAC/CqJ,EAAAA,EAAAA,IAAoB,IAAI,GAC5B7H,IACA,CAEJ,IClVA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,UCLA,MACM9B,GAAa,CACjBM,IAAK,EACLL,GAAI,WACJG,MAAO,QAEHF,GAAa,CAAEE,MAAO,gCACtBD,GAAa,CAAEC,MAAO,mBACtBC,GAAa,CAAED,MAAO,kBAc5B,QAA4BmC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,eACRU,MAAMC,GAEN,MAAM,EAAEC,IAAMC,EAAAA,EAAAA,MACRC,GAAQC,EAAAA,GAAAA,KAERb,GAA0CkB,EAAAA,EAAAA,KAC9C,IAAMN,EAAMW,QAAQoH,EAAAA,GAAAA,QAAAA,qBAEhB1I,GAAgCiB,EAAAA,EAAAA,KACpC,IAAMN,EAAMW,QAAQmH,EAAAA,GAAAA,QAAAA,UAEhBzH,GAAoDC,EAAAA,EAAAA,KAAS,KACjEC,EAAAA,EAAAA,IAAgBlB,EAAOmB,MAAOV,KAE1Bm0B,GAAgBlyB,EAAAA,EAAAA,KAAI,GAE1B,SAASmyB,IACPD,EAAczzB,OAASyzB,EAAczzB,KACvC,CAEF,MAAO,CAACqE,EAAUC,KACRS,EAAAA,EAAAA,IAAOnG,GAAU+0B,WACpB/uB,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3I,GAAY,EACpDoJ,EAAAA,EAAAA,GAAoB,MAAOlJ,GAAY,EACrCkJ,EAAAA,EAAAA,GAAoB,MAAO,CACzBhJ,OAAOwI,EAAAA,EAAAA,IAAgB,CAAC,oBAAqB,CAAE2mB,OAAQgI,EAAczzB,UACpE,EACDgF,EAAAA,EAAAA,IAAa4uB,EAAiB,CAC5B/0B,QAAQkG,EAAAA,EAAAA,IAAOlF,GACfjB,UAAUmG,EAAAA,EAAAA,IAAOnG,GACjBsxB,SAAUwD,GACT,KAAM,EAAG,CAAC,SAAU,cACtB,IACHpuB,EAAAA,EAAAA,GAAoB,MAAOjJ,GAAY,EACrCiJ,EAAAA,EAAAA,GAAoB,MAAO,CAAEM,QAAS8tB,GAAiB,EACrDpuB,EAAAA,EAAAA,GAAoB,IAAK,CACvBhJ,OAAOwI,EAAAA,EAAAA,IAAgB,gBAAe2uB,EAAczzB,MAAQ,OAAS,OACrE,cAAe,QACd,KAAM,IACTsF,EAAAA,EAAAA,GAAoB,OAAQ,MAAMH,EAAAA,EAAAA,IAAiBd,EAAKe,GAAG,YAAYquB,EAAczzB,MAAQ,UAAY,mBAAoB,QAGjIsF,EAAAA,EAAAA,GAAoB,MAAO/I,GAAY,EACrCyI,EAAAA,EAAAA,IAAa6uB,GAAc,CACzB3C,MAAMnsB,EAAAA,EAAAA,IAAOnG,GACbC,QAAQkG,EAAAA,EAAAA,IAAOlF,IACd,KAAM,EAAG,CAAC,OAAQ,mBAI3BgG,EAAAA,EAAAA,IAAoB,IAAI,EAE9B,ICzEA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,S","sources":["webpack://fittrackee_client/./src/components/Workout/WorkoutEdition.vue?1df7","webpack://fittrackee_client/./src/components/Workout/WorkoutEdition.vue","webpack://fittrackee_client/./src/views/workouts/AddWorkout.vue?212d","webpack://fittrackee_client/./src/views/workouts/AddWorkout.vue","webpack://fittrackee_client/./src/views/workouts/EditWorkout.vue?ba9e","webpack://fittrackee_client/./src/views/workouts/EditWorkout.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutCardTitle.vue?4e0b","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutCardTitle.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutRecord.vue?0a89","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutRecord.vue","webpack://fittrackee_client/./src/utils/weather.ts","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WeatherWind.vue?bd35","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WeatherWind.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutWeather.vue?84e1","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutWeather.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutData.vue?ef29","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutData.vue","webpack://fittrackee_client/./node_modules/@tmcw/togeojson/dist/togeojson.es.mjs","webpack://fittrackee_client/./node_modules/@vue-leaflet/vue-leaflet/dist/vue-leaflet.esm.js","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue?3193","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/index.vue?a62d","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/index.vue?8ebb","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/legend.ts","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/index.vue?65aa","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutNotes.vue?a827","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutNotes.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutSegments.vue?037e","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutSegments.vue","webpack://fittrackee_client/./src/views/workouts/Workout.vue?3305","webpack://fittrackee_client/./src/views/workouts/Workout.vue","webpack://fittrackee_client/./src/components/Workouts/WorkoutsFilters.vue?c3bc","webpack://fittrackee_client/./src/components/Workouts/WorkoutsFilters.vue","webpack://fittrackee_client/./src/components/Workouts/WorkoutsList.vue?72e6","webpack://fittrackee_client/./src/components/Workouts/WorkoutsList.vue","webpack://fittrackee_client/./src/views/workouts/WorkoutsView.vue?ee31","webpack://fittrackee_client/./src/views/workouts/WorkoutsView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, vModelSelect as _vModelSelect, withDirectives as _withDirectives, vModelText as _vModelText, resolveComponent as _resolveComponent, createVNode as _createVNode, createBlock as _createBlock, withModifiers as _withModifiers, normalizeClass as _normalizeClass, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-886f93f6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-form\" }\nconst _hoisted_2 = [\"onSubmit\"]\nconst _hoisted_3 = { class: \"form-items\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"form-item-radio\"\n}\nconst _hoisted_5 = [\"checked\", \"disabled\"]\nconst _hoisted_6 = { for: \"withGpx\" }\nconst _hoisted_7 = [\"checked\", \"disabled\"]\nconst _hoisted_8 = { for: \"withoutGpx\" }\nconst _hoisted_9 = { class: \"form-item\" }\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = [\"value\"]\nconst _hoisted_12 = {\n key: 1,\n class: \"form-item\"\n}\nconst _hoisted_13 = { for: \"gpxFile\" }\nconst _hoisted_14 = [\"disabled\"]\nconst _hoisted_15 = { class: \"files-help info-box\" }\nconst _hoisted_16 = {\n key: 2,\n class: \"form-item\"\n}\nconst _hoisted_17 = { for: \"title\" }\nconst _hoisted_18 = [\"required\", \"disabled\"]\nconst _hoisted_19 = { key: 3 }\nconst _hoisted_20 = { class: \"workout-date-duration\" }\nconst _hoisted_21 = { class: \"form-item\" }\nconst _hoisted_22 = { class: \"workout-date-time\" }\nconst _hoisted_23 = [\"disabled\"]\nconst _hoisted_24 = [\"disabled\"]\nconst _hoisted_25 = { class: \"form-item\" }\nconst _hoisted_26 = [\"disabled\"]\nconst _hoisted_27 = [\"disabled\"]\nconst _hoisted_28 = [\"disabled\"]\nconst _hoisted_29 = { class: \"form-item\" }\nconst _hoisted_30 = [\"disabled\"]\nconst _hoisted_31 = { class: \"form-item\" }\nconst _hoisted_32 = { key: 1 }\nconst _hoisted_33 = {\n key: 2,\n class: \"form-buttons\"\n}\nconst _hoisted_34 = [\"disabled\"]\nconst _hoisted_35 = [\"onClick\"]\n\nimport {\n ComputedRef,\n computed,\n reactive,\n ref,\n toRefs,\n watch,\n onMounted,\n onUnmounted,\n withDefaults,\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 { IAuthUserProfile } 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 import { convertDistance } from '@/utils/units'\n\n interface Props {\n authUser: IAuthUserProfile\n sports: ISport[]\n isCreation?: boolean\n loading?: boolean\n workout?: IWorkout\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutEdition',\n props: {\n authUser: null,\n sports: null,\n isCreation: { type: Boolean, default: false },\n loading: { type: Boolean, default: false },\n workout: { default: () => ({} as IWorkout) }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, sports: ISport[], isCreation: boolean, loading: boolean, workout: IWorkout }\n\n \n\n const { t } = useI18n()\n const store = useStore()\n const router = useRouter()\n\n const { authUser, workout, isCreation, loading } = toRefs(props)\n const translatedSports: ComputedRef = computed(() =>\n translateSports(\n props.sports,\n t,\n 'is_active_for_user',\n workout.value.id ? [workout.value.sport_id] : []\n )\n )\n const appConfig: ComputedRef = 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 = 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 const withGpx = ref(\n props.workout.id ? props.workout.with_gpx : props.isCreation\n )\n let gpxFile: File | null = null\n const formErrors = ref(false)\n\n onMounted(() => {\n if (props.workout.id) {\n formatWorkoutForm(props.workout)\n }\n })\n\n function updateNotes(value: string) {\n workoutForm.notes = value\n }\n function updateWithGpx() {\n withGpx.value = !withGpx.value\n formErrors.value = false\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 = `${\n authUser.value.imperial_units\n ? convertDistance(workout.distance, 'km', 'mi', 2)\n : parseFloat(workout.distance.toFixed(2))\n }`\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 = authUser.value.imperial_units\n ? convertDistance(+workoutForm.workoutDistance, 'mi', 'km', 3)\n : +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.id) {\n if (props.workout.with_gpx) {\n payload.title = workoutForm.title\n } else {\n formatPayload(payload)\n }\n store.dispatch(WORKOUTS_STORE.ACTIONS.EDIT_WORKOUT, {\n workoutId: props.workout.id,\n data: payload,\n })\n } else {\n if (withGpx.value) {\n if (!gpxFile) {\n const errorMessage = 'workouts.NO_FILE_PROVIDED'\n store.commit(ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES, errorMessage)\n return\n }\n payload.file = gpxFile\n store.dispatch(WORKOUTS_STORE.ACTIONS.ADD_WORKOUT, payload)\n } else {\n formatPayload(payload)\n store.dispatch(WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX, payload)\n }\n }\n }\n function onCancel() {\n if (props.workout.id) {\n router.push({\n name: 'Workout',\n params: { workoutId: props.workout.id },\n })\n } else {\n router.go(-1)\n }\n }\n function invalidateForm() {\n formErrors.value = true\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\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\nreturn (_ctx: any,_cache: any) => {\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Loader = _resolveComponent(\"Loader\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n id: \"workout-edition\",\n class: _normalizeClass([\"center-card with-margin\", { 'center-form': _unref(workout) && _unref(workout).with_gpx }])\n }, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(`workouts.${_unref(isCreation) ? 'ADD' : 'EDIT'}_WORKOUT`)), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _withModifiers(updateWorkout, [\"prevent\"])\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(isCreation))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"input\", {\n id: \"withGpx\",\n type: \"radio\",\n checked: withGpx.value,\n disabled: _unref(loading),\n onClick: updateWithGpx\n }, null, 8, _hoisted_5),\n _createElementVNode(\"label\", _hoisted_6, _toDisplayString(_ctx.$t('workouts.WITH_GPX')), 1)\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"input\", {\n id: \"withoutGpx\",\n type: \"radio\",\n checked: !withGpx.value,\n disabled: _unref(loading),\n onClick: updateWithGpx\n }, null, 8, _hoisted_7),\n _createElementVNode(\"label\", _hoisted_8, _toDisplayString(_ctx.$t('workouts.WITHOUT_GPX')), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.SPORT', 1)) + \": \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"sport\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((workoutForm.sport_id) = $event))\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: sport.id,\n key: sport.id\n }, _toDisplayString(sport.translatedLabel), 9, _hoisted_11))\n }), 128))\n ], 40, _hoisted_10), [\n [_vModelSelect, workoutForm.sport_id]\n ])\n ]),\n (_unref(isCreation) && withGpx.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n _createElementVNode(\"label\", _hoisted_13, _toDisplayString(_ctx.$t('workouts.GPX_FILE')) + \" \" + _toDisplayString(_ctx.$t('workouts.ZIP_ARCHIVE_DESCRIPTION')) + \": \", 1),\n _createElementVNode(\"input\", {\n id: \"gpxFile\",\n name: \"gpxFile\",\n type: \"file\",\n accept: \".gpx, .zip\",\n disabled: _unref(loading),\n required: \"\",\n onInvalid: invalidateForm,\n onInput: updateFile\n }, null, 40, _hoisted_14),\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.$t('workouts.GPX_FILE')) + \":\", 1),\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(fileSizeLimit)), 1)\n ])\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.$t('workouts.ZIP_ARCHIVE')) + \":\", 1),\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.NO_FOLDER')), 1),\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_FILES')) + \": \" + _toDisplayString(_unref(gpx_limit_import)), 1),\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(zipSizeLimit)), 1)\n ])\n ])\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_16, [\n _createElementVNode(\"label\", _hoisted_17, _toDisplayString(_ctx.$t('workouts.TITLE')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"title\",\n name: \"title\",\n type: \"text\",\n required: !_unref(isCreation),\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((workoutForm.title) = $event))\n }, null, 40, _hoisted_18), [\n [_vModelText, workoutForm.title]\n ])\n ])),\n (!withGpx.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_19, [\n _createElementVNode(\"div\", _hoisted_20, [\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.WORKOUT_DATE')) + \":\", 1),\n _createElementVNode(\"div\", _hoisted_22, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-date\",\n name: \"workout-date\",\n type: \"date\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((workoutForm.workoutDate) = $event))\n }, null, 40, _hoisted_23), [\n [_vModelText, workoutForm.workoutDate]\n ]),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-time\",\n name: \"workout-time\",\n class: \"workout-time\",\n type: \"time\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((workoutForm.workoutTime) = $event))\n }, null, 40, _hoisted_24), [\n [_vModelText, workoutForm.workoutTime]\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_25, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DURATION')) + \":\", 1),\n _createElementVNode(\"div\", null, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-duration-hour\",\n name: \"workout-duration-hour\",\n class: \"workout-duration\",\n type: \"text\",\n placeholder: \"HH\",\n minlength: \"1\",\n maxlength: \"2\",\n pattern: \"^([0-1]?[0-9]|2[0-3])$\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((workoutForm.workoutDurationHour) = $event))\n }, null, 40, _hoisted_26), [\n [_vModelText, workoutForm.workoutDurationHour]\n ]),\n _createTextVNode(\" : \"),\n _withDirectives(_createElementVNode(\"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 minlength: \"2\",\n maxlength: \"2\",\n placeholder: \"MM\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = ($event: any) => ((workoutForm.workoutDurationMinutes) = $event))\n }, null, 40, _hoisted_27), [\n [_vModelText, workoutForm.workoutDurationMinutes]\n ]),\n _createTextVNode(\" : \"),\n _withDirectives(_createElementVNode(\"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 minlength: \"2\",\n maxlength: \"2\",\n placeholder: \"SS\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = ($event: any) => ((workoutForm.workoutDurationSeconds) = $event))\n }, null, 40, _hoisted_28), [\n [_vModelText, workoutForm.workoutDurationSeconds]\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_29, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \" (\" + _toDisplayString(_unref(authUser).imperial_units ? 'mi' : 'km') + \"): \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n name: \"workout-distance\",\n type: \"number\",\n min: \"0\",\n step: \"0.001\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => ((workoutForm.workoutDistance) = $event))\n }, null, 40, _hoisted_30), [\n [_vModelText, workoutForm.workoutDistance]\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_31, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.NOTES')) + \": \", 1),\n _createVNode(_component_CustomTextArea, {\n name: \"notes\",\n input: workoutForm.notes,\n disabled: _unref(loading),\n onUpdateValue: updateNotes\n }, null, 8, [\"input\", \"disabled\"])\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(loading))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [\n _createVNode(_component_Loader)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_33, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n type: \"submit\",\n disabled: _unref(loading)\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_34),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(onCancel, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_35)\n ]))\n ], 42, _hoisted_2)\n ])\n ]),\n _: 1\n })\n ], 2))\n}\n}\n\n})","import script from \"./WorkoutEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutEdition.vue?vue&type=style&index=0&id=886f93f6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-886f93f6\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"add-workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { ComputedRef, computed } from 'vue'\n\n import WorkoutEdition from '@/components/Workout/WorkoutEdition.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AddWorkout',\n setup(__props) {\n\n const store = useStore()\n\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(WorkoutEdition, {\n authUser: _unref(authUser),\n sports: _unref(sports),\n isCreation: true,\n loading: _unref(workoutData).loading\n }, null, 8, [\"authUser\", \"sports\", \"loading\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./AddWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AddWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"edit-workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { computed, watch, onBeforeMount, ComputedRef } from 'vue'\n import { useRoute } from 'vue-router'\n\n import WorkoutEdition from '@/components/Workout/WorkoutEdition.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'EditWorkout',\n setup(__props) {\n\n const route = useRoute()\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n\n onBeforeMount(() => {\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, {\n workoutId: route.params.workoutId,\n })\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\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(workoutData).workout.id)\n ? (_openBlock(), _createBlock(WorkoutEdition, {\n key: 0,\n authUser: _unref(authUser),\n sports: _unref(sports),\n workout: _unref(workoutData).workout,\n loading: _unref(workoutData).loading\n }, null, 8, [\"authUser\", \"sports\", \"workout\", \"loading\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./EditWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./EditWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, withModifiers as _withModifiers, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4d9f9a8a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-card-title\" }\nconst _hoisted_2 = [\"title\"]\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = [\n _hoisted_3\n]\nconst _hoisted_5 = { class: \"workout-card-title\" }\nconst _hoisted_6 = { class: \"workout-title-date\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"workout-title\"\n}\nconst _hoisted_8 = {\n key: 1,\n class: \"workout-title\"\n}\nconst _hoisted_9 = { class: \"workout-segment\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-map-marker\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { class: \"workout-date\" }\nconst _hoisted_12 = { class: \"workout-link\" }\nconst _hoisted_13 = [\"title\"]\nconst _hoisted_14 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_15 = [\n _hoisted_14\n]\n\nimport { toRefs } from 'vue'\n\n import authApi from '@/api/authApi'\n import { ISport } from '@/types/sports'\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n sport: ISport\n workoutObject: IWorkoutObject\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutCardTitle',\n props: {\n sport: null,\n workoutObject: null\n },\n emits: ['displayModal'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n sport: ISport\n workoutObject: IWorkoutObject\n }\n\n \n\n \n\n const { sport, workoutObject } = toRefs(props)\n\n async function downloadGpx(workoutId: string) {\n await authApi\n .get(`workouts/${workoutId}/gpx/download`, {\n responseType: 'blob',\n })\n .then((response) => {\n const gpxFileUrl = window.URL.createObjectURL(\n new Blob([response.data], { type: 'application/gpx+xml' })\n )\n const gpxLink = document.createElement('a')\n gpxLink.href = gpxFileUrl\n gpxLink.setAttribute('download', `${workoutId}.gpx`)\n document.body.appendChild(gpxLink)\n gpxLink.click()\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-previous workout-arrow\", { inactive: !_unref(workoutObject).previousUrl }]),\n title: \n _unref(workoutObject).previousUrl\n ? _ctx.$t(`workouts.PREVIOUS_${_unref(workoutObject).type}`)\n : _ctx.$t(`workouts.NO_PREVIOUS_${_unref(workoutObject).type}`)\n ,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _unref(workoutObject).previousUrl\n ? _ctx.$router.push(_unref(workoutObject).previousUrl)\n : null\n ))\n }, _hoisted_4, 10, _hoisted_2),\n _createElementVNode(\"div\", _hoisted_5, [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(sport).label,\n color: _unref(sport).color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createElementVNode(\"div\", _hoisted_6, [\n (_unref(workoutObject).type === 'WORKOUT')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(workoutObject).title), 1),\n _createElementVNode(\"i\", {\n class: \"fa fa-edit\",\n \"aria-hidden\": \"true\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (\n _ctx.$router.push({\n name: 'EditWorkout',\n params: { workoutId: _unref(workoutObject).workoutId },\n })\n ))\n }),\n (_unref(workoutObject).with_gpx)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-download\",\n \"aria-hidden\": \"true\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (downloadGpx(_unref(workoutObject).workoutId)), [\"prevent\"]))\n }))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"i\", {\n class: \"fa fa-trash\",\n \"aria-hidden\": \"true\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (emit('displayModal', true)))\n })\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_unref(workoutObject).title) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_9, [\n _createTextVNode(\" — \"),\n _hoisted_10,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.SEGMENT')) + \" \" + _toDisplayString(_unref(workoutObject).segmentId + 1), 1)\n ])\n ])),\n _createElementVNode(\"div\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_unref(workoutObject).workoutDate) + \" - \" + _toDisplayString(_unref(workoutObject).workoutTime) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_12, [\n (_unref(workoutObject).type === 'SEGMENT')\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n to: {\n name: 'Workout',\n params: { workoutId: _unref(workoutObject).workoutId },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" > \" + _toDisplayString(_ctx.$t('workouts.BACK_TO_WORKOUT')), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-next workout-arrow\", { inactive: !_unref(workoutObject).nextUrl }]),\n title: \n _unref(workoutObject).nextUrl\n ? _ctx.$t(`workouts.NEXT_${_unref(workoutObject).type}`)\n : _ctx.$t(`workouts.NO_NEXT_${_unref(workoutObject).type}`)\n ,\n onClick: _cache[4] || (_cache[4] = ($event: any) => (\n _unref(workoutObject).nextUrl ? _ctx.$router.push(_unref(workoutObject).nextUrl) : null\n ))\n }, _hoisted_15, 10, _hoisted_13)\n ]))\n}\n}\n\n})","import script from \"./WorkoutCardTitle.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutCardTitle.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutCardTitle.vue?vue&type=style&index=0&id=4d9f9a8a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4d9f9a8a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1a5282f6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n class: \"workout-record\"\n}\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"sup\", null, [\n /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy\",\n \"aria-hidden\": \"true\"\n })\n], -1))\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nimport { toRefs } from 'vue'\n\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n recordType: string\n workoutObject: IWorkoutObject\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutRecord',\n props: {\n recordType: null,\n workoutObject: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n recordType: string\n workoutObject: IWorkoutObject\n }\n\n \n\n const { recordType, workoutObject } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (\n _unref(workoutObject).records &&\n _unref(workoutObject).records.find((record) => record.record_type === _unref(recordType))\n )\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_1, _hoisted_3))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutRecord.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutRecord.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutRecord.vue?vue&type=style&index=0&id=1a5282f6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1a5282f6\"]])\n\nexport default __exports__","const directions = [\n 'N',\n 'NNE',\n 'NE',\n 'ENE',\n 'E',\n 'ESE',\n 'SE',\n 'SSE',\n 'S',\n 'SSW',\n 'SW',\n 'WSW',\n 'W',\n 'WNW',\n 'NW',\n 'NNW',\n]\n\nexport const convertDegreeToDirection = (angle: number): string => {\n const value = Math.floor(angle / 22.5 + 0.5)\n return directions[value % 16]\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-46a7c31c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"wind\" }\nconst _hoisted_2 = { class: \"wind-bearing\" }\nconst _hoisted_3 = [\"title\"]\n\nimport { toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { IWeather } from '@/types/workouts'\n import { convertDegreeToDirection } from '@/utils/weather'\n\n interface Props {\n weather: IWeather\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WeatherWind',\n props: {\n weather: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n weather: IWeather\n useImperialUnits: boolean\n }\n\n \n\n const { useImperialUnits, weather } = toRefs(props)\n const { t } = useI18n()\n\n function getWindDirectionTitle(windBearing: number): string {\n return t(\n `workouts.WEATHER.WIND_DIRECTIONS.${convertDegreeToDirection(\n windBearing\n )}`\n )\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Distance, {\n distance: _unref(weather).wind,\n unitFrom: \"m\",\n digits: 1,\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createTextVNode(\" \" + _toDisplayString(_unref(useImperialUnits) ? 'ft' : 'm') + \"/s \", 1),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(weather).windBearing)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-long-arrow-down\",\n style: _normalizeStyle({\n transform: `rotate(${_unref(weather).windBearing}deg)`,\n }),\n \"aria-hidden\": \"true\",\n title: getWindDirectionTitle(_unref(weather).windBearing)\n }, null, 12, _hoisted_3))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./WeatherWind.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WeatherWind.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WeatherWind.vue?vue&type=style&index=0&id=46a7c31c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-46a7c31c\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-76e9ab62\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"workout-weather\"\n}\nconst _hoisted_2 = { class: \"weather-table\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, null, -1))\nconst _hoisted_4 = { class: \"weather-th\" }\nconst _hoisted_5 = [\"src\", \"alt\", \"title\"]\nconst _hoisted_6 = { class: \"weather-th\" }\nconst _hoisted_7 = [\"src\", \"alt\", \"title\"]\nconst _hoisted_8 = [\"alt\", \"title\"]\nconst _hoisted_9 = [\"alt\", \"title\"]\nconst _hoisted_10 = [\"alt\", \"title\"]\n\nimport { toRefs } from 'vue'\n\n import WeatherWind from '@/components/Workout/WorkoutDetail/WeatherWind.vue'\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutWeather',\n props: {\n workoutObject: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n }\n\n \n\n const { useImperialUnits, workoutObject } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(workoutObject).weatherStart && _unref(workoutObject).weatherEnd)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"table\", _hoisted_2, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_3,\n _createElementVNode(\"th\", null, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.START')) + \" \", 1),\n _createElementVNode(\"img\", {\n class: \"weather-img\",\n src: `/img/weather/${_unref(workoutObject).weatherStart.icon}.svg`,\n alt: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherStart.icon}`\n )\n ,\n title: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherStart.icon}`\n )\n \n }, null, 8, _hoisted_5)\n ])\n ]),\n _createElementVNode(\"th\", null, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.END')) + \" \", 1),\n _createElementVNode(\"img\", {\n class: \"weather-img\",\n src: `/img/weather/${_unref(workoutObject).weatherEnd.icon}.svg`,\n alt: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherEnd.icon}`\n )\n ,\n title: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherEnd.icon}`\n )\n \n }, null, 8, _hoisted_7)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/temperature.svg\",\n alt: _ctx.$t(`workouts.WEATHER.TEMPERATURE`),\n title: _ctx.$t(`workouts.WEATHER.TEMPERATURE`)\n }, null, 8, _hoisted_8)\n ]),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherStart.temperature).toFixed(1)) + \"°C \", 1),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherEnd.temperature).toFixed(1)) + \"°C \", 1)\n ]),\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/pour-rain.svg\",\n alt: _ctx.$t(`workouts.WEATHER.HUMIDITY`),\n title: _ctx.$t(`workouts.WEATHER.HUMIDITY`)\n }, null, 8, _hoisted_9)\n ]),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherStart.humidity * 100).toFixed(1)) + \"% \", 1),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherEnd.humidity * 100).toFixed(1)) + \"% \", 1)\n ]),\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/breeze.svg\",\n alt: _ctx.$t(`workouts.WEATHER.WIND`),\n title: _ctx.$t(`workouts.WEATHER.WIND`)\n }, null, 8, _hoisted_10)\n ]),\n _createElementVNode(\"td\", null, [\n _createVNode(WeatherWind, {\n weather: _unref(workoutObject).weatherStart,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"weather\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createVNode(WeatherWind, {\n weather: _unref(workoutObject).weatherEnd,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"weather\", \"useImperialUnits\"])\n ])\n ])\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutWeather.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutWeather.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutWeather.vue?vue&type=style&index=0&id=76e9ab62&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-76e9ab62\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, unref as _unref, createVNode as _createVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74c5993b\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-info\" }\nconst _hoisted_2 = { class: \"workout-data\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-clock-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { class: \"label\" }\nconst _hoisted_5 = { class: \"value\" }\nconst _hoisted_6 = { key: 0 }\nconst _hoisted_7 = { class: \"value\" }\nconst _hoisted_8 = { class: \"value\" }\nconst _hoisted_9 = { class: \"workout-data\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-road\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { class: \"label\" }\nconst _hoisted_12 = { class: \"workout-data\" }\nconst _hoisted_13 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-tachometer\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_14 = { class: \"label\" }\nconst _hoisted_15 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_16 = { class: \"label\" }\nconst _hoisted_17 = {\n key: 0,\n class: \"workout-data\"\n}\nconst _hoisted_18 = [\"alt\"]\nconst _hoisted_19 = { class: \"label\" }\nconst _hoisted_20 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_21 = { class: \"label\" }\nconst _hoisted_22 = {\n key: 1,\n class: \"workout-data\"\n}\nconst _hoisted_23 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-location-arrow\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_24 = { class: \"label\" }\nconst _hoisted_25 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_26 = { class: \"label\" }\n\nimport { computed, toRefs } 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 interface Props {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n displayHARecord: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutData',\n props: {\n workoutObject: null,\n useImperialUnits: { type: Boolean },\n displayHARecord: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n displayHARecord: boolean\n }\n\n \n\n const { displayHARecord, workoutObject, useImperialUnits } = toRefs(props)\n const withPause = computed(\n () =>\n props.workoutObject.pauses !== '0:00:00' &&\n props.workoutObject.pauses !== null\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('workouts.DURATION')), 1),\n _createTextVNode(\": \"),\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_unref(workoutObject).moving), 1),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"LD\"\n }, null, 8, [\"workoutObject\"]),\n (_unref(withPause))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createTextVNode(\" (\" + _toDisplayString(_ctx.$t('workouts.PAUSES')) + \": \", 1),\n _createElementVNode(\"span\", _hoisted_7, _toDisplayString(_unref(workoutObject).pauses), 1),\n _createTextVNode(\" - \" + _toDisplayString(_ctx.$t('workouts.TOTAL_DURATION')) + \": \", 1),\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_unref(workoutObject).duration) + \")\", 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).distance,\n digits: 3,\n unitFrom: \"km\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"FD\"\n }, null, 8, [\"workoutObject\"])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _hoisted_13,\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('workouts.AVERAGE_SPEED')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).aveSpeed,\n unitFrom: \"km\",\n speed: true,\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"AS\"\n }, null, 8, [\"workoutObject\"]),\n _hoisted_15,\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).maxSpeed,\n unitFrom: \"km\",\n speed: true,\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"MS\"\n }, null, 8, [\"workoutObject\"])\n ]),\n (_unref(workoutObject).maxAlt !== null && _unref(workoutObject).minAlt !== null)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createElementVNode(\"img\", {\n class: \"mountains\",\n src: \"/img/workouts/mountains.svg\",\n alt: _ctx.$t('workouts.ELEVATION')\n }, null, 8, _hoisted_18),\n _createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('workouts.MIN_ALTITUDE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).minAlt,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _hoisted_20,\n _createElementVNode(\"span\", _hoisted_21, _toDisplayString(_ctx.$t('workouts.MAX_ALTITUDE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).maxAlt,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(workoutObject).ascent !== null && _unref(workoutObject).descent !== null)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_22, [\n _hoisted_23,\n _createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('workouts.ASCENT')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).ascent,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n (_unref(displayHARecord))\n ? (_openBlock(), _createBlock(WorkoutRecord, {\n key: 0,\n workoutObject: _unref(workoutObject),\n recordType: \"HA\"\n }, null, 8, [\"workoutObject\"]))\n : _createCommentVNode(\"\", true),\n _hoisted_25,\n _createElementVNode(\"span\", _hoisted_26, _toDisplayString(_ctx.$t('workouts.DESCENT')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).descent,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(WorkoutWeather, {\n workoutObject: _unref(workoutObject),\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"workoutObject\", \"useImperialUnits\"])\n ]))\n}\n}\n\n})","import script from \"./WorkoutData.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutData.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutData.vue?vue&type=style&index=0&id=74c5993b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74c5993b\"]])\n\nexport default __exports__","function $(element, tagName) {\n return Array.from(element.getElementsByTagName(tagName));\n}\nfunction normalizeId(id) {\n return id[0] === \"#\" ? id : `#${id}`;\n}\nfunction $ns(element, tagName, ns) {\n return Array.from(element.getElementsByTagNameNS(ns, tagName));\n}\n/**\n * get the content of a text node, if any\n */\nfunction nodeVal(node) {\n node?.normalize();\n return (node && node.textContent) || \"\";\n}\n/**\n * Get one Y child of X, if any, otherwise null\n */\nfunction get1(node, tagName, callback) {\n const n = node.getElementsByTagName(tagName);\n const result = n.length ? n[0] : null;\n if (result && callback)\n callback(result);\n return result;\n}\nfunction get(node, tagName, callback) {\n const properties = {};\n if (!node)\n return properties;\n const n = node.getElementsByTagName(tagName);\n const result = n.length ? n[0] : null;\n if (result && callback) {\n return callback(result, properties);\n }\n return properties;\n}\nfunction val1(node, tagName, callback) {\n const val = nodeVal(get1(node, tagName));\n if (val && callback)\n return callback(val) || {};\n return {};\n}\nfunction $num(node, tagName, callback) {\n const val = parseFloat(nodeVal(get1(node, tagName)));\n if (isNaN(val))\n return undefined;\n if (val && callback)\n return callback(val) || {};\n return {};\n}\nfunction num1(node, tagName, callback) {\n const val = parseFloat(nodeVal(get1(node, tagName)));\n if (isNaN(val))\n return undefined;\n if (val && callback)\n callback(val);\n return val;\n}\nfunction getMulti(node, propertyNames) {\n const properties = {};\n for (const property of propertyNames) {\n val1(node, property, (val) => {\n properties[property] = val;\n });\n }\n return properties;\n}\nfunction isElement(node) {\n return node?.nodeType === 1;\n}\n\nfunction getLineStyle(node) {\n return get(node, \"line\", (lineStyle) => {\n const val = Object.assign({}, val1(lineStyle, \"color\", (color) => {\n return { stroke: `#${color}` };\n }), $num(lineStyle, \"opacity\", (opacity) => {\n return { \"stroke-opacity\": opacity };\n }), $num(lineStyle, \"width\", (width) => {\n // GPX width is in mm, convert to px with 96 px per inch\n return { \"stroke-width\": (width * 96) / 25.4 };\n }));\n return val;\n });\n}\n\nfunction getExtensions(node) {\n let values = [];\n if (node === null)\n return values;\n for (const child of Array.from(node.childNodes)) {\n if (!isElement(child))\n continue;\n const name = abbreviateName(child.nodeName);\n if (name === \"gpxtpx:TrackPointExtension\") {\n // loop again for nested garmin extensions (eg. \"gpxtpx:hr\")\n values = values.concat(getExtensions(child));\n }\n else {\n // push custom extension (eg. \"power\")\n const val = nodeVal(child);\n values.push([name, parseNumeric(val)]);\n }\n }\n return values;\n}\nfunction abbreviateName(name) {\n return [\"heart\", \"gpxtpx:hr\", \"hr\"].includes(name) ? \"heart\" : name;\n}\nfunction parseNumeric(val) {\n const num = parseFloat(val);\n return isNaN(num) ? val : num;\n}\n\nfunction coordPair$1(node) {\n const ll = [\n parseFloat(node.getAttribute(\"lon\") || \"\"),\n parseFloat(node.getAttribute(\"lat\") || \"\"),\n ];\n if (isNaN(ll[0]) || isNaN(ll[1])) {\n return null;\n }\n num1(node, \"ele\", (val) => {\n ll.push(val);\n });\n const time = get1(node, \"time\");\n return {\n coordinates: ll,\n time: time ? nodeVal(time) : null,\n extendedValues: getExtensions(get1(node, \"extensions\")),\n };\n}\n\nfunction extractProperties(node) {\n const properties = getMulti(node, [\n \"name\",\n \"cmt\",\n \"desc\",\n \"type\",\n \"time\",\n \"keywords\",\n ]);\n const extensions = Array.from(node.getElementsByTagNameNS(\"http://www.garmin.com/xmlschemas/GpxExtensions/v3\", \"*\"));\n for (const child of extensions) {\n if (child.parentNode?.parentNode === node) {\n properties[child.tagName.replace(\":\", \"_\")] = nodeVal(child);\n }\n }\n const links = $(node, \"link\");\n if (links.length) {\n properties.links = links.map((link) => Object.assign({ href: link.getAttribute(\"href\") }, getMulti(link, [\"text\", \"type\"])));\n }\n return properties;\n}\n\n/**\n * Extract points from a trkseg or rte element.\n */\nfunction getPoints$1(node, pointname) {\n const pts = $(node, pointname);\n const line = [];\n const times = [];\n const extendedValues = {};\n for (let i = 0; i < pts.length; i++) {\n const c = coordPair$1(pts[i]);\n if (!c) {\n continue;\n }\n line.push(c.coordinates);\n if (c.time)\n times.push(c.time);\n for (const [name, val] of c.extendedValues) {\n const plural = name === \"heart\" ? name : name.replace(\"gpxtpx:\", \"\") + \"s\";\n if (!extendedValues[plural]) {\n extendedValues[plural] = Array(pts.length).fill(null);\n }\n extendedValues[plural][i] = val;\n }\n }\n if (line.length < 2)\n return; // Invalid line in GeoJSON\n return {\n line: line,\n times: times,\n extendedValues: extendedValues,\n };\n}\n/**\n * Extract a LineString geometry from a rte\n * element.\n */\nfunction getRoute(node) {\n const line = getPoints$1(node, \"rtept\");\n if (!line)\n return;\n return {\n type: \"Feature\",\n properties: Object.assign({ _gpxType: \"rte\" }, extractProperties(node), getLineStyle(get1(node, \"extensions\"))),\n geometry: {\n type: \"LineString\",\n coordinates: line.line,\n },\n };\n}\nfunction getTrack(node) {\n const segments = $(node, \"trkseg\");\n const track = [];\n const times = [];\n const extractedLines = [];\n for (const segment of segments) {\n const line = getPoints$1(segment, \"trkpt\");\n if (line) {\n extractedLines.push(line);\n if (line.times && line.times.length)\n times.push(line.times);\n }\n }\n if (extractedLines.length === 0)\n return null;\n const multi = extractedLines.length > 1;\n const properties = Object.assign({ _gpxType: \"trk\" }, extractProperties(node), getLineStyle(get1(node, \"extensions\")), times.length\n ? {\n coordinateProperties: {\n times: multi ? times : times[0],\n },\n }\n : {});\n for (const line of extractedLines) {\n track.push(line.line);\n if (!properties.coordinateProperties) {\n properties.coordinateProperties = {};\n }\n const props = properties.coordinateProperties;\n const entries = Object.entries(line.extendedValues);\n for (let i = 0; i < entries.length; i++) {\n const [name, val] = entries[i];\n if (multi) {\n if (!props[name]) {\n props[name] = extractedLines.map((line) => new Array(line.line.length).fill(null));\n }\n props[name][i] = val;\n }\n else {\n props[name] = val;\n }\n }\n }\n return {\n type: \"Feature\",\n properties: properties,\n geometry: multi\n ? {\n type: \"MultiLineString\",\n coordinates: track,\n }\n : {\n type: \"LineString\",\n coordinates: track[0],\n },\n };\n}\n/**\n * Extract a point, if possible, from a given node,\n * which is usually a wpt or trkpt\n */\nfunction getPoint(node) {\n const properties = Object.assign(extractProperties(node), getMulti(node, [\"sym\"]));\n const pair = coordPair$1(node);\n if (!pair)\n return null;\n return {\n type: \"Feature\",\n properties,\n geometry: {\n type: \"Point\",\n coordinates: pair.coordinates,\n },\n };\n}\n/**\n * Convert GPX to GeoJSON incrementally, returning\n * a [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)\n * that yields output feature by feature.\n */\nfunction* gpxGen(node) {\n for (const track of $(node, \"trk\")) {\n const feature = getTrack(track);\n if (feature)\n yield feature;\n }\n for (const route of $(node, \"rte\")) {\n const feature = getRoute(route);\n if (feature)\n yield feature;\n }\n for (const waypoint of $(node, \"wpt\")) {\n const point = getPoint(waypoint);\n if (point)\n yield point;\n }\n}\n/**\n *\n * Convert a GPX document to GeoJSON. The first argument, `doc`, must be a GPX\n * document as an XML DOM - not as a string. You can get this using jQuery's default\n * `.ajax` function or using a bare XMLHttpRequest with the `.response` property\n * holding an XML DOM.\n *\n * The output is a JavaScript object of GeoJSON data, same as `.kml` outputs, with the\n * addition of a `_gpxType` property on each `LineString` feature that indicates whether\n * the feature was encoded as a route (`rte`) or track (`trk`) in the GPX document.\n */\nfunction gpx(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(gpxGen(node)),\n };\n}\n\nconst EXTENSIONS_NS = \"http://www.garmin.com/xmlschemas/ActivityExtension/v2\";\nconst TRACKPOINT_ATTRIBUTES = [\n [\"heartRate\", \"heartRates\"],\n [\"Cadence\", \"cadences\"],\n // Extended Trackpoint attributes\n [\"Speed\", \"speeds\"],\n [\"Watts\", \"watts\"],\n];\nconst LAP_ATTRIBUTES = [\n [\"TotalTimeSeconds\", \"totalTimeSeconds\"],\n [\"DistanceMeters\", \"distanceMeters\"],\n [\"MaximumSpeed\", \"maxSpeed\"],\n [\"AverageHeartRateBpm\", \"avgHeartRate\"],\n [\"MaximumHeartRateBpm\", \"maxHeartRate\"],\n // Extended Lap attributes\n [\"AvgSpeed\", \"avgSpeed\"],\n [\"AvgWatts\", \"avgWatts\"],\n [\"MaxWatts\", \"maxWatts\"],\n];\nfunction getProperties(node, attributeNames) {\n const properties = [];\n for (const [tag, alias] of attributeNames) {\n let elem = get1(node, tag);\n if (!elem) {\n const elements = node.getElementsByTagNameNS(EXTENSIONS_NS, tag);\n if (elements.length) {\n elem = elements[0];\n }\n }\n const val = parseFloat(nodeVal(elem));\n if (!isNaN(val)) {\n properties.push([alias, val]);\n }\n }\n return properties;\n}\nfunction coordPair(node) {\n const ll = [num1(node, \"LongitudeDegrees\"), num1(node, \"LatitudeDegrees\")];\n if (ll[0] === undefined ||\n isNaN(ll[0]) ||\n ll[1] === undefined ||\n isNaN(ll[1])) {\n return null;\n }\n const heartRate = get1(node, \"HeartRateBpm\");\n const time = nodeVal(get1(node, \"Time\"));\n get1(node, \"AltitudeMeters\", (alt) => {\n const a = parseFloat(nodeVal(alt));\n if (!isNaN(a)) {\n ll.push(a);\n }\n });\n return {\n coordinates: ll,\n time: time || null,\n heartRate: heartRate ? parseFloat(nodeVal(heartRate)) : null,\n extensions: getProperties(node, TRACKPOINT_ATTRIBUTES),\n };\n}\nfunction getPoints(node) {\n const pts = $(node, \"Trackpoint\");\n const line = [];\n const times = [];\n const heartRates = [];\n if (pts.length < 2)\n return null; // Invalid line in GeoJSON\n const extendedProperties = {};\n const result = { extendedProperties };\n for (let i = 0; i < pts.length; i++) {\n const c = coordPair(pts[i]);\n if (c === null)\n continue;\n line.push(c.coordinates);\n const { time, heartRate, extensions } = c;\n if (time)\n times.push(time);\n if (heartRate)\n heartRates.push(heartRate);\n for (const [alias, value] of extensions) {\n if (!extendedProperties[alias]) {\n extendedProperties[alias] = Array(pts.length).fill(null);\n }\n extendedProperties[alias][i] = value;\n }\n }\n if (line.length < 2)\n return null;\n return Object.assign(result, {\n line: line,\n times: times,\n heartRates: heartRates,\n });\n}\nfunction getLap(node) {\n const segments = $(node, \"Track\");\n const track = [];\n const times = [];\n const heartRates = [];\n const allExtendedProperties = [];\n let line;\n const properties = Object.assign(Object.fromEntries(getProperties(node, LAP_ATTRIBUTES)), get(node, \"Name\", (nameElement) => {\n return { name: nodeVal(nameElement) };\n }));\n for (const segment of segments) {\n line = getPoints(segment);\n if (line) {\n track.push(line.line);\n if (line.times.length)\n times.push(line.times);\n if (line.heartRates.length)\n heartRates.push(line.heartRates);\n allExtendedProperties.push(line.extendedProperties);\n }\n }\n for (let i = 0; i < allExtendedProperties.length; i++) {\n const extendedProperties = allExtendedProperties[i];\n for (const property in extendedProperties) {\n if (segments.length === 1) {\n if (line) {\n properties[property] = line.extendedProperties[property];\n }\n }\n else {\n if (!properties[property]) {\n properties[property] = track.map((track) => Array(track.length).fill(null));\n }\n properties[property][i] = extendedProperties[property];\n }\n }\n }\n if (track.length === 0)\n return null;\n if (times.length || heartRates.length) {\n properties.coordinateProperties = Object.assign(times.length\n ? {\n times: track.length === 1 ? times[0] : times,\n }\n : {}, heartRates.length\n ? {\n heart: track.length === 1 ? heartRates[0] : heartRates,\n }\n : {});\n }\n return {\n type: \"Feature\",\n properties: properties,\n geometry: track.length === 1\n ? {\n type: \"LineString\",\n coordinates: track[0],\n }\n : {\n type: \"MultiLineString\",\n coordinates: track,\n },\n };\n}\n/**\n * Incrementally convert a TCX document to GeoJSON. The\n * first argument, `doc`, must be a TCX\n * document as an XML DOM - not as a string.\n */\nfunction* tcxGen(node) {\n for (const lap of $(node, \"Lap\")) {\n const feature = getLap(lap);\n if (feature)\n yield feature;\n }\n for (const course of $(node, \"Courses\")) {\n const feature = getLap(course);\n if (feature)\n yield feature;\n }\n}\n/**\n * Convert a TCX document to GeoJSON. The first argument, `doc`, must be a TCX\n * document as an XML DOM - not as a string.\n */\nfunction tcx(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(tcxGen(node)),\n };\n}\n\nfunction fixColor(v, prefix) {\n const properties = {};\n const colorProp = prefix == \"stroke\" || prefix === \"fill\" ? prefix : prefix + \"-color\";\n if (v[0] === \"#\") {\n v = v.substring(1);\n }\n if (v.length === 6 || v.length === 3) {\n properties[colorProp] = \"#\" + v;\n }\n else if (v.length === 8) {\n properties[prefix + \"-opacity\"] = parseInt(v.substring(0, 2), 16) / 255;\n properties[colorProp] =\n \"#\" + v.substring(6, 8) + v.substring(4, 6) + v.substring(2, 4);\n }\n return properties;\n}\n\nfunction numericProperty(node, source, target) {\n const properties = {};\n num1(node, source, (val) => {\n properties[target] = val;\n });\n return properties;\n}\nfunction getColor(node, output) {\n return get(node, \"color\", (elem) => fixColor(nodeVal(elem), output));\n}\nfunction extractIconHref(node) {\n return get(node, \"Icon\", (icon, properties) => {\n val1(icon, \"href\", (href) => {\n properties.icon = href;\n });\n return properties;\n });\n}\nfunction extractIcon(node) {\n return get(node, \"IconStyle\", (iconStyle) => {\n return Object.assign(getColor(iconStyle, \"icon\"), numericProperty(iconStyle, \"scale\", \"icon-scale\"), numericProperty(iconStyle, \"heading\", \"icon-heading\"), get(iconStyle, \"hotSpot\", (hotspot) => {\n const left = parseFloat(hotspot.getAttribute(\"x\") || \"\");\n const top = parseFloat(hotspot.getAttribute(\"y\") || \"\");\n const xunits = hotspot.getAttribute(\"xunits\") || \"\";\n const yunits = hotspot.getAttribute(\"yunits\") || \"\";\n if (!isNaN(left) && !isNaN(top))\n return {\n \"icon-offset\": [left, top],\n \"icon-offset-units\": [xunits, yunits],\n };\n return {};\n }), extractIconHref(iconStyle));\n });\n}\nfunction extractLabel(node) {\n return get(node, \"LabelStyle\", (labelStyle) => {\n return Object.assign(getColor(labelStyle, \"label\"), numericProperty(labelStyle, \"scale\", \"label-scale\"));\n });\n}\nfunction extractLine(node) {\n return get(node, \"LineStyle\", (lineStyle) => {\n return Object.assign(getColor(lineStyle, \"stroke\"), numericProperty(lineStyle, \"width\", \"stroke-width\"));\n });\n}\nfunction extractPoly(node) {\n return get(node, \"PolyStyle\", (polyStyle, properties) => {\n return Object.assign(properties, get(polyStyle, \"color\", (elem) => fixColor(nodeVal(elem), \"fill\")), val1(polyStyle, \"fill\", (fill) => {\n if (fill === \"0\")\n return { \"fill-opacity\": 0 };\n }), val1(polyStyle, \"outline\", (outline) => {\n if (outline === \"0\")\n return { \"stroke-opacity\": 0 };\n }));\n });\n}\nfunction extractStyle(node) {\n return Object.assign({}, extractPoly(node), extractLine(node), extractLabel(node), extractIcon(node));\n}\n\nfunction extractExtendedData(node) {\n return get(node, \"ExtendedData\", (extendedData, properties) => {\n for (const data of $(extendedData, \"Data\")) {\n properties[data.getAttribute(\"name\") || \"\"] = nodeVal(get1(data, \"value\"));\n }\n for (const simpleData of $(extendedData, \"SimpleData\")) {\n properties[simpleData.getAttribute(\"name\") || \"\"] = nodeVal(simpleData);\n }\n return properties;\n });\n}\nfunction getMaybeHTMLDescription(node) {\n const descriptionNode = get1(node, \"description\");\n for (const c of Array.from(descriptionNode?.childNodes || [])) {\n if (c.nodeType === 4) {\n return {\n description: {\n \"@type\": \"html\",\n value: nodeVal(c),\n },\n };\n }\n }\n return {};\n}\nfunction extractTimeSpan(node) {\n return get(node, \"TimeSpan\", (timeSpan) => {\n return {\n timespan: {\n begin: nodeVal(get1(timeSpan, \"begin\")),\n end: nodeVal(get1(timeSpan, \"end\")),\n },\n };\n });\n}\nfunction extractTimeStamp(node) {\n return get(node, \"TimeStamp\", (timeStamp) => {\n return { timestamp: nodeVal(get1(timeStamp, \"when\")) };\n });\n}\nfunction extractCascadedStyle(node, styleMap) {\n return val1(node, \"styleUrl\", (styleUrl) => {\n styleUrl = normalizeId(styleUrl);\n if (styleMap[styleUrl]) {\n return Object.assign({ styleUrl }, styleMap[styleUrl]);\n }\n // For backward-compatibility. Should we still include\n // styleUrl even if it's not resolved?\n return { styleUrl };\n });\n}\n\nconst removeSpace = /\\s*/g;\nconst trimSpace = /^\\s*|\\s*$/g;\nconst splitSpace = /\\s+/;\n/**\n * Get one coordinate from a coordinate array, if any\n */\nfunction coord1(value) {\n return value\n .replace(removeSpace, \"\")\n .split(\",\")\n .map(parseFloat)\n .filter((num) => !isNaN(num))\n .slice(0, 3);\n}\n/**\n * Get all coordinates from a coordinate array as [[],[]]\n */\nfunction coord(value) {\n return value\n .replace(trimSpace, \"\")\n .split(splitSpace)\n .map(coord1)\n .filter((coord) => {\n return coord.length >= 2;\n });\n}\nfunction gxCoords(node) {\n let elems = $(node, \"coord\");\n if (elems.length === 0) {\n elems = $ns(node, \"coord\", \"*\");\n }\n const coordinates = elems.map((elem) => {\n return nodeVal(elem).split(\" \").map(parseFloat);\n });\n if (coordinates.length === 0) {\n return null;\n }\n return {\n geometry: coordinates.length > 2\n ? {\n type: \"LineString\",\n coordinates,\n }\n : {\n type: \"Point\",\n coordinates: coordinates[0],\n },\n times: $(node, \"when\").map((elem) => nodeVal(elem)),\n };\n}\nfunction fixRing(ring) {\n if (ring.length === 0)\n return ring;\n const first = ring[0];\n const last = ring[ring.length - 1];\n let equal = true;\n for (let i = 0; i < Math.max(first.length, last.length); i++) {\n if (first[i] !== last[i]) {\n equal = false;\n break;\n }\n }\n if (!equal) {\n return ring.concat([ring[0]]);\n }\n return ring;\n}\nfunction getCoordinates(node) {\n return nodeVal(get1(node, \"coordinates\"));\n}\nfunction getGeometry(node) {\n let geometries = [];\n let coordTimes = [];\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = node.childNodes.item(i);\n if (isElement(child)) {\n switch (child.tagName) {\n case \"MultiGeometry\":\n case \"MultiTrack\":\n case \"gx:MultiTrack\": {\n const childGeometries = getGeometry(child);\n geometries = geometries.concat(childGeometries.geometries);\n coordTimes = coordTimes.concat(childGeometries.coordTimes);\n break;\n }\n case \"Point\": {\n const coordinates = coord1(getCoordinates(child));\n if (coordinates.length >= 2) {\n geometries.push({\n type: \"Point\",\n coordinates,\n });\n }\n break;\n }\n case \"LineString\": {\n const coordinates = coord(getCoordinates(child));\n if (coordinates.length >= 2) {\n geometries.push({\n type: \"LineString\",\n coordinates,\n });\n }\n break;\n }\n case \"Polygon\": {\n const coords = [];\n for (const linearRing of $(child, \"LinearRing\")) {\n const ring = fixRing(coord(getCoordinates(linearRing)));\n if (ring.length >= 4) {\n coords.push(ring);\n }\n }\n if (coords.length) {\n geometries.push({\n type: \"Polygon\",\n coordinates: coords,\n });\n }\n break;\n }\n case \"Track\":\n case \"gx:Track\": {\n const gx = gxCoords(child);\n if (!gx)\n break;\n const { times, geometry } = gx;\n geometries.push(geometry);\n if (times.length)\n coordTimes.push(times);\n break;\n }\n }\n }\n }\n return {\n geometries,\n coordTimes,\n };\n}\n\nfunction geometryListToGeometry(geometries) {\n return geometries.length === 0\n ? null\n : geometries.length === 1\n ? geometries[0]\n : {\n type: \"GeometryCollection\",\n geometries,\n };\n}\nfunction getPlacemark(node, styleMap) {\n const { coordTimes, geometries } = getGeometry(node);\n const feature = {\n type: \"Feature\",\n geometry: geometryListToGeometry(geometries),\n properties: Object.assign(getMulti(node, [\n \"name\",\n \"address\",\n \"visibility\",\n \"open\",\n \"phoneNumber\",\n \"description\",\n ]), getMaybeHTMLDescription(node), extractCascadedStyle(node, styleMap), extractStyle(node), extractExtendedData(node), extractTimeSpan(node), extractTimeStamp(node), coordTimes.length\n ? {\n coordinateProperties: {\n times: coordTimes.length === 1 ? coordTimes[0] : coordTimes,\n },\n }\n : {}),\n };\n if (feature.properties?.visibility !== undefined) {\n feature.properties.visibility = feature.properties.visibility !== \"0\";\n }\n const id = node.getAttribute(\"id\");\n if (id !== null && id !== \"\")\n feature.id = id;\n return feature;\n}\n\nfunction getGroundOverlayBox(node) {\n const latLonQuad = get1(node, \"gx:LatLonQuad\");\n if (latLonQuad) {\n const ring = fixRing(coord(getCoordinates(node)));\n return {\n type: \"Polygon\",\n coordinates: [ring],\n };\n }\n return getLatLonBox(node);\n}\nconst DEGREES_TO_RADIANS = Math.PI / 180;\nfunction rotateBox(bbox, coordinates, rotation) {\n const center = [(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2];\n return [\n coordinates[0].map((coordinate) => {\n const dy = coordinate[1] - center[1];\n const dx = coordinate[0] - center[0];\n const distance = Math.sqrt(Math.pow(dy, 2) + Math.pow(dx, 2));\n const angle = Math.atan2(dy, dx) - rotation * DEGREES_TO_RADIANS;\n return [\n center[0] + Math.cos(angle) * distance,\n center[1] + Math.sin(angle) * distance,\n ];\n }),\n ];\n}\nfunction getLatLonBox(node) {\n const latLonBox = get1(node, \"LatLonBox\");\n if (latLonBox) {\n const north = num1(latLonBox, \"north\");\n const west = num1(latLonBox, \"west\");\n const east = num1(latLonBox, \"east\");\n const south = num1(latLonBox, \"south\");\n const rotation = num1(latLonBox, \"rotation\");\n if (typeof north === \"number\" &&\n typeof south === \"number\" &&\n typeof west === \"number\" &&\n typeof east === \"number\") {\n const bbox = [west, south, east, north];\n let coordinates = [\n [\n [west, north],\n [east, north],\n [east, south],\n [west, south],\n [west, north], // top left (again)\n ],\n ];\n if (typeof rotation === \"number\") {\n coordinates = rotateBox(bbox, coordinates, rotation);\n }\n return {\n type: \"Polygon\",\n coordinates,\n };\n }\n }\n return null;\n}\nfunction getGroundOverlay(node, styleMap) {\n const geometry = getGroundOverlayBox(node);\n const feature = {\n type: \"Feature\",\n geometry,\n properties: Object.assign(\n /**\n * Related to\n * https://gist.github.com/tmcw/037a1cb6660d74a392e9da7446540f46\n */\n { \"@geometry-type\": \"groundoverlay\" }, getMulti(node, [\n \"name\",\n \"address\",\n \"visibility\",\n \"open\",\n \"phoneNumber\",\n \"description\",\n ]), getMaybeHTMLDescription(node), extractCascadedStyle(node, styleMap), extractStyle(node), extractIconHref(node), extractExtendedData(node), extractTimeSpan(node), extractTimeStamp(node)),\n };\n if (feature.properties?.visibility !== undefined) {\n feature.properties.visibility = feature.properties.visibility !== \"0\";\n }\n const id = node.getAttribute(\"id\");\n if (id !== null && id !== \"\")\n feature.id = id;\n return feature;\n}\n\nfunction getStyleId(style) {\n let id = style.getAttribute(\"id\");\n const parentNode = style.parentNode;\n if (!id &&\n isElement(parentNode) &&\n parentNode.localName === \"CascadingStyle\") {\n id = parentNode.getAttribute(\"kml:id\") || parentNode.getAttribute(\"id\");\n }\n return normalizeId(id || \"\");\n}\nfunction buildStyleMap(node) {\n const styleMap = {};\n for (const style of $(node, \"Style\")) {\n styleMap[getStyleId(style)] = extractStyle(style);\n }\n for (const map of $(node, \"StyleMap\")) {\n const id = normalizeId(map.getAttribute(\"id\") || \"\");\n val1(map, \"styleUrl\", (styleUrl) => {\n styleUrl = normalizeId(styleUrl);\n if (styleMap[styleUrl]) {\n styleMap[id] = styleMap[styleUrl];\n }\n });\n }\n return styleMap;\n}\nconst FOLDER_PROPS = [\n \"name\",\n \"visibility\",\n \"open\",\n \"address\",\n \"description\",\n \"phoneNumber\",\n \"visibility\",\n];\nfunction getFolder(node) {\n const meta = {};\n for (const child of Array.from(node.childNodes)) {\n if (isElement(child) && FOLDER_PROPS.includes(child.tagName)) {\n meta[child.tagName] = nodeVal(child);\n }\n }\n return {\n type: \"folder\",\n meta,\n children: [],\n };\n}\n/**\n * Yield a nested tree with KML folder structure\n *\n * This generates a tree with the given structure:\n *\n * ```js\n * {\n * \"type\": \"root\",\n * \"children\": [\n * {\n * \"type\": \"folder\",\n * \"meta\": {\n * \"name\": \"Test\"\n * },\n * \"children\": [\n * // ...features and folders\n * ]\n * }\n * // ...features\n * ]\n * }\n * ```\n *\n * ### GroundOverlay\n *\n * GroundOverlay elements are converted into\n * `Feature` objects with `Polygon` geometries,\n * a property like:\n *\n * ```json\n * {\n * \"@geometry-type\": \"groundoverlay\"\n * }\n * ```\n *\n * And the ground overlay's image URL in the `href`\n * property. Ground overlays will need to be displayed\n * with a separate method to other features, depending\n * on which map framework you're using.\n */\nfunction kmlWithFolders(node) {\n const styleMap = buildStyleMap(node);\n const tree = { type: \"root\", children: [] };\n function traverse(node, pointer) {\n if (isElement(node)) {\n switch (node.tagName) {\n case \"GroundOverlay\": {\n const placemark = getGroundOverlay(node, styleMap);\n if (placemark) {\n pointer.children.push(placemark);\n }\n break;\n }\n case \"Placemark\": {\n const placemark = getPlacemark(node, styleMap);\n if (placemark) {\n pointer.children.push(placemark);\n }\n break;\n }\n case \"Folder\": {\n const folder = getFolder(node);\n pointer.children.push(folder);\n pointer = folder;\n break;\n }\n }\n }\n if (node.childNodes) {\n for (let i = 0; i < node.childNodes.length; i++) {\n traverse(node.childNodes[i], pointer);\n }\n }\n }\n traverse(node, tree);\n return tree;\n}\n/**\n * Convert KML to GeoJSON incrementally, returning\n * a [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)\n * that yields output feature by feature.\n */\nfunction* kmlGen(node) {\n const styleMap = buildStyleMap(node);\n for (const placemark of $(node, \"Placemark\")) {\n const feature = getPlacemark(placemark, styleMap);\n if (feature)\n yield feature;\n }\n for (const groundOverlay of $(node, \"GroundOverlay\")) {\n const feature = getGroundOverlay(groundOverlay, styleMap);\n if (feature)\n yield feature;\n }\n}\n/**\n * Convert a KML document to GeoJSON. The first argument, `doc`, must be a KML\n * document as an XML DOM - not as a string. You can get this using jQuery's default\n * `.ajax` function or using a bare XMLHttpRequest with the `.response` property\n * holding an XML DOM.\n *\n * The output is a JavaScript object of GeoJSON data. You can convert it to a string\n * with [JSON.stringify](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)\n * or use it directly in libraries.\n */\nfunction kml(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(kmlGen(node)),\n };\n}\n\nexport { gpx, gpxGen, kml, kmlGen, kmlWithFolders, tcx, tcxGen };\n//# sourceMappingURL=togeojson.es.mjs.map\n","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>} 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","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nimport { LIcon, LMarker } from '@vue-leaflet/vue-leaflet'\n import { toRefs } from 'vue'\n\n import { TCoordinates } from '@/types/workouts'\n\n interface Props {\n markerCoordinates: TCoordinates\n isStart: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CustomMarker',\n props: {\n markerCoordinates: null,\n isStart: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n markerCoordinates: TCoordinates\n isStart: boolean\n }\n\n \n\n const { isStart, markerCoordinates } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(markerCoordinates).latitude)\n ? (_openBlock(), _createBlock(_unref(LMarker), {\n key: 0,\n \"lat-lng\": [_unref(markerCoordinates).latitude, _unref(markerCoordinates).longitude]\n }, {\n default: _withCtx(() => [\n _createVNode(_unref(LIcon), {\n \"icon-url\": `/img/workouts/${_unref(isStart) ? 'start' : 'finish'}.svg`,\n iconSize: [15, 15]\n }, null, 8, [\"icon-url\"])\n ]),\n _: 1\n }, 8, [\"lat-lng\"]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./CustomMarker.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./CustomMarker.vue?vue&type=script&lang=ts&setup=true\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, normalizeClass as _normalizeClass, createBlock as _createBlock, resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6b490f5d\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-map\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"leaflet-container\"\n}\nconst _hoisted_3 = { key: 1 }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-refresh\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_5 = {\n key: 1,\n class: \"no-map\"\n}\n\nimport { gpx } from '@tmcw/togeojson'\n import {\n LControl,\n LControlLayers,\n LGeoJson,\n LLayerGroup,\n LMap,\n LMarker,\n LTileLayer,\n } from '@vue-leaflet/vue-leaflet'\n import { ComputedRef, computed, ref, toRefs, withDefaults } from 'vue'\n import 'leaflet/dist/leaflet.css'\n\n import CustomMarker from '@/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue'\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 interface Props {\n workoutData: IWorkoutData\n markerCoordinates?: TCoordinates\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n workoutData: null,\n markerCoordinates: { default: () => ({} as TCoordinates) }\n },\n setup(__props: any) {\n\nconst props = __props as { workoutData: IWorkoutData, markerCoordinates: TCoordinates }\n\n \n\n const store = useStore()\n\n const { workoutData, markerCoordinates } = toRefs(props)\n const workoutMap = ref null }\n }>(null)\n const bounds = computed(() => getBounds())\n const appConfig: ComputedRef = 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 const startMarkerCoordinates = computed(() =>\n props.workoutData && props.workoutData.chartData.length > 0\n ? {\n latitude: props.workoutData.chartData[0].latitude,\n longitude: props.workoutData.chartData[0].longitude,\n }\n : {}\n )\n const endMarkerCoordinates = computed(() =>\n props.workoutData && props.workoutData.chartData.length > 0\n ? {\n latitude:\n props.workoutData.chartData[props.workoutData.chartData.length - 1]\n .latitude,\n longitude:\n props.workoutData.chartData[props.workoutData.chartData.length - 1]\n .longitude,\n }\n : {}\n )\n const isFullscreen = ref(false)\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[] {\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 function getBounds() {\n return 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 function resetZoom() {\n workoutMap.value?.leafletObject.fitBounds(getBounds())\n }\n function toggleFullscreen() {\n isFullscreen.value = !isFullscreen.value\n if (!isFullscreen.value) {\n setTimeout(() => {\n resetZoom()\n }, 100)\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_VFullscreen = _resolveComponent(\"VFullscreen\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(workoutData).loading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_unref(workoutData).workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_VFullscreen, {\n key: 0,\n modelValue: isFullscreen.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((isFullscreen).value = $event))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"leaflet-container\", { 'fullscreen-map': isFullscreen.value }])\n }, [\n (_unref(geoJson).jsonData && _unref(center) && _unref(bounds).length === 2)\n ? (_openBlock(), _createBlock(_unref(LMap), {\n key: 0,\n zoom: 13,\n maxZoom: 19,\n center: _unref(center),\n bounds: _unref(bounds),\n ref_key: \"workoutMap\",\n ref: workoutMap,\n onReady: _cache[0] || (_cache[0] = ($event: any) => (fitBounds(_unref(bounds))))\n }, {\n default: _withCtx(() => [\n _createVNode(_unref(LControlLayers)),\n _createVNode(_unref(LControl), {\n position: \"topleft\",\n class: \"map-control\",\n onClick: resetZoom\n }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }),\n _createVNode(_unref(LControl), {\n position: \"topleft\",\n class: \"map-control\",\n onClick: toggleFullscreen\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa-${isFullscreen.value ? 'compress' : 'arrows-alt'}`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _: 1\n }),\n _createVNode(_unref(LTileLayer), {\n url: `${_unref(getApiUrl)()}workouts/map_tile/{s}/{z}/{x}/{y}.png`,\n attribution: _unref(appConfig).map_attribution,\n bounds: _unref(bounds)\n }, null, 8, [\"url\", \"attribution\", \"bounds\"]),\n _createVNode(_unref(LGeoJson), {\n geojson: _unref(geoJson).jsonData\n }, null, 8, [\"geojson\"]),\n (_unref(markerCoordinates).latitude)\n ? (_openBlock(), _createBlock(_unref(LMarker), {\n key: 0,\n \"lat-lng\": [\n _unref(markerCoordinates).latitude,\n _unref(markerCoordinates).longitude,\n ]\n }, null, 8, [\"lat-lng\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_unref(LLayerGroup), {\n name: _ctx.$t('workouts.START_AND_FINISH'),\n \"layer-type\": \"overlay\"\n }, {\n default: _withCtx(() => [\n (_unref(startMarkerCoordinates).latitude)\n ? (_openBlock(), _createBlock(CustomMarker, {\n key: 0,\n markerCoordinates: _unref(startMarkerCoordinates),\n isStart: true\n }, null, 8, [\"markerCoordinates\"]))\n : _createCommentVNode(\"\", true),\n (_unref(endMarkerCoordinates).latitude)\n ? (_openBlock(), _createBlock(CustomMarker, {\n key: 1,\n markerCoordinates: _unref(endMarkerCoordinates),\n isStart: false\n }, null, 8, [\"markerCoordinates\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"name\"])\n ]),\n _: 1\n }, 8, [\"center\", \"bounds\"]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ]),\n _: 1\n }, 8, [\"modelValue\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('workouts.NO_MAP')), 1))\n ]))\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=6b490f5d&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6b490f5d\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, withCtx as _withCtx, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9fc0bab8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workout-detail\" }\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n watch,\n withDefaults,\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/index.vue'\n import { WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } 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 interface Props {\n authUser: IAuthUserProfile\n displaySegment: boolean\n sports: ISport[]\n workoutData: IWorkoutData\n markerCoordinates?: TCoordinates\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n authUser: null,\n displaySegment: { type: Boolean },\n sports: null,\n workoutData: null,\n markerCoordinates: { default: () => ({} as TCoordinates) }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, displaySegment: boolean, sports: ISport[], workoutData: IWorkoutData, markerCoordinates: TCoordinates }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { authUser, markerCoordinates, workoutData } = toRefs(props)\n const workout: ComputedRef = computed(\n () => props.workoutData.workout\n )\n const segmentId: Ref = ref(\n route.params.workoutId ? +route.params.segmentId : null\n )\n const segment: ComputedRef = computed(() =>\n workout.value.segments.length > 0 && segmentId.value\n ? workout.value.segments[+segmentId.value - 1]\n : null\n )\n const displayModal: Ref = ref(false)\n const sport = computed(() =>\n props.sports\n ? props.sports.find(\n (sport) => sport.id === props.workoutData.workout.sport_id\n )\n : {}\n )\n const workoutObject = computed(() =>\n getWorkoutObject(workout.value, segment.value)\n )\n\n function getWorkoutObjectUrl(\n workout: IWorkout,\n displaySegment: boolean,\n segmentId: number | null\n ): Record {\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 props.authUser.date_format\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 weatherStart: segment ? null : workout.weather_start,\n with_gpx: workout.with_gpx,\n workoutId: workout.id,\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 watch(\n () => route.params.segmentId,\n async (newSegmentId) => {\n if (newSegmentId) {\n segmentId.value = +newSegmentId\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t('workouts.WORKOUT_DELETION_CONFIRMATION'),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (deleteWorkout(_unref(workoutObject).workoutId))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createVNode(WorkoutCardTitle, {\n sport: _unref(sport),\n workoutObject: _unref(workoutObject),\n onDisplayModal: _cache[2] || (_cache[2] = ($event: any) => (updateDisplayModal(true)))\n }, null, 8, [\"sport\", \"workoutObject\"])\n ]),\n content: _withCtx(() => [\n _createVNode(WorkoutMap, {\n workoutData: _unref(workoutData),\n markerCoordinates: _unref(markerCoordinates)\n }, null, 8, [\"workoutData\", \"markerCoordinates\"]),\n _createVNode(WorkoutData, {\n workoutObject: _unref(workoutObject),\n useImperialUnits: _unref(authUser).imperial_units,\n displayHARecord: _unref(authUser).display_ascent\n }, null, 8, [\"workoutObject\", \"useImperialUnits\", \"displayHARecord\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=9fc0bab8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9fc0bab8\"]])\n\nexport default __exports__","import { Chart, LegendItem } from 'chart.js'\n\nconst getOrCreateLegendList = (id: string): HTMLUListElement => {\n const legendContainer = document.getElementById(id)\n if (legendContainer) {\n let listContainer = legendContainer.querySelector('ul')\n if (!listContainer) {\n listContainer = document.createElement('ul')\n legendContainer.appendChild(listContainer)\n }\n return listContainer\n }\n throw new Error('No legend container')\n}\n\nexport const htmlLegendPlugin = {\n id: 'htmlLegend',\n afterUpdate(\n chart: Chart,\n args: Record,\n options: Record\n ): void {\n const ul = getOrCreateLegendList(options.containerID)\n while (ul.firstChild) {\n ul.firstChild.remove()\n }\n\n const legendItems = chart.options.plugins?.legend?.labels?.generateLabels\n ? chart.options.plugins?.legend?.labels?.generateLabels(chart)\n : []\n\n legendItems.forEach((item: LegendItem) => {\n const li = document.createElement('li')\n li.onclick = () => {\n if (item.datasetIndex !== undefined) {\n chart.setDatasetVisibility(\n item.datasetIndex,\n !chart.isDatasetVisible(item.datasetIndex)\n )\n chart.update()\n }\n }\n\n const checkBox = document.createElement('input')\n if (checkBox) {\n checkBox.type = 'checkbox'\n checkBox.id = item.text\n checkBox.checked = !item.hidden\n }\n\n const text = document.createTextNode(item.text)\n\n const boxSpan = document.createElement('span')\n if (boxSpan) {\n boxSpan.style.background = String(item.fillStyle)\n boxSpan.style.borderColor = String(item.strokeStyle)\n }\n\n li.appendChild(checkBox)\n li.appendChild(text)\n li.appendChild(boxSpan)\n ul.appendChild(li)\n })\n },\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, unref as _unref, mergeProps as _mergeProps, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-dcea1168\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-chart\" }\nconst _hoisted_2 = { class: \"chart-radio\" }\nconst _hoisted_3 = [\"checked\"]\nconst _hoisted_4 = [\"checked\"]\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"chart-legend\" }, null, -1))\nconst _hoisted_6 = { class: \"chart-info\" }\nconst _hoisted_7 = { class: \"no-data-cleaning\" }\nconst _hoisted_8 = { class: \"elevation-start\" }\nconst _hoisted_9 = [\"checked\"]\n\nimport { ChartData, ChartOptions } from 'chart.js'\n import { ComputedRef, computed, ref } from 'vue'\n import { LineChart, useLineChart } from 'vue-chart-3'\n import { useI18n } from 'vue-i18n'\n\n import { htmlLegendPlugin } from '@/components/Workout/WorkoutDetail/WorkoutChart/legend'\n import { TUnit } from '@/types/units'\n import { IAuthUserProfile } from '@/types/user'\n import {\n IWorkoutChartData,\n IWorkoutData,\n TCoordinates,\n } from '@/types/workouts'\n import { units } from '@/utils/units'\n import { getDatasets } from '@/utils/workouts'\n\n interface Props {\n authUser: IAuthUserProfile\n workoutData: IWorkoutData\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n authUser: null,\n workoutData: null\n },\n emits: ['getCoordinates'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n workoutData: IWorkoutData\n }\n\n \n\n \n\n const { t } = useI18n()\n\n const displayDistance = ref(true)\n const beginElevationAtZero = ref(true)\n const datasets: ComputedRef = computed(() =>\n getDatasets(props.workoutData.chartData, t, props.authUser.imperial_units)\n )\n const fromKmUnit = getUnitTo('km')\n const fromMUnit = getUnitTo('m')\n const chartData: ComputedRef> = 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 = computed(\n () => datasets.value.coordinates\n )\n const options = computed>(() => ({\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') + ` (${fromKmUnit})`\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') + ` (${fromKmUnit}/h)`,\n },\n },\n yElevation: {\n beginAtZero: beginElevationAtZero.value,\n grid: {\n drawOnChartArea: false,\n },\n position: 'right',\n title: {\n display: true,\n text: t('workouts.ELEVATION') + ` (${fromMUnit})`,\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 + ` ${fromMUnit}`\n : label + ` ${fromKmUnit}/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')}: ${\n tooltipItems[0].label\n } ${fromKmUnit}`\n : `${t('workouts.DURATION')}: ${formatDuration(\n tooltipItems[0].label.replace(',', '')\n )}`\n },\n },\n },\n legend: {\n display: false,\n },\n htmlLegend: {\n containerID: 'chart-legend',\n },\n },\n }))\n const { lineChartProps } = useLineChart({\n chartData,\n options,\n plugins: [htmlLegendPlugin],\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 function getUnitTo(unitFrom: TUnit): TUnit {\n return props.authUser.imperial_units\n ? units[unitFrom].defaultTarget\n : unitFrom\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.ANALYSIS')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"distance\",\n checked: displayDistance.value,\n onClick: updateDisplayDistance\n }, null, 8, _hoisted_3),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"duration\",\n checked: !displayDistance.value,\n onClick: updateDisplayDistance\n }, null, 8, _hoisted_4),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DURATION')), 1)\n ])\n ]),\n _hoisted_5,\n _createVNode(_unref(LineChart), _mergeProps(_unref(lineChartProps), {\n class: \"line-chart\",\n onMouseleave: emitEmptyCoordinates\n }), null, 16),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.NO_DATA_CLEANING')), 1),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n checked: beginElevationAtZero.value,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (beginElevationAtZero.value = !beginElevationAtZero.value))\n }, null, 8, _hoisted_9),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.START_ELEVATION_AT_ZERO')), 1)\n ])\n ])\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=dcea1168&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-dcea1168\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-028ad527\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-note\" }\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n notes?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutNotes',\n props: {\n notes: { default: () => null }\n },\n setup(__props: any) {\n\nconst props = __props as { notes: string | null }\n\n \n\n const { notes } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.NOTES')), 1)\n ]),\n content: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(notes) && _unref(notes) !== '' ? _unref(notes) : _ctx.$t('workouts.NO_NOTES')), 1)\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./WorkoutNotes.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutNotes.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutNotes.vue?vue&type=style&index=0&id=028ad527&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-028ad527\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6b8a27cd\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-segments\" }\n\nimport { toRefs } from 'vue'\n\n import { IWorkoutSegment } from '@/types/workouts'\n\n interface Props {\n segments: IWorkoutSegment[]\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutSegments',\n props: {\n segments: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n segments: IWorkoutSegment[]\n useImperialUnits: boolean\n }\n\n \n\n const { segments, useImperialUnits } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.SEGMENT', 2)), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"ul\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(segments), (segment, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: segment.segment_id\n }, [\n _createVNode(_component_router_link, {\n to: {\n name: 'WorkoutSegment',\n params: {\n workoutId: segment.workout_id,\n segmentId: index + 1,\n },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.SEGMENT', 1)) + \" \" + _toDisplayString(index + 1), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n _createTextVNode(\" (\" + _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \": \", 1),\n _createVNode(_component_Distance, {\n distance: segment.distance,\n unitFrom: \"km\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createTextVNode(\", \" + _toDisplayString(_ctx.$t('workouts.DURATION')) + \": \" + _toDisplayString(segment.duration) + \") \", 1)\n ]))\n }), 128))\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./WorkoutSegments.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutSegments.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutSegments.vue?vue&type=style&index=0&id=6b8a27cd&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6b8a27cd\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-53c4e53a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workout-container\"\n}\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\nconst _hoisted_6 = { key: 1 }\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\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 WorkoutDetail from '@/components/Workout/WorkoutDetail/index.vue'\n import WorkoutChart from '@/components/Workout/WorkoutDetail/WorkoutChart/index.vue'\n import WorkoutNotes from '@/components/Workout/WorkoutDetail/WorkoutNotes.vue'\n import WorkoutSegments from '@/components/Workout/WorkoutDetail/WorkoutSegments.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData, IWorkoutPayload, TCoordinates } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n displaySegment: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Workout',\n props: {\n displaySegment: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n displaySegment: boolean\n }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { displaySegment } = toRefs(props)\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const markerCoordinates: Ref = ref({\n latitude: null,\n longitude: null,\n })\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 onUnmounted(() => {\n store.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\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\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_unref(workoutData).workout.id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(WorkoutDetail, {\n workoutData: _unref(workoutData),\n sports: _unref(sports),\n authUser: _unref(authUser),\n markerCoordinates: markerCoordinates.value,\n displaySegment: _unref(displaySegment)\n }, null, 8, [\"workoutData\", \"sports\", \"authUser\", \"markerCoordinates\", \"displaySegment\"]),\n (\n _unref(workoutData).workout.with_gpx && _unref(workoutData).chartData.length > 0\n )\n ? (_openBlock(), _createBlock(WorkoutChart, {\n key: 0,\n workoutData: _unref(workoutData),\n authUser: _unref(authUser),\n displaySegment: _unref(displaySegment),\n onGetCoordinates: updateCoordinates\n }, null, 8, [\"workoutData\", \"authUser\", \"displaySegment\"]))\n : _createCommentVNode(\"\", true),\n (!_unref(displaySegment) && _unref(workoutData).workout.segments.length > 1)\n ? (_openBlock(), _createBlock(WorkoutSegments, {\n key: 1,\n segments: _unref(workoutData).workout.segments,\n useImperialUnits: _unref(authUser).imperial_units\n }, null, 8, [\"segments\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n (!_unref(displaySegment))\n ? (_openBlock(), _createBlock(WorkoutNotes, {\n key: 2,\n notes: _unref(workoutData).workout.notes\n }, null, 8, [\"notes\"]))\n : _createCommentVNode(\"\", true),\n _hoisted_5\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n (!_unref(workoutData).loading)\n ? (_openBlock(), _createBlock(NotFound, {\n key: 0,\n target: \"WORKOUT\"\n }))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./Workout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Workout.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Workout.vue?vue&type=style&index=0&id=53c4e53a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-53c4e53a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6c38593a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workouts-filters\" }\nconst _hoisted_2 = { class: \"box\" }\nconst _hoisted_3 = { class: \"form\" }\nconst _hoisted_4 = { class: \"form-items-group\" }\nconst _hoisted_5 = { class: \"form-item\" }\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = { class: \"form-item\" }\nconst _hoisted_8 = [\"value\"]\nconst _hoisted_9 = { class: \"form-items-group\" }\nconst _hoisted_10 = { class: \"form-item\" }\nconst _hoisted_11 = [\"value\"]\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"option\", { value: \"\" }, null, -1))\nconst _hoisted_13 = [\"value\"]\nconst _hoisted_14 = { class: \"form-items-group\" }\nconst _hoisted_15 = { class: \"form-item\" }\nconst _hoisted_16 = { class: \"form-inputs-group\" }\nconst _hoisted_17 = [\"value\"]\nconst _hoisted_18 = [\"value\"]\nconst _hoisted_19 = { class: \"form-items-group\" }\nconst _hoisted_20 = { class: \"form-item\" }\nconst _hoisted_21 = { class: \"form-inputs-group\" }\nconst _hoisted_22 = [\"value\"]\nconst _hoisted_23 = [\"value\"]\nconst _hoisted_24 = { class: \"form-items-group\" }\nconst _hoisted_25 = { class: \"form-item\" }\nconst _hoisted_26 = { class: \"form-inputs-group\" }\nconst _hoisted_27 = [\"value\"]\nconst _hoisted_28 = [\"value\"]\nconst _hoisted_29 = { class: \"form-items-group\" }\nconst _hoisted_30 = { class: \"form-item\" }\nconst _hoisted_31 = { class: \"form-inputs-group\" }\nconst _hoisted_32 = [\"value\"]\nconst _hoisted_33 = [\"value\"]\nconst _hoisted_34 = { class: \"form-button\" }\n\nimport { ComputedRef, computed, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { translateSports } from '@/utils/sports'\n import { units } from '@/utils/units'\n\n interface Props {\n authUser: IAuthUserProfile\n sports: ISport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsFilters',\n props: {\n authUser: null,\n sports: null\n },\n emits: ['filter'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n sports: ISport[]\n }\n\n \n\n \n\n const { t } = useI18n()\n const route = useRoute()\n const router = useRouter()\n\n const { authUser } = toRefs(props)\n\n const toUnit = authUser.value.imperial_units\n ? units['km'].defaultTarget\n : 'km'\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.sports, t)\n )\n let params: LocationQuery = Object.assign({}, route.query)\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')\n if ('page' in params) {\n params['page'] = '1'\n }\n router.push({ path: '/workouts', query: params })\n }\n function onClearFilter() {\n emit('filter')\n router.push({ path: '/workouts', query: {} })\n }\n\n watch(\n () => route.query,\n (newQuery) => {\n params = Object.assign({}, newQuery)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.FROM')) + \": \", 1),\n _createElementVNode(\"input\", {\n name: \"from\",\n type: \"date\",\n value: _ctx.$route.query.from,\n onChange: handleFilterChange\n }, null, 40, _hoisted_6)\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.TO')) + \": \", 1),\n _createElementVNode(\"input\", {\n name: \"to\",\n type: \"date\",\n value: _ctx.$route.query.to,\n onChange: handleFilterChange\n }, null, 40, _hoisted_8)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.SPORT', 1)) + \":\", 1),\n _createElementVNode(\"select\", {\n name: \"sport_id\",\n value: _ctx.$route.query.sport_id,\n onChange: handleFilterChange\n }, [\n _hoisted_12,\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports).filter((s) =>\n _unref(authUser).sports_list.includes(s.id)\n ), (sport) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: sport.id,\n key: sport.id\n }, _toDisplayString(sport.translatedLabel), 9, _hoisted_13))\n }), 128))\n ], 40, _hoisted_11)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"): \", 1),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"input\", {\n name: \"distance_from\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: _ctx.$route.query.distance_from,\n onChange: handleFilterChange\n }, null, 40, _hoisted_17),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n name: \"distance_to\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: _ctx.$route.query.distance_to,\n onChange: handleFilterChange\n }, null, 40, _hoisted_18)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"div\", _hoisted_20, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DURATION')) + \": \", 1),\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"input\", {\n name: \"duration_from\",\n value: _ctx.$route.query.duration_from,\n onChange: handleFilterChange,\n pattern: \"^([0-9]*[0-9]):([0-5][0-9])$\",\n placeholder: \"hh:mm\",\n type: \"text\"\n }, null, 40, _hoisted_22),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n name: \"duration_to\",\n value: _ctx.$route.query.duration_to,\n onChange: handleFilterChange,\n pattern: \"^([0-9]*[0-9]):([0-5][0-9])$\",\n placeholder: \"hh:mm\",\n type: \"text\"\n }, null, 40, _hoisted_23)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_24, [\n _createElementVNode(\"div\", _hoisted_25, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.AVE_SPEED')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"/h): \", 1),\n _createElementVNode(\"div\", _hoisted_26, [\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"ave_speed_from\",\n value: _ctx.$route.query.ave_speed_from,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_27),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"ave_speed_to\",\n value: _ctx.$route.query.ave_speed_to,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_28)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_29, [\n _createElementVNode(\"div\", _hoisted_30, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"/h): \", 1),\n _createElementVNode(\"div\", _hoisted_31, [\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"max_speed_from\",\n value: _ctx.$route.query.max_speed_from,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_32),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"max_speed_to\",\n value: _ctx.$route.query.max_speed_to,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_33)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_34, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: onFilter\n }, _toDisplayString(_ctx.$t('buttons.FILTER')), 1),\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: onClearFilter\n }, _toDisplayString(_ctx.$t('buttons.CLEAR_FILTER')), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./WorkoutsFilters.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsFilters.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsFilters.vue?vue&type=style&index=0&id=6c38593a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6c38593a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createBlock as _createBlock, withCtx as _withCtx, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0f8ea7b0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workouts-list\" }\nconst _hoisted_2 = { class: \"total\" }\nconst _hoisted_3 = { class: \"total-label\" }\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = {\n key: 0,\n class: \"workouts-table responsive-table\"\n}\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", { class: \"sport-col\" }, null, -1))\nconst _hoisted_7 = { class: \"sport-col\" }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = [\"onMouseover\"]\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"fa fa-map-o\",\n \"aria-hidden\": \"true\"\n}\nconst _hoisted_12 = { class: \"title\" }\nconst _hoisted_13 = { class: \"workout-date\" }\nconst _hoisted_14 = { class: \"cell-heading\" }\nconst _hoisted_15 = { class: \"text-right\" }\nconst _hoisted_16 = { class: \"cell-heading\" }\nconst _hoisted_17 = { class: \"text-right\" }\nconst _hoisted_18 = { class: \"cell-heading\" }\nconst _hoisted_19 = { class: \"text-right\" }\nconst _hoisted_20 = { class: \"cell-heading\" }\nconst _hoisted_21 = { class: \"text-right\" }\nconst _hoisted_22 = { class: \"cell-heading\" }\nconst _hoisted_23 = { class: \"text-right\" }\nconst _hoisted_24 = { class: \"cell-heading\" }\nconst _hoisted_25 = { class: \"text-right\" }\nconst _hoisted_26 = { class: \"cell-heading\" }\nconst _hoisted_27 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n watch,\n capitalize,\n onBeforeMount,\n } from 'vue'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import FilterSelects from '@/components/Common/FilterSelects.vue'\n import Pagination from '@/components/Common/Pagination.vue'\n import StaticMap from '@/components/Common/StaticMap.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { ROOT_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { IPagination } from '@/types/api'\n import { ITranslatedSport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkout, TWorkoutsPayload } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { getQuery, sortList, workoutsPayloadKeys } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n import { getSportColor, getSportLabel } from '@/utils/sports'\n import { convertDistance } from '@/utils/units'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n user: IAuthUserProfile\n sports: ITranslatedSport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsList',\n props: {\n user: null,\n sports: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n sports: ITranslatedSport[]\n }\n\n \n\n const store = useStore()\n const route = useRoute()\n const router = useRouter()\n\n const { user, sports } = toRefs(props)\n const orderByList: string[] = [\n 'ave_speed',\n 'distance',\n 'duration',\n 'workout_date',\n ]\n const workouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.USER_WORKOUTS]\n )\n const pagination: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUTS_PAGINATION]\n )\n const currentLanguage: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n let query: TWorkoutsPayload = getWorkoutsQuery(route.query)\n const hoverWorkoutId: Ref = ref(null)\n\n onBeforeMount(() => {\n loadWorkouts(query)\n })\n\n function loadWorkouts(payload: TWorkoutsPayload) {\n store.dispatch(\n WORKOUTS_STORE.ACTIONS.GET_USER_WORKOUTS,\n user.value.imperial_units ? getConvertedPayload(payload) : payload\n )\n }\n function reloadWorkouts(queryParam: string, queryValue: string) {\n const newQuery: LocationQuery = Object.assign({}, route.query)\n newQuery[queryParam] = queryValue\n if (queryParam === 'per_page') {\n newQuery['page'] = '1'\n }\n query = getWorkoutsQuery(newQuery)\n router.push({ path: '/workouts', query })\n }\n\n function getWorkoutsQuery(newQuery: LocationQuery): TWorkoutsPayload {\n const workoutQuery = getQuery(\n newQuery,\n orderByList,\n defaultOrder.order_by,\n {\n defaultSort: defaultOrder.order,\n }\n )\n Object.keys(newQuery)\n .filter((k) => workoutsPayloadKeys.includes(k))\n .map((k) => {\n if (typeof newQuery[k] === 'string') {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n workoutQuery[k] = newQuery[k]\n }\n })\n return workoutQuery\n }\n\n function getConvertedPayload(payload: TWorkoutsPayload): TWorkoutsPayload {\n const convertedPayload: TWorkoutsPayload = {\n ...payload,\n }\n Object.entries(convertedPayload).map((entry) => {\n if (entry[0].match('speed|distance') && entry[1]) {\n convertedPayload[entry[0]] = convertDistance(+entry[1], 'mi', 'km')\n }\n })\n return convertedPayload\n }\n\n function onHover(workoutId: string | null) {\n hoverWorkoutId.value = workoutId\n }\n\n watch(\n () => route.query,\n async (newQuery) => {\n query = getWorkoutsQuery(newQuery)\n loadWorkouts(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"box\", { 'empty-table': _unref(workouts).length === 0 }])\n }, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('common.TOTAL').toLowerCase()) + \": \", 1),\n (_unref(pagination).total !== null)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, _toDisplayString(_unref(pagination).total) + \" \" + _toDisplayString(_ctx.$t('workouts.WORKOUT', _unref(pagination).total)), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(FilterSelects, {\n sort: _unref(sortList),\n order_by: orderByList,\n query: _unref(query),\n message: \"workouts\",\n onUpdateSelect: reloadWorkouts\n }, null, 8, [\"sort\", \"query\"]),\n (_unref(workouts).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createVNode(Pagination, {\n class: \"top-pagination\",\n pagination: _unref(pagination),\n path: \"/workouts\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]),\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", {\n class: _normalizeClass({ smaller: 'de' === _unref(currentLanguage) })\n }, [\n _createElementVNode(\"tr\", null, [\n _hoisted_6,\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 1))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DATE'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DISTANCE'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DURATION'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.AVE_SPEED'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.MAX_SPEED'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.ASCENT'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DESCENT'))), 1)\n ])\n ], 2),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: workout.id\n }, [\n _createElementVNode(\"td\", _hoisted_7, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('workouts.SPORT', 1)), 1),\n (_unref(sports).length > 0)\n ? (_openBlock(), _createBlock(_component_SportImage, {\n key: 0,\n title: \n _unref(sports).find((s) => s.id === workout.sport_id)\n .translatedLabel\n ,\n \"sport-label\": _unref(getSportLabel)(workout, _unref(sports)),\n color: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"title\", \"sport-label\", \"color\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"td\", {\n class: \"workout-title\",\n onMouseover: ($event: any) => (onHover(workout.id)),\n onMouseleave: _cache[0] || (_cache[0] = ($event: any) => (onHover(null)))\n }, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 1))), 1),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: { name: 'Workout', params: { workoutId: workout.id } }\n }, {\n default: _withCtx(() => [\n (workout.with_gpx)\n ? (_openBlock(), _createElementBlock(\"i\", _hoisted_11))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(workout.title), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n (workout.with_gpx && hoverWorkoutId.value === workout.id)\n ? (_openBlock(), _createBlock(StaticMap, {\n key: 0,\n workout: workout,\n \"display-hover\": true\n }, null, 8, [\"workout\"]))\n : _createCommentVNode(\"\", true)\n ], 40, _hoisted_9),\n _createElementVNode(\"td\", _hoisted_13, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('workouts.DATE')), 1),\n _createTextVNode(\" \" + _toDisplayString(_unref(formatDate)(\n workout.workout_date,\n _unref(user).timezone,\n _unref(user).date_format\n )), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_15, [\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1),\n _createVNode(_component_Distance, {\n distance: workout.distance,\n unitFrom: \"km\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_17, [\n _createElementVNode(\"span\", _hoisted_18, _toDisplayString(_ctx.$t('workouts.DURATION')), 1),\n _createTextVNode(\" \" + _toDisplayString(workout.moving), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_19, [\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('workouts.AVE_SPEED')), 1),\n _createVNode(_component_Distance, {\n distance: workout.ave_speed,\n unitFrom: \"km\",\n speed: true,\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_21, [\n _createElementVNode(\"span\", _hoisted_22, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')), 1),\n _createVNode(_component_Distance, {\n distance: workout.max_speed,\n unitFrom: \"km\",\n speed: true,\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_23, [\n _createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('workouts.ASCENT')), 1),\n (workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: workout.ascent,\n unitFrom: \"m\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"td\", _hoisted_25, [\n _createElementVNode(\"span\", _hoisted_26, _toDisplayString(_ctx.$t('workouts.DESCENT')), 1),\n (workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: workout.descent,\n unitFrom: \"m\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n }), 128))\n ])\n ]),\n _createVNode(Pagination, {\n pagination: _unref(pagination),\n path: \"/workouts\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"])\n ]))\n : _createCommentVNode(\"\", true)\n ], 2),\n (_unref(workouts).length === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true),\n _hoisted_27\n ]))\n}\n}\n\n})","import script from \"./WorkoutsList.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsList.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsList.vue?vue&type=style&index=0&id=0f8ea7b0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0f8ea7b0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-77e54012\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"workouts\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container workouts-container\" }\nconst _hoisted_3 = { class: \"display-filters\" }\nconst _hoisted_4 = { class: \"list-container\" }\n\nimport { ComputedRef, computed, 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 { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsView',\n setup(__props) {\n\n const { t } = useI18n()\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(sports.value, t)\n )\n const hiddenFilters = ref(true)\n\n function toggleFilters() {\n hiddenFilters.value = !hiddenFilters.value\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"filters-container\", { hidden: hiddenFilters.value }])\n }, [\n _createVNode(WorkoutsFilters, {\n sports: _unref(translatedSports),\n authUser: _unref(authUser),\n onFilter: toggleFilters\n }, null, 8, [\"sports\", \"authUser\"])\n ], 2),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", { onClick: toggleFilters }, [\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa-caret-${hiddenFilters.value ? 'down' : 'up'}`),\n \"aria-hidden\": \"true\"\n }, null, 2),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`workouts.${hiddenFilters.value ? 'DISPLAY' : 'HIDE'}_FILTERS`)), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(WorkoutsList, {\n user: _unref(authUser),\n sports: _unref(translatedSports)\n }, null, 8, [\"user\", \"sports\"])\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutsView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsView.vue?vue&type=style&index=0&id=77e54012&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-77e54012\"]])\n\nexport default __exports__"],"names":["_hoisted_1","id","_hoisted_2","_hoisted_3","class","_hoisted_4","key","_hoisted_5","_hoisted_6","for","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_defineComponent","__name","props","authUser","sports","isCreation","type","Boolean","default","loading","workout","setup","__props","t","useI18n","store","useStore","router","useRouter","toRefs","translatedSports","computed","translateSports","value","sport_id","appConfig","getters","ROOT_STORE","fileSizeLimit","max_single_file_size","getReadableFileSize","gpx_limit_import","zipSizeLimit","max_zip_file_size","errorMessages","workoutForm","reactive","title","notes","workoutDate","workoutTime","workoutDurationHour","workoutDurationMinutes","workoutDurationSeconds","workoutDistance","withGpx","ref","with_gpx","gpxFile","formErrors","updateNotes","updateWithGpx","updateFile","event","target","files","formatWorkoutForm","workoutDateTime","formatWorkoutDate","getDateWithTZ","workout_date","timezone","duration","split","imperial_units","convertDistance","distance","parseFloat","toFixed","workout_time","formatPayload","payload","updateWorkout","dispatch","WORKOUTS_STORE","workoutId","data","errorMessage","commit","file","onCancel","push","name","params","go","invalidateForm","onMounted","onUnmounted","watch","async","newWorkout","previousWorkout","_ctx","_cache","_component_CustomTextArea","_resolveComponent","_component_ErrorMessage","_component_Loader","_component_Card","_openBlock","_createElementBlock","_normalizeClass","_unref","_createVNode","_withCtx","_createTextVNode","_toDisplayString","$t","content","_createElementVNode","errors","onSubmit","_withModifiers","checked","disabled","onClick","_createCommentVNode","_withDirectives","required","onInvalid","$event","_Fragment","_renderList","sport","translatedLabel","_vModelSelect","accept","onInput","_vModelText","placeholder","minlength","maxlength","pattern","min","step","input","onUpdateValue","_createBlock","message","_","__exports__","SPORTS_STORE","AUTH_USER_STORE","workoutData","WorkoutEdition","route","useRoute","onBeforeMount","newWorkoutId","_withScopeId","n","_pushScopeId","_popScopeId","workoutObject","emits","emit","downloadGpx","authApi","responseType","then","response","gpxFileUrl","window","URL","createObjectURL","Blob","gpxLink","document","createElement","href","setAttribute","body","appendChild","click","_component_SportImage","_component_router_link","inactive","previousUrl","$router","label","color","segmentId","to","nextUrl","recordType","records","find","record","record_type","directions","convertDegreeToDirection","angle","Math","floor","weather","useImperialUnits","getWindDirectionTitle","windBearing","_component_Distance","wind","unitFrom","digits","displayUnit","style","_normalizeStyle","transform","weatherStart","weatherEnd","src","icon","alt","Number","temperature","humidity","WeatherWind","displayHARecord","withPause","pauses","moving","WorkoutRecord","strong","aveSpeed","speed","maxSpeed","maxAlt","minAlt","ascent","descent","WorkoutWeather","$","element","tagName","Array","from","getElementsByTagName","nodeVal","node","normalize","textContent","get1","callback","result","length","get","properties","val1","val","$num","isNaN","num1","getMulti","propertyNames","property","isElement","nodeType","getLineStyle","lineStyle","Object","assign","stroke","opacity","width","getExtensions","values","child","childNodes","abbreviateName","nodeName","concat","parseNumeric","includes","num","coordPair$1","ll","getAttribute","time","coordinates","extendedValues","extractProperties","extensions","getElementsByTagNameNS","parentNode","replace","links","map","link","getPoints$1","pointname","pts","line","times","i","c","plural","fill","getRoute","_gpxType","geometry","getTrack","segments","track","extractedLines","segment","multi","coordinateProperties","entries","getPoint","pair","gpxGen","feature","waypoint","point","gpx","features","PI","debounce","fn","timeout","args","context","this","clearTimeout","setTimeout","apply","capitalizeFirstLetter","string","charAt","toUpperCase","slice","propsBinder","methods","leafletElement","setMethodName","newVal","oldVal","remapEvents","contextAttrs","attrName","startsWith","eventName","toLocaleLowerCase","resetWebpackIcon","Icon","modules","Promise","all","Default","prototype","_getIconUrl","mergeOptions","iconRetinaUrl","iconUrl","shadowUrl","provideLeafletWrapper","methodName","wrapped","console","warn","wrapper","updateLeafletWrapper","leafletMethod","WINDOW_OR_GLOBAL","self","g","global","undefined","GLOBAL_LEAFLET_OPT","options","props$1","pane","String","attribution","custom","layerType","visible","setup$1","leafletRef","addLayer","removeLayer","componentOptions","componentMethods","addThisLayer","leafletObject","removeThisLayer","setAttribution","old","attributionControl","$parent","removeAttribution","addAttribution","setName","setLayerType","setVisible","isVisible","bindPopup","bindTooltip","unbindTooltip","tooltip","getTooltip","unbindPopup","popup","getPopup","updateVisibleProp","render","ready","slots","h","display","props$2","interactive","bubblingMouseEvents","props$3","weight","lineCap","lineJoin","dashArray","dashOffset","fillColor","fillOpacity","fillRule","className","props$4","latLng","radius","props$6","position","setup$6","setPosition","remove","render$1","script$2","disableClickPropagation","disableScrollPropagation","root","useGlobalLeaflet","registerControl","Control","DomEvent","L","LControl","extend","onAdd","$slots","props$8","collapsed","autoZIndex","hideSingleBase","sortLayers","sortFunction","Function","setup$8","controlOptions","layer","addBaseLayer","addOverlay","script$4","registerLayerControl","control","layers","props$b","setup$b","layerOptions","layerMethods","props$d","geojson","setup$d","layerGroupMethods","setGeojson","clearLayers","addData","getGeoJSONData","toGeoJSON","getBounds","script$8","geoJSON","listeners","attrs","on","props$e","zIndex","tileSize","noWrap","minZoom","maxZoom","setup$e","props$f","iconSize","iconAnchor","popupAnchor","tooltipAnchor","shadowRetinaUrl","shadowSize","shadowAnchor","bgPos","script$a","canSetParentHtml","setParentHtml","setIcon","onDomEvent","offDomEvent","divIcon","iconObject","createIcon","el","recreationNeeded","htmlSwapNeeded","elHtml","innerHTML","html","scheduleCreateIcon","scheduleHtmlSwap","setIconUrl","setIconRetinaUrl","setIconSize","setIconAnchor","setPopupAnchor","setTooltipAnchor","setShadowUrl","setShadowRetinaUrl","setShadowAnchor","setBgPos","setClassName","setHtml","lDivIcon","lIcon","off","observer","MutationObserver","observe","attributes","childList","characterData","subtree","script$c","layerGroup","script$d","center","bounds","maxBounds","zoom","paddingBottomRight","paddingTopLeft","padding","worldCopyJump","crs","maxBoundsViscosity","inertia","inertiaDeceleration","inertiaMaxSpeed","easeLinearity","zoomAnimation","zoomAnimationThreshold","fadeAnimation","markerZoomAnimation","noBlockingAnimations","blueprint","layersToAdd","layersInControl","eventHandlers","moveEndHandler","getZoom","getCenter","overlayAddHandler","e","l","overlayRemoveHandler","CRS","latLngBounds","beforeMapMount","error","optionsCrs","EPSG3857","layerControl","exist","_leaflet_id","filter","lControlLayer","forEach","lControl","addControl","setZoom","animate","setPaddingBottomRight","setPaddingTopLeft","setPadding","setCrs","prevBounds","fitBounds","setBounds","newBounds","isValid","oldBounds","lastSetBounds","boundsChanged","equals","fitBoundsOptions","setCenter","newCenter","oldCenter","lastSetCenter","lat","lng","panTo","height","props$h","draggable","zIndexOffset","setup$g","setDraggable","dragging","enable","disable","latLngSync","latlng","setLatLng","oldLatLng","getLatLng","script$e","getElement","newIcon","marker","props$i","latLngs","smoothFactor","noClip","props$j","props$k","props$n","tms","subdomains","detectRetina","url","setup$m","gridLayerOptions","gridLayerMethods","script$j","tileLayer","markerCoordinates","isStart","latitude","LMarker","longitude","LIcon","workoutMap","geoJson","getGeoJson","startMarkerCoordinates","chartData","endMarkerCoordinates","isFullscreen","gpxContent","jsonData","DOMParser","parseFromString","resetZoom","toggleFullscreen","_component_VFullscreen","modelValue","LMap","ref_key","onReady","LControlLayers","LTileLayer","getApiUrl","map_attribution","LGeoJson","LLayerGroup","CustomMarker","displaySegment","displayModal","getWorkoutObject","getWorkoutObjectUrl","previous_workout","next_workout","urls","date_format","ave_speed","max_alt","max_speed","min_alt","segment_id","weather_end","weather_start","updateDisplayModal","deleteWorkout","newSegmentId","_component_Modal","onConfirmAction","onCancelAction","WorkoutCardTitle","onDisplayModal","WorkoutMap","WorkoutData","display_ascent","getOrCreateLegendList","legendContainer","getElementById","listContainer","querySelector","Error","htmlLegendPlugin","afterUpdate","chart","ul","containerID","firstChild","legendItems","plugins","legend","labels","generateLabels","item","li","onclick","datasetIndex","setDatasetVisibility","isDatasetVisible","update","checkBox","text","hidden","createTextNode","boxSpan","background","fillStyle","borderColor","strokeStyle","displayDistance","beginElevationAtZero","datasets","getDatasets","fromKmUnit","getUnitTo","fromMUnit","distance_labels","duration_labels","JSON","parse","stringify","elevation","responsive","maintainAspectRatio","animation","layout","top","scales","grid","drawOnChartArea","ticks","count","formatDuration","ySpeed","yElevation","beginAtZero","elements","pointStyle","pointRadius","datalabels","interaction","intersect","mode","callbacks","dataset","formattedValue","yAxisID","tooltipItems","emitCoordinates","dataIndex","htmlLegend","lineChartProps","useLineChart","updateDisplayDistance","Date","toISOString","substr","emitEmptyCoordinates","units","defaultTarget","LineChart","_mergeProps","onMouseleave","index","workout_id","updateCoordinates","WorkoutDetail","WorkoutChart","onGetCoordinates","WorkoutSegments","WorkoutNotes","NotFound","toUnit","query","handleFilterChange","onFilter","path","onClearFilter","newQuery","$route","onChange","s","sports_list","distance_from","distance_to","duration_from","duration_to","ave_speed_from","ave_speed_to","max_speed_from","max_speed_to","user","orderByList","workouts","pagination","currentLanguage","getWorkoutsQuery","hoverWorkoutId","loadWorkouts","getConvertedPayload","reloadWorkouts","queryParam","queryValue","workoutQuery","getQuery","defaultOrder","defaultSort","keys","k","workoutsPayloadKeys","convertedPayload","entry","match","onHover","toLowerCase","total","FilterSelects","sort","sortList","order_by","onUpdateSelect","Pagination","smaller","capitalize","getSportLabel","getSportColor","onMouseover","StaticMap","formatDate","NoWorkouts","hiddenFilters","toggleFilters","username","WorkoutsFilters","WorkoutsList"],"sourceRoot":""} \ No newline at end of file From 1e2d368f9e1e20ef3e56754379d57203cc39d8e9 Mon Sep 17 00:00:00 2001 From: Sam Date: Sat, 5 Nov 2022 10:10:25 +0100 Subject: [PATCH 10/10] bump version to 0.7.4 --- CHANGELOG.md | 20 + VERSION | 2 +- docs/.buildinfo | 2 +- docs/_images/fittrackee_screenshot-01.png | Bin 562331 -> 562493 bytes docs/_images/fittrackee_screenshot-02.png | Bin 381288 -> 381462 bytes docs/_images/fittrackee_screenshot-03.png | Bin 211627 -> 211795 bytes docs/_images/fittrackee_screenshot-04.png | Bin 72011 -> 72179 bytes docs/_images/fittrackee_screenshot-05.png | Bin 73573 -> 73737 bytes docs/_images/fittrackee_screenshot-06.png | Bin 114486 -> 114653 bytes docs/_images/fittrackee_screenshot-07.png | Bin 131965 -> 132137 bytes docs/_images/fittrackee_screenshot-08.png | Bin 83363 -> 83513 bytes docs/_sources/changelog.md.txt | 20 + docs/_sources/features.rst.txt | 4 +- docs/_sources/installation.rst.txt | 24 +- docs/_static/documentation_options.js | 2 +- docs/api/auth.html | 4 +- docs/api/configuration.html | 8 +- docs/api/index.html | 4 +- docs/api/oauth2.html | 4 +- docs/api/records.html | 4 +- docs/api/sports.html | 4 +- docs/api/stats.html | 4 +- docs/api/users.html | 4 +- docs/api/workouts.html | 4 +- docs/apps.html | 4 +- docs/changelog.html | 714 +++++++++--------- docs/cli.html | 4 +- docs/features.html | 8 +- docs/genindex.html | 4 +- docs/http-routingtable.html | 4 +- docs/index.html | 4 +- docs/installation.html | 28 +- docs/objects.inv | Bin 1522 -> 1522 bytes docs/search.html | 4 +- docs/searchindex.js | 2 +- docs/troubleshooting/administrator.html | 4 +- docs/troubleshooting/index.html | 4 +- docs/troubleshooting/user.html | 4 +- .../_images/fittrackee_screenshot-01.png | Bin 562331 -> 562493 bytes .../_images/fittrackee_screenshot-02.png | Bin 381288 -> 381462 bytes .../_images/fittrackee_screenshot-03.png | Bin 211627 -> 211795 bytes .../_images/fittrackee_screenshot-04.png | Bin 72011 -> 72179 bytes .../_images/fittrackee_screenshot-05.png | Bin 73573 -> 73737 bytes .../_images/fittrackee_screenshot-06.png | Bin 114486 -> 114653 bytes .../_images/fittrackee_screenshot-07.png | Bin 131965 -> 132137 bytes .../_images/fittrackee_screenshot-08.png | Bin 83363 -> 83513 bytes docsrc/source/features.rst | 4 +- docsrc/source/installation.rst | 16 +- fittrackee/__init__.py | 2 +- fittrackee/application/app_config.py | 4 +- fittrackee/dist/index.html | 2 +- fittrackee/dist/service-worker.js | 2 +- fittrackee/dist/service-worker.js.map | 2 +- .../{admin.c8949458.js => admin.9bc68088.js} | 2 +- ....c8949458.js.map => admin.9bc68088.js.map} | 2 +- .../js/{app.948d4b2d.js => app.1f6c95cb.js} | 4 +- ...pp.948d4b2d.js.map => app.1f6c95cb.js.map} | 2 +- ...rofile.ff8ee2f9.js => profile.430ae7df.js} | 2 +- ...f8ee2f9.js.map => profile.430ae7df.js.map} | 2 +- .../{reset.f6540a23.js => reset.112f801c.js} | 2 +- ....f6540a23.js.map => reset.112f801c.js.map} | 2 +- ...ics.faaccb1e.js => statistics.04a17f2e.js} | 2 +- ...cb1e.js.map => statistics.04a17f2e.js.map} | 2 +- ...kouts.f1d6cc45.js => workouts.71e8fef0.js} | 2 +- ...d6cc45.js.map => workouts.71e8fef0.js.map} | 2 +- fittrackee_client/package.json | 2 +- pyproject.toml | 2 +- 67 files changed, 525 insertions(+), 439 deletions(-) rename fittrackee/dist/static/js/{admin.c8949458.js => admin.9bc68088.js} (96%) rename fittrackee/dist/static/js/{admin.c8949458.js.map => admin.9bc68088.js.map} (98%) rename fittrackee/dist/static/js/{app.948d4b2d.js => app.1f6c95cb.js} (99%) rename fittrackee/dist/static/js/{app.948d4b2d.js.map => app.1f6c95cb.js.map} (99%) rename fittrackee/dist/static/js/{profile.ff8ee2f9.js => profile.430ae7df.js} (98%) rename fittrackee/dist/static/js/{profile.ff8ee2f9.js.map => profile.430ae7df.js.map} (99%) rename fittrackee/dist/static/js/{reset.f6540a23.js => reset.112f801c.js} (99%) rename fittrackee/dist/static/js/{reset.f6540a23.js.map => reset.112f801c.js.map} (99%) rename fittrackee/dist/static/js/{statistics.faaccb1e.js => statistics.04a17f2e.js} (98%) rename fittrackee/dist/static/js/{statistics.faaccb1e.js.map => statistics.04a17f2e.js.map} (99%) rename fittrackee/dist/static/js/{workouts.f1d6cc45.js => workouts.71e8fef0.js} (99%) rename fittrackee/dist/static/js/{workouts.f1d6cc45.js.map => workouts.71e8fef0.js.map} (99%) diff --git a/CHANGELOG.md b/CHANGELOG.md index c40b8a7c..9d29974a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # Change log +## Version 0.7.4 (2022/11/05) + +### Bugs Fixed + +* [#260](https://github.com/SamR1/FitTrackee/issues/260) - Files size is not checked in zip archive +* [#261](https://github.com/SamR1/FitTrackee/issues/261) - The API should return an error when the number of files in an archive exceeds the limit + +Note: archive import still needs some improvements (see [#89](https://github.com/SamR1/FitTrackee/issues/89)) + +### Translations + +* [b1536fc](https://github.com/SamR1/FitTrackee/pull/262/commits/b1536fc637649c4c32a88af6d96c131f05bc1742) - fix french translations in administration + +### Documentation + +* [#257](https://github.com/SamR1/FitTrackee/issues/257) - Add client_max_body_size note to example nginx config + +Thanks to @jat255 + + ## Version 0.7.3 (2022/11/01) ### Features and enhancements diff --git a/VERSION b/VERSION index f38fc539..0a1ffad4 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.7.3 +0.7.4 diff --git a/docs/.buildinfo b/docs/.buildinfo index 027b167b..6a002a2c 100644 --- a/docs/.buildinfo +++ b/docs/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 01a21335d6c252b5c95dfc3e08342cc3 +config: 7cdb95e96cae71c286fd6e6c3364d3e1 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_images/fittrackee_screenshot-01.png b/docs/_images/fittrackee_screenshot-01.png index 84ff3912632e0fbd88ed26df72a9cf24df4ef560..d5bfb427b7b3e658e79174fd20ce5a318f1fe82b 100644 GIT binary patch delta 27421 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 delta 27423 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 diff --git a/docs/_images/fittrackee_screenshot-02.png b/docs/_images/fittrackee_screenshot-02.png index d6ee9be30c519c0de9284f525a6e9db82e8e76e5..999706a5030729b10e6b5452f85b1a9a48ec5d3e 100644 GIT binary patch delta 19342 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 W;eGpzD4oY3!#!R7T-G@yGywpRwU>YZ diff --git a/docs/_images/fittrackee_screenshot-03.png b/docs/_images/fittrackee_screenshot-03.png index a4db44e54dc846c6d20c15c15658cc7c9519455c..1a5ada6e909feb8450e9efd889ac55e0acb26b6c 100644 GIT binary patch delta 10649 zcmbt)Ra73q)+H9)2@o8Dy9VdO-5r9vyF;LH_b<3xa0~A45;PE8g1b8m`S08{5A!e& z(+^dvtE;Ndsf$ZE(S{`b$UViw(&Y{5t7^gR2cmD@eu99f zV3)zmWoz5&vJDKgIPvyTjD~*P=Jw4U9EiAYL;KY(zj4iByxQUVT3`5ybNWd{nSKVq zy!FX{&8As8iaF0VY;W9=b-1}>9KZ7Z2E1a!zVf_8-ZXT?Nq4>ps^>ScGfUKAiC#a) zPU|CuKUy%MuE9Uwva-hu|8jY2Ut6aqBLyO7s|EFXeyhxq!1<1hR$Hw9oL^^kS+7ev z7NGD$a(=kEA6n2G1|~{Df-l2lae$^%8f9KVqoyeg1P+_vFGy_Ao_?aK(Ib zX!f{jcLcXCYEm&>-nvh`c>*B-^w8p@1f{SZ0_}i4Ixem@Rsc zLiwdMHaHf$0LjjlU=oqEa?LFTXvlOEPb`(>C73Ai>?PXRx9lk!OH-z(SYyz{;@dcX zSx~XDYgm{zmSt?3v9_sfny!=-V!xZQap<^XZQeE9?J0(X9!%xjmSbx7|vjs+?{E zy>)l{Rq7^Y3~eC{a@8)}d4{ZzvL^Gv+bAD zQuOolbIjADvgW7@P*%Dm^w*XA&D2{&bEiUGrl57%y~F;N`|%))pGk$yGS|>TFLL5@ zgAhuQ8j^0Qrs$|qztC6##oEu3v#CeE{X>6a; zl}Ry<=&wl!SWWtR#Q+?M zEAYinPH~cz9m4LNpNd{L!N6Hsy9b4*0{8@)C{VQ5rDieb!H4q|az` z9R=6HF|d%?AyRRYrgO*B*$t8D+NE$PipfKH)tQ_B32}_li@5Obfi^~gkw~BO_u@0@ zj%EO(!LtJzlUtUM9HugC68_xrqo(obG!0g|GSvkbvikXb!{-cd953cPZmtVhiBaEv z9c~9oF7V>GP)E^X(&-=R>`M-AfgTp80H<4ZIwl5Xq>RWDgX`rn`21OQ$ zp&|y!(&Twa)#jMoL@ZXr(~Hs2m015~o5RPBO9TQ6$>EuHYG<2lT5h?i8f8H$os=GG z$2Vo)Ah|m{Hf0ZYd;6)ekTetE+sL$WmratcDG@(nLL(b~*eH;_%e`5q-F}As(~O)L zMJidcx+8;q@9)-VkR+a#PxkYAMOE|jc(;n(%^0$g7Y&9sYAKYQ<#;-(*%msN5q^%t z!XgABy!X@#`XTk&!3tOgfgBKYL>%s^8h~1^fl{NGfpzqVX@`$0o%azH*S=dPCHx|K zuD>;-R(R|8x8Pi~Flb_ykvD?n(`Rz)ky=A|k-%|bv~(hs$h}6gT@l`ic`EA@VtMGR z-Vk@Kef2ROnZOZcsy#?}6(^?~rWbC4{6z ze&L6RrdnqcqkWQVHrf#3Qk3giacQN-R1*+VRfwUbltv%{G5p_V68FBvO>UQ5bTm38 zICBx}5ID=E4mc9`8L~{&!b4xT=+m5(Kp$v`o)*1NZ`bCJ6zybmZaQY@AhZr4^on}X&^ ziD@B8d3HOoq%bOM&y3L9fw|`84fYN)I+#H0`aM)f>vFJ1*m&_UES8R)?do}UOW4}0 zR2KbOAFQr*Wu^+s9;Vl*GrV_grbXO~ujTlh6nZ(-)W`ub@ZmS=%oxML5JL&-2H)_V zL`iI5zGPD+UMtX#NHZ0)K%Yl?wrq@7Ya|1*XafemHMhm-KI$&v`Is>-|*wl zw8B%t8isav5Db&h8F^9E1EZT04gqM+*o?R>h=Sa}l__1O4_ z{ttTk12)guNkqS>Jln9L|6bTMcd*ApgegING*Ypb3?l`kNTr!`2|Hv_ne*X6CV8&> z3|;WFUssC>=_4nwhD9W3zS0>D-_HgenyE3}qrzT&ei#>tgWyW%r{_cYnb(68lKpcV zgD$j;*Dl0JGJ;SoFi_S)Hz1p&@{wIA1cy}FQwd2=9In9iUTh%bwEGOI5L_>N>5l_C!0nb1kql_qH7G?>QCC3Ci461dV(jgk?RIU$sNMRsPox$!5^7Qe^1%wloi zW*cX{0X;Z~RVUJEY`eLZvt3jPWrZ$UOmwI~%Yu&h@6`8+TR)%|kc?2xheiZa9tB8- zl*jQDOTdN-&!FX-Jm*;}+iY;OLSPJR$qp5%R}lcL6DRe1_Gorxv6EImZ+}{a5o1~R zH=knq7sV=oX8i8IcJHg}Ye|!Nd81m8&d7XEp@KgwD4Q)0Fq`#qhoDwC=~c{)2J%cN3s*7!B)v~#b!NmjH7MGVhdJ3F5Po4GPZWY zp$h^4fe?36$PH;CsDXEG{nJO>pD&$|S=V_XVA60ANcM!%Rn$%@vI%7;vG51C{2_IJ zWoc&XwGbj#68Syj+()E-e|4lpT8Re^qGz&u>0Q4~k-sn8K^Yeyapaj@l`R0%N|2OfSD6a6=;vps^%^uMFAnTw$FblR6#-t z980O#UAd8mw(2B`_tiB&R7vzF`o@P4j>k$%I*QWMRNYyhqDj94sI0EiXs4&jVenth za$1rF4|i46@0*PW{U^jr;9^5`znGPHv1iexnwqf4=^s}!Dx(L!hK70D$xuQRR9PoL zVYA$xp4Sz8HLeWIoxLkK>k&+%8* zIQ72`;0~(=%&5UOX9+EmC4Ud$sDMHzsR_h5z}axsES_v|VZl#cSr);I+!XGN)%LZ= zv_r&ch|-^c(;c%T(-@upGnA6=He1{3lB~UsSmQqo<-nsdFVa`b-=lNQ%*}jF|(lIY}wQ%J?LQESzzn zr*IUK4G79Y=A$NPsiu?}K}vhta)R3sGDfNSd=}vB63b8lbX#@jOus(4)6IAQNgk*2 zHZa?!qDtAEG(&+M^%448ad`P(QfINfu%_)5Oxy+9tOHcGpXgr#H8X4wFM=0`eyE#j z3^|QLWxV47f`P@83s%b4!c}voqE^)-b@zMaRIx zK*zfta+Vj#v(3|-1yPD$PESh$do-#-M7<85A1!+MO&T71(h`?%;$K%ZL3L(U)7}t& z@p6J1P3=z7$59H|J~Y%aFW4r-_DTQ2Br7-L|D5_+&)Kn;KC4q>08I%twjVXzOW2O! zV{v8EA4L{H&eAb>EZHuP6d zMfg`6Tvx#`Ns{y*F4KxiJ|pRhN>LRm)V*@`e?Pd*$YbQIvWfeuw1@c14SUbN;HpEP zD;hcqHCsv{;*!IS+oi(r__`${(5q6zQ4v9v1SJZ#j`b_89^{>(>ZZV*VdLFzFc3a` z%rZB`m-QMANk(5(^6@9z2Usq~w=^ z^6RtSX}yFu8+2?ws9Qa1d4{9f7F;a4GLG#m(*Gb4oBCtz6Pr<9@8=u)Y}{fwPgolKi6-!L{hOU3O^^&(2+Ow&=cgvCd8=EZX_`;K^nsHNocq=JZD z5>u2#`TGW!HNuNOa=e>#!SDA>j4+Ax1phr-6nKk5dswYdiI2FK3g!d5AJu&Rsh=^-aOrx6^mEC?Xn;w)} zgKE*@ z+|8m4EKMXBjpqUt(+9z96j$DEahu$Fd3#F=*VZnk9Z4^rZYjn_H&}Sunb_FP(j!FGMX?~vaBg30Fx|fWN2mEazRV>VT~N|g&b{${SZxK6nh9)X|eJg4W(&#i`@z#9Ie5Pe`Ii=#7^$Z*I{ z{D9FQV6;T9Pgck%k;N4`3dRFRAOR;aXe{59cDojxY`<;}PH(IAH;dL^-_yYH2nUGT zO(izMq8lrxaU-)A-pn~K97MxiIri%z?KPagRtdLWsQgJRUk*ZxP&%$BqBCJjm_g!x z9!UdPh`l9%c<1%1Cf|X2rI3Jyx2f$+f46Bxm$kjC(-&%^nU-gm;Nw$eyh@ITC=sFp z;C1Q|xOvAAlyKe?Z@p?X{%wq`YZxq74T3>HWU40ct=+F7K(gQ!qKL zh|D91hQK^?3z-yerfQ`?Cr2b&<(02AH}U>{X(^J8R7Qo!4D|t{Ymvrw6h@UO!IOYx z(6hkL^;3Y}keB!uwI95aBj8cb=8uIWfTrXw{X7l(*SviH*5!|a{Iw)&_+bNwnIyq~ zG0U=TA>iHQb`y*ou{%DPmr8rT$43^j%v5idnbc6Pm2VIHPc!mn{C>&tG`GZ*2+YDF zW}hVg$@+G;c!;Om&Jy=}bSTLS@s-?)kP+oXiWcU@X9Iq}EOqh@-lifjw&%JyEM4Qw%;{SriX@F?_ZRY)mHqgh29^ zdxSee2`)ztAw((>3Htlk^9pQuG-((augFGH`AqHSj`Yv}5xaolJ{Ktq4H%8*+Mv?+KT0|f{1q&QTAzzw=?$Q@@Y~DqN zP-v^nDg<0uw^YK<1>ZHIgX5ER_R3d32*+UOAKoU)-yk5U z2w&7#S$J7kcv->m1eE{huC9{+8V@W;rc1%Y&ckiaVZ_B~%5Bcc$iZrE&S=cR&B17H zWX8eG&S}JH!fp)4pq4~sWo2af?`~`?b#)x}@Gwmb+2mmqeyw{o2b02aa_i^qp)z9W!TM4HgF=+cwF9)B@$ z9EbO8n3w(1btlN{l6{rQ{)>nGYK!kzJ}DhtWMRM9N5r9Z`x{tjdQG6pwhquVFxVYW zo3&q+C`eHJU1c_T{HM94WwqgMDJ1F(f2Sd~kDxDhk&53{Cmtgs&fui(`1%`v$_509 zRlG)Z*ApcMncuk2v7Z$(SupyRq(Y#~zn*EPNESCUtJ<%lT#ZhS3QJyIejf!E;_&cr zvCV^dk`5b-TCQ6f$m?ERC4wlQj~p=-$y3@mJVZ2nyR)wmBoB&=L?q5)4H_Jja4#&{ zJUo=?tuaE~;a^$xx=a^hyBfy$_H79*r9y+=iqFHCGh>J9naj6zhs94%K#CZTF~$jQ znBP6N0!%p$@E;g3k&qC`2yrP|$-UbqBBez8-mb_G#sYYvU4Ac1{OjeK%sv~I9Qd@{ zE}?53KF}Lw)91(RzaVmF540M*zjT5?wuGFVUn|Ag)=j75<8o?r>KWN-Tf0Pp>Vs2|n=|Mh;dPWry3JZw z4oQIN7GP*4_0J**Of|&!-lJn{%b3%4MatHe;UWmO*8asC0uc$x3%D@G#KOX3Yu?V? z2tpI2;NbY4oQ(7DiR&QpwYPw_w)XzDcX~z!!ucIF4-Xy*3Ca7xJl&m9b8)4F4oZCU z^-X)8616*g_d-!&{dcR`9~c`6l)}MHr?j`+nJaFgqy(X;F*Oo7BOfMLUx;ND0t)3uoVD>0i z*VHs&`LsV>5GKm}SLcKz>=Mw7Uns#lt92hyy+*z?oBql1 zc!&BoC+v!ruJUtk8*VlKm)M&OG^d|JQEfW7`Z|l}2{(Lhlu^WWH%i~a!Ng8>|<(^KHTBk8*1BvQwe>(4)U+zsL#V!V~(0)>V z3GxlQDlK8#C{w=bJ)VxnU#srBj7l!TAl#TZ&RMbG%fTm)(mbW2UvLMhCc?2jQQvL; zHO=rgd^howDva_-@_{GQAS3VmX?u{fgw8l+>uFBv(9K+LRS~i4Tnc7e%=zFxjQM)X|jib zg9E3hN9Hvqzt4Kl8azBa%`L6Y>%Mn9a|E~qV~r=vcs88dTU&tx#(BB9{-vrv3`;8Q zusFOu7X!%)raf1u&cy7Q3YOB=>uPHg>a+N~44?1cQoLwwY;3ff`~+@pZc65@{WxuK zva_4~hJlLm!4Sw7QBT`TmN}-$ie=aEc>~j${XNwaGq$>@`|WB!k%-3hb!J)e#q|tn z6WFP##s2E`_3>ck+V+QDil5F=+Rd(f^nPzJ9U^T8cg=wB6YJXR73XQh=}6(U({1;u z2A|I@gHEIUfOP}r#@Vm&G&+Q-C-!Iy9@ejixSzu1B zMy25XIDd8kZQpgJ4(8`5ny8QZz1}`FJ?~UXLV7w3F!8T^sra^MG56`v^GI=dpJ4OX zB7mU`Q6cl^*OP->F>ofN(nz%V(&anxBQAUUPnxu+mn99iM})y-j{nlYZLzpm3CSJm zX-r%SLE6w{t?9gdBIaj42B7i|^caZ~m9!I;o%^#jS@2sk7Bd>kEOE_?qf=Q;W<06E z?>8$ZHx%>Tj?U!jPJxlXPItp$?dT%#PCytqR|TFdxH;-rO4da3Yx>JYV2Zx;;_1P` z$RewW*1N}qg@xtP_#Z+K)oDJCe>-Mv@92OGkBe(!4mWA|`fxQzNi-O<( zLM~}st99@A;5>zCWMtKf-nGT&6* zHJlo^v%^nx#YKB8N1L0-;fPjtvrhakV-5Q@N32|5uJk6oKzhI(|!c9lYR#Okho7+m48Q(K!L!r%?Z! zAQNnGXIs=e`qk)?1PWnTJ|Powd&a+$=Hbzim6cU3oFH!pagvOHx*OR6BM#UJr$=1r{MxO8QP`b5yCrwkp%5q{_X*XOeN@{7AWi$O)e zTc_&mhIpM$qufq8qXW-NO=H2BlM4&ua8K#S5nAAn@Ob-7UK4_3U^6lHJl_7frUiHm zescNg_5}1liJdH}){T7;@N-D|d5I4@6yiQLsKKOhNEA977IvSf#I3BKH?%S*hubhp ztg`lO)6R?hb#~x`$3ppC;5ng2sN0R)t(z)A3=8cEznDwyl6|_4#E@gSx1R zYS_>#XPrN@J7H0Md-~wu?(e&!7+(O#ir&>#xg7r3uc6o@r{>g>`G9a#&qo0}1?BPs z=|7e9fuiK&KM#B+V*KGkug!p?!eyJ=*qB^vGB`EyEAIREk7|`hIrG*X_Cklp$I)Og zRv0^bL}cWhMS+LH7bjU+Bpc8}@If5^ z%&Bg2lgPV%<5ty@dJpNmyu9l!`33KzY?I^rUG6UJbMyoZ$meZGP)6rtXW!-SkL2>c z`sJ2ajg3)ug~rcWbYuWoK;)>5D=(2KEZX4M)olg$s-^wUF6Jc@n-uq@Q3QtMSb`A* z>L)a4uKbRs0$-qsj z3r7gZ^(caNmX<=5_Q0zMv!bH+?XmQG1{CnVt_cf$SE}4RJj%K%B4W*U@U~V~v>*`3 zZg;BvGr-Iox3RI|zIUNkK99QRXtv)}T)bzOQLR#{ws!9L0!XgmF-9OH+-`Q>pqPIj zjn(A%ML&m$X{tjhz}+2ovQFp$UlAokedtV;ajW)Bn6#dj-^WebXJB0`@tl-ESXgmt*S>YLi`Bqc0H!GCD`Mx~D~mvkf!oUHUiH zQZv5ZJHCLJbSsSRUcrR-Ra2lnvm8g@mV`&tB`T!Mn%uxvFmk}ScH!tCZxb*LNWMfQ z8Zb*a+jl1YDT*D;{{i(BI5?PpnwY1jr}uBX-zy|hAPkif1R{RdxzQ5j0RaJa zyZ+bL*QVY6kQ`iGF6UEZ@BhK1ayxz2*Vq4;C8+4;_Jx&|l_p8%T?VKYD^SwVgv+Kd zDQjp*NJ+tiI*IOH4`F00ekja_?^b_)=tYd%iNOphPO{E zo3RuL&WjtIppV%Xs{@|)n@dxXAiJxWvU$4XXK&si#U$3J`8aK`x4-5d)w1TZpQi}_ zzDWk|^_)f$Mkq z7bCzBW^z&{+s~JXb~%oXrIi{j2CrMz0hn}g@RLyyp?J^V?~>vq+2I$#FU8&o^@(S$ z-&ea^j1*L2Y?NNP-#q`-D}qo88s+2rpWkut9`OIu?CZ`H{L_{H9hpA(4~zYGz?JuZ zN*s9Lzf-dQ^V#CR8;BMEN0uNua|^)zof+##HvIL G1OFFg1!3I) delta 10648 zcmbukRa6~8(>97b1b3Iq#V-A@#`~LkQ)(@C6>E#~n%>2*N6J z(EVjx!AO%^HjV(}oV!GRI@|a0*!j6fTe)d4*^+J)b3%K+?08f1ygKJi8mcmPa65GJ z{C>rH-L=uvldxMi?&cpbKY79L-~B1FcfgNgbff~^a{poS@glBrP0-8=-NTB_O{D}h z?SntR4ld~tLAZt-wb$*v(-LJhEm*yMebdH&y1qldu=gPg^?w)CENSEXF5QGBaVIot z(|{=X&Wi_621A<71RwFo$FcEWmKks^Ea;6zSv0USq^`PRhxATCE3o?|rS2mk`!%P| z;#y)qlRT4bt}kFG{O$FJQ1Pex(egI1;d1pcz*lPVnRQ|H)6c7GE=PAnHXM-oSR#_~ z)V<$6A=~Nhrdanh`8kb#{|tKLsquBG17#Mz)z60}*AuDzF%2V{z3m<}iceA5eXi?y4$(;zx&PaUeOsuk-FC1@-$O&mxm?vF{r z&vyG}mkD_EgP zaRQhc-AH(Z zy6(xE+PdD+RubN)#;N))Q12LGq?*9lp}Mj#=#G=6+_SXn>{#Ea2lN0G4732{|Nh-FkFwf9-e}F zo!Rr$Nk44YGbiBW=zhlB*y`HpFe4k8oA}4#CfA`d?s&MVyj5M0ckah#DE-TL8jw$$SsCM%bJ3ajrb~9O*Xb1}Uxw?(*j#$wDs6`;^7Ek>5f=7d zU(PC1e3FMqSi?;;7c*ymq=vK06DBD%HNCp<|G9Y>`K& z+(F`fTf!BxRuGEYj~5oGV#$!Y4TCSD_!k8#*{$3$RoAGE)4MtnGwf13-j1qm>XgQv zMJ18s(7Y#AL+);qEHrHUc=m6|H{KTkGfQRpojFkh+niJ`SO!R}RAX2iU`lnch8aNk zvQm#nR(fx_<=8-Z=*Rl0R#0sB&!l0yG09h20fx|ejGuMoh`?8xS_tgLS_qS~;R8u)KTToqN^`34+-HV{3cM zowF7+4ApG0W~7re;l!GSskg9r2=9pg(ufs>SgDwB)Iheac7b%s;RcjHZ(Jr!335W} zNrEu|++SZuIpv{^#J+c$VvQiMf1tnTif=k9m)~IA9PQxd6!&0gW+BF{M#54P$PX z`($bpJQEwaBhptM@*KV-2Iese1IJ7*6-gy1pC&8mwQ%QH!|1<31JGuuFw!~8K|X@! z{c(z^Ul2HfR9MVC2Ns}f?=yWZ%2J#K17z#!uL*sk8AGR+u?&qiVwA6Ud z1uJ8)iS-^#$MQKijj9=)q#fUUgqt8Q1|i=4AZamjYljF~$LO<^Bp+ zRevrtpP`(6uLm=iXTqaZzT(zXVt7jYV#yd|I#a-=qlUxpN9vc!yb`}?Qy+bXS!+j0 zi6xh*+B%ZQc?$AqHBOhxE}{5!x2dj8Io+?}ct3?;>O+U2i&hP#XfvIIX1R~fYf5<1 zX3qqH1S5PJh;UE4ZM%~yk4Ob155fn_2 z{HsUiSEN(a&fD^<#<1vNrZ`fwsK9bDbK0{57y7${kSi#qS`X=3RHCJM<)|nMKg9mz zWI9{%ea9c0S@-t%aPfeXi8L=s92`ECl~qXG*`ih zQa*XAqM#GbZOn6Y5Z-OZjU1s8nOowFMxa2YW=jY3w^x7$7?^;_d*V`h<3r9NdPDuc zhn>^W`MPi96e|FK6zv<7FxWj?zGrIT87be`vHe`nA6X^S#Y1NGK4s%?l257hOJxQgISwg9QUbq&|a9EA^V#lfoXbR!mEX zJi?=ps(no}mumEZ(j7;TQlLR00Qv%Y;wE8t228f83w2L1cBNCTEz8Auxc-#Pt9uGb zi~uw%>)0;ol0)SI&S!Cq^S7m%K)9-TC~BlHb|tko=4oh!RqgX6PliG6DW1_J2__;! zO1W@nzvzJOimEQn#Gx9*6bfu`ojR z`Ysrg>eAH2X0l#fHs5qSEj8JKf*FFSX3V2<$dH#RyGJ{dwdO*S{%G~C8+AV{$A(kR ze+XxjdxizRo^mgkygBop<+2zkNA!>}Ne{5*TcsN{B^_s)!O15Fs$7!?+#&SqP0&@?6UH$vSo@VCz6k5?VM$ zI0Mq3q{)7(%xz!pr&0XuYCdwAed)`?mJ85CmpHg~PDFU+7AY%@aT#ew@)jQqlCgV=A*Y6DGn}Lk~s5@rt zCdcmcSJI#@+a1?kx*{JAY4F30sd%X|K9hKuE{n~Y&$^q_Tz$##bxzyMA<(1ctObGe zEK7mf+d@MZuq&}8#mxj+l!bfJ(>&4U5nQs9GNj6_2n6}a!K1GZkqlP*(!pQ3RT!Cw z{{sKQa%dKDr9(Q=qI*WsSW=+YLJY(IFp=zp<=a}R4ge9yMbJF90wT=3lN!vm3UeiM zL!>|@+P9Fau0%4kN#@km57bRqxhp^qKSUoy#TKbw!B{X5f8vEACP@o3nv~FqykyU8 z4p8->2`%`wN&qYco}jv%Y9euI8|fjed8(T|cD|scv!QMs1(OI=*@@!w*@eH^nZ%gyhn;+IXF8E?BvC^b5TP;#S?rtU>fm*)tisSq4okvF z!o4>dqyp&lPgj~%U_xu{(Z}>T2VK2pQV5?> z>r!T2{jRTW(AA3Kj+ay1x#a`SYORvvb_9tC6|$Mcc{lQ14Vr(U(}JlQq0Ni{8*n4G z7j?d~PxQWV#ldw5JZk#V#mIk;Tue&c!xwt4wLGj%JK}*eo+hx}OMqhs@<`ZYRBNU;@f1I*lMV>2v@$lO16ngqG-VblRH(qJO z3%#T>sm{_I)*rDBjUo<=jJ78Aa=@O_qukc$sQE6{zqbd8}8TRAO*$1 z0ghYZN@CRO3Q>V^dd1S9gu4k*{8)*-F3Xq^`#X8agVsjVmO=UbMbi=96f87GZc28X zet%jI{H9RLh7d1QHr7>{Ep1GVP)Z1#Xdt<`=LEq_Pm3x#as~x(w}Dy*)7NPxUeKXe z5vJV9LRn+b^H(UJwOT_+Y

g5xV(ti{-k7lW;MC4cqvc#h+?5hGj+*@fnZ;y+#pF zhG&M(s_`)O@n1R)=um@KT?Jma0BY{r-6S92KP;BsU#USpL;+Nd}=tH}gc9tQlr{6hf^I^e`$&+zww|&e8KqSpy%yy9`Gh z1+8qR&!X!kBM0@71>FuADBGEc0Md#?i#r=1XN7T+u4vL|#}|~^OEI`R95G%b9u5l+ z+PU$DWbj*5`pLM^+@;RCq*RJ>^LI_rOp^qJB($Ga?K%OZXE;Yn=xK+ODV`~YCUrP( z8dn);MsZCuuTdppXG8vim#2!}g-?6Hh(5x`>d7t6CW~QLGhZa$wbY_k(|r!Cm}a~9W|JH7ubALps8I&z5hvN{IzfIUS*pL=pda zTX;6=u!}XXX#TZBc?(7CxB5ZBtn?Wr^^JQ!5U%faWwhR*iUI&phrlq{KcR#`fj4Of z!|(;jQ0j@w3K=dpIM1$#xv6_6sV9rZ5}Q&UH});8XikmHJ^CVN$Ry>l1DS)i7jig4 zV!}D?cjX9sWcstco7$@`T~IdX%siR3kA706)cOhkjmF?|8BxaiX&Jw>6e6)vFipve zWS@<(fpoHhbYc~O2je!~H#ct{HunkABt3T^Q&cXq-F2KExqVfk=YYtuDh*eP#@u`+ zTXVQLqeK;Y)Ggm*$e5y_{94~1S4v0Fl*mqD0aic)v1=xZq2KB08d0^vPUt)az90Gt zaR4)9p8cnP+Uv?rbwq_H78VYXLEq zK!O(^l6w0BDL>X($z6_I8e5>#BPY$N!pq}}they^)*$_qeqowx0)oxjnDymP_flku zb>D@nz@+Ow@6wX^@_@m>)=@d376oyjGrw=M{TNwRF;f3$DQkn6zMOFaIzd!Qi9V#P zI4_e(%e0iv9TUeH6BP5WuY^`PFFv9y_{Cn6;!+h@qYK*AJTFHnAI0q1qVYYFLYl@7 zVMJKR#Xj*)7A=FiINaiYpRqX#ei1Vu!ap$3Jzg_jiTZtT0nQ*UXAp}+k)>wjdHGF- zudv~Tj9>0FH4j^!Nqou(FLFtf#(3&cJcUrj-U7os>Es?39WUUVeC81;{NFFm??Y`2 zJ_dz=-e_E6UZ3#fGRjz$g4U@dxFkRTcDRaqxf&y-C;C}Zv4Ac*j>|FwcJa3=96b*< zpEEKpTUj*&V%XJ?P|;XTcsy%E5(8NA8~EXc3AqI+`EFMF=BWF@gMd7*xxJoOh+-qF zoE2^~n@-0HOc(Z4LmcRa)9^3QQRH--Q(38H)B?X(h40n2M!dC7dPQqhW^{olH_^jQ z(`=6WsQYJ18@t^q#8y(eG$OR5oM$1!i3Zw2fd>Z8y1Ut?ocTGlXjrk~JX-5nI7;!} zF?=<40!PRMiJG(ec`dH#+}9Jv_>*UhQwEhd;!v?VAut$7HFU)&MC|JxYD{IPLfZqP zmoGG~^oI<=$>xwaHc5t}Ph`Nig1Yp=yqlD7E=8{+E+W!F{VelU{IidZ2VBY!pPbI+ zZExuUY`1d0b>&itK_8C0`<>4yu=e00nX6H4xvgG08Gqd71Pc2Ax6HrQ9Y6Fj33HjH&P<90-t@MC{bp?f0SLB9Y=E zkZs~3P`GM z2ykNKjWljQyXCBA1FqbTMNUvM`#SJolarIFhsR0*d>@|nRdtp}z{zyp%bk(c%*w*R z^$&sDQ`N<#C6Y-LQlYFy^U=+=$My1mb_E7MV|og^6V&MYe0CCkYavHB;oi>m&C>Ao z%Mg~$Ug3$4sOGzwVU*cK7xmgI4TDY`97Qbk1&W&_6#P1Ct7p#igWR6X)`xCoIfl z>=>M!oQ6@!t^l)3L!pI%v`H}fbY}+#_$;V#(Zwp)+Yo7)nQqjasqiuhX+(eho-C#? z-a5TgxCG=04@i@I-k@|V<+DC527v}5JOXJ!^?J676k+JVZ?XXTF!XPmDwt#OrN(`M zyxlvs+N^%NI>yE-A02LYPRM^Yxd;n@SNsrmc6K@~zTCYcBGcKNC%tyL85y{)uCCsf zjbk^rx6me%2E^GiiQDKJ4A@Bi0Rf|1{zn0{2NETuP7@6sOe3{5pW`WK`t#T3%iR$ zsi~=%x8XvGj<>wo9e}_`fm?jImZ@BVoUc?N8;vK4RjYQda+~^H*IuQeSRl0av3(`% z_fv-nB`zA0oQ=G{mzj$zP1x^oaem%;s-U!^qa!RLV%@L6=)18V;rq*dsf_HnA+WCi zH9kHqGaUmR-Felw>-P$8qk|#gnoqgLDn26G%^oPT5`BAU&d6$G+aaZm4E&mO#J{RS zg0~ddNVNKX`8~rsBHJ>mwm60X!r<+NDvi8{H5nMR7)^{h+-q#TNY2-u94y~hyW2ya z4s_%$7Z4s(#{T!w$+exuJ79DLR9?EcU;h1jvB%FV(rDaky$`L>(nDV02nVk7#aF<= z-nQkZ|9jwr#i6N_ljZQP^R~Aq)Rj}~&n`9NvHkQe{sR3FJ&@vlXma=49iPaycap*p zclZ7N&_n0ww0~xcLP4=i5^HQm`C^|JIebE1`OoHy1pQ&~k9J z;wfl>tX{XV9u8;|Vh-!@$gGs);a(H-%1df+dE;|3kK-(-qXI!0#?4IWyAa=x-%iCh zo;6mRypNoIxjLS3GTWj9-2(5(m6cno;lbZHD&7lN`?un9PNX<29r>@1RZ+T5YXYzL zKe3#cTBL?R5%vV>;^IO3lb8N zi-!x~`QdEE)(lKbSyc0VxRmqO!Pma? z<#E`Iij76yGc`?1&rEFviW+u#((v(RrKMrpU7UkmbI67(B{em)E0^et$WxI-5BtJ` z!$xnuWD@}%9v%}e^7HevVj)lbdS@q5h_s4|zOx3{$EW76Eu2`)ojCev#Z*->Dpd-l zYgf#8vZE3cfimTtg28fzh9noi8!8(c!C^V0Vl^jS+jA>nwZ+APa!EFbr5;)8>0-52 zG4$g@C{#)`*NHVX+i<)P_)I15?i<+0lx_n2UJ*wmn_8W1+|!mVXI|p-T260qgxlnN z=Bf4eLGK&x*>&Xd`7w*teY@%?guW6=Z*G1Wyp`_>{CM+eb=Znov7_nVDb#JU+B-aS zA4_yAE=!S`^1K!A>s^DsMcp!s_LL%9K~*&Alze zo6ksQbE}^BXIqoArxw7`=JcjO7RMe%sV7&v(i6#35z25Ju7KmM+* zz5zkJiO@G!F^1m0HagE^g#g2i{_h{Z;(PZ#s1ssfOf+2uu6yqB-~HfIxJlH}Q*UM;)XOZbK)tZY7j{?K@BZDJ6GDN(G_{_o=y(fG&lf$fdzsC8 zKbVZ~u+v`zK5hn-yM?%?vus}X_T9w^D1hR>V{oI(10|R2J56F^OeZbJX zPx@aPSxe5DOjy=yOP4^L=4_9S~|KYTlGrMDx>gk13zdB`ZqR+g8ux` zc@5#ys!i`>F_gEoq=De4br7zwQY=)SD-gDIbnGcUF_)HxLkb@x{jjtKTAR1%W%HRr znVOoOx(lfBI25(FXMv#+OjM!pUyh3xN*i^U{D1oMOO1^1!lZ-6Y`6$#^Y|qc6;Z;& z!@-S^(9nsgsjfYtG_p2pziC4X(UI(j8cg{p31k- zuB1Bvc4V*cT$&3s|C17Ay&cXiY2w%f;-!`To&7Dm7Du=qd4>gafYfheNho%;(?e?_BN^x) zPio~MnQQ9Pi7l?jaC1Z6ImG@uv1pC>uT9uXxXbJ9k6bC$8L3UKI=2&m@Aw$^HR;9l zOIUJF2DDguZ-F_#l!Ng*hZ7+lcv{h9+nL>NmJda)W^WKLk7zI^ZxX8hPiK&K+|vF% zTMO--MQT8Ll6vj88-&+S+F_}m7AsD1s8&LoE4<8~hMF(F98Jj2ci(RjE{~;jWVH)& zL_(IEiTwbGH~W{3RT}c$8iWzT=(ErJNYBvZ{~>XB>MHDS2ozUTtE?4nmA=u{8Vr82 zhyZ>4sR4;dIu@3S#>V8|;6Khc>gH@kYSpJ}O+eay)VNm@A^kJBRyS8ODiK_?rvg|t2dSQiP>G%9Fqwd3G!^Sf-|ynXf`W0#-0%Ti=^ zoU$56jKNe1zsFcl&H-)ztJJA1z1gjr+K zFH>j_4-e`DA{lK_Q7~MqwuA?0)!t`7RyQ?qDl01!PfSyDaA3wuhqeG6H$D}!_u0~P z!BL%?i`@Uybm)@NLE@Fd(A}LYJ3CuLOUt$RXHrfbZ@)`ppG5 z504rE(7!}tpfkR)kvlpn4Q2qO@co3gfWE+YK5c-Qiwk>kaq(TB!m95@!NKJpuMlHa z@35#Fh!2lLrrh4QR^ZmZmzS5>+{e+oo4u?@ zY*RbdJ`6VF>I|J0wUkX7n|EZD`PP8=r%}1W2@mgetpK;xby$+xiV#Zs9s92^{{+dW+Y zM)IPfqIr3FKspwB3ZZEpnAYZIY%;P!qT~5)23FR@-Q8WZnFBfiiASERdX>E+W$}Qb(n;Sp^l#IH9?i9%jh4Q zU)TDMYy!*W&ik$3+CRhE+IX7^eb4LLN(&n*hmclLf$>(6Cv5X`v2TN}FA*CN`I)En zCXG4>cejIoY)U4U6&FSrd_Awv0S)UT1m+U2j^2V$?>#mg-0C$;8x4CP03Uxuh4pOa z5@#8*xy*xom)H5_2nN@ zh6dj(8L#Uw0vPYtXq5rrLP2pOX4BTz)?vFlI}MfSX>2l`i;HU>Tt{qfZSng(Fck(q z5ahNwn68|!`P#+$<5L7Y=-6z+{Vxp|S zTw|-N9d`{>VJ9{cw&%^6Po||N8BiQvIATM`ki6Yf9P6i5C49}DoQ^{8Upq8_Ml)A; z>cnpq{URrpV5C`0EGR8s`38paxi+#Pv&KIcE53Go=?$enN+R}SwXe=Ri7_@}n}@91 z0cz1BW=Dnk2}JWhU*2Rp&=m$+Q%p(F|kKs8VUjNKYLXP`eAv$L~` zvhssNL!n@+QocOUFfbs64uI=Y%RfI&het>E_xHaA1PBKQ2lGxtRpec@2>gVd@et2HslE5GFqn|gkS8Yo>>2%5^tC?G(2WrJrZq(=OB$uG`YPPuRJ*Y_czcJy z2@RmCE9Y3}C?XW#!R_~OX*x4TmYSSAaH?8*DGutn9Q*R6Jhn}c)A%jPOZ#$vrQ@Kw zuIax2{&y$4oedf8djPzsk0W=rE&to`N_80A#xW64vsRPodBr@BFCdw}0XUqK7TPVs zJJGxUSek0);;F@EzWw_4_Jv62W=XQUXY-O`WB3WuBA>zPL;v$o_95J_lVmJ0#!PRK zJn$nje%kvgAPosNx|EW=x#h@QJpx>Q$9(E{ho1y?plP?ntR5${U4PEjsxMS&GU;SZ z6ZHWV_WYwA2WtMD0xg_TfsgzR-Ko>z zDe`*EBo`}$ymZ9Y)--dy9SMh^F?{TmP?=HG!*nl^gYY&{3JR7GFv#C=kLG6dWw#mS zg>>cSJb$k{0gdQKCB~Y7r~CX57widvK#05_TGNj`9R!OBp;Y$zLVp;?#S%?}T(=)4Xev|V168#vbil8dXM*t-?cJOP20H9^GcTgzX47A=0z zv-Ip4ufOdk7!#OQ4kxr=y{;DM4B@cSE_!g>Qn`sEG>N@myHfzI;V{?tlQA)@H1s$s zP`D^C;O>!r_b3d=%O|4KH>owO!4MhLZ^97$~_*=if{X(iRW|hNHz6KY4>ry1(`Jyd}Eq%z*P59976Uw-jr!3Elmrve1R{i;* z0x=xRmK)HpZcG#pNp(vN>i;0DEQR}t-Suam)}M@IBA#(dDF83}y;^eNX^b?ZvUE|G zWEEVsrbJn$tWK@0H7_BhcGTKNP6uB2bQFg{yROLkpnsa6>11#4acd;^=pT_enw$tu zms2T3KfhUmmPHCLGL(+t(j;C@L#G+>B1Lt^1I7s5uXnu=DNb9H7j)_?Dj*TKL9N3t zZRfv3sXG*A0Q7VJ{zCW>TG;qtz4|Wyn;Ero%L(Pk`eoGc2=fWU8ZjnMXTMD@grZuK zrC*)-_Xp;Km+N1-+!zIe37zhk=5z-P9K!Bsodz?JB5S@~d(`6zby?dPPPLHQOoZr} zqg-S-aN5lAExMY*mhZ)kr2C`1bW^>~0~Q-ij#TjvZvZ7aCH|h~J;N%>u0C^Vy|d5i zys!EAY8t$j{st$_Qo*Mv4I_%*u@f0as1E*+vJjA{j}XCdL3hynD#x~6 zspYOI;R9Ive9sU!9GR$Cb1UN!t&s(El#ZtrO-cHgqlDL81uiCsHUAmh;3?a)-SI9%k(C1CU9h?k|5ZqQL z4&}h4aC@nOAh`_!8GzPrvFZQ5bf-i zpx#?|(Wqgjr=NwRktPy5KV1$p-$T_S1lTkUw8*FEupv~!mPkGRX zo}gZx5H*v>Y}{|_R_qpD8|p^Q@uV;}BjEOApC%0WK2pHaa<}>B#ohF?XC>lwz@F}Uqo?YZ?XddY#dMNreDg~=SBUZ@qB)r73R_#6z8ASANqr6 z9y854yj(p$urajCEP&mSKr$6KOz)BFD`iuqH#5T$KVCgjQ{sK1+x^qQGOIb7YAfc8 z&s+b%8heu$o`3bNO^&7LjI_ueY5t}`+xl+lyz@kJ?l=0&;W_5Z-=86;)AY~xodA3G z1JBMaIf(0T^W?_yYz*;((eD+ps_!xgA(qt8E#dN56>r2hHQ_^UGe^cEB9%&MLb%&4y- z5*{j+nQiP4&#N@MdEb;9XX2nUbuwwwf@JH^z5g{Su)R=aLL&w`~BZQQt_4gkIu={`Q;pd`eqTH z;H=~W{_0~MmM7QEQHH?^PQ%Tlt)HJ4>Q3eUc;SZi)t&~pyY)lsm3|_nSIe!w{6fqZ z3jgShit@ug%JR|WIj>bUf1fy!FstPhuI)(cyV^eyPs8fAUu08=;4OZ*M5I6D|Ed?V z_0p8q*oFPk1u>B3N>(t!9W17)2y_xkZUpL*vN1v(##%16tR2FIH=~-dl!?vW%Gn#H zWx1Mok=qdJnd6_DiVO68{P8`zq0NzOAlEwQVF-5UGb-{kBa5@nD{{x+G@6^Z+Wwax zzy28xajHOvyyLSm7#1a_$=xZjBmW_Yj!y8KR?k%tM>@PZadeMU`H{x^OHlwF>%@zg z?)|G(zod>J4h?S2*9woCm`O@Bam~W9{TxGNvpW~`S@$?xRl0iYoDAEtes}%;ksiJM z{*O`NBJpdQm9^;`)$j+>9q;88c7-~*(@`2w_ecVdL-b4%`ZC4*=G+((swDk1LXCb) zqF=AX1TSK#8StP}ULA5t1-%giuuyPCe-p|PFd7oWnDPH`Ok>h`KY;cm#ls#8DTZ79 z@%nQ2w4p+t{8foFr1n4+E&eh^!6C3)($(T}^5exQd-i^$|wnO_JFQE#C4IcZas0UA8?~M;eWX-7-c4?b06jXcE>3|6hf?-5>#~=hp_mYU@Nh~47eaz&c^|+BEUsD%U-_ui zYXZ%x-v;d}5Km!s2G4@ilq@GqY@hi!mmX>zj8G~WJ76%a0&V8x>xZ^g6LRY6lhEuf88^WW+f~nO+Dm_`%>zgli z4g^KV2#`Iz^J{NtVgSPEr&#H)oQ1SVZ##di=uJcBNw$M{YoSz2F>d_N{XXpHWKWL? zvy!kjDvN$vXQ!K%t%2HTLR&K5;P~-PQsd~qNW!(3Ud%e05MLW;`8AWmpn#@&oc3t{OALV)_PP|p z&#`RV*))OSKj|+6TgeRmD8Furda0GWzyCRjEmUNQW4vbMiMCg4OU`Pc3X1`2f0qU# zt>@Kt^a4)6OT*S+<;oNaD-lIXo379e>Ebx~pmaAGYfn?U57?^STis>$TAv{l#LK1r zC=z4{OjKoRnh1bavTWIsr)%HqZH5-*vVSN=mg|G|cUL%WAvE?#pKLMc+4OS)eRcAq zo7M>w%FT7f5%#Yc}j*Af5OJ3 zj@Ii~OsW(DB#vZXSmGUavIYev&#MidKW{4N+^^)Kcrj1* ztVt{=V(xE-xI*XS3n$B{u&%t`ZU*rh9oDj__fEgQb^(gyoUB}LJ4WKrC{hfMzR0e5 z*AW$cHl=}^%3U#Dvv^~C3l|sUjy{jsKKK3|lk_56UggOvxyGC7lxL~-CG&jEZg&SH zuShu0-Pn@5f?~57X9?xS(ig*PCof+ZJesf)x~qKl^Glmd5T;^<`JUXbCehib+ZN6- zu1-7d7!+?HtYRk@7igo8`sSP%F(>W#=uo+%f5g84q+U$USXw9<%of z7s5rAOe3RA1ee`9TJw1Zk;Uv3e?7-Pm+_)CuiQv+)IOqeElsb12M`wFk(nB2k{*=k z8idm`NWR5*8fzQ$KBC?MqF_EK8?xi)L*%nGR=$n~yuZ2qj_e6L7EO)TwclECH@a?t zF8UlE$+ISE=Fj_o>%aW>O=_#fP2Ym<|q^r=y zDjezxNFtx!-l6Q1N3H5Kdq7Z79(=PB5mA&95qaz2WN&Wu$qWVMbE;3YfMn+f;w}Rf znJ{(Y{mKjBwZ+tO(@M{=(`$$xjYQsJUzS10dNhW!qHv&xZQ9Lpslw!jIUND7#oU zL|Gm$9=S%M=p3xj!|vuXax?~Xp1ph-Y=PTZ8^RS_z-b$BB*;<`M-hLS`guI}Ikph1 z-uY#?Btn2Y6+BiPYy3_Q`IPJ~a~HptGPVTc8}ai(;ea(n$L*4PgSwIN zoJ=Uym*KEgZw%CBy-Y3l)B}?qt8|nOizR7$WC^ArBKFi%CyeBQ&+N}GSDo04FEA3r zrQRsn-gtlZCgBI4g>vls9^5p1xJZWU*pL-aVSNZ}mYzpJ5Bez?T@CkHAld%Ax5!p@ z>x<&>)hXZ8M9CWkg-W)j=Vj62EUdA#IF8RaR9TpLnVEUn*kW^WDE_Czno*pG1hMu6 zx)jVt+$LPyrko7yEGA|Q?95yo3`VA`<_tzW+@OWB8Jik$n#MXZ$o$VYcQe>OL8WNw zi3Klt^7tvrJ1n4apvH+arW`O$qmNDd^p*aDrm&_dF3z-?s93T3i1vm0tYBT;#JR=x zhKX%P@x)}Ezq;ec+E5zC(rW1s@4i-2d^ivPJ8POGYwinRU_6S6`e2A6bN~-a+!$=N z*iZG^Z|!v-10P|?n=-1iQ-2r~s(>!5;V2JN@G zUf)tuW@%w_Z9dRIOrpvCr_0<87kfU)bE~c4tU;qMD*3V_)n>5q;bDh9!*DOLgM|hL zys(Y_q}6L|oAti<{#j4FgV|Oe#^uw4S-muw`@07t3^djsY+|oI@;ms$^xD?ew)tu! z#jIi0tWF#Jqm)_&y2Hn~7QJ(3X0$mtIjvy{49Uz!!inqOzJ0SANalb*Aj&E#vFhcz zMYlJ|*N`n4SzT4QDg)F3^@Ih_T?P(z_QJe8v0Zot zyih5paLZ1!{!@}&(>h*PcQp&z6t_2FCxVl;yT#!(agrMg^+x+Y%w)|b& z{6y1NXRpQmzn89Rqz;TDIoOvkxDl`u1>fUXH&_OEry9cW zF?S{GSUj9CuezGG^>kE*HDy3rR@Oz(@R1$>gTYkf0a_$3z%GUnHP(|BG2Pr zjgG7A&Kt521dg_jj+(M^cA~y#(fslDSi$Z_ioIZ&35!`D4vC<*=5svysGy*r@^;|X zlai8BX}UmBQP*n@N!ti0AIBgD>I+}NiOXRi8!QFmA z%3pYOviXlJsi}8oY$_&TOzreF)1{4#jj?^*O-=TZ#5~Fb1O%Rct9o#7aB@9PHdux( zv|8*h&YQlDwcES9UOVjX&jNZR?Q3gmj4;$eTrR$&OAniqNp`v9pN}7)+<%rnz4hX0 zXFetR*AdDW*elhC{|p^?{H6aHp)g7)KK*C-bNvbApBqsci9b^Q`};)l!bkrMmz*BO z|NEqFL?$*k1i=6Q^Rxcvliol7KV9p8KI?x?da8KdSEqgR=b;bs*hUp?#;Tl7S!o7p zT~3$HdVf(S5X4{jP*=7;0k5^$BZp$UO)3#K1WS?bASe-x%lWIeyJmDclDS*1e!k-x zu|CaH44z%OeX5F0Aw@|58`pG|v@Mg{;X1d2{7b~1Uox@ryk;cLJh{A^LT# z)tc=JNa-%Qvw3ZynKzk2k*V2LStG4&Oy)8$_xuH0Hzgnqi~Le+_T8om_1$wW zyd8u_I$STz0G^O4Qc%Za%b8N{b7cT2DvPJ6(=2OV9T1yIPxPAHnX|STs}S@wa2=4V zuC23LP6%(dIoeIW*a>TPKH5dh0>wi^(?<$Sknu%zUtgt$rWpINIOGHxiDs2DsbDv$ ztxb(~9U}U%HI0DxsEv*93Hk&s?*>Od(mJPJ=q~i6?z_9ta2At>yQcY!O_=LpO}wu6 zV8FSuO69yGNhLe2^T2A~4dU^-Js`KA-aR&>0UaoArSr{8Ky;F{EhyFl3P=q`Zl>L) zDqan66jhgZTU*aGca?AsT=DJc9og(5R~q`JkNpWtocS2q9X4knuaX#XT|*{B>xz`%l_mnp_P)NmX?-txc08~ zHt9Mi$F!#2)n-1*?`HjV|Dm%+1HSY6$2v|mnV6OCg|hr+;C&sZI**sK`bMdS**RKW z9cM4or!NQ!J=zTNRz|3C!>nqvebY+!y!*;?-WH&Xr=(%B8-i=2|Hip)z z5rb5);LI1#InN&{r>OXsyH0CI&DWvqSoy9j*DA7i9#$c-j{IS4+Ms3iZ+T^6Z|Z&t zO2m@~TI6F+Z!pPH-FWUaq0%-r=M6d=n|oywNyxb5*s`yc%mZX>Z7|k_nKm^lvK-QO zw{m`rh!@>Yvy58LwJ`1MJeQ7XEy@_n>N(4%V$0k0fE)@d4I{se@D@>%)fGyq5Tj*_ zo6mMbu!##M0y-%tt~c!NmoyBsbtkEh<2S2;fwZmR;<{(@vQa@J1sWGz>{eeu8*;Ik z_f1q-%XT8IP0VSfy%9#1G?i=Wx4k=l?n>O5Bl0Vt8Vutp+0vPRrh#_dIc7mi z$tzA-SLf+DAT1~Rw*uE|)XdImB)F{#v0kfneD07Mq2u&oJ8iEBQd|_B(U6GU`RnY@ z_mZ^(pX1m44eJ}lk-!&Ye`0|hSwZnUeB7PltWMs!M6X3(k&~VXxP%p->ckXK_%1pc zv5h;1V|p4-u}8-+LYFd0S5YjTPGq1aw*SjY+qK|NgwtWZ_fD4|hV5*yjz9aGdT7Acvu9(Jwqs+-HUT`YEyNEW}l zOpn#K;o!1{sSH{DY1tj8rqlum4t(D(R=%VhOr?^VIb9o*PIiueQKnmx(9C-k7-&6J z#?{9)=P1Y?N2)$~Jfs?{@iqVo_3jkru-xZ(_7@-4wT&?&k0Hs$Vlr3J!3zS%gwW(d_2}M(wm3in!i&Us+ zP2yK`!h2y%vOW^?j7&m3_(Wm!Ris@O8DT}t zT!mSAVyKBw_0Oa9n?eCWk&qg$Ka(>QDRoVqw#hbOY6(|)pC--MKY4TzxTVu@+hxzt zo2%jTwgngU&C`?JNfHFi7_5elF2>GJ=KqHIX0_$mskkoSscn4PIkzb6o2M{Q6v9lt zlIRMDYOHI~O^iBd=KsL~j}!njEHdyLYD#%u&6u_A*O|c`@WMOXNE*Ajo8rFt(v6vH zd6-ZO@a=t|ZcaxHsfOe=1#SV;-lVUV&W>8#dA+}J56QOCbRAeK?G^H_l$A*TxzHh% zeT-UyBeeVgGx@BMzeNrL14Ag`Uv4TYAF?gu5CK0cHY?kH}p6*&?|)j@8WoR4`&3Nr*X6Sg2?R2>kX{E+iBZ+6+4YK_x56Er+a6p zSDwi1T-+k}z=`b*4hyT;Syx`f-o@Wo5Cdm6Ij<3s=6@-a^gs|aiKiKP6*0}1UGG&C zu>xKJ$-ALup|VPrE2a}Tb{Z*lMPnW~HqRPLZXE(CB(PxB{Y-pqN>Hz&q0DK>>|N8n z>JjVa2nNhvtk~L?tBFhtisj8w9DI?y3c^yK`jS-KyEwClID8tcESYKod0?WL+H(Et zKDcrP1kDNftW))N@_iuHzm1_-jJgFPjHbHZUIkM8fpMvVQ9LbyY}`Hd`$tEKTi|;s z!7QL-4S(+t8K?f4yS{DJS5z7`Z9KxanA^t)-H0Tp_*&_Z zw_!?0$(ujsK^UGM@#WXt=n65yy9H)~BOH!`@)ku(^rI>gYrG_dYs=6h>Ajp^Us>sJ z;goOn>>i||LMW$+9`F%}{6@F>INwEvt_9ec)}3QX~;FYylPZoQ%=+_OIR6f;&-1 zTU)W+rQ%}q^*XE7+Vs-Gc1k7k)}EY0oH+}b_eie3QTO)Xlm#C1 zZtj+a#{;a5UcImjO(-kcxtf;AMW;uA1+sp3d7WAZzjHBVHx%@JNy*mF#zA)oEt7NF zZLw&AZdSQ%@2^w$vedS+8KIif&}?99F_=%_?J1t;12jj~27h|SkMOy}Cp?O2uf=^N z?hfM=wB3am`Q0v#-F@Z5nuO8ZhwRSgz?2a{8Ad*VII7b#^^Z?gTI#{Mqz?2PbBw<~ zkVvrD-bNc%h_Rv2WoFVx6Di8aR{%q9p3to16CH@0k4x7Z*1H9%xq zuj$g*CU17;>S?(nD<>)WNyDzOz5TkSrM96~l;vXwb!$aNLqm5LwRL9)s`Sp7L}xZ& zvbMTRn=;RsGQSX3x1OKVRi~)~B|(#psVkG)w03U+i5y3GG|Gcx`lJ8qR|fq@wfn2HW* zhXe(+$Wh_i&6odd^es4RvrSMJ?$ZbCm?*sx(rWw7ZPmrjJgOd(kTIQFJ%?rKo+|@G+7$p{ci=RKH`!i#{KnJS+S@-zA3V zX;$<6Tg)@)K~q49ISCq>CAd>B;BX$1K8HJ$8?O^Iu%-}j>jZ+sMIrlUwMabgZzWcEh;9m0$T~zvo z5&`Wk-XaQ~17lpWAhf05Fj3KGhbQvFIU2qC%xy=GI&$jrvXJ)slY(2d>}tI;$`yxx zY>{UXwc4J*OV#vzMt?aI!|#ZQW<6KR?P9uVSM4q@#3S%lbsOh!XDywQBqCmLCmbSP zs;-naTfm&mCe%lXl6~!dgOu;E1ju%$HzHX_j+u{tRMMd9Ev#+P+;F9R7<3JeO2bR`z5@4WtyqT-J zb13TD+4a2k=;`jV>Fl7l?G?-gvlfQAmMYj;4l1gesuw+t*72U3Z7)ym-%zLfoCv5W z5rqE~d^NaG7!#+YoIBdAeV_Bk*wsT70#8v@)+uq-LdGYjlqHEY zr#p|V?d6l0YWedAL%o>*K3(ZNO6pyM7q%C)w?69kPA z!P*l51+xrg8|Sj|f%Kt$ecx&=opH^ylI~(+kI#tSrTwCrm|F4^8()CRMn*63qp<=A z=O$(}^EPJQ$D4Z7$cQ9?z|OTPJkh@J9{I)0-^EXi4zFIEz6g#=v=5eMODM`)t^^Ya zHQNz+yA4n~e)9Ypwog?%QxCISIP9>p&j6*lsJHjo;m=S)8=aJ=-MqDwvb@;Fx9a&ogqO`W&aeL?qdmQOnTlbdUTvsM zCntfkvj%fm0NGXl$j|u zQb_|-ZW7D^EOov8Nz*)BBLxp?b2~ssdY|W(OwRzt2VgRgQiJ8zd<)|LJqUdq#q?jd zbq%$h8iDO%TWjUak-}&nEE3a>{Q7oh;Kdoj6pU<(S&+R~ILm~sRetvLasbgXp95~P}71XAi zlUlbsVKJqcgb;TQ=M6Z=PU6>SGRWX>x0G9U13{cnK}Oy|;jC)yu7H_6B4}=|74*s9 z{a2}Y%FRdxLuJ!TR%$6@Qc`4<$N`-A<5o8TX6VW~QSq1HtiD-9Ov^Qb#_l>2N8lO> znMYQ=IM6H4oN|07)j0P`{k)rrdchYW)Tq6Vt`1g~6xuqDLfcQN=aczZDQ;QsvsTj! z0GAIDB;akqbw=b>0j4D?=iL@-dt~oaOrLQ%gQ~Jb>{v7F}YV|=qJXES^5I}Sc+ z?;}p%v>?mwwt9CrY2W``)4gkxij4=QYymHu1bu#8PsTQ=67g^F%E642ck@hZ!g3O8 z(Od3d!L_}nVe1Hx-nBl9%{$l{Ae&=of1xila$kHAQL(TzU7V_^A0nU>^Yp#pZS{uj z-8*l|+ir$F#F{f$Jhth}0H}M9mQw#t?8b4M6tflf>o=))+`Pt_6I%A?v1quy;lXV5 zG;c^(_hsQG+UwHwPz0e-b1F~`joIYy95~=tNxcQyF!o79W!wDvK)EzN(F>l2b$!oT z+)^8gXjN7czaxE&5*e8~v%Q;0MX@t)UoYkKC_*C0?|>09o+m*X@!D~&azo}db{)S! z**qfVbdak^IwWFy#KNk+-WrUC^_!d4h|G@7(iiOmLn>0XWueyAr<3(%p_nhWnRDZE zB>|Ppn4Ii7Ugt%RF*J44zhJ%+_q=`}t+1_8bh?E21dnQvf6}=c!nf(qFJW_XJfY~R zDL26Zx%Ny+F0nD)A?oDVVV{+;QHdv{!|HwWhTNTroXaolOP6kWelkB;=q$hT zW<{e`Wcinu_&IEUS`1dw1$K(uASVD=iMlVQDR@^2kD+5lQzeI(`v%&AY+W?20JN_cBjjuqJ5DJ` zD*f`ihHG*;8NyN&GO|R{JD)sCutqis*3>|VR6c)XX+4>qN7gqpR|*_v1xy?q#|G6P zzdq7a+_c;tbioBus8S{%i^DH5p=aV(j~+XP^U8tU233Gtr13Mm`sVgwo5Hv`3#@ZC z7px6E`@TWscCXdChFcdN-}ifZyg_d^-xbmHMkO1$gIFf_a=m%3CvVn8yBWiepIlZ3 zf^yZk?Ug5Otcd`S?=NQn>+I1k}^w`nEUGnO|#|( zIDQbRDQXrM@9;wY*^x~Aua8o2X1SDaecM#K!Kv;$iQwl8jOD-Esl0#x|K2X(P{v{C5D5WuO(Eb_!ugzERJn(;Q@BcS)+Wd$M zqUa;dqiKto2Kz-R*rqPv9L_HwaJC(aOUUBgm@k{;G|FpUqs7#E?NneUAttt6e|0kS znaq8Eu86}1ZoLynODN!3E3?yUU1z=5>^jp9v}2$J1im0Crq$4W7m#)1-dN}A>UlPy zp)e!JP9f?(@2U}G#>LLQC1l@{1>J8^@%8n^x7DG8luhnoF^mH{4P*&WzD1u4QJoYy zHajnEdjYQs)1DmF)#oO2$!yBR|tglugjyo$>)a`@OkP-F-5cWwA_uW4!w2_HeD7Oy~b6;PlkqP zVf7Gx_763T3i+&zC`EiVbtVdJq>Vm(Ruw|Ll=9I=RFKywUk;e>JM)afZ21cCrH%jv z?S*y#uvnTJ9?mR9MQ1nsi6RwKF;Yl&wC@m4FFwX zlv3zeq~j_ILS=O2jlw29E~Gduhbv*BVPW^gmV2thy{PKy>Sn4;f~>7=K;jH8!K*B- z8gp81ZcR6+9ub$Fsw|*ZHT->i81% zUh^8O--pXFxrKiuH*Fjp9kuH`>j;U6pnrLiqocDL8@Vlp##V9h@#$>gjPsr_22a=J zUp2n`L@CLt+RE8~{`{$#oULoi(i&=SQn&JYuBvCEE^AtecMS{?Q=UI}FR$@-O-}Hx z)+;NsZ9Wb)op*h3;y^n;zpndwv8*ZBQ6lUyY%V!n*MYG1uo*h08h< zN7lAJMw~cjY;|goj+3C*#&@WI+Iqw^t$(Lc08n4)gD*LuA#N-|qdkWm_NbmLk zNo;5cGM6PRzH72+zCGzM$Bm!ds>;w`rMKB(0N_MJb2+{v?>twoa0yx8O7Aw9Lkcp5 zqkSHp!Mx0^k0cCi6x6G(Z@f=a(90()KeEK+_7T>k10H8GK2Sb|g@yFy<73mC%X3=R zH*=@IPw3cP4C6R+&1s>T!s7M{H$!@C?2aygK#fD5pjIpF>Xwa>sJO@1GhE-GS!%c5 zytp)5zD?Zz=I@|Yvgh`aJRATQ5*mUrn#LvX^jE<(Al=tB&&`zk++x2}srjT^%E{ST zR^Sl0f0BoHOoC673T8M1VH$S9-Nn);4=*pL4s?{IhyOBp_o&3g#O$0LHCJVXGZ|^=@wriOnZtU_w`-Z1i{@9v+~6($dk%aP_B^G$RnP z{@q_tBpg7h+OXMH10T7F3g3^#8j#;bCy12Q(DPX5NlL74Yty%9)CWrQ^QpkM-3@Y| zdly@D5!8<$Y-Kl=EZr~=(qGUg^*rgUsM~6l^IU;*al@tLU?X=o=i=-58rw`m6^gQ= zQ5&*kSsMxJH~U4AE@$I7442cydw>3nWn>^lneNuncgWxcu!|db#>TF~5F`B0nr||j zZ6jOdu5Hi@lF{l&Kqz6}PQz66s~vQYv#F`+41qM=Oxz9G6q*Qdm!0^k6w=33K52i8 z@H;ufQuoebSR@@?ZBL~$$Vp81@(I5^AKgTpbUK5z>x*N2Ynz(wZ$0+0K|voU>cZ!J z54dijVocXpoMPus$C++hM1^iT`4BMjlhfZ7n^wy);fM6dCI4W72fDfddzs*!iv*O6WmQ=dj|+C4-JK27E9T12e9#{vl+p&-Qh5;j~w zr@l3YOP4Anbb6A};5Bc`YSn$Z?dg1EEG8jgvwsG6FVO|P^z6ovhN5B=h1KcS$RPU4 z)SjCFa?TmT#FR*pci?pTBiX$ZGc+<%1Elo=e?X&|?&?iovL=j-j{a~_kZ7p_(6?9i1iU1&oXKFk3wu9@>@fnmwK|gSHdok2^ zw70XlVBEk*YF*Ei8*DH}YT zPF|6LzZv3=Oivc1KE2#y_(nNF$i`nD%UfSk+fqO8fcQG)00vbEZApCI1cc09!9sEx z0MX^AH?<=@GPi9#GocNMLE7{YhOLdI;+!dZ&IiElRNM65K?gOb(@Fsd^G_v>0fw@) zwu``V`qqnWH{3YYqP#B8HSfKJxySnwE1nKciJzcsUadT6<%q@-Yc8k-zf#U$ZX z1ug2Fyh4x9LLQpcPZcW#(mG>u9ap=pmZH&7q|$<1XlZGs<>b^nJesPVo!HkUE96u@ zeCaoLhLWaZVq(TbU_KC10%^qeSPIJfxl&PAH+8=WX}39K3)tFv-U!`|3~ z8i71hUWdcX{-RrRTVCDX6!YGT zh<3fv5lXuVHC^jpU!Owgm^9?%!n-2~az2brd#t#GifadG?p{86;FE(X&LAbTnE?YgwJwcTXq$ADC%1v?=w z@!vOXAb+={kf!HwY-7XR!^@o?Fv{%B^}Rt@jpfVj%r;c8v14FiC8ngL93P*=|5$qS zP)AWQb7^TQc4L^|`e30oG$dr(fmFfX{=g0C;Ih@wYszbLqSg$Bx_dR=CQW%|YHG;7 zStH&DX2(B8L%lW?*cZJjHLFG<3UYfy(RO1wpfisrc^R{qk#^# zlu!E2p@5u*M$-Ly3EiTVv{U5ajKFepRqyCN|MzEDs_ODZG1w%XgC}8hW;N3|xTG}B zDq$ctj@Qx5x@JLwY8!3p2Jt_v8^3)!8sSTP;y+&&|&)U8f$qS9doTv>6 zh^$TXw3ywqym>7q@u&#A3^b>~tX-bRxCQeyIACAu4TdV%pIVgjmGFmVXTNVfN9=-1 zxHocsdkfaBPF2;^;sue{&aDkDMHCW|!cx+tJ3rw2V+ukOHWlsViTb`;W@dZ9W@O6e z?K~%Uca52HJ!?zL;X`tTHGQaCnIK||{N6@xkP{jcQ&WW?{~b0oqyYL1&&_%FGmwj~ z-Dny8f`oT`TQEO2cT3T&UO55-nLsSS6C3nmVy4bU4a~AuR*Y?DTC{S+!(%9t2F!gf zmxGFncsPH%fb?_1^q5hg{O^z;vJ`gF_D1v@y0wIOy7dmB>)QrdnFM>jq8=~+3dhGy z>~u1@S)QB+AQmPfnpl~L*ghmoa<(>pP79STsdHK-wY}ZQbRLBHJ$*IPxc8;hmQziY zW2;r69*mScFpkG>>ZnUJDa|6WK(bey(+Iybbv!e9hr&>VF@3z%7?vG$?dW zuobXT06?bHCi;Db*_PuSE*?(6CJyF*)tdCj{N)WM?w>z@-s;n;SvxqW2tdcOR#c9O ziH%j$(V>IRm*0CV5RrhcMOj27AUiu-J{c7l1u@L;;8)e!Wi!WT@Ml<9@W0bFxNqJR zrq1cAsi|2_ReJqiB1S=Z$b3&GFai}N5ekLcH7=upkZ1RBxf4Q9ulngzslN#C!3~GQ zPn2(gUkkyX0q-R!B(aLIjEs1?_hS3heo6{_L69vI@hBcIOw4S3-P+FaRF#gA5#%3L zDWOIX*)d9iXNyaqjhmg&?c}Own8#xbLOx;uaOHfnvXE3<;(q!Qll5w+x(fB|ce~&O z7SJR~H<`a1+1{w{$P#fS-r6c~)_-6(S?=?#`D7V>iWnX6yj;*4r1k|4c1Dg5nJpJ? zn6{#+7vUoAL!h&$U^9j8gaSr0Rn!Vt{O1Yv`DO;gXWS>%rUPjl(vkdEej7JikHMa5 zvg5Sk1Zfd0W%K()DJ=F3S&+Cb(e9%H1{=hBD_h#^-8McPwzXFj1R~sa#9|(A+`(tV ziLE$p5P3?v-|leCABBk#aDyAxpmJJRdo0CtnS`>?QgAbt*;NN?(|mPiKf4GH->>0fO^xH zMFw71h3VZEaMB}s=9w|o#s(P0XkFRXHV&@ye5hrus;ZP#mCe4_gT6l9S-c9*r1Eyv zvtex}8C2P>?`)Gh7#yrCZ(BY020V?8bXpBO3QtdF+VX#Li8)m7Q+1r5ZDQ|yc$(H- z=s)e<%+=a5d;rBkqh6QeGNi@;N^gv@F%z$u#T^1Cuom?aIh)4^6~3JdwTNE_`b$`H z7K``#5bs}J*FO>?UtVQbrWYn=x~pf06@Ya5HIU zUj6>c(=Ym~pL^4`YOq2!Ga;$8a>J&iJX0>V!qS(N z#hrVK3)B66G%1vAwgEEZRyH~;wI|zQPy}0$WdMNya~(o2);1X47?<>FB}-w6R|mb_oS+bH<#L)@G_| zKqY%6maVj`-e5vE7Be1FUaz?|1jbb6&AF#l$1L2F7Yl8t@Eg;nJWwh0`=o}&%!RC|^9#f;v%$E1!jyPrsLi@y$fu?tP6lo&Yw(@K_7{^BNMs!N?z2|n6ImKgj zz1Ms;2woBs_5z(!sUa>t?1#N)OFWepMXJMQyIlUFJOtHZ4nFAhLw!7-?y2(uNt7r| zfYq|dvgK`j8sWwzkL_t4@WbA%FX5rTqgn<-sUJVzH>62eZlOxmEdeLsqx#v!H=k<< z2M^lgYY~rY6UXCazb`CLoCDmc3j*Q+#?^9ojj&p!I z7qIsLny%;A*ZfXW(gdILL+tgIw=_a$Gc@g+a_g_}eAGDawk1tVTrJFR8}duVL0Nc@ zoM^sv2l|FQgoT!pMezMCp7>-#G;p=fJQ8UNa{UWJ!}I!lB&00;U%4ArKce_W!>j*^ zU^b)Df!MO3KUm7i6XHqQdapIyx7K!=<9_qd>-6W_gda{d*06aWjSIQ+=_6REr{x*F z@&u2d&z=nPb`V=a%g0>)jz;k6G0yC_eH@M;PXkDw+0nzzy)7{GeP)tuxe0IabJy5+ zLpZqUY1Q$Axmiu^T?JfWd<_sU-k(}u*(vivdtd*xVsn2yCM6pqWpWfO-v0Gjk$hpm z4|4*7kS8!o>(3l`lejOe1kd>=@;dF&{ER!*kH*fP{dghG_1aR}$0GAqc&aD%Z3rcf z@zX(o$d|wOv&bxEzsUS6nK*gsif@b@2&TB<5Z*;{P4ZvJ-;YeCNV3t7Jf!=-1q%8< z)ubHTf;R;p`VOqa3LnQII$WwU?>%^DnBn?}`ChDS38#uJH^rUMAVGsCx@iv>e9s{T z=7O=m=n6~)A72KlpZBaAKT`MEbs@o+ojtc>1;m)CqH(J9&?;=l6d0L5~ zXL@+gi&O1#P3N+^9FB!U9k8$t2p>gY%^Q&^C1zF*2S*c7Xy+<<^9DYds(4>fGxH|i ztm`l3J>w|mACi*^Ux?l$zL2(*bSys|)H-$o$Rh%D1Mm6_g__xSE!XEvN2IPaudd-t zu(=WypFjJhhBIu1Pz!@bN$%f*iia~_NwOEWU(U4p1{r@f{2)nf!(rzZM+3WL)&4` zJ{O#axz5j#p;-)g8ZhthZ_hWM`+SjBF^(G-n+ju#wsC7EAil$2ofcU-HSs6B*L^gwi_x6?#uU39r zkB+Y2Z<+f0>6FFfIG>a}2*KzZ!PqFbVhF72-7iP)i7r=b@s~c!jZLxtz-uG{CB%XcnpP#WfP zZBZMCYojN4zUXU)@E+G|3B55t^rgQ=Y-;D%;fK3-cIYV{FGNbSJBF0iaS>gW16En^ zLT|Eg>0*X5g0`U!h0U5`e*vLzjxf{7dwriBCeQbR6#3fjsp^naX|CGCUEM0Xjqx)-?A$cpL*CZDory;H!x?)wxvW@9G*?hOO# z!j@^JAQ9WdJ~n{+4crZNENqPekjWSl8(czFVHirpTP`m^wI>z#Re8h`j{-}LkTm`+ zs&?sqBX;P+!|Z!zxPzM8SLBDU%No-&QWdG1Ugf)>gWOq91fJ;1N((+bX=9rFeds34 z|NOk>d$f=5G?9kx7@hfxywbuPjUL^-LyghYKJbd&-H;@%G)ni z?dWlS(z?0oS!zSnwU11m3Z+jYY5(62xr!2Y!onAW$I{Kn6C&d~|_Rjf}%t+^h%guqrQ1MZ~R|cb^Gn45M zmOq^|fzx<38805W?cpFQgGzYr1^q=no=4hfH{bHkO8vRV3_954u}7mVrKDqn(jvt3 zego4wWeR%Z@Fn7H;1+u=5902Yp9zfVO9kQwOfKC)!I)SE68(E2W|qgG?eUtXo0Wl9H-&l9JCHogFN!ZOyT;Jkxw* z#AG{ENrF@~^3_>ixIb8r&KA~tKnV=KzUtEnG57 zLu!M&Z+3Bi4tL89OUXBJGFN}Wv@iOmc?>QzpJQbkS)`2f5m_|=b_I`|xZ(^+vCG$j zh_SysW8&%k7MDjajGPd|sL%fL)Lw0oC{gLxBiIf7S=IN-?l0lrbtTlFCKW0RDLn@9 zmoz-TG#yqH}E$TW1W;%u6i(F&}P`T16X5 zoX}omlqF=Q?Z&=!$~yn$Brg5w2ggv6(7|*iVD8_h|EzAMzsxIg6!#guQkDE17H-H7EC0#~ zk*3B%U;FDL-qmC5CoRsOxsrdsz`|m%uIhdecAMVBjPI4Hi4ZqCAJ+$dc3y6CA$B1_ zUM_YMe!*7)7G?q_uS^BvJRTPj@Nf(8@bC%<2=egp#Ice%;d5zn2?=ux3iI*C6_C*X zm))u{lH24}^&BSmun+K9;;03<@7;Pt#gFM}jH%KQh=l|6ab}f@?p<%YZU-_1`pO*r zA|x$_NI_@y?as%L+NjL@)F^~6Ok01VLCfh)br=%|+Z$~>rk@WIUw5^{_@=VOb@%N= z`TJwx;i0hn=E})9`}^uGEe6Dn=axiP(^8|O9jDJgw4e=yFd&Da!jvIm+@(x4qc7woy3I(Y_p&j&6l- zU=J{?;N6~&F=m`bq1-wM1-cd-yDX}@Evn>Ve*+Peh2^bR5H~kB8ylMu&>WvhdmzW= zePZH?6h5e?fkElYiba`0z53-DhVI^4uvUq-b>BBG3JJd^s039rClYR0a&+WQNJ(u6`wz=0@?p_3UIn*DA k}7!ei`;f4-5Iy%yrBMXVjMK4<9}ZjJL0|w=_3jFD}eb*U*TA!C=+) zvki;VON)JmwS$Khff}v$9&T(4Ge)%{D8O(WH%;Md(VZ4-qU-&OxXg>ZjztwQOngpG z4li)^QS9nu(OHlxh3i8w4#CqQb6+}{NKG%V`V8R8OONdd10!RD{j1Lae0g=1RX{)o ziY#>!Ll&ygvO}t6H42rr^z@RSutVr+X=!I&2E}H+{8BnMU1$&TMk6K;ha`!Mb;^wz z4hBS2AoGX`qmtt}pFzZ(_By9UUdsV0iZlA@>1j;}1h$$9v~(<1S@e$(3d}glpPQZ? zt_yqaX5EAOs<>hlKRC0=nWVK7Qh{X<7LppbwkBuUpa=ksC^~ij}X~Y)( zE9XrB&U$4phlq7L8jbE57(liM-M4-(U{o6y7w0yvrL!JHW)%I)RL#I(#>s7Q#-LW_ z>(lJMK1H#M-41*rBIM`0_jOm#*^K_@Kq9Ukx8VTF5Z$`8w8XKAJwQr~yLaLR9Zhsq z%J_kI3+v|d$M%_zQ0prUz_d5yyIye)V^#}_KxY_%UTmAQq{^R=p=Dq&=R&UPyr_n>zfga5= zKgXCBuLUg%Z0hPUvJ$~dYQz}X=+m2%fFVgE-dh}uPoO16)75WcU5}TT_m7XV)f}g7 zh?ZC^$01(HANh7SdK0R=%MSL^492Otv}9ZFP~gSpjr5t@z{InTYAi6+KDdPcm>03v zs-fXM66!k4?3_BWOOAqv;mIymBxyA%*!8e(r=yY|MY4C_Nx>?r6^&ZNxq|?l(btZ6 zkrW(q_zG$AA8u~xHSt5uzh9@dwQ}YQf#TSeVEcq9{<|B4bOlgb-9vJK^9gj*qhJ;}_XVQsR{N_Swcc7ZU->;DPmKxNpPxJ}A0&B~8}xEz{HgZ7 zi==kFgCbBn`>NVa9om+{vqTF$6biGyLU{8l$nJP9UEG z+=M@;cINkiLme{K^U;K~j{^Z$>iTv4UNqnNS)u)OJ?9&Gq_#d<8PcQ7%{n2o1+%Pv z`N-gammgbzijPr8a06GP8W#%M^NWgv%#Fl~$0U@GU`s_-&2`r4{HruW zd4Yap=9waW$dR0sGy^GmV)4aH=4Zn4?)pBpJ;6k4FXtZ=WHvUo>cT3=kp^^fVU#{0 zK+0zLI8qZ$A*YwnsH`QlIX;JEyWYLpNN_FwNF33y71m**GnKI%M(J@}p|bX8j&!wj zb~**76?;0rI4@(lDo$I~7t>+3yDyeMQ3ZjKjCg$h{GqdWb~-C;OLMvKQeTdTHnFf4 zh}t;j>+CYA9sbvNyfj=$c-FNv;sYt3p%$1^W4Pqbp zsJ#Q>*muIQ>FI)clI*MGy#zbm=N80$`Z6#mvtrO@cXy~+qaYJeQ$2-3nCb*yx%a!p z<~fApBi{dHiiikLqGt$}NyA*$vrDMV)ADJ@E?K{_y80diIYLLeJkbO)dc{3Tu}joR zW4}G)jN2jiZ8ed*BuyM^)i*y^PW~ykEV{-SBBOB@g3(a$4Q;x7yG*+>6B1GwNQ+cW zWL7Y*!5M(i2Mp)ctk{q%Wxo^;@$~MsDUQ!~&b;V|i)=F56WHJ7&8Xt9K=2pU3)iBS zBmA<%XxuNYn+t|X*fN1nMzP+-gI{FPhV`=S7>0df+M(Pt>=!sJ&rF|D-=KaS)&tGI zX+CB@2?)7EirXy2^3m)_?aQNF;&^?nb??4Gl)jR7$=s=T$!101E*x7Xq$4{5_h?fl zNzo-JJ|tmmd_!i34Ot~HQ`(X}fc1RyeKO7I#bfpsj50!G3-I*k{3>7f*K@>AYfa>M2Cr*f8rSh(v{boR@SoF2`X zh9{BK<;0`4B|t;5TmT&%X4IO8)OJ6P9?i@;9!@#I+}Z#EJ-*??2m}0w({hI4w6PjI zwgFgo3OARS?SC~{<*7Dq65fRa?g7i`z>V4r}1dSR_|53jOX3q zrq)e{A^D`({DX6YIe$wVD>$ z8TzjRN#ww?yHIP)vpV<36hTVGD9Oc6y%%mIOEn{=(?+fp2VeXsw*0Q$`!bHgYwkpIZ zk|xEa{>tl8slok3mRt-FYs6et_4LLY8|IVQU-(}&?`or2C5rg;eCXv)$FrXDdkMgJ0bh8SS?Fr)b)JvbM$=L7j1?)XWG=G2HdVbPDWVeLRz2#mu*QgH| zJ2o5DFNfG5rVjfW5Cd7ikOkM5AA_V1L&tdpX7cXRNw4pei0=TZgB#6_ZnIy8y_Z)| zyx%?Y=ISuYPgE<5Itj(kN{vHtSE``DucGoF>sdhL`!$v%aYXmkYJ~T(}!QdiY|~pk@WF4Z3~{ zCMk~Bz7)PY=|Cl4ZI`-HclSE)xx##f2h$5{_-1BXuMQXr%pIVKvq|Eb`YEl%g4t#oCf zwQRq2WLY$TV$yIlCQLh!`4!QqKzgnXL+oYs#W05flpeJNMlBSAt19woXP@Z1*C>nT z0^pjh*2FCKGh(m-R9<4kU*%1SI*%Z4;uiIQ74aN!HL!H+PL~~y$hA*g9qwR_dk_hB0Y5bN&{D zky~fV9k?v4B(&aUOIEGB_rxmxczgMHt*`EI4p(hX^w@0H@uReuJC--iDcW3)FRweyJGXoj~k zn1+QAT~oQA%hi@lHtX=!dr=5p_i*$w^db;%MXz`@YOf=8#3o6fDE!Y%u#)PyfWJpVR$?ost#V2`y?gnsHXSz_-Fzfnd zCJCUJQI|1CACD-_%dT>5*$MF#zIpHaIyok# zz=)V^);@FeO40WxBt_}b(BRyaiqZrV1$s*+h;d5x+JZn2$(Rgy_5CAaGSJIDxdar? z3$ntuc~o_d<^6Be+%TYccMR!Sw6b?smxO$|jnLWDUJ+#uBZExBOGYtiF5S zO+kp#8P;nhRO*&_pKtOCEe(P0l<78UYhqSsA=|kW272ITqG4 zEV*}YG-Xmp96o{E#%PLkIgA&Vxg4fW_u;%}!LcYOd!ZUYRvz-u;K}s0w7{%fuPThx zbqdugd>ai_3>B*SI!mLTf;pyykrU#GhHW&im=!ajmAQVLWb8JxnwSSd)ATgTyrKqH z-JNclMa#J5a57w{YrDf6KrrSb8`trIUCS7#0=tk9R>QaB@;nL+3!iHI$?iN}FPljhgWYg|3`nDV^X+tx0l1Z|YWeFb3u3C$ zDQsMix?*Kh-9Ru|9_~#=_JZj2Ub4A|a>MQVt58aG^knwjmrq!yK0Z(nyf__ubL99_QYEY}8a~4m*m3Wa2p9sCIT*8j$r0K37K5opsK}>~7a;~^7u7(?_1F2dtWS&d zQC?lyG#Ry`qQb>Gu^rhL)nueImZhe_^YkhXfH`ogwK6+Q$MAVZD(gO_cs!$oOz7l7A}OkKT2G3bg@0@+YxU*Szcw#WOj$S~an!A2UBoU2W zS;Q>h6czcV5K#}QLE=aed~-2#%>(+U1G4r>+#cGdd^R1kTw;fD_N)4?*A{9v4-3e; z>xWN6Yz(6iwR&|~*x*d8-UE3fOhkZFN82}{a-+ocx@OR)=@Nw+0Sh<9U?h(DH4Uq7 zqGG2KG4fE!fYr7tk1C|5d5mHXj*zYPb=_{3TS)>As&94c+(97}gD~)0&rg5a2{SM1 z{+R-zf7nZ$$imJkz*lsY&wwHqgE4 zj&-Q9cGYH{5P=>KaUJ zp_B9WM%&1#+iT@}-xZd5J1gb|yJ!Y{K^9#c1zhm>#>c=x*BH`(>Z~WEI*k4de5X_7 zRqc3QsX$d)>9(mFg+CS6VD;0}3B;+Ns zG`_G+5(HLW=88-(yEEjc*BdO=&vn|v^R^mT7CUPK!J;@1uFYw002DsaPi+w}jptuB z^MLrh-;wpz*QA%L6ro}%f{zq7a%+NRqi1n)bZ3X-c8?j|CN0n{Y?mIL?#aHsZljY< zDKWfVr??GCNjC^B*6fbZHnU(FlXxwWEWDTpbu!}Om2$8{<*0D;93HG!k^EgPPwT;- z<@X!;2M$!A03qkvop`wo5%XBELQ2Y)7+?Ip!-8QT-D^PHcq?y@WxiekbeNoY{g(M$ zJ0+8BiiTZp>J!rlXN`&CiJ|A*$Du1!ZWNac++HpFEy8}j!(iS9W1n_cmQcuy5hyu9 zdEA7={oO-t$4oB#(9|u_B(GBz@ND^!Bv~37fLn%8N3-Wx`0J0Yuv+79w|$7!t`b+5 z(enyUi$LC*$-K_gc9g5*vGd)|NDZrY5=&h#Mn9pwJsqhd8!*FX03rS~=qIb+UzG-g zyP4Gm!wrCdzQW>uNbGacL$e`r#6fD=RFX!h((^K_7UUcTeK!?5m!BOAg1O-UdVyfN zn!zyc<=48bxr3!aV~r1F0>*+dOd6lWGu;mGG8-5Buh%@142ys6-qRTpe4d?2#6Px) zwzKxeB%)luXB#yWM?7u1IjI8rq{t&{O6zL7TO$EX-wKg%q(pgZacAawC?9LWQ<`jO zNR;R*T5r~Dn0Ve(YiGtU3V>Fx4fkwp9>(Q6Y(~(|JimS{3Y4Orv=*FO_94HBS6HIO zEEAt>Cc8l~?Gd#G(Z1X7@cC_#Em0D2N##)m*QXw_X#xY?dd=FQRhD(1d(sk$@z;~G zqW$p5`nVcTcT`HQmt7j%YWKt2rq(zUVYXV!r8~}--P`gR$Mj^az=0yThPgexnYm9P z6d=U@dExrpf|HD=z;E%Zx6M|5828;nCM-|0pI?WXr zp_mmUdl(^}mW0iXC?GEFnki)}%W}c7>dU3haQ$zBt6g2) z8)-B5_n(&aa;koqdc!v{23spBvnei4s8=CaEz;QHwCf+YfeAm;Q2i>}tYmP9X! zPzv+_EOqAo4r3cnGVdaZecf>r&sVWDTAidL2*bCB0a-+xo}hb^-}x}E_u&C)3ZKuh9nYnUI23ET?ox1SK1x7D&Y z4VF5^CX4gWYVA9K$~C*Y2;Uay4K!te5><;`3LzjIcvVMA!0}4yoLjL}@o6|7{&q$PUMfxBjB}MtTJ!H`N6@?&KBW)j>aB-(V0_;xph~`%#rocjMXXOerPZbC+0QK~{))a;^#W+Z(T|JMnqIX3^PWHP6oFq0c}az# zAIp76lM$sN3JI_f1o$8+n!1_=8!6s5AOU{<5Zoi=Vy#ihyM1wK_4NSE%l>f~3#<0S zhQR;W{O|jYH)q_;1n?j2X8sSW|GrV+f8O^0|GoZySY4HR3@$pql2Yruhgg5u?h)f< zJ;cHijPewuBEs$e*D(A@|L2MUcmJ3E>_7XT|C8;}e_tNk+o<=ii4^XZ_C6 z@XXN~`|)5xO5u2NKAU)pfp1R3M~J_b6u_+WbuZ)+iM@Zg)VPyjQ`CoFWgpF zG`mOW+~sg}WX$kedMzVJ!n@zVo)X~SyBAF_L`4KD4#){`K#7E0>}D%j03oFStf|RBU>5Mqh3M;J zy2D8K4-Q5H_ZCIs?-Se`qL#TE8_N?&yJJm6A}`v6(A{$Dk<+|LEh>(hIv!66~cpd7PcLGc*t)6T1#E{&#faI;z%ou9!yyWm5E1};tHOibvsw6xgR*^U2J zN_CwwPwMXM42krlXqnZ>bLx0(_2vFg|IhfON#kkSr<>(ZB_(fT0lU;U;(;F?@BI8) z=6tSw^Yiko4vW;hKkS*xsk^(^&;Wn&lv4SXK6JX$kcghoxP*m=YxwvyR#sKHjYbH- z;BaMBt%Hu8VY)4U>I7z$4z%CRaB|j4nj|O{L89pK5IG>KOuR*gy5{K3s zlk6vKx>-L1?~sxJBvu{2BVeVa@!e)4--dJfY{tO8wV`3U`UG4{PA-(*`p2hRDSR#k zqGDnqWA$6PQA>8b8)2+)N3j~`ah55x`_1&kl8}O{Fp^u9)YL zLy3d0~k=()WNjGgYGS_JnR`EWMM7W@U(g#vTBQV7i;w_)3%#ohw3*nM#_(sZ?|Y( z`3-z;%xQR|(p0T3!hL^faWQ`?E@Ta`&&J{b_U&N?XREX5y56^jF=D&$rLj?Qln$`zeL0mx zFx(;0tX|GOTZGWB)HKrLl!%M+b4Mxme-kVk-H#Hlddn5l)_`v49yrz*EqZAL0gBPd z1IIkTw(P9?teKamU=oezVKQlou((`r%VhTN0__Op(9!G09sJXir$P(ZSdRWL!07fz zqzi@8A08fNVP=lW%*^!0Y~*KUWyRUodh8e_D>CYwj*O@ys%u!dxz+oXlvvnUK#@PC zYyY?oRK~lZ#va8O(3Tbb=lwV^G0|(r?N(Ht1s17-g2JMrbWGoVhQUfObLTs~;59<= z@L1ScH8!RZ_{79Iii%$oISgTE!8i$4Gq6$a^uM z{II8y60=rb?v@~@FgSjFc_d64uer%NSgNYH^Bxql8L*exoy{)NZtRmYLk_FFrZbYu zB_u8@j81xq$2j3SKvMa6xdi)IW(EZQu-liwx$~ws~0R^<|K_=brfG$;vuDKCiX$z#B2wo#p*K_p8vDr)1f3AI@0myNsX7?c`B!;-mJWn*QL}iMR<6Y9R=y- z%yEftf;E_Dh%c5O48vRvx!pg(o5#q%WAHbhvXsmA50%ZQ7A;7c5+l~BW-o^}VNk0? zM1Mg!&;B8D)PuF5_Mk3&XY_I+L&W^c**l>L&2-Rrk^HGpdEm0{As!?q<+&WJ)PAhy ztElfq&vn<}QrYC1suE>p-t4)8;hSai(O?_LYbLpowBl~>J+vDPj$q=QG-fn*AdkqP zKANcB!#2E@@NIuBcDgUGmr{zqdn{yfnyaNPz``!3<8XaIBZa|Ne`{Ok=ZJn+Cfo0L zHzD?LRNu143OLk^9?o;3d*t@4HSIo_?2-K|Vd$JwTvd#C#6uAQk5-S}*xW=|A6S4| z$&&hdJy3uM|5I24SC-CI+uPfVbu|#IqZ2bkAP^~Bz76f|?P;hn!HLpytJ8fVb1+lb ztOt<@3W`SItC3~LyQ@md%GxV%!yBIfj<%+9vn4}>dwsmRZ4mBEJC1^8wW!9lv(yTg z!eGXi9@B~7Rlq-sDm@;{zM;ZQUw7nZd1K>w4nSOkifC2IPTOIoENlZuuZ*AJx0EZ> zV|UG=_@|U`vGerN{cvI=%X5AM8G(sUfpgPtYo`Z)1%)iA)#g7)Ut};#aJZ$hd ze)po%9C(N8S>WV7Fvzm7m&YOc8I5UkS@X6|Ek(Iu6HA+ASgmxvzdBJ0W!jd4#_C3_ zjkDRO$D%Gv%~RBHM=j^b?_z9BLsQxy;-$A7fpNIu}_}`$G#GUhMdj$*jQN&ZRu5!&^*j$P)O|Z zWZH5Oq%y?GGcq!|5fvm>^AeJCzhjJ(i2*EVdO1#WX zvOJzE&DAHSK0ck9Ed;sE`tyH8<_*U$uAcZ#D&rFqB{enL+1c6ha&j@hOk-y4lUB1| z|F-2XDJYQEJ3q315B5JxLy+O3Z02jKTAJD{U|h7ewoVcEZFu`RAmL?keZCYnE|F`q zL|k`X^n=yI@rDLrDJh}C%$n+IS8osWvnoB`^P}!N7@81V=QRf+olo0e>vp$Gxvye`W*q)vq5)u+u?YHvXfKXU<<0wX@bNiAZh2JC# z+Th?4u9cCI4iwBzF@#09&oPKGa=)W3Kdq5`pRTXFKtaB?h-Of5DS@I=gcU*>2xvCc z?s>3$4hV4DB=&PeqPSl0e(#`$r>2xqM|Ko_d4}#~*HF)Knf7`kmjHru&Wq1x*7jNo z(A51f7Seg(Ws_tx7|Sbp-R6SD9*&F1g6_-0R_u=M$av-HN}zO1!=&-i_M3$=g=^6c zZ{68;Xb&xGgU5FW1f{77Sxjlj(AV|qp;Nep^&_b5HONMHXO{q`I#v!2WJ!5*L3MRC zjUDZS2hVbci#9fFe9xvVy*<{|<yTAYni9 zGj#v(Q1h&I9tIMX4x-r@5k5XGTECO*#FpcXtIH7uP%N+B>UX)cvr}GL%GP{2Aadq7 z#eKtGgdP99F5KZ_V35Lfc8+(pnyy`<>P{9l`vOYJwTz75v9XWrW~${tHF!L|9vkq) zcef1}Rwl;%%XM`iogy)IBzs#$;&Kc#4NBX4`g=7%E&y^3%yNTU3a|CZ-FX>s1gph( zj1d^6=}a9sLvJmOfGPV2hZyy7slj1BUEOUnoj@>F`4EIGC2&wOUDtFMmQ zSErj>-+4(ToS7OHln{DYke0v-ZX!;GpIgL*;+%~`?eU42bRZ63GqZc=5_39O4K)tM zSAb!TWUOIjJ97~}eg2HgPqblmrP4lC3Z&z#vZuesdj?o_w3Ko)yu>g=Ut~J*dTCij zd0#Ke(64nT>9Ev(S10!gKRl{rw?uF6fGq#w^*^XxJV-FPKK$+isj>~C$8*f8b9;Ax zet6vemryrm_x@$vC)P^&Rh=R_gqUES2&JU%&DRCKr9#1RYYw%v`G zpr~jO`H45RpF;d&9mx0i0ZhV+7cX3Yk?JrpG0E0@d4YToIg~BAyuQw?qM~BxgGPi! zMk3n+aJ4iw^Cl;Cg96>f&!Dfbukh~^YJm;}2#bpQp1J;dC$pK(pm4ZQX->iI`CXbC zp9OrmqlcAcY-EF~SX*8Fg@Q)h87<$eK`eMs(|E^#xV)i2xPTt`mf z6YaYM*(NDb!qAQTZaWmm&A9kQ^Q5gw^ZCM~EQk%`LX)>A9 z1xp2`^AZ(`5@%@2eGJz|l1IN2V0T?;Y(N(mrFMMn73zm+RdCDt;ne{fW_C&uH_5U; zA1`UZkd<4_e7Vz~##@J4_*>z3T;+v-|7ZgH`W)_eRmjl8T%_9A?2`+5`BgDKDXDP# zs-F_FzsDb;xLs0WNjNcheHgi|f0$UH^0df5GzQFF(!O7Wie8L*?H?Zi!_CB;$efpn z*3*IhDH0y^FTuC1IZSDYa9QjBRlaiMl>X1YbMRkFTCc#J|E9KkC2r9;BO<+#`eE7lE709tm z<1MpZ(W%_n4bsP4-x1TbRDZue!>hSw8gVz0seFbW2c)Tv{YcnrGaq3SvC=DeU6&#a z(&PR8eguBHe+Rn19vZe5h9buVp`5%#B>&RSh*7UuQDJOWb_*8sx@Q(cnyy(lzg;YU zIK>ep`_(Zn?N@gAD1dyGNRM0>?IGLI`YOXze-Bf4m4W*AYEJy+lO4fgo6LivnZ_g( z*E9dKy<1#4<0qcdFLNqcA5#s*zO?W2bB75x#e99zwAJ6CE9I0?v^b_={d3cMhoh9T zi)~aFK}!iXDWF24rX~Y!0{lss9hkq)o&}mf|2G~Mz{Jr3N#Kyaq>6AuLjA#v7SA9`Er7rP|}$= z;f=bYa?J!Tu`qO4TikVX3%ygD4ZpL0h74aSbI*XSjcSiTkLPRJl-ocz`mL$`Y~AJh zCtE{CX68jyfoIr})HiWR-TXX}OEm^t^V0+}J+@uuQmdO)^(AL{|8cD-p0Jyb8jkR$ zrE-ydPWh>vnZ8xseeH=u?!$q{*dNENpShfr*FW{D!}p8EiHj!{Fuz}DJm9d+u{Ga% zagJb!{_Wlo+JarWm;CyRc4U@KULqQnp2)MLKum;)qZ|R881<6YJyfE8Useg33v}Ag8RP{r#i$57`gwixq;rU@-%)94xZNfWG?anoK zz~2mdU5WT*TN1dzV>kA`Tu^iVeqLFSa&mVkx_c$aQoi2SX=3hrfk0|b^@RbB)Z58Y zj&8{8gaB?f{uLn5_%2WAsmO?O{fSTQjb-mr(;hWv%X+`;hv7CMZ_F2Q1Z7E8<=fjA zt1@|XF#r5mFV$Y}6XlW*7tpHQf6_M7*w^}PFi5qQx;4pfPA{4Z-?fClt-0t*5LA+w z2#X$I8=I>IfcWcN=LEky{rU7HqQeQ&eRamG82Y*4>d+71p+5cZN@m}%m}oJwvxjF? zRO89#J3p=KJDxbA2v@i0B#E$~1I**mfcLiYR+n$`zW+P=MA`niA_nl3_|bcWPg~O1 z5uXcBeEP+wJJZ)yG0SDVm+&le@74u*@xKOlIsExp@AL70nOiB2?i(@oyIo?V^Ub9+ zXJf$dzkAy?T0o2wHU5%tx$v_^8ugRCE&sI>w_e;?xp{8$!b$|vJW6WqI{Mg8y#Sm8 zu>2qewzq-5_IVG^{UW2~DRjl2xU#*zJs@?mIji!&q_>TIHPMFbcX_kpA}ClVG6td5VTzd% z4}X)!iGKU8kCpG;ztyJt_+M{ zpY1i4b=OafV`^j8stLZwZvweJu}XRYscgfnZt%zSn*5~wT6;z~dEB!*IQrK-!f!@` zn{y8jE4rBKqTRPH?Cu_OOx!*+oPv!=mQH)>zB4x4$XLIw&`TF`)ioZdJ20fu*PFa*7N&`$x$Th(Nf7MnS0&|N7>H(G@dEO+2rDR?`1|_IVoL` z=jU~*uV8mUNL@++on0ld3Db0xHL6N^r7>n%cC*f2>{H|KpPAI7z`$jN-@RyyM5p}U zC!ThdjX`92tZX=YxI?^wyNQtaIMHJn=dkzs^_AV*Z?xpIa8N6alfn|#;%;qUK; z$eGjfp?93ZSXk@5eKL69LND#)I#rJ(R^E;@zPPgJ4pHv5x+!`=ptSCI^!t0pSqnKW zdJJi-+QkoQi4X4jn#u7uw=k7!M_))UxcS*XJ(xSbxggVqKN8G>{sbID)p&)UKCj}d zd;|aPgoDI8f@fyNl?!LQW#7vFxHjWgS=^#1S$Oi;yRWVEg=*m|tf%fer_cVd*PI;| z`Shf3@RW9VQO?6R3r9%YS3gwzkjB1eCFmxqyXmvM>U=T1aJ~14>qTXk79GpczE7FQ z1~f`E1na|3nk(H578R-legLZo((^ChFY2BD#r0D%ATz4tT%llnRc|5O(Mdlc*sta+ zZoRN8Zr zAynLO`(YxRba`#O`CE8{GrI;w=EC`{XSoQ`jkA_FC@s}VipqRJ%3`b6Zy?@zdA-m| zWEax9l#=Lj`qJWa24++JBq!h-KgX&pZ}aHu(4Q?NS6%3jM{p$_<>KQzI(6QG9W`9~G78C2$tR%c6^%tG^_xdp?|+tM zEtLqrHe*o8f9YBwjFm47Iq}Z?u9bAdw{+FNzqal}E?j@1cf~qqJ#GtgNyV<{b@OSL z(?LRCclN$J`(6IYqxt&P^?~SQ^yfUAi{G?!a<8oa>Y8~4DSX47#WEE82*_uVaefRc zi^_66AV^pOnIl8tMkXD z??S#XSK-J}r75Atn0mx*kMcs^ysquUGq(_deV^&MZ&fN)_Y^B62av zfS{PutV7`yHd;FTr?s`aaxOx5wt4a^-{vG$9)I#-H$UOQX*s~CkP?(sH`z5yy|{M= z9sFHJ2T_+3W&A=s<5CyF5He&bdh*S1=(nmf<4@W3gd>fm!=vp_+~z^*4sF>+d9lR6FNN5*bpG&V_hG=d$+*iKiL+Y zuvv}Z`e#0#j4IlaAR-ekvRC=L=+?~9lOaFV6$1Nt`rsqa(*)SF65AIQga@AO`RqOF zYK={9SXjwA_J*xc@5wtx*Pq&3d4bpdtN3H}X;jhbk9hQ}>>;41=XT!fBaa8U&kWa_ zr9bE=)ZP8LtZ_2hL5^2CtN(|?j3}$}yRE+$zk8Ol&R^#6(R=0eH2SpeK60N~XX`pzYEv>G2OQY=;@j1K=d>PK zxlmK#bC;YBoxNsw2Dt0o*U-Z0&-rEf`|cE(*{V%thaJ=|GXHJy%S}vWpH}Sk`Q$9& zp~m{x)t4;C^ko2|pOU#+MElO0x{Ad%{xFOgO39Ozx4xnB^oVAUZm^LjqUWbfu&>#G zA0c}D$ZTL&r-`2Nc1g=XJFj#9#A6!_%gnGj{>0_4uF}={*1%EQ0-Rt+1Ev=ul|6Y!?a@;@FjcVR!8TkD9DBpLPPiH>d z8dD3;?Y;16hF6lmv>bEptJK_6A=}db{G25BtnN!a?i7i#%{-R#a(3=kKJBeY&$*Lk zDI4ch>`oQdZi+gc7Q;+(A3g1~XMgax0G--Q^OEb5!{<>VcgGKG{scd*6Qy_59vqp5 z__N9C(H&wuuJN|W-23Y27tNaPk+Eq1 zxRYoczAh4U;qfu4X~A|$;?oDmr#AdzSo&h51_f$4x6<2SbBT3_$H>xrBVIeYY<<#*G7OtM{vb2dw>)3l~1z2uzD zUcz>ec_c4u=vYg;pLqiH9fsFt8vX4hI_ZNn>M?7eT8?KI>we8cYC6H(mA`=f;paNd z2^O}9mKSjqgwRRe#g)}5sZwSbi`OTg{2)8M5Ed4J&(4OgeUU%Te?B5$FRLIa@8BRK zcHiNRoS3wwz75#Vhlumdrto45%9uoFAd8{wyZbiZiNy(GPPqB!dKyMR~A0&$#fxf3-j~{QH z(?W*7Pn-R+`SIxR)9%+(Ng+Z!Ufa%4 z;LpOm83nr~jzMu+(oh&+dz{(0hjXU<3*kF?h>@f-|B+H;xlP1qu zp_g6B!F+KMuwAN8Gx6}gI3ebexm;O2kFUjA$h0?`0Qj0I#m9nEL7wM$v)_pLn{iXi)&^EgwQTV}w{(-W`O$Lf1?-hQhk?xhb6=W7W2*V9BA>C%X30 z-MoFFt1@R9gy}yy>}V?`Dx-@q_B{+51`tnK(@3&!JA0z8D>2Pgh!A2o1|o4Fv_-@R zuyCx@176CkEG!HO7w#iXIAV8Jih6dCcnX8bsjw;sbV*4x#Aj7cgp@n%snXnnCc<=| zNAYFs&F|>P$Gg?HKbOHvSk&GpjE@VkD^p(H(aug!7E5>7!=`Dux&HedPNPq-lS~SD zGII9@roWmZrF^iv4Gfr^4-p^ReUrYLT+R<@W7|zAT_Q&(Um6)14Xq9dHY+ct!iUO3 zIm9hewfz+YQnIO$7F#u{TqAs4WA zs)||N8j}j6py-v-p=*FNRjp4Vrz08(RCFc%gy^EXM5Rw>kQRAam071E1LNv} zP_@HbNZIDZCiU#@dU9-Mqa0uzH>gyazBaa&;wnLNuO7AE7eLPm_xsTN8n-MCSkn~U zpQlT^r1DJ+VcSXB$)C?H5#R_aFMBTdZ~wdzO)O|3IN4nI@j*trtBpDy$G~y4( zt1dMoZYX(nZgWXNy2Al<34&e60bFCVMgwLbMFS&~0fEKZEoPHe%G2WxRmGZmm>;0H93IT|tgfL>jV?2fHKzG#FAfwnMzW zI)E>*(%R9`FgJ8;NMWb;cE$csM%bFFtlO(*V&L9jks8{sW;_nMMI?=|1xu8(=X8W6 zHdE?UfTL{92^t9n`ET0xXd`iK^WXLZ5T-Nd_jKrJ!$PFQAsH1~YZKDDzvf`1)_ z$7RW>rC5(C#j0$DIAY;BAGu>)59f*o<$ z38qNWT)2sqZaaKrv5x3MYa0>DcVA9QfdYr{4}qoXp=(AjAA~*FSsFrfaF=GR){Odo z>2J0UT8++x{Ijkgh^s)R#7y!DFud-VtcXN4)(D_GtpzQ7$@H7)h0gI4<~~4lbWB$T zxtX*0hHrI#%ef>DZi4a&(4Ic28=`7O_ts}e~6#t_{tt>ii8GlC$z zxVWo`#1y`YbR;E3fNlZ zsXJK1RO!M7s|ULj_JQ5o5EBFjLW)jtpkykb%BYqi(vBi~swwjouEC_vkCg7_wPuAH zE5A2<%hV9QAci%Jo^DPKxzCvm(d28M-E;U{WdK0DC+S{>Oh$w?u~(HapE!FS-)tQs z1_nkDmGWBeIeT4FRL+7z->zdcMA6^cmNjfp1kgAWCh&m1R{cbF%xgj!GKE`&wB>2U zkC7KMsA@b}V~Bl&wWdY9!pb|9zMs(kdByDJw-(Jt;OPIZ+AsD3-3Pb@A5(`6Ls zbATOk>7IL&7yki0FlcWiWs~YE-fbyo*)-q|lFf|_&jyb&WNkipf^G(O6XxjSOx#aY%^|i_qEE@Lxkc zi_Zn&ZD56%yfjufAH%kp^O2&Xp`n4Zvm~roNZl6II9#p5dbAbpzP4AiwG9 z1}VlzWpC0s=f+J!>qkoqryJ|L!C+wl7mKH>JN(c$^ zvi*)uN!UL?b)UM@s_TZNeU993Sp2NANgN}Wt*4fD(k+tr{l`?z-5RXo?Lm%4_SQ{E z+7AaS+)xtRlBsuZHmZY9dZ*#puSp9anrS+GG*XrGRJC8c{e*{Q^6N4q3CpX4vnXgQm-RB!ZLEFVIV5>p6T8OCD$V8v8~_c@|s=I6Nx zCT!=e{^2*v*kCVe#7jsEPpG=_m7ZgYY-?2p*$jdfNa@B~G->y~LSkr0njJCH5SyOW z*Vk9+T;(%bUB+~RQZ|}-{adnSrrzf{j~Bk7Ot?p+!>A(;^_c-^87>u%$HrDgz%!5L z0?)&}PUlL7g-|q-Y2yvFEePpjEQx{C!6rvK&N62{<@6n>ecZ&;`AXB?G%6dDD_vp~ z;Cm_{y{ZMT)N1nu!ly`lx`!G>2-F~Ew>zRRz~r@f>nsc2)78UoCo10#fpu+ELQQ3p zO(UMF9@R}Tcdx_xMFCt?Jt7VU^Q$kTp~jZfrg2fQ`@+Gi6%#Yo-$$!B=+Hlf5u)f1&H;z`UFj!#5nDEH3lq=ZNj>PQ^rWhJAC6PB%y_$^83XFgS8(Nu)B?dK=XZYra9)X}Ybe zMo_zaN4vWLx>aml^A@Habv?ndX3B?)3|+)W^UB@aB1ya;h?j^_cIzhU20{*!O>#a* zvP}|kO}np8fLc`b;yv0>9XYPRz{n`+2@n=!jI%q#A>J7ptDH3(BY$5|P%upNOvLGx2=}8K)OG`g%uYUyA08unN_*P z@z#up28UZqswvjL6ySj>3YH^OJl?JJl0~u>uC2%rDa0|+GV$xvuJPDR`^T`y3 zmt8rzO;=tC*uy!G01owH%>%09xNwv4Z=BY_w>kIs61Nvd1wny|&#&i;uc%m3TjDS_ z7MHypR8A&JW}9b|t#_7-jROHKElqu+t03rAX$JyNT59wh931#UR?;#9w{N28ojm-&iH6qq=Q@Xf_@X6Mzs@C}=L z8PHucK$;E>C`~(6`;)#sq(pXLGH42m!)-1e-3EFOO72iZ@u{KxRaVfvm)VM9Ad1SM zz{;#}zj2_7pkSU>G$b!?P|j^>hqQ&%k934G(m0#EEHP4L*2LYV;U@PJ&HHPTx1r7& zi$BSRg9nvan?XC0$e*_59d|;N9lp%h`J0N7vUau@Hi#?;;bW`>K~)?2FP5!3%D%VDzt}Yj+>FEHDV8&{|ly1i}xfjJ@ zWF$xAnpQB`ni6;fgl^M?do<&qwRzSw+0f_bRcvB?&8jSMYKIg(WbRa&p0Tvj2ZWCx$OM|V%_vil0*OZ55Usv@ zL{kz7aODjI=hjTgQK_I6bton8z@G6*!_-gjRnty48)VFqUCi%r%P?D}LnS71hh|XE zuEVK26GdyCte=||Hh^>=2hiVskPpRx4*>vqzVt_1f*~x%qTau>VSALDOTp3NGjM-X zi?>6it}KrA<7D^n#$|nwEr3bt+sW&DRvhB#`-;0+|DfB8Bq`hN+Cz2qagxtiO5D0K z7UNoVeszn1Il8%#Si~i@mcv*(DARFvcE**{KQ;!S?eNMlE1+43KZYma(G%eFd|UyH zK2BO1Dor>_9aS)y3=GaDtKB#h=*z)VY2Z;Q{wAFqC$LyO6Uo~T8?gPQ|ig2U1T>NBxQO#J1D40py3vopm!RKph(GD7R~oH!fNql(4~Bqtgo zAbCXXtyzO^T&tRj6q1BR%K(Zsj>)q^hiSV~4eSp&kJk34OcuzPET3 z`m8dI%(+!Cm03N!(uU_odVYLe2GELpZyq${q9oj-IBW#O}fOH%_{^$Aqq*=(IM zY`&GgmfW$Y0z2fzoWC);CCOra^x`v8LF4KQGoA=m%jp%4!5x~;2{qP9=;{kXxqy+*$+88FF!H|Qh5bulYrngjnU z@z&;FHaEFOii*jul@NN(WELbH|`&h|1u-_?>TPA zeLhzbSV@^x?ugu60TatWou$DN*L5%e8{toyyF9n%0|-ArDe{DUc=ljf_L(MFsb0&< z^@BJ3uR#SeDho@E_6gQpR)BVHsKInLidzl+@bGF#``>6-A`y3;`#;YMKQ_7H`}az> zm=QVchhw}$^we%7Y=R&A!;*$h%yQ@Eg7v@aeh35y3U|Gn4yVn;#S`EZSf)jKz)>r$ z^Zc&M7JA-qdi3e=d6w^9I{Tm!`Ts$L*XW#J9XM9=i;Y!)^$yqyV%c@fkaoy_#Ik!G zJ^%-sXzx6~#e*-o*LL_A%N2CdRLaGZtoA@z^-Y#{73AZUS%7Y>>yYJD!SC=l+_>#_A|G~>rQ#G z*S~J;XG8Ch8@6;nqtIXFO4uIv2ThPTGoZFVUl$)OH(C2<*<9K)oBv?9L(7s1VAG@^ zTI5OEhMs!fqmL)1M(o_NyTS^L0W0VdMM}RUxtVTt@eHT2V@I1fW(pxMyJ{vUbt5u! zzaY2|6^h{rSdax*s;K~6nBDWmCI~AR0&_c-R#8y_#%vFkZ?Mt@#oG_TO`%Ig1^V@H z(Ry;Vxu&L8|F1V~0vZ5l=I`CRr*CGKzPGb1q=9R0K9e2Hq`geNe=~w7#0zYwWkk>^ z+WUJu$dUXE@oI~l&*vc9P9N+KOsq7Jj#{x=;0TNK&f95np4lJQ0blyQM1e!(^AYH> z$B9|xfAY5>5gFN3mUWdohDTZgfSwqom2Xu;X0Bg4Ow8S@ z(x>GiMC{pM>IA%LZ%HG5Z+@OOq6?%8q$&Ej1WouFfNm~1Cq{8eNk;YzhiK>bM<0E9 z9Iwfbw}#$|C#{17i-hyMiuPc~kV`cr@VvtA^veucv7;x>b`CiA zSJt9`_3jc%z~ z6^A)#pI!NzqJzUoD0RY>FL(wmWB@7^zu@f`@s-XKbwm^x=N!5qy9;iLR1F{k3)8J1 z`@t1TPb)ZZUl}gv+WpI|FgN`XVu!G@rjrz0DJxO@a^j`tHOx`R`tDQ(A(M$wiK7uw zU5Q0koe6cOVUW%2#ReBlI;dP-Z1$A5U5I$=RLknsWEf9_Hkbv)9j*(h7Enw-&1)bR zKG5(cMyjijvA@76$;jB$jbqbf)mq{lPCGy~W#e+bLmn}jBiN($cb7%*m=tuA zb~8;5cq2RY9TK*YVA=OQY(fD22QB3@60JM8(|X&W#$$B_sC6J@GG=*wFcT8?*xe%9 z&X?c;xNH4K2@NtP7G3O~LHba#=eRmJHa8`~j$_NYleg2Q?X&klX}+3n)n(rHH~-DY zAO-sFM1@X@zeap)f$`iXH$NVj_S& z!NXLC32elS*tQM&KoLTlJqDfwZa_zA9g!fk7MDQ|QN=eXOM@a?cYm`^VX<%(IYD$4 zgV4^DEoJzZW)KUH*1#uW!cq`$LiR1wOZy`Mq#ek>d-MF<+`Yb|hwmG6t8-if7(3WZ z8M(vUgXj#a_$?>X!r57-^dAedgaGV=MFv9dW7W9fayx_Ouzh&LW|wncE}FAxEh}JB z0}6%WHfR4vV=_^Yey}Bo&6W|#c^=!1#H*x)QYMuU>^!L^R-rO^d3m7Hbk5g>Wp8e7 zwhzhq3=~H3$lT*q@_$Lv$=ckQL!*}0>J18XvV7MDglGT8>NY!Nqcs7M(nSB&(fMvA zG8Sy}_Mr?44tcBR`y;R$9#%c>gJ~Zc%L%3`@Af`YUhhxmsl(?NnHTtbG*a`%eLJ>L)7X8NOLIz?%O-(BuyV z@>e#bRgDpnL{V}1Fk!OVNS(wS<|xPlASnR%B6$5@YiepXZLT(``PhorF8#~&n)4rV z+wbO5@Yn2a+FeU0k=N*ERt$VFt!4@S$FCl+iKxbov@PAeG#wB}_#%$K7WSfjVRrkZ5bU_o8Nkt$QQ-m@#UZRb%t)nk3t?qe(U zcvVc*7Ok>fjI|`-J@ZEZ{avou>E&wkRM;Yz1>mtw z?H_Ch2?nTwsFvCAoNjqv1j>`L`jvQ{EJX*9BvD&s^^&%K{==pz$sLyU6Wng!+^Z)Q zL1dzcqpn;3{=2C4sSCV0uc1NtPz(fZFT}B{?%tT6pLZsdS$;mtRq-cmpx8(R0AFGH z%cfOwiVl)J608)yYva%_r0kHTB42B#EZ>#k4G3Yw=n(LZ`0T7)#rX4Jadg|38BZ+) zd+sYumeh2ZoOLrKXlkp^7Lysa(rt=*mgD=Da7)RvUrd5YYCJ?M^k3D#B9j`?4&DlP zP0e@;$ZKkzF`c&od_!77%;-Nz%^0}&E`+kAy`808Xg@-N(WDUQ1%fnQU{-DK?&Ui# zUz8Y^f+$s9pKEce+PFUAnX=SU?GxFa<1-cZ(Pxe|!)c;yl{0!#hlZ92b{dTu0onJF z75DZVj{}TuU$xN=wQTktrg=51W-Z-l)X>_%54ocRI88E+%M=WFR#+8mugcxkkaXU} zHYhH%Df{-LK}Rceh=S^jvb3Azn37XT^&a&)LspI2@%9Dob@O`wLn)!a7!3D>Fv3L0 z!2#^{HB?VjYT*FtI9yAdyz}&)BTlRBgkMS>1IUnuI_|MEZXDEZ)>fLLG!(0>h1G$T z8t5K{+wk(egti$b;L@qdHeckVvn8zth*H{6;H5>6mBN5u;J@lqV!~y5(h-qRiONN*aflnPIb| z=8nuVU*LLcd$O3ASSi$_HS84g#|z3z2I;UgBa5nJ@O{s85E`SK-KR#X$_A ztnm-d1KbI)FfFwX~V;o$wHW0&j{+=hRh9i8ic83~d6lC+qe@Sq%pKLh3IR0ba7E`&4=ovum1Da6!#8UreM~Jjc)+i$J zfUitOv8u~FGW+0pi0+cOssVD+$&nFe^gK2rK03(v_1|kI4vas}ky$!ZMWGn5y>CDM z$@y@nmj=a3z9fn;`P5X-)iqdUNy85o%k^t?RJd|qR9VT9qN(@1*qeQL~k#fX#9tz7Ov+9>H)lmKF zyA&|vLp^SkTGso6Y`f`mz+4=ya_s^z7=x+>R3l{^Qf`pOE$5Nh`jJgYLw3YI0bagv z;vu@?wk0V3`kR4+mznYp$iVueAo297ky^bRuuh4}wt;FjO+!`XI0Jc@p8wh+NF7?J z@>db(d3~_G>I6muh>YR!|7rrfTbR z%h26Lxy^b5s!mFG=@ud-f;id1L}KSjIP2X-=TR*hqa;3L^M%IFt?*GdBu?_p%%4Ma zaeG$krAsq|*5p+{W0+2E?=y_W=>IJiIBZ+qNXpG6N}NdU=xd6RK_H4_(qk#Aezc*T z5d!dhXK^hQ*uu;PV2rsD*=biHkQRKIhUuyqrUq$*+3C4NMl9H!X4#!OnFPx99gU}Z zb5~}r%7pH1AHEltA*Tzji~%UHySlmt%&yp92UkznAm4uB*PF!(VtQK5LQouRp{ZLj zP2O4m1Up|QbDv(|gwH+{3aT$9gTXHWF9Lmejt5;BOh4RoXR)L|Ut23fcCY}}ohBvZ zw=BND7p{F>uDiITEd7v+LxP8 zKIej4tkoFfG*RcrIToR-v+prpyFu`8>@urz5u+~d9Ylg$f~(H(D^i#U04SMIuunV^ zAk8ls;x<}S+N2d!KZM)t>Gu@nfU8}TDR*?VnNX}Uco6J?b1isT^4iTZPtf$oNveai z`>3=!pZ6bvYK&NhoY~5G0tf-~mEhrghlI0qn~=F&WqtLP%SrI`t*G^Tt-jBiZhwBojc;4p{G z20=7{C(9yIV3`@;=qUk;;BdI9=j`)&sO#`>RK|Uo+s^?;DPIRp&O&V8DoBVNo0$p{ z7h|890-hV{OPTw`t_J5)RU{mzzv*#3AkH#&k_(W7e_ivvb2h=U;#^nOD+|=Em7j$M zxE*eF>_M;>?pl+A?@QHeNvSQOM5i^A;=7bWK!cJ^1Zao_!P9kT*}toupqgIuIT}}3 zp0E|mw&%38Jzwvw3r0q>8OR0QsUZ0*e~PS#9QwZp2~v!fy2xBx(6QC>}0lJw@eOg?z!p92)rOc zCA~jpLb%__5Z~fHS{qh98W?S{PKemb>G#wGHOnTwp8{w^_zx1eL3=Bj0tm*bEBCV zY{j?BtO?=?7%euZOhETD{dy-x4hl>PjGdkR$BSL_#jayMQpV+#JSW7O8&{Z&ZIhaO ztBDE#6l^*&2sLtLsJ>N=XhHUrQ1k9=7St0w=`E36nY^hYw;Z1nwo$_a1%J9@->5SZ z7Fm^|Bpx<|5?W0=oNAQXWSl|waspLd2m8BgK4Y+MWG~AA?8GzXR?PcJKTMEep!=Yn zUnVAQG1D%GL4t!kh6F7YYr5x(u4;)}hB=3Y&SZmb%OmDs$DM|ApgN7=>g=bo2viI= wOH-R>aj^yZ_+iuRZZcO&FB_{7XYB!-@-sf$RV~Z-!|NK)be@(yw)yb?0NZISr~m)} delta 13791 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 diff --git a/docs/_images/fittrackee_screenshot-06.png b/docs/_images/fittrackee_screenshot-06.png index 0c1ad13303ff010f605bc18b9c20ccc3b42b8687..3db29c059957f73c13e2394cddb513da11fa48eb 100644 GIT binary patch delta 22826 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 delta 22903 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 diff --git a/docs/_images/fittrackee_screenshot-07.png b/docs/_images/fittrackee_screenshot-07.png index e0b97bf2f5e6104aae219dcb832c79da12d77a7c..ec53d138ae9dc8a3414cfba8c84a443221bbfc27 100644 GIT binary patch delta 22666 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

2su?`5<2~lY!Z}nJ1ON;hb z_K#*5 zwi4=1uc__TK;|Y}@l;pcnOXDS>g;U&5mt~Ep38|@s(T!a0ZiacABPm(1ikZOBgSq(jLOk$kj7}6;*S($c zMyT{@$5dDjsntKyTDrjTvJ|t7YU+IV@Uh>ny@;3Cs9g4(B%<7SqN2GtW4n|~o^oW} zumJ*`!V`&owo49G7=g_g^H6zv=*M9v_Yt~p@)O#!#zj(yjt6#g3hxJN0I(SanEbx} zK*(xomiPKECXP$tDk91cCGHQ^S2)5lbG~?a?U@jQTihK%!nB&iW>BsfGI@VLsYPQ1QS#4XbuI9K_}5>0%z$7~XYP#K|j#YnQ>%uS<# zoTFc3Bcq4J4M>+ibv;D;)5}~Cky{8FG|Zo`&*;jf+Dcc!te&39NABcoqslbCq<*c(gQB!>sV9?V9qJKRPsiG$0u91{EA z;r;V2{GafU;I%j8Wa^B`e-Ngy-zEM9Tk{N=hr|S`2F#E}CtB{$pa8~(W8<7qCmOZq zaBc+b_WjdcMz=-&N+HRIEzMEPv!wK%xuoKU07g{5c-F)k{&0Ty_ph@Cjr@b-pZ|fY z8(9AF|Mt4b+fgX+_4U73TH^kH1Bibfl!E9~{5#-V6TQD(-G7I-VR`!R=uV@_j{m=R a?HV=F^t6Jd)uhgjopdw}HOkZ-U;H1v0}yur delta 22642 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 a-ZeQ!?JBgl!WHhR*7-uJ$@ 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 d017y}V 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 diff --git a/docs/_sources/changelog.md.txt b/docs/_sources/changelog.md.txt index c40b8a7c..9d29974a 100644 --- a/docs/_sources/changelog.md.txt +++ b/docs/_sources/changelog.md.txt @@ -1,5 +1,25 @@ # Change log +## Version 0.7.4 (2022/11/05) + +### Bugs Fixed + +* [#260](https://github.com/SamR1/FitTrackee/issues/260) - Files size is not checked in zip archive +* [#261](https://github.com/SamR1/FitTrackee/issues/261) - The API should return an error when the number of files in an archive exceeds the limit + +Note: archive import still needs some improvements (see [#89](https://github.com/SamR1/FitTrackee/issues/89)) + +### Translations + +* [b1536fc](https://github.com/SamR1/FitTrackee/pull/262/commits/b1536fc637649c4c32a88af6d96c131f05bc1742) - fix french translations in administration + +### Documentation + +* [#257](https://github.com/SamR1/FitTrackee/issues/257) - Add client_max_body_size note to example nginx config + +Thanks to @jat255 + + ## Version 0.7.3 (2022/11/01) ### Features and enhancements diff --git a/docs/_sources/features.rst.txt b/docs/_sources/features.rst.txt index 7f17a1f1..01f757a7 100644 --- a/docs/_sources/features.rst.txt +++ b/docs/_sources/features.rst.txt @@ -105,9 +105,9 @@ Administration The following parameters can be set: - active users limit. If 0, registration is enabled (no limit defined) - - maximum size of uploaded files + - maximum size of gpx file (individually uploaded or in a zip archive) (*changed in 0.7.4*) - maximum size of zip archive - - maximum number of files in the zip archive. If an archive contains more files, only the configured number of files is processed, without raising errors. + - maximum number of files in the zip archive (*changed in 0.7.4*) - administrator email for contact (*new in 0.6.0*) .. warning:: diff --git a/docs/_sources/installation.rst.txt b/docs/_sources/installation.rst.txt index 93dd4c9a..4f59215e 100644 --- a/docs/_sources/installation.rst.txt +++ b/docs/_sources/installation.rst.txt @@ -480,13 +480,13 @@ Production environment .. warning:: | Note that FitTrackee is under heavy development, some features may be unstable. -- Download the last release (for now, it is the release v0.7.3): +- Download the last release (for now, it is the release v0.7.4): .. code:: bash - $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.3.tar.gz - $ tar -xzf v0.7.3.tar.gz - $ mv FitTrackee-0.7.3 FitTrackee + $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.4.tar.gz + $ tar -xzf v0.7.4.tar.gz + $ mv FitTrackee-0.7.4 FitTrackee $ cd FitTrackee - Create **.env** from example and update it @@ -606,13 +606,13 @@ Prod environment - Change to the directory where FitTrackee directory is located -- Download the last release (for now, it is the release v0.7.3) and overwrite existing files: +- Download the last release (for now, it is the release v0.7.4) and overwrite existing files: .. code:: bash - $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.3.tar.gz - $ tar -xzf v0.7.3.tar.gz - $ cp -R FitTrackee-0.7.3/* FitTrackee/ + $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.4.tar.gz + $ tar -xzf v0.7.4.tar.gz + $ cp -R FitTrackee-0.7.4/* FitTrackee/ $ cd FitTrackee - Update **.env** if needed (see `Environment variables `__). @@ -733,6 +733,14 @@ Examples (to update depending on your application configuration and given distri ssl_certificate fullchain.pem; ssl_certificate_key privkey.pem; + ## this parameter controls how large of a file can be + ## uploaded, and defaults to 1MB. If you change the FitTrackee + ## settings to allow larger uploads, you'll need to change this + ## setting by uncommenting the line below and setting the size limit + ## you want. Set to "0" to prevent nginx from checking the + ## request body size at all + # client_max_body_size 1m; + location / { proxy_pass http://127.0.0.1:5000; proxy_redirect default; diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js index 1239c673..d7484cb9 100644 --- a/docs/_static/documentation_options.js +++ b/docs/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.7.3', + VERSION: '0.7.4', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/api/auth.html b/docs/api/auth.html index b79ee8c0..a4bcbf40 100644 --- a/docs/api/auth.html +++ b/docs/api/auth.html @@ -5,7 +5,7 @@ - Authentication — FitTrackee 0.7.3 + <title>Authentication — FitTrackee 0.7.4 documentation @@ -42,7 +42,7 @@ FitTrackee - 0.7.3 + 0.7.4 diff --git a/docs/api/configuration.html b/docs/api/configuration.html index ffa4748a..388a09f2 100644 --- a/docs/api/configuration.html +++ b/docs/api/configuration.html @@ -5,7 +5,7 @@ - Configuration — FitTrackee 0.7.3 + <title>Configuration — FitTrackee 0.7.4 documentation @@ -42,7 +42,7 @@ FitTrackee - 0.7.3 + 0.7.4 @@ -154,7 +154,7 @@ "max_users": 0, "max_zip_file_size": 10485760, "map_attribution": "&copy; <a href=http://www.openstreetmap.org/copyright>OpenStreetMap</a> contributors" - "version": "0.7.3" + "version": "0.7.4" }, "status": "success" } @@ -195,7 +195,7 @@ "max_users": 10, "max_zip_file_size": 10485760, "map_attribution": "&copy; <a href=http://www.openstreetmap.org/copyright>OpenStreetMap</a> contributors" - "version": "0.7.3" + "version": "0.7.4" }, "status": "success" } diff --git a/docs/api/index.html b/docs/api/index.html index b7660fb7..0f8d0b0c 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -5,7 +5,7 @@ - API documentation — FitTrackee 0.7.3 + <title>API documentation — FitTrackee 0.7.4 documentation @@ -42,7 +42,7 @@ FitTrackee - 0.7.3 + 0.7.4 diff --git a/docs/api/oauth2.html b/docs/api/oauth2.html index 2a09eee8..f1b45bed 100644 --- a/docs/api/oauth2.html +++ b/docs/api/oauth2.html @@ -5,7 +5,7 @@ - OAuth2 — FitTrackee 0.7.3 + <title>OAuth2 — FitTrackee 0.7.4 documentation @@ -42,7 +42,7 @@ FitTrackee - 0.7.3 + 0.7.4 diff --git a/docs/api/records.html b/docs/api/records.html index 1b7edc00..caddcd78 100644 --- a/docs/api/records.html +++ b/docs/api/records.html @@ -5,7 +5,7 @@ - Records — FitTrackee 0.7.3 + <title>Records — FitTrackee 0.7.4 documentation @@ -42,7 +42,7 @@ FitTrackee - 0.7.3 + 0.7.4 diff --git a/docs/api/sports.html b/docs/api/sports.html index b44793dd..51eb5425 100644 --- a/docs/api/sports.html +++ b/docs/api/sports.html @@ -5,7 +5,7 @@ - Sports — FitTrackee 0.7.3 + <title>Sports — FitTrackee 0.7.4 documentation @@ -42,7 +42,7 @@ FitTrackee - 0.7.3 + 0.7.4 diff --git a/docs/api/stats.html b/docs/api/stats.html index 51ceebe3..87cfadbe 100644 --- a/docs/api/stats.html +++ b/docs/api/stats.html @@ -5,7 +5,7 @@ - Statistics — FitTrackee 0.7.3 + <title>Statistics — FitTrackee 0.7.4 documentation @@ -42,7 +42,7 @@ FitTrackee - 0.7.3 + 0.7.4 diff --git a/docs/api/users.html b/docs/api/users.html index fcb34f3e..714fc3f6 100644 --- a/docs/api/users.html +++ b/docs/api/users.html @@ -5,7 +5,7 @@ - Users — FitTrackee 0.7.3 + <title>Users — FitTrackee 0.7.4 documentation @@ -42,7 +42,7 @@ FitTrackee - 0.7.3 + 0.7.4 diff --git a/docs/api/workouts.html b/docs/api/workouts.html index 44bdc979..2964da96 100644 --- a/docs/api/workouts.html +++ b/docs/api/workouts.html @@ -5,7 +5,7 @@ - Workouts — FitTrackee 0.7.3 + <title>Workouts — FitTrackee 0.7.4 documentation @@ -42,7 +42,7 @@ FitTrackee - 0.7.3 + 0.7.4 diff --git a/docs/apps.html b/docs/apps.html index 87aa5b99..d68d2f77 100644 --- a/docs/apps.html +++ b/docs/apps.html @@ -5,7 +5,7 @@ - Third-party applications — FitTrackee 0.7.3 + <title>Third-party applications — FitTrackee 0.7.4 documentation @@ -42,7 +42,7 @@ FitTrackee - 0.7.3 + 0.7.4 diff --git a/docs/changelog.html b/docs/changelog.html index 09a8ff7e..f8894971 100644 --- a/docs/changelog.html +++ b/docs/changelog.html @@ -5,7 +5,7 @@ - Change log — FitTrackee 0.7.3 + <title>Change log — FitTrackee 0.7.4 documentation @@ -41,7 +41,7 @@ FitTrackee - 0.7.3 + 0.7.4 @@ -81,30 +81,36 @@ role="menu" aria-labelledby="dLabelLocalToc">

  • Change log
      -
    • Version 0.7.3 (2022/11/01)
        -
      • Features and enhancements
      • +
      • Version 0.7.4 (2022/11/05) +
      • +
      • Version 0.7.3 (2022/11/01)
      • Version 0.7.2 (2022/09/21) -
      • -
      • Version 0.7.1 (2022/09/21)
      • +
      • Version 0.7.1 (2022/09/21) +
      • Version 0.7.0 (2022/09/19)
      • Version 0.6.12 (2022/09/14)
        • Issues Closed
        • Pull Requests
            @@ -114,298 +120,298 @@
        • Version 0.6.11 (2022/07/27)
            -
          • Issues Closed
              -
            • Bugs Fixed
            • +
            • Issues Closed
            • -
            • Pull Requests
                +
              • Pull Requests
              • Version 0.6.10 (2022/07/13)
              • -
              • Issues Closed
                  -
                • Bugs Fixed
                • +
                • Issues Closed
                • -
                • Pull Requests
                • Version 0.6.9 (2022/07/03)
                    -
                  • Issues Closed
                  • Version 0.6.8 (2022/06/22)
                      -
                    • Issues Closed
                    • Version 0.6.7 (2022/06/11)
                        -
                      • Issues Closed
                      • Version 0.6.6 (2022/05/29)
                      • Version 0.6.5 (2022/04/24)
                          -
                        • Issues Closed
                        • Version 0.6.4 (2022/04/23) -
                        • -
                        • Version 0.6.3 (2022/04/09)
                            -
                          • Pull Requests
                          • -
                          • Version 0.6.2 (2022/04/03)
                              -
                            • Issues Closed
                                +
                              • Version 0.6.3 (2022/04/09)
                              • -
                              • Version 0.6.1 (2022/03/27)
                                  +
                                • Version 0.6.2 (2022/04/03)
                                • -
                                • Version 0.6.0 (2022/03/27)
                                    +
                                  • Version 0.6.1 (2022/03/27)
                                    • Issues Closed
                                    • -
                                    • Pull Requests
                                        +
                                      +
                                    • +
                                    • Version 0.6.0 (2022/03/27)
                                    • Version 0.5.7 (2022/02/13)
                                        -
                                      • Issues Closed
                                          -
                                        • Misc
                                        • +
                                        • Issues Closed
                                        • -
                                        • Pull Requests
                                        • Version 0.5.6 (2022/02/05)
                                            -
                                          • Issues Closed
                                          • Version 0.5.5 (2022/01/19) -
                                          • -
                                          • Version 0.5.4 (2022/01/01)
                                          • -
                                          • Version 0.5.3 (2022/01/01)
                                              +
                                            • Version 0.5.4 (2022/01/01)
                                            • -
                                            • Version 0.5.2 (2021/12/19)
                                                +
                                              • Version 0.5.3 (2022/01/01)
                                              • -
                                              • Version 0.5.1 (2021/11/30)
                                                  +
                                                • Version 0.5.2 (2021/12/19)
                                                • -
                                                • Version 0.5.0 (2021/11/14)
                                                    +
                                                  • Version 0.5.1 (2021/11/30) +
                                                  • +
                                                  • Version 0.5.0 (2021/11/14)
                                                  • Version 0.4.9 (2021/07/16) -
                                                  • -
                                                  • Version 0.4.8 (2021/07/03)
                                                      -
                                                    • Issues Closed
                                                    • -
                                                    • Version 0.4.7 (2021/04/07)
                                                        +
                                                      • Version 0.4.8 (2021/07/03) +
                                                      • +
                                                      • Version 0.4.7 (2021/04/07)
                                                      • Version 0.4.6 (2021/02/21) -
                                                      • -
                                                      • Version 0.4.5 (2021/02/17)
                                                      • -
                                                      • Version 0.4.4 (2021/01/31)
                                                          +
                                                        • Version 0.4.5 (2021/02/17) +
                                                        • +
                                                        • Version 0.4.4 (2021/01/31)
                                                        • Version 0.4.3 (2021/01/10)
                                                            -
                                                          • Issues Closed
                                                          • Version 0.4.2 (2021/01/03)
                                                          • Version 0.4.1 (2020/12/31) -
                                                          • -
                                                          • Version 0.4.0 - FitTrackee on PyPI (2020/09/19)
                                                          • -
                                                          • Version 0.3.0 - Administration (2020/07/15)
                                                              +
                                                            • Version 0.4.0 - FitTrackee on PyPI (2020/09/19)
                                                            • +
                                                            • Version 0.3.0 - Administration (2020/07/15) +
                                                            • Version 0.2.5 - Fix and improvements (2020/01/31)
                                                            • Version 0.2.4 - Minor fix (2020/01/30)
                                                                -
                                                              • Issues Closed
                                                              • Version 0.2.3 - FitTrackee available in French (2019/12/29) -
                                                              • -
                                                              • Version 0.2.2 - Statistics fix (2019/09/23)
                                                                  -
                                                                • Issues Closed
                                                                • -
                                                                • Version 0.2.1 - Fix and improvements (2019/09/01)
                                                                    +
                                                                  • Version 0.2.2 - Statistics fix (2019/09/23) +
                                                                  • +
                                                                  • Version 0.2.1 - Fix and improvements (2019/09/01)
                                                                  • Version 0.2.0 - Statistics (2019/07/07)
                                                                      -
                                                                    • Issues Closed
                                                                    • Version 0.1.1 - Fix and improvements (2019/02/07)
                                                                        -
                                                                      • Issues Closed
                                                                      • Version 0.1.0 - First release 🎉 (2018-07-04)
                                                                          -
                                                                        • Issues Closed @@ -457,6 +463,30 @@

                                                                          Change log

                                                                          +
                                                                          +

                                                                          Version 0.7.4 (2022/11/05)

                                                                          +
                                                                          +

                                                                          Bugs Fixed

                                                                          +
                                                                            +
                                                                          • #260 - Files size is not checked in zip archive

                                                                          • +
                                                                          • #261 - The API should return an error when the number of files in an archive exceeds the limit

                                                                          • +
                                                                          +

                                                                          Note: archive import still needs some improvements (see #89)

                                                                          +
                                                                          +
                                                                          +

                                                                          Translations

                                                                          +
                                                                            +
                                                                          • b1536fc - fix french translations in administration

                                                                          • +
                                                                          +
                                                                          +
                                                                          +

                                                                          Documentation

                                                                          +
                                                                            +
                                                                          • #257 - Add client_max_body_size note to example nginx config

                                                                          • +
                                                                          +

                                                                          Thanks to @jat255

                                                                          +
                                                                          +

                                                                          Version 0.7.3 (2022/11/01)

                                                                          @@ -467,15 +497,15 @@

                                                                        Thanks to @jat255

                                                                        -
                                                                        -

                                                                        Bugs Fixed

                                                                        +
                                                                        +

                                                                        Bugs Fixed

                                                                        • #246 - Add support to PostgreSQL 15

                                                                        • #247 - Segments duration is displayed with microseconds

                                                                        -
                                                                        -

                                                                        Translations

                                                                        +
                                                                        +

                                                                        Translations

                                                                        • PR#252 - init Norwegian Bokmål translations files

                                                                        @@ -484,8 +514,8 @@

                                                                        Version 0.7.2 (2022/09/21)

                                                                        -
                                                                        -

                                                                        Translations

                                                                        +
                                                                        +

                                                                        Translations

                                                                        • PR#242 - Translations update from Weblate (German, thanks to @qwerty287)

                                                                        @@ -493,14 +523,14 @@

                                                                        Version 0.7.1 (2022/09/21)

                                                                        -
                                                                        -

                                                                        Bugs Fixed

                                                                        +
                                                                        +

                                                                        Bugs Fixed

                                                                        • PR#241 - Add missing password strength estimation package (german)

                                                                        -
                                                                        -

                                                                        Translations

                                                                        +
                                                                        +

                                                                        Translations

                                                                        • PR#239 - Translations update from Weblate (German, thanks to @qwerty287)

                                                                        • cb9d02f - Update OAuth 2.0 translations (English & French)

                                                                        • @@ -509,23 +539,23 @@

                                                                        Version 0.7.0 (2022/09/19)

                                                                        -
                                                                        -

                                                                        Features and enhancements

                                                                        +
                                                                        +

                                                                        Features and enhancements

                                                                        • #88 - OAuth 2.0 access token for api access

                                                                        • #231 - Invalidate token on logout

                                                                        • PR#236 - Add API rate limits

                                                                        -
                                                                        -

                                                                        Bugs Fixed

                                                                        +
                                                                        +

                                                                        Bugs Fixed

                                                                        • #232 - Speed chart can not be hidden

                                                                        • #237 - Can not edit a workout when notes value is null

                                                                        -
                                                                        -

                                                                        Translations

                                                                        +
                                                                        +

                                                                        Translations

                                                                        • PR#212 - Translations update from Hosted Weblate (thanks to J. Lavoie)

                                                                        @@ -536,8 +566,8 @@

                                                                        Version 0.6.12 (2022/09/14)

                                                                        Issues Closed

                                                                        -
                                                                        -

                                                                        Bugs Fixed

                                                                        +
                                                                        +

                                                                        Bugs Fixed

                                                                        • #230 - Database problem after upgrade to 0.6.11

                                                                        @@ -557,17 +587,17 @@

                                                                        Version 0.6.11 (2022/07/27)

                                                                        -
                                                                        -

                                                                        Issues Closed

                                                                        -
                                                                        -

                                                                        Bugs Fixed

                                                                        +
                                                                        +

                                                                        Issues Closed

                                                                        +
                                                                        +

                                                                        Bugs Fixed

                                                                        • #213 - Statistics - When using imperial measurements, ascent/descent should be in ft not mi

                                                                        -
                                                                        -

                                                                        Pull Requests

                                                                        +
                                                                        +

                                                                        Pull Requests

                                                                        Features

                                                                          @@ -582,19 +612,19 @@

                                                                          Version 0.6.10 (2022/07/13)

                                                                          -
                                                                          -

                                                                          Issues Closed

                                                                          -
                                                                          -

                                                                          Bugs Fixed

                                                                          +
                                                                          +

                                                                          Issues Closed

                                                                          +
                                                                          +

                                                                          Bugs Fixed

                                                                          • #210 - ERROR - could not download 6 tiles
                                                                            Note: for tile server requiring subdomains, see the new environment variable STATICMAP_SUBDOMAINS

                                                                          -
                                                                          -

                                                                          Pull Requests

                                                                          -
                                                                          -

                                                                          Bugs Fixed

                                                                          +
                                                                          +

                                                                          Pull Requests

                                                                          +
                                                                          +

                                                                          Bugs Fixed

                                                                          • #209 - Incorrect duration with track containing multiple segments

                                                                          @@ -606,23 +636,23 @@

                                                                          Version 0.6.9 (2022/07/03)

                                                                          FitTrackee is now available in German (thanks to @gorgobacka).
                                                                          And translations can be updated on Weblate.

                                                                          -
                                                                          -

                                                                          Issues Closed

                                                                          -
                                                                          -

                                                                          Features

                                                                          +
                                                                          +

                                                                          Issues Closed

                                                                          +
                                                                          +

                                                                          Features

                                                                          • #200 - Detect browser language to use matching translation if available

                                                                          -
                                                                          -

                                                                          Bugs Fixed

                                                                          +
                                                                          +

                                                                          Bugs Fixed

                                                                          • PR#208 - fix order on records cards

                                                                          • #201 - html lang attribute is not updated when changing language

                                                                          -
                                                                          -

                                                                          Translations

                                                                          +
                                                                          +

                                                                          Translations

                                                                          • PR#197 - Translations update from Weblate (French)

                                                                          • #196 - Use translation management tool

                                                                          • @@ -639,10 +669,10 @@

                                                                          Version 0.6.8 (2022/06/22)

                                                                          -
                                                                          -

                                                                          Issues Closed

                                                                          -
                                                                          -

                                                                          Bugs Fixed

                                                                          +
                                                                          +

                                                                          Issues Closed

                                                                          +
                                                                          +

                                                                          Bugs Fixed

                                                                          • #193 - Allow deleting a workout when files are missing

                                                                          • #192 - Returns 404 instead of 500 when map file not found

                                                                          • @@ -650,8 +680,8 @@
                                                                          -
                                                                          -

                                                                          Misc

                                                                          +
                                                                          +

                                                                          Misc

                                                                          • change gpx and map file naming (included in PR#195)
                                                                            Note: it does not affect previously imported files

                                                                          • cc4287e - Fix docker env file

                                                                          • @@ -661,10 +691,10 @@

                                                                          Version 0.6.7 (2022/06/11)

                                                                          -
                                                                          -

                                                                          Issues Closed

                                                                          -
                                                                          -

                                                                          Bugs Fixed

                                                                          +
                                                                          +

                                                                          Issues Closed

                                                                          +
                                                                          +

                                                                          Bugs Fixed

                                                                          • #156 - Process gpx file with offset

                                                                          @@ -674,8 +704,8 @@

                                                                          Version 0.6.6 (2022/05/29)

                                                                          -
                                                                          -

                                                                          Misc

                                                                          +
                                                                          +

                                                                          Misc

                                                                          No new features in this release, only dependencies update and code refacto before introducing new features.

                                                                          @@ -684,10 +714,10 @@

                                                                          It is now possible to start FitTrackee without a configured SMTP provider (see documentation). It reduces pre-requisites for single-user instances.

                                                                          To manage users, a new CLI is available.

                                                                          -
                                                                          -

                                                                          Issues Closed

                                                                          -
                                                                          -

                                                                          Features

                                                                          +
                                                                          +

                                                                          Issues Closed

                                                                          +
                                                                          +

                                                                          Features

                                                                          • #180 - allow using FitTrackee without SMTP server

                                                                          @@ -697,10 +727,10 @@ It reduces pre-requisites for single-user instances.

                                                                          Version 0.6.4 (2022/04/23)

                                                                          -
                                                                          -

                                                                          Issues Closed

                                                                          -
                                                                          -

                                                                          Bugs Fixed

                                                                          +
                                                                          +

                                                                          Issues Closed

                                                                          +
                                                                          +

                                                                          Bugs Fixed

                                                                          • #178 - cannot send email with TLS

                                                                          @@ -710,10 +740,10 @@ It reduces pre-requisites for single-user instances.

                                                                          Version 0.6.3 (2022/04/09)

                                                                          -
                                                                          -

                                                                          Pull Requests

                                                                          -
                                                                          -

                                                                          Bugs Fixed

                                                                          +
                                                                          +

                                                                          Pull Requests

                                                                          +
                                                                          +

                                                                          Bugs Fixed

                                                                          • #177 - Minor fixes

                                                                              @@ -727,10 +757,10 @@ It reduces pre-requisites for single-user instances.

                                                                          Version 0.6.2 (2022/04/03)

                                                                          -
                                                                          -

                                                                          Issues Closed

                                                                          -
                                                                          -

                                                                          Bugs Fixed

                                                                          +
                                                                          +

                                                                          Issues Closed

                                                                          +
                                                                          +

                                                                          Bugs Fixed

                                                                          • #175 - Distance card on dashboard is not refreshed

                                                                          • #173 - link to user profile in workout card is incorrect

                                                                          • @@ -741,10 +771,10 @@ It reduces pre-requisites for single-user instances.

                                                                          Version 0.6.1 (2022/03/27)

                                                                          -
                                                                          -

                                                                          Issues Closed

                                                                          -
                                                                          -

                                                                          Bugs Fixed

                                                                          +
                                                                          +

                                                                          Issues Closed

                                                                          +
                                                                          +

                                                                          Bugs Fixed

                                                                          • #171 - Stats chart is not updated correctly

                                                                          @@ -755,26 +785,26 @@ It reduces pre-requisites for single-user instances.

                                                                          Version 0.6.0 (2022/03/27)

                                                                          This version introduces some changes on user registration.
                                                                          From now on, a user needs to confirm his account after registration (an email with confirmation instructions is sent after registration).

                                                                          -
                                                                          -

                                                                          Issues Closed

                                                                          -
                                                                          -

                                                                          Features

                                                                          +
                                                                          +

                                                                          Issues Closed

                                                                          +
                                                                          +

                                                                          Features

                                                                          • #155 - Improve user registration

                                                                          • #106 - Allow user to update email

                                                                          -
                                                                          -

                                                                          Bugs Fixed

                                                                          +
                                                                          +

                                                                          Bugs Fixed

                                                                          • #169 - user picture is not refreshed after update

                                                                          -
                                                                          -

                                                                          Pull Requests

                                                                          -
                                                                          -

                                                                          Bugs Fixed

                                                                          +
                                                                          +

                                                                          Pull Requests

                                                                          +
                                                                          +

                                                                          Bugs Fixed

                                                                          • #161 - Minor translation issue on ‘Farthest’

                                                                          • #160 - Minor translation issue on APP_ERROR

                                                                          • @@ -789,17 +819,17 @@ It reduces pre-requisites for single-user instances.

                                                                            This release contains several fixes including security fixes.
                                                                            Thanks to @DanielSiersleben for the report.

                                                                            And from now on, admin account is not created on application initialization.
                                                                            A new command is added to set administration rights on the account created after registration (see documentation)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            Misc

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            Misc

                                                                            • #149 - improve database initialisation

                                                                            -
                                                                            -

                                                                            Pull Requests

                                                                            +
                                                                            +

                                                                            Pull Requests

                                                                            Security

                                                                              @@ -817,8 +847,8 @@ It reduces pre-requisites for single-user instances.

                                                                            -
                                                                            -

                                                                            Misc

                                                                            +
                                                                            +

                                                                            Misc

                                                                            • #152 - Fixes and improvements:

                                                                                @@ -834,17 +864,17 @@ It reduces pre-requisites for single-user instances.

                                                                            Version 0.5.6 (2022/02/05)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            Bugs Fixed

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            Bugs Fixed

                                                                            • #146 - incorrect label on workouts filters

                                                                            -
                                                                            -

                                                                            Pull Requests

                                                                            +
                                                                            +

                                                                            Pull Requests

                                                                            • #145 - fix on database models

                                                                            @@ -853,8 +883,8 @@ It reduces pre-requisites for single-user instances.

                                                                            Version 0.5.5 (2022/01/19)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            New Features

                                                                              @@ -864,8 +894,8 @@ It reduces pre-requisites for single-user instances.

                                                                            • #134 - Wind direction

                                                                            -
                                                                            -

                                                                            Bugs Fixed

                                                                            +
                                                                            +

                                                                            Bugs Fixed

                                                                            • 877fa0f - fix sport icon color (when changed) on calendar on small resolutions

                                                                            @@ -875,10 +905,10 @@ It reduces pre-requisites for single-user instances.

                                                                            Version 0.5.4 (2022/01/01)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            Bugs Fixed

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            Bugs Fixed

                                                                            • #131 - No workouts displayed on calendar

                                                                            @@ -888,10 +918,10 @@ It reduces pre-requisites for single-user instances.

                                                                            Version 0.5.3 (2022/01/01)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            Bugs Fixed

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            Bugs Fixed

                                                                            • #129 - Display only active sports when editing a workout

                                                                            • #127 - parse_email_url() can’t validate a legitimate EMAIL_URI such as “smtp://localhost:25”

                                                                            • @@ -902,10 +932,10 @@ It reduces pre-requisites for single-user instances.

                                                                            Version 0.5.2 (2021/12/19)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            New Features

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            New Features

                                                                            • #123 - Allow user to reset preferences for a sport

                                                                            • #121 - Add activity : snowshoes

                                                                            • @@ -916,10 +946,10 @@ It reduces pre-requisites for single-user instances.

                                                                            Version 0.5.1 (2021/11/30)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            New Features

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            New Features

                                                                            • #116 - Better UI for Speed and Elevation buttons in the graph of the Workout screen

                                                                            • #115 - Add option to download the GPX file of a Workout

                                                                            • @@ -931,10 +961,10 @@ It reduces pre-requisites for single-user instances.

                                                                            Version 0.5.0 (2021/11/14)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            New Features

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            New Features

                                                                            • #99 - Display workout with imperial units

                                                                            • #91 - Display elevation chart with min and max altitude of workout

                                                                            • @@ -942,21 +972,21 @@ It reduces pre-requisites for single-user instances.

                                                                            • #18 - Better UI

                                                                            -
                                                                            -

                                                                            Bugs Fixed

                                                                            +
                                                                            +

                                                                            Bugs Fixed

                                                                            • #95 - Some workouts seem to be missing on statistics chart

                                                                            -
                                                                            -

                                                                            Misc

                                                                            +
                                                                            +

                                                                            Misc

                                                                            • #104 - Switch to AGPLv3 license

                                                                            -
                                                                            -

                                                                            Pull Requests

                                                                            +
                                                                            +

                                                                            Pull Requests

                                                                            • #101 - Docker updates for full files

                                                                            • #100 - Add client application in docker for development

                                                                            • @@ -973,17 +1003,17 @@ It reduces pre-requisites for single-user instances.

                                                                            Version 0.4.9 (2021/07/16)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            New Features

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            New Features

                                                                            • #83 - allow using configured tile server to generate static maps
                                                                              Note: to keep using the default tile server, set environment variable DEFAULT_STATICMAP to True

                                                                            • #81 - display remaining characters in textarea

                                                                            -
                                                                            -

                                                                            Bugs Fixed

                                                                            +
                                                                            +

                                                                            Bugs Fixed

                                                                            • #82 - a user can not modify his birth day

                                                                            • #80 - can not save notes with control characters

                                                                            • @@ -994,10 +1024,10 @@ It reduces pre-requisites for single-user instances.

                                                                            Version 0.4.8 (2021/07/03)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            Bugs Fixed

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            Bugs Fixed

                                                                            • #79 - Fails to start after make rebuild

                                                                            @@ -1007,17 +1037,17 @@ It reduces pre-requisites for single-user instances.

                                                                            Version 0.4.7 (2021/04/07)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            Bugs Fixed

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            Bugs Fixed

                                                                            • #75 - Workouts on the same day are not displayed in right order

                                                                            -
                                                                            -

                                                                            Misc

                                                                            +
                                                                            +

                                                                            Misc

                                                                            • Update Python and Javascript dependencies
                                                                              IMPORTANT: Due to SQLAlchemy update (1.4+), engine URLs starting with postgres:// are no longer supported. Please update DATABASE_URL with postgresql://.

                                                                            @@ -1026,10 +1056,10 @@ It reduces pre-requisites for single-user instances.

                                                                            Version 0.4.6 (2021/02/21)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            Bugs Fixed

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            Bugs Fixed

                                                                            • #72 - Error message when file exceeding size is incorrect

                                                                            • #71 - max size or max number of files must be greater than 0

                                                                            • @@ -1041,10 +1071,10 @@ It reduces pre-requisites for single-user instances.

                                                                            Version 0.4.5 (2021/02/17)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            Bugs Fixed

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            Bugs Fixed

                                                                            • #66 - invalid gpx limit used when importing zip archive

                                                                            • #64 - Only 50 workouts per month shown in calendar

                                                                            • @@ -1055,17 +1085,17 @@ It reduces pre-requisites for single-user instances.

                                                                            Version 0.4.4 (2021/01/31)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            Bugs Fixed

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            Bugs Fixed

                                                                            • #62 - Error when sending reset password email

                                                                            -
                                                                            -

                                                                            Misc

                                                                            +
                                                                            +

                                                                            Misc

                                                                            • Refactoring before introducing new features.

                                                                            • Add docker files for evaluation purposes.

                                                                            • @@ -1075,16 +1105,16 @@ It reduces pre-requisites for single-user instances.

                                                                            Version 0.4.3 (2021/01/10)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            New Features

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            New Features

                                                                            • #58 - Standardize terms used for workouts
                                                                              Note: Database model, upload directory for workouts and API endpoints are also updated.

                                                                            -
                                                                            -

                                                                            Bugs Fixed

                                                                            +
                                                                            +

                                                                            Bugs Fixed

                                                                            • #59 - No message displayed on uploading image error

                                                                            @@ -1094,18 +1124,18 @@ It reduces pre-requisites for single-user instances.

                                                                            Version 0.4.2 (2021/01/03)

                                                                            -
                                                                            -

                                                                            Misc

                                                                            +
                                                                            +

                                                                            Misc

                                                                            No new features in this release, only some refactorings before introducing new features.

                                                                            Version 0.4.1 (2020/12/31)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            New Features

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            New Features

                                                                            • #57 - Use uuid for activities

                                                                            @@ -1121,10 +1151,10 @@ new features.

                                                                          • It’s now possible to change the tile provider for maps. The default tile server is now OpenStreetMap’s standard tile layer (replacing ThunderForest Outdoors), see Map tile server in documentation.

                                                                          -
                                                                          -

                                                                          Issues Closed

                                                                          -
                                                                          -

                                                                          New Features

                                                                          +
                                                                          +

                                                                          Issues Closed

                                                                          +
                                                                          +

                                                                          New Features

                                                                          • #54 - Tile server can be changed

                                                                          • #53 - Simplify FitTrackee installation

                                                                          • @@ -1140,10 +1170,10 @@ see documentation)
                                                                            ⚠️ Warning: some application parameters move from environment variables to database (see installation).

                                                                          • in order to send emails, Redis is now a mandatory dependency

                                                                          -
                                                                          -

                                                                          Issues Closed

                                                                          -
                                                                          -

                                                                          New Features

                                                                          +
                                                                          +

                                                                          Issues Closed

                                                                          +
                                                                          +

                                                                          New Features

                                                                          • #50 - A user can reset his password

                                                                          • #17 - A user can delete his account

                                                                          • @@ -1155,8 +1185,8 @@ see

                                                                            Version 0.2.5 - Fix and improvements (2020/01/31)

                                                                            -
                                                                            -

                                                                            Misc

                                                                            +
                                                                            +

                                                                            Misc

                                                                            This version contains minor fix and improvements on client side:

                                                                            • 4c3fc34 - empty user data on logout

                                                                            • @@ -1169,10 +1199,10 @@ add URL interceptors to simplify routes definition

                                                                            Version 0.2.4 - Minor fix (2020/01/30)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            Bugs Fixed

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            Bugs Fixed

                                                                            • #47 - timezone drop-down is not displayed correctly

                                                                            • #46 - calendar cannot display more than 5 or 6 activities on the same day

                                                                            • @@ -1183,17 +1213,17 @@ add URL interceptors to simplify routes definition

                                                                            Version 0.2.3 - FitTrackee available in French (2019/12/29)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            New Features

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            New Features

                                                                            • #43 - Display weekend days with a different background color on calendar

                                                                            • #40 - Localize FitTrackee (i18n)

                                                                            -
                                                                            -

                                                                            Bugs Fixed

                                                                            +
                                                                            +

                                                                            Bugs Fixed

                                                                            • #44 - Cannot edit an activity that does not have a gpx file

                                                                            @@ -1203,10 +1233,10 @@ add URL interceptors to simplify routes definition

                                                                            Version 0.2.2 - Statistics fix (2019/09/23)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            Bugs Fixed

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            Bugs Fixed

                                                                            • #41 - User statistics are incorrect

                                                                            @@ -1216,10 +1246,10 @@ add URL interceptors to simplify routes definition

                                                                            Version 0.2.1 - Fix and improvements (2019/09/01)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            New Features

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            New Features

                                                                            • #4 - Show points on the map when mouse over the chart

                                                                            • #14 - Display segments informations

                                                                            • @@ -1230,15 +1260,15 @@ add URL interceptors to simplify routes definition

                                                                            • #37 - Display map on activities list

                                                                            -
                                                                            -

                                                                            Bugs Fixed

                                                                            +
                                                                            +

                                                                            Bugs Fixed

                                                                            • #34 - Weather is not displayed anymore

                                                                            -
                                                                            -

                                                                            Misc

                                                                            +
                                                                            +

                                                                            Misc

                                                                            @@ -1247,17 +1277,17 @@ add URL interceptors to simplify routes definition

                                                                            Version 0.2.0 - Statistics (2019/07/07)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            New Features

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            New Features

                                                                            • #13 - Detailed statistics

                                                                            -
                                                                            -

                                                                            Misc

                                                                            +
                                                                            +

                                                                            Misc

                                                                            • Update dependencies

                                                                            @@ -1266,17 +1296,17 @@ add URL interceptors to simplify routes definition

                                                                            Version 0.1.1 - Fix and improvements (2019/02/07)

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            New Features

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            New Features

                                                                            • #25 - Display records on calendar

                                                                            • #22 - Add a total on current month statistics

                                                                            -
                                                                            -

                                                                            Bugs Fixed

                                                                            +
                                                                            +

                                                                            Bugs Fixed

                                                                            • #31 - Use moving duration for stats

                                                                            • #29 - Pause duration calculation with segments

                                                                            • @@ -1325,10 +1355,10 @@ add URL interceptors to simplify routes definition

                                                                            • no administration for now

                                                                            ➡️ more informations: see documentation and current issues

                                                                            -
                                                                            -

                                                                            Issues Closed

                                                                            -
                                                                            -

                                                                            New Features

                                                                            +
                                                                            +

                                                                            Issues Closed

                                                                            +
                                                                            +

                                                                            New Features

                                                                            • #11 - Timezone support

                                                                            • #10 - Add a note to an activity

                                                                            • diff --git a/docs/cli.html b/docs/cli.html index 318ad334..cecd4669 100644 --- a/docs/cli.html +++ b/docs/cli.html @@ -5,7 +5,7 @@ - Command line interface — FitTrackee 0.7.3 + <title>Command line interface — FitTrackee 0.7.4 documentation @@ -42,7 +42,7 @@ FitTrackee - 0.7.3 + 0.7.4 diff --git a/docs/features.html b/docs/features.html index 7cca19ba..90f79b97 100644 --- a/docs/features.html +++ b/docs/features.html @@ -5,7 +5,7 @@ - Features — FitTrackee 0.7.3 + <title>Features — FitTrackee 0.7.4 documentation @@ -42,7 +42,7 @@ FitTrackee - 0.7.3 + 0.7.4 @@ -290,9 +290,9 @@ A user with an inactive account cannot log in. (new in 0.6.0)

                                                                              The following parameters can be set:

                                                                              • active users limit. If 0, registration is enabled (no limit defined)

                                                                              • -
                                                                              • maximum size of uploaded files

                                                                              • +
                                                                              • maximum size of gpx file (individually uploaded or in a zip archive) (changed in 0.7.4)

                                                                              • maximum size of zip archive

                                                                              • -
                                                                              • maximum number of files in the zip archive. If an archive contains more files, only the configured number of files is processed, without raising errors.

                                                                              • +
                                                                              • maximum number of files in the zip archive (changed in 0.7.4)

                                                                              • administrator email for contact (new in 0.6.0)

                                                                              diff --git a/docs/genindex.html b/docs/genindex.html index 003f3d38..db529044 100644 --- a/docs/genindex.html +++ b/docs/genindex.html @@ -4,7 +4,7 @@ - Index — FitTrackee 0.7.3 + <title>Index — FitTrackee 0.7.4 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.7.3 + 0.7.4
                                                                              diff --git a/docs/http-routingtable.html b/docs/http-routingtable.html index 51f5f0aa..b815f43e 100644 --- a/docs/http-routingtable.html +++ b/docs/http-routingtable.html @@ -4,7 +4,7 @@ - HTTP Routing Table — FitTrackee 0.7.3 + <title>HTTP Routing Table — FitTrackee 0.7.4 documentation @@ -46,7 +46,7 @@ FitTrackee - 0.7.3 + 0.7.4 diff --git a/docs/index.html b/docs/index.html index 9a147a31..aa6d2b62 100644 --- a/docs/index.html +++ b/docs/index.html @@ -5,7 +5,7 @@ - FitTrackee — FitTrackee 0.7.3 + <title>FitTrackee — FitTrackee 0.7.4 documentation @@ -41,7 +41,7 @@ FitTrackee - 0.7.3 + 0.7.4 diff --git a/docs/installation.html b/docs/installation.html index 1d99f5ff..f6c4bab0 100644 --- a/docs/installation.html +++ b/docs/installation.html @@ -5,7 +5,7 @@ - Installation — FitTrackee 0.7.3 + <title>Installation — FitTrackee 0.7.4 documentation @@ -42,7 +42,7 @@ FitTrackee - 0.7.3 + 0.7.4 @@ -794,11 +794,11 @@ $ make install-db
                                                                                -
                                                                              • Download the last release (for now, it is the release v0.7.3):

                                                                              • +
                                                                              • Download the last release (for now, it is the release v0.7.4):

                                                                              -
                                                                              $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.3.tar.gz
                                                                              -$ tar -xzf v0.7.3.tar.gz
                                                                              -$ mv FitTrackee-0.7.3 FitTrackee
                                                                              +
                                                                              $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.4.tar.gz
                                                                              +$ tar -xzf v0.7.4.tar.gz
                                                                              +$ mv FitTrackee-0.7.4 FitTrackee
                                                                               $ cd FitTrackee
                                                                               
                                                                              @@ -918,11 +918,11 @@ $ source .env
                                                                              • Stop the application

                                                                              • Change to the directory where FitTrackee directory is located

                                                                              • -
                                                                              • Download the last release (for now, it is the release v0.7.3) and overwrite existing files:

                                                                              • +
                                                                              • Download the last release (for now, it is the release v0.7.4) and overwrite existing files:

                                                                              -
                                                                              $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.3.tar.gz
                                                                              -$ tar -xzf v0.7.3.tar.gz
                                                                              -$ cp -R FitTrackee-0.7.3/* FitTrackee/
                                                                              +
                                                                              $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.4.tar.gz
                                                                              +$ tar -xzf v0.7.4.tar.gz
                                                                              +$ cp -R FitTrackee-0.7.4/* FitTrackee/
                                                                               $ cd FitTrackee
                                                                               
                                                                              @@ -1044,6 +1044,14 @@ One way is to use a systemd services and Nginx ssl_certificate fullchain.pem; ssl_certificate_key privkey.pem; + ## this parameter controls how large of a file can be + ## uploaded, and defaults to 1MB. If you change the FitTrackee + ## settings to allow larger uploads, you'll need to change this + ## setting by uncommenting the line below and setting the size limit + ## you want. Set to "0" to prevent nginx from checking the + ## request body size at all + # client_max_body_size 1m; + location / { proxy_pass http://127.0.0.1:5000; proxy_redirect default; diff --git a/docs/objects.inv b/docs/objects.inv index a940bebd2b27769aa263a6f7f15d1b0a1d775b3e..a498f5c30308d96e209e2d957bc5c0e46d9555d7 100644 GIT binary patch delta 12 Tcmeyw{fT>m6QjvS=k=@rA^ZfY delta 12 Tcmeyw{fT>m6Ql7)=k=@rA@>BS diff --git a/docs/search.html b/docs/search.html index dfdfc99d..e11e764d 100644 --- a/docs/search.html +++ b/docs/search.html @@ -4,7 +4,7 @@ - Search — FitTrackee 0.7.3 + <title>Search — FitTrackee 0.7.4 documentation @@ -46,7 +46,7 @@ FitTrackee - 0.7.3 + 0.7.4
                                                                              diff --git a/docs/searchindex.js b/docs/searchindex.js index c4e1d4f0..16fb87ef 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["api/auth", "api/configuration", "api/index", "api/oauth2", "api/records", "api/sports", "api/stats", "api/users", "api/workouts", "apps", "changelog", "cli", "features", "index", "installation", "troubleshooting/administrator", "troubleshooting/index", "troubleshooting/user"], "filenames": ["api/auth.rst", "api/configuration.rst", "api/index.rst", "api/oauth2.rst", "api/records.rst", "api/sports.rst", "api/stats.rst", "api/users.rst", "api/workouts.rst", "apps.rst", "changelog.md", "cli.rst", "features.rst", "index.rst", "installation.rst", "troubleshooting/administrator.rst", "troubleshooting/index.rst", "troubleshooting/user.rst"], "titles": ["Authentication", "Configuration", "API documentation", "OAuth2", "Records", "Sports", "Statistics", "Users", "Workouts", "Third-party applications", "Change log", "Command line interface", "Features", "FitTrackee", "Installation", "Administrator", "Troubleshooting", "User"], "terms": {"post": [0, 3, 8, 9], "api": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13], "auth": [0, 1, 3, 4, 5, 6, 7, 8, 9, 14], "regist": [0, 1, 12, 14], "user": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 14, 16], "send": [0, 7, 10, 12, 14], "confirm": [0, 3, 10, 12, 14], "email": [0, 1, 7, 10, 11, 12, 15], "The": [0, 9, 10, 11, 12, 14], "newli": [0, 14], "creat": [0, 3, 8, 9, 10, 12, 14], "account": [0, 7, 10, 11, 14], "i": [0, 1, 3, 9, 10, 11, 12, 13, 14, 16], "inact": [0, 7, 12, 14], "must": [0, 1, 3, 5, 7, 9, 10, 12, 14, 15], "hi": [0, 7, 10, 12], "activ": [0, 5, 7, 10, 11, 12, 13, 14], "exampl": [0, 1, 3, 4, 5, 6, 7, 8, 9, 13, 14], "request": [0, 1, 3, 4, 5, 6, 7, 8, 9, 14], "http": [0, 1, 3, 4, 5, 6, 7, 8, 9, 14], "1": [0, 1, 3, 4, 5, 6, 7, 8, 12, 14], "content": [0, 1, 3, 4, 5, 6, 7, 8], "type": [0, 1, 3, 4, 5, 6, 7, 8, 10, 14], "applic": [0, 1, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14], "json": [0, 1, 3, 4, 5, 6, 7, 8], "respons": [0, 1, 3, 4, 5, 6, 7, 8], "success": [0, 1, 3, 4, 5, 6, 7, 8], "200": [0, 1, 3, 4, 5, 6, 7, 8, 10, 14], "statu": [0, 1, 3, 4, 5, 6, 7, 8, 11], "error": [0, 1, 3, 5, 7, 8, 10, 12, 14, 15], "registr": [0, 1, 9, 10, 12, 14], "400": [0, 1, 3, 5, 7, 8], "bad": [0, 1, 3, 5, 7, 8], "messag": [0, 1, 3, 8, 10, 11, 14], "valid": [0, 1, 3, 4, 5, 6, 7, 8, 10, 14, 15], "provid": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15], "n": 0, "object": [0, 1, 5, 7, 8], "usernam": [0, 6, 7, 10, 14], "string": [0, 1, 3, 5, 6, 7, 8, 9, 14], "3": [0, 1, 5, 6, 7, 8, 12, 14], "30": [0, 6], "charact": [0, 10], "requir": [0, 9, 10, 14], "password": [0, 7, 10, 11, 12, 14], "8": [0, 8], "lang": [0, 10], "languag": [0, 7, 10, 12], "prefer": [0, 7, 10], "invalid": [0, 1, 3, 4, 5, 6, 7, 8, 10, 14], "fallback": 0, "en": [0, 7], "english": [0, 10], "code": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10], "ok": [0, 1, 3, 4, 5, 6, 7, 8], "payload": [0, 1, 3, 5, 7, 8], "sorri": 0, "alreadi": 0, "taken": 0, "onli": [0, 3, 7, 8, 9, 10, 11, 12, 14], "alphanumer": [0, 10], "underscor": 0, "_": [0, 10], "allow": [0, 1, 8, 9, 10, 12, 13], "403": [0, 1, 5, 6, 7, 8], "forbidden": [0, 1, 5, 6, 7, 8], "disabl": [0, 10, 12, 14], "500": [0, 1, 5, 7, 8, 10], "intern": [0, 1, 5, 7, 8], "server": [0, 1, 5, 7, 8, 10, 12, 13], "pleas": [0, 1, 3, 4, 5, 6, 7, 8, 10], "try": [0, 7, 8], "again": [0, 1, 3, 4, 5, 6, 7, 8], "contact": [0, 1, 7, 8, 12], "administr": [0, 1, 7, 8, 9, 16], "after": [0, 3, 9, 10, 12, 14], "auth_token": 0, "web": [0, 9, 13, 14], "token": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11], "resend": 0, "instruct": [0, 10, 12, 14], "If": [0, 3, 9, 12, 14], "thi": [0, 3, 8, 10, 11, 12, 13, 14], "endpoint": [0, 1, 3, 9, 10, 14], "avail": [0, 4, 9, 11, 12, 14], "resent": 0, "404": [0, 3, 5, 6, 7, 8, 10], "Not": [0, 3, 5, 6, 7, 8], "found": [0, 3, 5, 6, 7, 8, 10], "url": [0, 3, 9, 10, 14, 15], "wa": [0, 10], "login": 0, "an": [0, 1, 3, 5, 7, 9, 10, 12, 14, 15], "can": [0, 7, 9, 10, 12, 13, 14, 15], "log": [0, 1, 3, 4, 5, 6, 7, 8, 12, 13, 14, 15], "successfulli": 0, "401": [0, 1, 3, 4, 5, 6, 7, 8], "unauthor": [0, 1, 3, 4, 5, 6, 7, 8], "credenti": [0, 14], "get": [0, 1, 3, 4, 5, 6, 7, 8, 9], "profil": [0, 3, 9, 10], "info": 0, "scope": [0, 1, 3, 4, 5, 6, 7, 8], "read": [0, 3, 4, 5, 6, 7, 8, 9, 10], "data": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "admin": [0, 1, 4, 5, 6, 7, 8, 10, 11, 12, 14], "fals": [0, 1, 3, 5, 7, 8, 14], "bio": [0, 7], "null": [0, 5, 7, 8, 10], "birth_dat": [0, 7], "created_at": [0, 7], "sun": [0, 4, 7, 8], "14": [0, 3, 7, 8], "jul": [0, 4, 7, 8], "2019": [0, 4, 6, 7, 8], "09": [0, 7], "58": [0, 7, 10], "gmt": [0, 3, 4, 7, 8], "display_asc": 0, "true": [0, 1, 3, 5, 7, 10, 14], "sam": [0, 4, 7, 8], "com": [0, 1, 3, 7, 9, 14], "first_nam": [0, 7], "imperial_unit": [0, 7], "is_act": [0, 5, 7], "last_nam": [0, 7], "locat": [0, 7, 14], "nb_sport": [0, 7], "nb_workout": [0, 6, 7], "6": [0, 5, 7, 8, 11, 12, 14], "pictur": [0, 7, 8, 10], "record": [0, 2, 7, 8, 10, 12], "id": [0, 3, 4, 5, 6, 7, 8, 9], "9": [0, 4, 7, 12, 14], "record_typ": [0, 4, 7, 8], "AS": [0, 4, 7, 8], "sport_id": [0, 4, 5, 6, 7, 8], "valu": [0, 3, 4, 7, 8, 9, 10, 14], "18": [0, 4, 7, 8, 10], "workout_d": [0, 4, 7, 8], "07": [0, 4, 7, 8], "08": [0, 4, 7, 8], "00": [0, 4, 7, 8], "workout_id": [0, 4, 7, 8], "hvybqybra7wwxpastwr4v2": [0, 4, 7, 8], "10": [0, 1, 4, 7, 8, 14], "fd": [0, 4, 7, 8], "13": [0, 4, 7, 8], "ha": [0, 4, 7, 8, 12, 13], "43": [0, 4, 7, 8, 10], "97": [0, 4, 7, 8], "11": [0, 4, 7, 12], "ld": [0, 4, 7, 8], "01": [0, 4, 6, 7, 8], "12": [0, 4, 7, 8, 12], "m": [0, 4, 6, 7, 8], "sports_list": [0, 7], "4": [0, 5, 6, 7, 8, 14], "timezon": [0, 7, 8, 10, 12], "europ": [0, 7], "pari": [0, 7], "total_dist": [0, 6, 7], "67": [0, 7], "895": [0, 7], "total_dur": [0, 6, 7], "50": [0, 7, 10, 14], "27": [0, 3, 7], "weekm": [0, 6, 7], "header": [0, 1, 3, 4, 5, 6, 7, 8, 9], "author": [0, 1, 3, 4, 5, 6, 7, 8, 9, 14], "oauth": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 14], "2": [0, 1, 3, 4, 5, 6, 7, 8, 9, 12, 14], "0": [0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14], "bearer": [0, 1, 3, 4, 5, 6, 7, 8], "signatur": [0, 1, 3, 4, 5, 6, 7, 8], "expir": [0, 1, 3, 4, 5, 6, 7, 8, 11], "edit": [0, 10, 12], "write": [0, 1, 3, 5, 7, 8, 9], "updat": [0, 1, 5, 7, 8, 10, 12, 14], "first": [0, 3, 9, 12], "name": [0, 3, 7, 10, 14], "last": [0, 10, 14], "biographi": 0, "birth": [0, 10], "date": [0, 6, 8, 10, 12], "format": [0, 6, 8, 10, 12], "y": [0, 6, 8, 14], "d": [0, 6, 8], "support": [0, 3, 9, 10, 12, 14, 15], "mm": 0, "dd": 0, "yyyi": 0, "default": [0, 3, 6, 7, 8, 10, 12, 14], "date_str": 0, "correspond": 0, "client": [0, 3, 9, 10, 12, 14], "mmm": 0, "do": [0, 1, 5, 6, 7, 8], "local": [0, 10, 13, 14], "fr": [0, 7, 14], "de": [0, 14], "date_format": 0, "us": [0, 3, 7, 8, 9, 10, 12, 13, 14], "displai": [0, 8, 9, 10, 11, 12, 13, 14, 16], "app": [0, 3, 9, 10, 12, 13], "boolean": [0, 1, 3, 7, 11], "highest": [0, 4, 12], "ascent": [0, 4, 8, 10, 12], "total": [0, 3, 10, 12], "distanc": [0, 4, 8, 10, 12], "imperi": [0, 10, 12], "unit": [0, 10, 14], "time": [0, 6, 8, 10, 12], "zone": 0, "doe": [0, 6, 7, 8, 10], "week": [0, 6, 10, 12], "start": [0, 6, 8, 10, 12, 14, 16], "mondai": [0, 6, 12], "don": 0, "t": [0, 10, 15], "match": [0, 10], "sport": [0, 2, 6, 8, 10, 12, 14], "color": [0, 5, 10, 12], "000000": 0, "stopped_speed_threshold": [0, 5], "user_id": 0, "hexadecim": 0, "when": [0, 1, 10, 11, 12, 14], "ad": [0, 10, 11, 12], "workout": [0, 2, 3, 4, 5, 6, 9, 10, 13, 16], "float": [0, 8], "stop": [0, 10, 12, 14], "speed": [0, 4, 8, 10, 12, 14], "threshold": [0, 10, 12], "gpxpy": [0, 12, 14], "exist": [0, 6, 7, 8, 12, 13, 14], "delet": [0, 3, 7, 8, 10, 11, 12], "reset": [0, 7, 10, 11, 12, 14], "given": [0, 3, 14], "204": [0, 3, 7, 8], "paramet": [0, 3, 5, 6, 7, 8, 9, 10, 12], "No": [0, 3, 7, 8, 10, 13], "multipart": [0, 3, 8], "form": [0, 3, 8], "file": [0, 1, 8, 10, 11, 12, 13, 14], "imag": [0, 7, 8, 10, 12, 14, 16], "extens": [0, 8, 14], "jpg": 0, "png": [0, 8, 14], "gif": 0, "part": [0, 8], "select": [0, 8, 12], "413": [0, 8], "entiti": [0, 8], "too": [0, 8], "larg": [0, 8, 12], "dure": [0, 8], "size": [0, 1, 8, 10, 12], "exce": [0, 8], "0mb": [0, 8], "NO": [0, 3, 7, 8], "handl": [0, 12, 14], "process": [0, 10, 12, 14], "patch": [0, 1, 5, 7, 8], "It": [0, 7, 9, 10, 12, 13, 15], "enabl": [0, 1, 7, 12, 14], "chang": [0, 12, 13, 14], "one": [0, 7, 8, 12], "current": [0, 10], "address": [0, 12, 14], "inform": [0, 10, 13, 14], "anoth": [0, 7, 14], "new": [0, 7, 9, 11, 12, 14], "new_password": 0, "miss": [0, 10], "logout": [0, 10], "blacklist": [0, 11], "out": 0, "access": [0, 3, 9, 10, 14], "revok": [0, 3], "malform": 0, "other": [0, 7, 14], "reason": 0, "config": [1, 10, 14], "admin_contact": 1, "gpx_limit_import": 1, "is_email_sending_en": 1, "is_registration_en": 1, "max_single_file_s": 1, "1048576": 1, "max_us": 1, "max_zip_file_s": 1, "10485760": 1, "map_attribut": [1, 14], "copi": [1, 14], "href": [1, 14], "www": [1, 14], "openstreetmap": [1, 10, 14], "org": [1, 14], "copyright": [1, 14], "contributor": [1, 10, 14], "version": [1, 11, 14], "7": [1, 8, 9, 11, 12, 14], "authent": [1, 2, 3, 4, 5, 7, 8, 9], "integ": [1, 3, 5, 6, 7, 8], "max": [1, 7, 8, 10], "number": [1, 7, 8, 10, 11, 12, 14], "zip": [1, 8, 10, 12], "archiv": [1, 10, 12, 14], "singl": [1, 7, 10, 12, 14], "instanc": [1, 3, 9, 10, 12, 14], "you": [1, 5, 6, 7, 8, 12, 13], "have": [1, 5, 6, 7, 8, 10], "permiss": [1, 5, 6, 7, 8], "ping": 1, "health": 1, "check": [1, 10, 14, 15], "pong": 1, "configur": [2, 9, 10, 12, 14], "oauth2": [2, 9], "statist": 2, "pagin": [3, 7, 8], "5": [3, 5, 6, 7, 8, 11, 12, 14], "page": [3, 7, 8, 10], "fittracke": [3, 9, 11, 12, 14, 16], "parti": [3, 12, 13], "without": [3, 6, 7, 8, 10, 12, 13], "client_descript": 3, "client_id": [3, 9], "o22a27s2abpuoxjbxv3ujdox": 3, "issued_at": 3, "thu": 3, "juli": 3, "2022": 3, "06": [3, 6], "53": [3, 10], "gpx": [3, 8, 10, 12, 13, 14], "import": [3, 10, 14], "redirect_uri": 3, "callback": [3, 9], "websit": 3, "has_next": 3, "has_prev": 3, "queri": [3, 6, 7, 8], "client_secret": 3, "secret": [3, 9, 14], "client_nam": 3, "client_uri": 3, "arrai": 3, "list": [3, 10, 13, 14], "redirect": [3, 9], "descript": [3, 11, 14], "option": [3, 9, 10, 11, 14], "client_client_id": 3, "NOT": [3, 5, 8], "int": [3, 5, 8], "by_id": 3, "all": [3, 4, 5, 6, 7, 14], "associ": 3, "issu": [3, 13, 14], "response_typ": [3, 9], "state": [3, 9], "uniqu": [3, 9], "prevent": [3, 9], "cross": [3, 9, 12], "site": [3, 9], "forgeri": [3, 9], "mandatori": [3, 8, 9, 10, 14], "recommend": [3, 9, 14], "code_challeng": [3, 9], "gener": [3, 9, 10, 12, 14], "from": [3, 6, 8, 9, 10, 12, 13], "verifi": [3, 9], "pkce": [3, 9], "code_challenge_method": [3, 9], "method": [3, 9, 14], "challeng": [3, 9], "s256": [3, 9], "return": [3, 4, 7, 8, 10, 14], "authlib": [3, 9, 14], "librari": [3, 9, 14], "refresh": [3, 10], "access_token": 3, "roehv64thcg28wcewzhrnvlusoduvw8nvnhkcml57": 3, "expires_in": 3, "864000": 3, "refresh_token": 3, "nuv9cy8vqonrqkhtz5pqaq2zw7msh0mornpjr14amswd6f6i": 3, "token_typ": 3, "expires_at": 3, "1658660147": 3, "0667062": 3, "grant_typ": 3, "grant": [3, 9], "authorization_cod": [3, 9], "ar": [3, 4, 8, 9, 10, 11, 12, 13, 14, 16], "code_verifi": 3, "follow": [4, 9, 11, 12, 14, 15], "averag": [4, 8, 10, 12], "farthest": [4, 10, 12], "longest": [4, 10, 12], "durat": [4, 8, 10, 12], "maximum": [4, 10, 12], "non": [5, 13], "is_active_for_us": 5, "label": [5, 10], "cycl": [5, 10, 12], "transport": [5, 10, 12], "hike": [5, 10, 12], "mountain": [5, 12], "bike": [5, 8, 10, 12], "run": [5, 9, 10, 12, 14], "walk": [5, 10, 12], "has_workout": 5, "stat": [6, 10], "user_nam": [6, 7], "by_tim": 6, "2018": [6, 8], "2017": [6, 8], "average_spe": 6, "48": 6, "total_asc": 6, "203": 6, "156": [6, 10], "15": [6, 8], "282": 6, "12341": 6, "16": [6, 8], "99": [6, 10], "150": 6, "178": [6, 10], "47": [6, 8, 10], "9960": 6, "95": [6, 10], "46": [6, 10], "78": 6, "613": 6, "1267": 6, "end": [6, 8], "frame": 6, "sundai": [6, 8, 12], "month": [6, 10, 12], "year": [6, 12], "by_sport": 6, "uploads_dir_s": 6, "1000": 6, "regardless": 7, "right": [7, 9, 10, 11, 12, 14], "some": [7, 8, 9, 10, 12, 13, 14], "order_bi": [7, 8], "workouts_count": 7, "par_pag": 7, "is_admin": 7, "sat": 7, "20": 7, "03": [7, 8], "per_pag": [7, 8], "per": [7, 8, 10, 14], "q": 7, "order": [7, 8, 9, 10], "sort": [7, 8], "asc": [7, 8], "desc": [7, 8], "criteria": [7, 8], "detail": [7, 10, 14, 16], "jpeg": 7, "add": [7, 10, 11, 12, 13], "remov": [7, 10, 11, 12], "modifi": [7, 10, 11, 14], "new_email": 7, "reset_password": 7, "differ": [7, 10, 12], "than": [7, 10, 11], "curent": 7, "A": [7, 10, 11, 12, 14, 15], "own": [7, 12, 13], "except": [7, 14, 15], "he": 7, "": [7, 8, 10, 14], "john_do": 7, "your": [7, 12, 13, 14], "02": 8, "31": 8, "least": 8, "ave_spe": 8, "bound": 8, "creation_d": 8, "51": 8, "descent": [8, 10, 12], "17": [8, 14], "04": 8, "kjxavsturjvoah2wvcegef": 8, "map": [8, 10, 12, 13, 16], "max_alt": 8, "max_spe": 8, "min_alt": 8, "modification_d": 8, "move": [8, 10], "next_workout": 8, "note": [8, 10, 12, 14], "paus": [8, 10], "previous_workout": 8, "mon": 8, "jan": 8, "segment": [8, 10, 12], "titl": 8, "weather_end": 8, "weather_start": 8, "with_gpx": 8, "100": [8, 10, 12], "distance_from": 8, "minim": [8, 9], "distance_to": 8, "maxim": 8, "duration_from": 8, "h": [8, 12], "duration_to": 8, "ave_speed_from": 8, "ave_speed_to": 8, "max_speed_from": 8, "max_speed_to": 8, "workout_short_id": 8, "57": [8, 10], "45": 8, "22": 8, "morn": 8, "short": 8, "leaflet": [8, 14], "chart_data": 8, "chart": [8, 10, 12, 14], "j": [8, 10, 14], "elev": [8, 10, 12, 14], "279": 8, "latitud": 8, "5078118": 8, "longitud": 8, "1232004": 8, "63": 8, "fri": 8, "44": [8, 10], "7380": 8, "280": 8, "5079733": 8, "1234538": 8, "39": 8, "segment_id": 8, "rechart": 8, "map_id": 8, "fa33f4d996844a5c73ecd1ae24456ab8": 8, "1563529507772": 8, "map_til": 8, "z": [8, 14], "x": [8, 9, 14], "tile": [8, 10, 12], "c": [8, 14], "4109": 8, "2930": 8, "subdomain": [8, 10, 14], "zoom": 8, "index": 8, "along": 8, "axi": 8, "download": [8, 10, 12, 14], "xml": 8, "201": [8, 10], "no_gpx": 8, "uuid": [8, 10], "km": [8, 12], "second": 8, "rest": 9, "see": [9, 10, 12, 13, 14, 15], "document": [9, 10, 13, 14], "whose": 9, "most": 9, "To": [9, 10, 14], "interact": 9, "set": [9, 10, 11, 12, 14, 15], "tab": 9, "exchang": 9, "sent": [9, 10, 12, 14], "bodi": 9, "better": [9, 10], "secur": 9, "relat": [9, 12, 14], "shown": [9, 10, 16], "thei": [9, 14], "store": [9, 12, 13], "3rd": 9, "need": [9, 10, 14], "fittrackee_host": 9, "sinc": [9, 14], "separ": [9, 14], "space": 9, "For": [9, 12, 14], "3aread": 9, "3awrit": 9, "so": 9, "fetch": [9, 14], "implement": 9, "behind": 9, "proxi": [9, 14], "forward": [9, 14], "proto": [9, 14], "nginx": [9, 12, 14], "proxy_set_head": [9, 14], "scheme": [9, 14], "about": [9, 14], "simplifi": [9, 10], "aaron": 9, "parecki": 9, "oauthlib": 9, "python": [9, 10, 14], "session": 9, "112": 10, "244": 10, "virtual": [10, 12], "ride": 10, "thank": 10, "jat255": 10, "246": 10, "postgresql": [10, 14, 15], "247": 10, "microsecond": 10, "pr": 10, "252": 10, "init": [10, 14], "norwegian": 10, "bokm\u00e5l": 10, "contain": [10, 12, 14], "databas": [10, 12, 14, 15], "migrat": [10, 11, 14], "upgrad": 10, "242": 10, "weblat": 10, "german": 10, "qwerty287": 10, "241": 10, "strength": 10, "estim": 10, "packag": [10, 14], "239": 10, "cb9d02f": 10, "88": 10, "231": 10, "236": 10, "rate": 10, "limit": [10, 12], "232": 10, "hidden": [10, 12], "237": 10, "212": 10, "host": [10, 14], "lavoi": 10, "230": 10, "problem": 10, "225": 10, "grammar": 10, "skylan0916": 10, "In": [10, 12], "execut": 10, "lower": 10, "v0": [10, 14], "postgr": [10, 15], "213": 10, "measur": 10, "should": [10, 14], "ft": 10, "mi": 10, "223": 10, "icon": [10, 14], "167": 10, "dashboard": 10, "162": 10, "fmstrat": 10, "210": 10, "could": 10, "environ": [10, 11, 15], "variabl": [10, 15], "staticmap_subdomain": [10, 14], "209": 10, "incorrect": 10, "track": [10, 13], "multipl": 10, "gorgobacka": 10, "now": [10, 11, 12, 14], "And": 10, "detect": 10, "browser": 10, "208": 10, "card": 10, "html": 10, "attribut": [10, 14], "197": 10, "196": 10, "manag": [10, 11, 14], "tool": [10, 14], "190": 10, "were": 10, "193": 10, "192": 10, "instead": [10, 12], "191": 10, "layout": 10, "includ": 10, "195": 10, "affect": 10, "previous": 10, "cc4287e": 10, "docker": 10, "env": [10, 14], "offset": 10, "depend": [10, 14], "refacto": 10, "befor": [10, 14], "introduc": 10, "possibl": [10, 12, 13, 14], "smtp": [10, 14], "reduc": 10, "pre": 10, "requisit": 10, "cli": [10, 11, 12, 14], "180": 10, "cannot": [10, 12], "tl": [10, 14], "177": 10, "posit": [10, 12], "small": 10, "screen": [10, 12], "175": 10, "173": 10, "link": [10, 14], "171": 10, "correctli": 10, "155": 10, "106": 10, "169": 10, "161": 10, "160": 10, "sever": [10, 12, 13, 14], "danielsiersleben": 10, "report": 10, "initi": [10, 14], "command": [10, 12, 13, 14], "149": 10, "initialis": [10, 14], "152": 10, "autoescap": 10, "jinja": 10, "templat": 10, "151": 10, "sanit": 10, "input": 10, "serv": [10, 14], "dramatiq": [10, 14], "warn": [10, 12], "launch": 10, "worker": [10, 14], "w": 10, "script": 10, "entrypoint": 10, "drop": 10, "avoid": 10, "product": 10, "dotenv": 10, "146": 10, "filter": [10, 12], "145": 10, "model": 10, "140": 10, "fullscreen": 10, "control": [10, 12], "138": 10, "135": 10, "finish": 10, "marker": 10, "134": 10, "wind": [10, 12], "direct": [10, 12], "877fa0f": 10, "calendar": [10, 12], "resolut": 10, "131": 10, "129": 10, "127": [10, 14], "pars": [10, 14], "legitim": 10, "uri": 10, "localhost": [10, 14], "25": [10, 14], "123": 10, "121": 10, "snowsho": [10, 12], "116": 10, "ui": 10, "button": 10, "graph": 10, "115": 10, "91": 10, "min": 10, "altitud": 10, "90": 10, "seem": 10, "104": 10, "switch": 10, "agplv3": 10, "licens": [10, 13, 14], "101": 10, "full": [10, 12], "develop": [10, 11, 13], "98": 10, "109": 10, "slow": 10, "movement": 10, "84": 10, "93": 10, "paf38": 10, "83": 10, "static": [10, 12, 14], "keep": [10, 13, 14], "default_staticmap": [10, 14], "81": 10, "remain": 10, "textarea": 10, "82": 10, "dai": [10, 11, 12, 14], "80": [10, 14], "save": [10, 12], "79": 10, "fail": [10, 16], "make": [10, 14], "rebuild": 10, "75": 10, "same": 10, "javascript": [10, 14], "due": 10, "sqlalchemi": [10, 14, 15], "engin": [10, 14, 15], "longer": [10, 15], "database_url": [10, 14], "72": 10, "exceed": 10, "71": 10, "greater": 10, "70": 10, "less": 10, "upload": [10, 11, 12, 14], "66": 10, "64": 10, "62": 10, "refactor": 10, "evalu": [10, 14], "purpos": [10, 14], "standard": [10, 14], "term": [10, 14], "directori": [10, 12, 14], "also": [10, 11, 13, 14], "59": 10, "major": 10, "instal": [10, 13], "becom": 10, "more": [10, 11, 12, 13, 14], "easi": 10, "been": [10, 13], "renam": 10, "layer": [10, 14], "replac": [10, 14], "thunderforest": [10, 14], "outdoor": [10, 12, 13, 14], "54": 10, "redi": [10, 14], "complet": 10, "side": 10, "4c3fc34": 10, "empti": [10, 11, 14], "34614d5": 10, "spinner": 10, "load": [10, 15], "b862a77": 10, "2e1ee2c": 10, "interceptor": 10, "rout": [10, 14], "definit": 10, "down": 10, "weekend": 10, "background": 10, "40": 10, "i18n": 10, "41": 10, "show": [10, 11, 14], "point": [10, 14], "mous": 10, "over": 10, "choos": [10, 12], "36": 10, "33": 10, "37": 10, "34": 10, "weather": [10, 12, 14], "anymor": 10, "poetri": [10, 14], "pipenv": 10, "calcul": 10, "28": 10, "26": 10, "tooltip": [10, 12], "creation": [10, 12], "montain": 10, "even": [10, 12], "enter": [10, 12], "darkski": [10, 12], "kei": [10, 12, 14], "farest": 10, "search": 10, "owner": [10, 12, 14], "view": [10, 12, 14], "usag": [11, 14], "arg": [11, 14], "help": [11, 14], "exit": [11, 14], "deprec": 11, "next": [11, 12], "fittrackee_set_admin": 11, "fittrackee_upgrade_db": 11, "appli": 11, "kind": 12, "encrypt": 12, "With": [12, 14], "open": [12, 13, 14], "street": [12, 13], "electr": 12, "row": 12, "ski": 12, "alpin": 12, "countri": 12, "trail": 12, "overridden": 12, "which": 12, "up": [12, 13], "metric": 12, "system": [12, 14], "arrow": 12, "indic": 12, "come": 12, "period": 12, "mai": [12, 13, 14], "origin": 12, "dropdown": 12, "On": [12, 14], "case": [12, 14], "line": [12, 13, 14], "between": 12, "hide": 12, "overrid": 12, "appear": 12, "still": [12, 13, 14], "third": [12, 13], "defin": 12, "rais": 12, "necessari": [12, 14], "like": [12, 14], "lock": 12, "via": 12, "mobil": 13, "yet": 13, "export": [13, 14], "them": 13, "android": 13, "exhaust": 13, "runner": 13, "gpl": 13, "v3": 13, "forrunn": 13, "opentrack": 13, "apach": 13, "fitotrack": 13, "under": [13, 14], "heavi": [13, 14], "featur": [13, 14], "unstabl": [13, 14], "interfac": [13, 14], "troubleshoot": 13, "written": 14, "typescript": 14, "flask": 14, "staticmap": 14, "coordin": 14, "forecast": 14, "io": 14, "dark": 14, "sky": 14, "former": 14, "task": 14, "queue": 14, "vue3": 14, "vuex": 14, "logo": 14, "made": 14, "freepik": 14, "flaticon": 14, "fork": 14, "awesom": 14, "yarn": 14, "compos": 14, "step": 14, "describ": 14, "linux": 14, "test": 14, "debian": 14, "arch": 14, "o": 14, "encount": 14, "adapt": 14, "makefil": 14, "custom": 14, "flask_app": 14, "modul": 14, "pwd": 14, "__main__": 14, "py": 14, "els": 14, "port": 14, "5000": 14, "app_set": 14, "productionconfig": 14, "app_secret_kei": 14, "strong": 14, "jwt": 14, "app_work": 14, "spawn": 14, "gunicorn": [14, 15], "app_log": 14, "path": [14, 15], "upload_fold": [14, 15], "absolut": [14, 15], "where": 14, "folder": 14, "application_directori": 14, "virtualenv": 14, "5432": 14, "begin": 14, "database_disable_pool": 14, "pool": 14, "entri": 14, "directli": 14, "ui_url": 14, "email_url": [14, 15], "sender_email": 14, "sender": 14, "redis_url": 14, "workers_process": 14, "api_rate_limit": 14, "300": 14, "minut": 14, "tile_server_url": 14, "b": 14, "osm": 14, "franc": 14, "target": 14, "_blank": 14, "rel": 14, "noopen": 14, "noreferr": 14, "komoot": 14, "otherwis": 14, "insensit": 14, "weather_api_kei": 14, "weather_api": 14, "vue_app_api_url": 14, "unencrypt": 14, "ssl": 14, "465": 14, "starttl": 14, "587": 14, "office365": 14, "work": 14, "omit": 14, "old": 14, "adress": 14, "apikei": 14, "xxxx": 14, "servic": 14, "expect": 14, "osmfr": 14, "fond": 14, "cart": 14, "par": 14, "mention": 14, "legal": 14, "nofollow": 14, "sou": 14, "nbsp": 14, "creativecommon": 14, "sa": 14, "licenc": 14, "cc": 14, "BY": 14, "chosen": 14, "randomli": 14, "base": 14, "ip": 14, "fix": 14, "window": 14, "strategi": 14, "subject": 14, "asset": 14, "notat": 14, "comma": 14, "hour": 14, "mainten": 14, "diagnost": 14, "util": 14, "commmand": 14, "clear": 14, "specif": 14, "enumer": 14, "wai": 14, "pip": 14, "WITH": 14, "schema": 14, "privileg": 14, "nano": 14, "ftcli": 14, "db": 14, "fittrackee_work": 14, "systemd": 14, "3000": 14, "archlinux": 14, "yai": 14, "project": 14, "clone": 14, "repo": 14, "git": 14, "github": 14, "samr1": 14, "cd": 14, "vue": 14, "releas": 14, "wget": 14, "tar": 14, "gz": 14, "xzf": 14, "mv": 14, "sql": 14, "backup": 14, "pg_dump": 14, "u": 14, "changelog": 14, "restart": 14, "pull": 14, "repositori": 14, "overwrit": 14, "cp": 14, "r": 14, "There": 14, "One": 14, "pass": 14, "distribut": 14, "network": 14, "startlimitintervalsec": 14, "simpl": 14, "alwai": 14, "restartsec": 14, "standardoutput": 14, "syslog": 14, "standarderror": 14, "syslogidentifi": 14, "workingdirectori": 14, "home": 14, "execstart": 14, "venv": 14, "bin": 14, "create_app": 14, "logfil": 14, "wantedbi": 14, "multi": 14, "OF": 14, "listen": 14, "443": 14, "http2": 14, "server_nam": 14, "ssl_certif": 14, "fullchain": 14, "pem": 14, "ssl_certificate_kei": 14, "privkei": 14, "proxy_pass": 14, "proxy_redirect": 14, "real": 14, "remote_addr": 14, "proxy_add_x_forwarded_for": 14, "301": 14, "request_uri": 14, "larger": 14, "client_max_body_s": 14, "build": 14, "8025": 14, "mailhog": 14, "shell": 14, "insid": 14, "addit": 14, "fittrackee_cli": 14, "lint": 14, "exc": 15, "nosuchmoduleerror": 15, "plugin": 15, "dialect": 15, "invalidemailurlschem": 15, "todo": 17}, "objects": {"": [[0, 0, 1, "post--api-auth-account-confirm", "/api/auth/account/confirm"], [0, 0, 1, "post--api-auth-account-resend-confirmation", "/api/auth/account/resend-confirmation"], [0, 0, 1, "post--api-auth-email-update", "/api/auth/email/update"], [0, 0, 1, "post--api-auth-login", "/api/auth/login"], [0, 0, 1, "post--api-auth-logout", "/api/auth/logout"], [0, 0, 1, "post--api-auth-password-reset-request", "/api/auth/password/reset-request"], [0, 0, 1, "post--api-auth-password-update", "/api/auth/password/update"], [0, 1, 1, "delete--api-auth-picture", "/api/auth/picture"], [0, 0, 1, "post--api-auth-picture", "/api/auth/picture"], [0, 2, 1, "get--api-auth-profile", "/api/auth/profile"], [0, 0, 1, "post--api-auth-profile-edit", "/api/auth/profile/edit"], [0, 3, 1, "patch--api-auth-profile-edit-account", "/api/auth/profile/edit/account"], [0, 0, 1, "post--api-auth-profile-edit-preferences", "/api/auth/profile/edit/preferences"], [0, 0, 1, "post--api-auth-profile-edit-sports", "/api/auth/profile/edit/sports"], [0, 1, 1, "delete--api-auth-profile-reset-sports-(sport_id)", "/api/auth/profile/reset/sports/(sport_id)"], [0, 0, 1, "post--api-auth-register", "/api/auth/register"], [1, 2, 1, "get--api-config", "/api/config"], [1, 3, 1, "patch--api-config", "/api/config"], [3, 2, 1, "get--api-oauth-apps", "/api/oauth/apps"], [3, 0, 1, "post--api-oauth-apps", "/api/oauth/apps"], [3, 1, 1, "delete--api-oauth-apps-(int-client_id)", "/api/oauth/apps/(int:client_id)"], [3, 2, 1, "get--api-oauth-apps-(int-client_id)-by_id", "/api/oauth/apps/(int:client_id)/by_id"], [3, 0, 1, "post--api-oauth-apps-(int-client_id)-revoke", "/api/oauth/apps/(int:client_id)/revoke"], [3, 2, 1, "get--api-oauth-apps-(string-client_client_id)", "/api/oauth/apps/(string:client_client_id)"], [3, 0, 1, "post--api-oauth-authorize", "/api/oauth/authorize"], [3, 0, 1, "post--api-oauth-revoke", "/api/oauth/revoke"], [3, 0, 1, "post--api-oauth-token", "/api/oauth/token"], [1, 2, 1, "get--api-ping", "/api/ping"], [4, 2, 1, "get--api-records", "/api/records"], [5, 2, 1, "get--api-sports", "/api/sports"], [5, 2, 1, "get--api-sports-(int-sport_id)", "/api/sports/(int:sport_id)"], [5, 3, 1, "patch--api-sports-(int-sport_id)", "/api/sports/(int:sport_id)"], [6, 2, 1, "get--api-stats-(user_name)-by_sport", "/api/stats/(user_name)/by_sport"], [6, 2, 1, "get--api-stats-(user_name)-by_time", "/api/stats/(user_name)/by_time"], [6, 2, 1, "get--api-stats-all", "/api/stats/all"], [7, 2, 1, "get--api-users", "/api/users"], [7, 1, 1, "delete--api-users-(user_name)", "/api/users/(user_name)"], [7, 2, 1, "get--api-users-(user_name)", "/api/users/(user_name)"], [7, 3, 1, "patch--api-users-(user_name)", "/api/users/(user_name)"], [7, 2, 1, "get--api-users-(user_name)-picture", "/api/users/(user_name)/picture"], [8, 2, 1, "get--api-workouts", "/api/workouts"], [8, 0, 1, "post--api-workouts", "/api/workouts"], [8, 1, 1, "delete--api-workouts-(string-workout_short_id)", "/api/workouts/(string:workout_short_id)"], [8, 2, 1, "get--api-workouts-(string-workout_short_id)", "/api/workouts/(string:workout_short_id)"], [8, 3, 1, "patch--api-workouts-(string-workout_short_id)", "/api/workouts/(string:workout_short_id)"], [8, 2, 1, "get--api-workouts-(string-workout_short_id)-chart_data", "/api/workouts/(string:workout_short_id)/chart_data"], [8, 2, 1, "get--api-workouts-(string-workout_short_id)-chart_data-segment-(int-segment_id)", "/api/workouts/(string:workout_short_id)/chart_data/segment/(int:segment_id)"], [8, 2, 1, "get--api-workouts-(string-workout_short_id)-gpx", "/api/workouts/(string:workout_short_id)/gpx"], [8, 2, 1, "get--api-workouts-(string-workout_short_id)-gpx-download", "/api/workouts/(string:workout_short_id)/gpx/download"], [8, 2, 1, "get--api-workouts-(string-workout_short_id)-gpx-segment-(int-segment_id)", "/api/workouts/(string:workout_short_id)/gpx/segment/(int:segment_id)"], [8, 2, 1, "get--api-workouts-map-(map_id)", "/api/workouts/map/(map_id)"], [8, 0, 1, "post--api-workouts-no_gpx", "/api/workouts/no_gpx"], [14, 4, 1, "envvar-API_RATE_LIMITS", "API_RATE_LIMITS \ud83c\udd95"], [14, 4, 1, "-", "APP_LOG"], [14, 4, 1, "-", "APP_SECRET_KEY"], [14, 4, 1, "-", "APP_SETTINGS"], [14, 4, 1, "-", "APP_WORKERS"], [14, 4, 1, "-", "DATABASE_DISABLE_POOLING"], [14, 4, 1, "-", "DATABASE_URL"], [14, 4, 1, "-", "DEFAULT_STATICMAP"], [14, 4, 1, "-", "EMAIL_URL"], [14, 4, 1, "-", "FLASK_APP"], [14, 4, 1, "-", "HOST"], [14, 4, 1, "-", "MAP_ATTRIBUTION"], [14, 4, 1, "-", "PORT"], [14, 4, 1, "-", "REDIS_URL"], [14, 4, 1, "-", "SENDER_EMAIL"], [14, 4, 1, "-", "STATICMAP_SUBDOMAINS"], [14, 4, 1, "-", "TILE_SERVER_URL"], [14, 4, 1, "-", "UI_URL"], [14, 4, 1, "-", "UPLOAD_FOLDER"], [14, 4, 1, "-", "VUE_APP_API_URL"], [14, 4, 1, "-", "WEATHER_API_KEY"], [14, 4, 1, "-", "WORKERS_PROCESSES"]], "/api/workouts/map_tile/(s)/(z)/(x)/(y)": [[8, 2, 1, "get--api-workouts-map_tile-(s)-(z)-(x)-(y).png", "png"]]}, "objtypes": {"0": "http:post", "1": "http:delete", "2": "http:get", "3": "http:patch", "4": "std:envvar"}, "objnames": {"0": ["http", "post", "HTTP post"], "1": ["http", "delete", "HTTP delete"], "2": ["http", "get", "HTTP get"], "3": ["http", "patch", "HTTP patch"], "4": ["std", "envvar", "environment variable"]}, "titleterms": {"authent": 0, "configur": 1, "api": [2, 14], "document": 2, "endpoint": 2, "oauth2": [3, 11], "record": 4, "sport": 5, "statist": [6, 10, 12], "user": [7, 11, 17], "workout": [8, 12, 15], "third": 9, "parti": 9, "applic": 9, "scope": 9, "flow": 9, "resourc": 9, "chang": 10, "log": 10, "version": 10, "0": 10, "7": 10, "3": 10, "2022": 10, "11": 10, "01": 10, "featur": [10, 12], "enhanc": 10, "bug": 10, "fix": 10, "translat": [10, 12], "2": 10, "09": 10, "21": 10, "1": 10, "19": 10, "6": 10, "12": 10, "14": 10, "issu": 10, "close": 10, "pull": 10, "request": 10, "misc": 10, "07": 10, "27": 10, "10": 10, "13": 10, "9": 10, "03": 10, "8": 10, "06": 10, "22": 10, "05": 10, "29": 10, "5": 10, "04": 10, "24": 10, "4": 10, "23": 10, "02": 10, "secur": 10, "new": 10, "2021": 10, "30": 10, "16": 10, "17": 10, "31": 10, "2020": 10, "fittracke": [10, 13, 15], "pypi": [10, 14], "administr": [10, 12, 15], "15": 10, "improv": 10, "minor": 10, "avail": 10, "french": 10, "2019": 10, "first": 10, "releas": 10, "2018": 10, "command": 11, "line": 11, "interfac": 11, "databas": 11, "ftcli": 11, "db": 11, "upgrad": [11, 14], "drop": 11, "clean": 11, "clean_token": 11, "updat": 11, "account": 12, "prefer": 12, "screenshot": 12, "dashboard": 12, "detail": [12, 15], "list": 12, "tabl": 13, "content": 13, "instal": 14, "prerequisit": 14, "environ": 14, "variabl": 14, "email": 14, "map": [14, 15], "tile": 14, "server": 14, "rate": 14, "limit": 14, "from": 14, "sourc": 14, "dev": 14, "product": 14, "prod": 14, "deploy": 14, "docker": 14, "develop": 14, "fail": 15, "start": 15, "imag": 15, "ar": 15, "displai": 15, "i": 15, "shown": 15, "troubleshoot": 16}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Authentication": [[0, "authentication"]], "Configuration": [[1, "configuration"]], "API documentation": [[2, "api-documentation"]], "Endpoints:": [[2, null]], "OAuth2": [[3, "oauth2"], [11, "oauth2"]], "Records": [[4, "records"]], "Sports": [[5, "sports"]], "Statistics": [[6, "statistics"], [12, "statistics"]], "Users": [[7, "users"], [11, "users"]], "Workouts": [[8, "workouts"], [12, "workouts"]], "Third-party applications": [[9, "third-party-applications"]], "Scopes": [[9, "scopes"]], "Flow": [[9, "flow"]], "Resources": [[9, "resources"]], "Change log": [[10, "change-log"]], "Version 0.7.3 (2022/11/01)": [[10, "version-0-7-3-2022-11-01"]], "Features and enhancements": [[10, "features-and-enhancements"], [10, "id4"]], "Bugs Fixed": [[10, "bugs-fixed"], [10, "id2"], [10, "id5"], [10, "id7"], [10, "id9"], [10, "id12"], [10, "id14"], [10, "id17"], [10, "id20"], [10, "id23"], [10, "id28"], [10, "id30"], [10, "id32"], [10, "id34"], [10, "id37"], [10, "id39"], [10, "id45"], [10, "id48"], [10, "id50"], [10, "id52"], [10, "id59"], [10, "id64"], [10, "id66"], [10, "id68"], [10, "id71"], [10, "id73"], [10, "id75"], [10, "id79"], [10, "id89"], [10, "id92"], [10, "id94"], [10, "id97"], [10, "id104"]], "Translations": [[10, "translations"], [10, "id1"], [10, "id3"], [10, "id6"], [10, "id18"], [12, "translations"]], "Version 0.7.2 (2022/09/21)": [[10, "version-0-7-2-2022-09-21"]], "Version 0.7.1 (2022/09/21)": [[10, "version-0-7-1-2022-09-21"]], "Version 0.7.0 (2022/09/19)": [[10, "version-0-7-0-2022-09-19"]], "Version 0.6.12 (2022/09/14)": [[10, "version-0-6-12-2022-09-14"]], "Issues Closed": [[10, "issues-closed"], [10, "id8"], [10, "id11"], [10, "id15"], [10, "id19"], [10, "id22"], [10, "id25"], [10, "id27"], [10, "id31"], [10, "id33"], [10, "id35"], [10, "id40"], [10, "id44"], [10, "id47"], [10, "id49"], [10, "id51"], [10, "id53"], [10, "id55"], [10, "id57"], [10, "id62"], [10, "id65"], [10, "id67"], [10, "id70"], [10, "id72"], [10, "id74"], [10, "id77"], [10, "id81"], [10, "id83"], [10, "id85"], [10, "id88"], [10, "id90"], [10, "id93"], [10, "id95"], [10, "id99"], [10, "id102"], [10, "id105"]], "Pull Requests": [[10, "pull-requests"], [10, "id10"], [10, "id13"], [10, "id29"], [10, "id38"], [10, "id42"], [10, "id46"], [10, "id61"]], "Misc": [[10, "misc"], [10, "id21"], [10, "id24"], [10, "id41"], [10, "id43"], [10, "id60"], [10, "id69"], [10, "id76"], [10, "id80"], [10, "id87"], [10, "id98"], [10, "id101"]], "Version 0.6.11 (2022/07/27)": [[10, "version-0-6-11-2022-07-27"]], "Features": [[10, "features"], [10, "id16"], [10, "id26"], [10, "id36"], [12, "features"]], "Version 0.6.10 (2022/07/13)": [[10, "version-0-6-10-2022-07-13"]], "Version 0.6.9 (2022/07/03)": [[10, "version-0-6-9-2022-07-03"]], "Version 0.6.8 (2022/06/22)": [[10, "version-0-6-8-2022-06-22"]], "Version 0.6.7 (2022/06/11)": [[10, "version-0-6-7-2022-06-11"]], "Version 0.6.6 (2022/05/29)": [[10, "version-0-6-6-2022-05-29"]], "Version 0.6.5 (2022/04/24)": [[10, "version-0-6-5-2022-04-24"]], "Version 0.6.4 (2022/04/23)": [[10, "version-0-6-4-2022-04-23"]], "Version 0.6.3 (2022/04/09)": [[10, "version-0-6-3-2022-04-09"]], "Version 0.6.2 (2022/04/03)": [[10, "version-0-6-2-2022-04-03"]], "Version 0.6.1 (2022/03/27)": [[10, "version-0-6-1-2022-03-27"]], "Version 0.6.0 (2022/03/27)": [[10, "version-0-6-0-2022-03-27"]], "Version 0.5.7 (2022/02/13)": [[10, "version-0-5-7-2022-02-13"]], "Security": [[10, "security"]], "Version 0.5.6 (2022/02/05)": [[10, "version-0-5-6-2022-02-05"]], "Version 0.5.5 (2022/01/19)": [[10, "version-0-5-5-2022-01-19"]], "New Features": [[10, "new-features"], [10, "id54"], [10, "id56"], [10, "id58"], [10, "id63"], [10, "id78"], [10, "id82"], [10, "id84"], [10, "id86"], [10, "id91"], [10, "id96"], [10, "id100"], [10, "id103"], [10, "id106"]], "Version 0.5.4 (2022/01/01)": [[10, "version-0-5-4-2022-01-01"]], "Version 0.5.3 (2022/01/01)": [[10, "version-0-5-3-2022-01-01"]], "Version 0.5.2 (2021/12/19)": [[10, "version-0-5-2-2021-12-19"]], "Version 0.5.1 (2021/11/30)": [[10, "version-0-5-1-2021-11-30"]], "Version 0.5.0 (2021/11/14)": [[10, "version-0-5-0-2021-11-14"]], "Version 0.4.9 (2021/07/16)": [[10, "version-0-4-9-2021-07-16"]], "Version 0.4.8 (2021/07/03)": [[10, "version-0-4-8-2021-07-03"]], "Version 0.4.7 (2021/04/07)": [[10, "version-0-4-7-2021-04-07"]], "Version 0.4.6 (2021/02/21)": [[10, "version-0-4-6-2021-02-21"]], "Version 0.4.5 (2021/02/17)": [[10, "version-0-4-5-2021-02-17"]], "Version 0.4.4 (2021/01/31)": [[10, "version-0-4-4-2021-01-31"]], "Version 0.4.3 (2021/01/10)": [[10, "version-0-4-3-2021-01-10"]], "Version 0.4.2 (2021/01/03)": [[10, "version-0-4-2-2021-01-03"]], "Version 0.4.1 (2020/12/31)": [[10, "version-0-4-1-2020-12-31"]], "Version 0.4.0 - FitTrackee on PyPI (2020/09/19)": [[10, "version-0-4-0-fittrackee-on-pypi-2020-09-19"]], "Version 0.3.0 - Administration (2020/07/15)": [[10, "version-0-3-0-administration-2020-07-15"]], "Version 0.2.5 - Fix and improvements (2020/01/31)": [[10, "version-0-2-5-fix-and-improvements-2020-01-31"]], "Version 0.2.4 - Minor fix (2020/01/30)": [[10, "version-0-2-4-minor-fix-2020-01-30"]], "Version 0.2.3 - FitTrackee available in French (2019/12/29)": [[10, "version-0-2-3-fittrackee-available-in-french-2019-12-29"]], "Version 0.2.2 - Statistics fix (2019/09/23)": [[10, "version-0-2-2-statistics-fix-2019-09-23"]], "Version 0.2.1 - Fix and improvements (2019/09/01)": [[10, "version-0-2-1-fix-and-improvements-2019-09-01"]], "Version 0.2.0 - Statistics (2019/07/07)": [[10, "version-0-2-0-statistics-2019-07-07"]], "Version 0.1.1 - Fix and improvements (2019/02/07)": [[10, "version-0-1-1-fix-and-improvements-2019-02-07"]], "Version 0.1.0 - First release \ud83c\udf89 (2018-07-04)": [[10, "version-0-1-0-first-release-2018-07-04"]], "Command line interface": [[11, "command-line-interface"]], "Database": [[11, "database"]], "ftcli db upgrade": [[11, "ftcli-db-upgrade"]], "ftcli db drop": [[11, "ftcli-db-drop"]], "ftcli oauth2 clean": [[11, "ftcli-oauth2-clean"]], "ftcli users clean_tokens": [[11, "ftcli-users-clean-tokens"]], "ftcli users update": [[11, "ftcli-users-update"]], "Account & preferences": [[12, "account-preferences"]], "Administration": [[12, "administration"], [12, "id1"]], "Screenshots": [[12, "screenshots"]], "Dashboard": [[12, "dashboard"]], "Workout detail": [[12, "workout-detail"]], "Workouts list": [[12, "workouts-list"]], "FitTrackee": [[13, "fittrackee"]], "Table of contents": [[13, "table-of-contents"]], "Installation": [[14, "installation"], [14, "id2"], [14, "id6"]], "Prerequisites": [[14, "prerequisites"]], "Environment variables": [[14, "environment-variables"]], "Emails": [[14, "emails"]], "Map tile server": [[14, "map-tile-server"]], "API rate limits \ud83c\udd95": [[14, "api-rate-limits"]], "From PyPI": [[14, "from-pypi"], [14, "id3"]], "From sources": [[14, "from-sources"], [14, "id4"]], "Dev environment": [[14, "dev-environment"], [14, "id5"]], "Production environment": [[14, "production-environment"]], "Upgrade": [[14, "upgrade"]], "Prod environment": [[14, "prod-environment"]], "Deployment": [[14, "deployment"]], "Docker": [[14, "docker"]], "Development": [[14, "development"]], "Administrator": [[15, "administrator"]], "FitTrackee fails to start": [[15, "fittrackee-fails-to-start"]], "Map images are not displayed but map is shown in Workout detail": [[15, "map-images-are-not-displayed-but-map-is-shown-in-workout-detail"]], "Troubleshooting": [[16, "troubleshooting"]], "User": [[17, "user"]]}, "indexentries": {"api_rate_limits \ud83c\udd95": [[14, "envvar-API_RATE_LIMITS"]], "app_log": [[14, "envvar-APP_LOG"]], "app_secret_key": [[14, "envvar-APP_SECRET_KEY"]], "app_settings": [[14, "envvar-APP_SETTINGS"]], "app_workers": [[14, "envvar-APP_WORKERS"]], "database_disable_pooling": [[14, "envvar-DATABASE_DISABLE_POOLING"]], "database_url": [[14, "envvar-DATABASE_URL"]], "default_staticmap": [[14, "envvar-DEFAULT_STATICMAP"]], "email_url": [[14, "envvar-EMAIL_URL"]], "flask_app": [[14, "envvar-FLASK_APP"]], "host": [[14, "envvar-HOST"]], "map_attribution": [[14, "envvar-MAP_ATTRIBUTION"]], "port": [[14, "envvar-PORT"]], "redis_url": [[14, "envvar-REDIS_URL"]], "sender_email": [[14, "envvar-SENDER_EMAIL"]], "staticmap_subdomains": [[14, "envvar-STATICMAP_SUBDOMAINS"]], "tile_server_url": [[14, "envvar-TILE_SERVER_URL"]], "ui_url": [[14, "envvar-UI_URL"]], "upload_folder": [[14, "envvar-UPLOAD_FOLDER"]], "vue_app_api_url": [[14, "envvar-VUE_APP_API_URL"]], "weather_api_key": [[14, "envvar-WEATHER_API_KEY"]], "workers_processes": [[14, "envvar-WORKERS_PROCESSES"]], "environment variable": [[14, "envvar-API_RATE_LIMITS"], [14, "envvar-APP_LOG"], [14, "envvar-APP_SECRET_KEY"], [14, "envvar-APP_SETTINGS"], [14, "envvar-APP_WORKERS"], [14, "envvar-DATABASE_DISABLE_POOLING"], [14, "envvar-DATABASE_URL"], [14, "envvar-DEFAULT_STATICMAP"], [14, "envvar-EMAIL_URL"], [14, "envvar-FLASK_APP"], [14, "envvar-HOST"], [14, "envvar-MAP_ATTRIBUTION"], [14, "envvar-PORT"], [14, "envvar-REDIS_URL"], [14, "envvar-SENDER_EMAIL"], [14, "envvar-STATICMAP_SUBDOMAINS"], [14, "envvar-TILE_SERVER_URL"], [14, "envvar-UI_URL"], [14, "envvar-UPLOAD_FOLDER"], [14, "envvar-VUE_APP_API_URL"], [14, "envvar-WEATHER_API_KEY"], [14, "envvar-WORKERS_PROCESSES"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["api/auth", "api/configuration", "api/index", "api/oauth2", "api/records", "api/sports", "api/stats", "api/users", "api/workouts", "apps", "changelog", "cli", "features", "index", "installation", "troubleshooting/administrator", "troubleshooting/index", "troubleshooting/user"], "filenames": ["api/auth.rst", "api/configuration.rst", "api/index.rst", "api/oauth2.rst", "api/records.rst", "api/sports.rst", "api/stats.rst", "api/users.rst", "api/workouts.rst", "apps.rst", "changelog.md", "cli.rst", "features.rst", "index.rst", "installation.rst", "troubleshooting/administrator.rst", "troubleshooting/index.rst", "troubleshooting/user.rst"], "titles": ["Authentication", "Configuration", "API documentation", "OAuth2", "Records", "Sports", "Statistics", "Users", "Workouts", "Third-party applications", "Change log", "Command line interface", "Features", "FitTrackee", "Installation", "Administrator", "Troubleshooting", "User"], "terms": {"post": [0, 3, 8, 9], "api": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13], "auth": [0, 1, 3, 4, 5, 6, 7, 8, 9, 14], "regist": [0, 1, 12, 14], "user": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 14, 16], "send": [0, 7, 10, 12, 14], "confirm": [0, 3, 10, 12, 14], "email": [0, 1, 7, 10, 11, 12, 15], "The": [0, 9, 10, 11, 12, 14], "newli": [0, 14], "creat": [0, 3, 8, 9, 10, 12, 14], "account": [0, 7, 10, 11, 14], "i": [0, 1, 3, 9, 10, 11, 12, 13, 14, 16], "inact": [0, 7, 12, 14], "must": [0, 1, 3, 5, 7, 9, 10, 12, 14, 15], "hi": [0, 7, 10, 12], "activ": [0, 5, 7, 10, 11, 12, 13, 14], "exampl": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14], "request": [0, 1, 3, 4, 5, 6, 7, 8, 9, 14], "http": [0, 1, 3, 4, 5, 6, 7, 8, 9, 14], "1": [0, 1, 3, 4, 5, 6, 7, 8, 12, 14], "content": [0, 1, 3, 4, 5, 6, 7, 8], "type": [0, 1, 3, 4, 5, 6, 7, 8, 10, 14], "applic": [0, 1, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14], "json": [0, 1, 3, 4, 5, 6, 7, 8], "respons": [0, 1, 3, 4, 5, 6, 7, 8], "success": [0, 1, 3, 4, 5, 6, 7, 8], "200": [0, 1, 3, 4, 5, 6, 7, 8, 10, 14], "statu": [0, 1, 3, 4, 5, 6, 7, 8, 11], "error": [0, 1, 3, 5, 7, 8, 10, 14, 15], "registr": [0, 1, 9, 10, 12, 14], "400": [0, 1, 3, 5, 7, 8], "bad": [0, 1, 3, 5, 7, 8], "messag": [0, 1, 3, 8, 10, 11, 14], "valid": [0, 1, 3, 4, 5, 6, 7, 8, 10, 14, 15], "provid": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15], "n": 0, "object": [0, 1, 5, 7, 8], "usernam": [0, 6, 7, 10, 14], "string": [0, 1, 3, 5, 6, 7, 8, 9, 14], "3": [0, 5, 6, 7, 8, 12, 14], "30": [0, 6], "charact": [0, 10], "requir": [0, 9, 10, 14], "password": [0, 7, 10, 11, 12, 14], "8": [0, 8], "lang": [0, 10], "languag": [0, 7, 10, 12], "prefer": [0, 7, 10], "invalid": [0, 1, 3, 4, 5, 6, 7, 8, 10, 14], "fallback": 0, "en": [0, 7], "english": [0, 10], "code": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10], "ok": [0, 1, 3, 4, 5, 6, 7, 8], "payload": [0, 1, 3, 5, 7, 8], "sorri": 0, "alreadi": 0, "taken": 0, "onli": [0, 3, 7, 8, 9, 10, 11, 12, 14], "alphanumer": [0, 10], "underscor": 0, "_": [0, 10], "allow": [0, 1, 8, 9, 10, 12, 13, 14], "403": [0, 1, 5, 6, 7, 8], "forbidden": [0, 1, 5, 6, 7, 8], "disabl": [0, 10, 12, 14], "500": [0, 1, 5, 7, 8, 10], "intern": [0, 1, 5, 7, 8], "server": [0, 1, 5, 7, 8, 10, 12, 13], "pleas": [0, 1, 3, 4, 5, 6, 7, 8, 10], "try": [0, 7, 8], "again": [0, 1, 3, 4, 5, 6, 7, 8], "contact": [0, 1, 7, 8, 12], "administr": [0, 1, 7, 8, 9, 16], "after": [0, 3, 9, 10, 12, 14], "auth_token": 0, "web": [0, 9, 13, 14], "token": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11], "resend": 0, "instruct": [0, 10, 12, 14], "If": [0, 3, 9, 12, 14], "thi": [0, 3, 8, 10, 11, 12, 13, 14], "endpoint": [0, 1, 3, 9, 10, 14], "avail": [0, 4, 9, 11, 12, 14], "resent": 0, "404": [0, 3, 5, 6, 7, 8, 10], "Not": [0, 3, 5, 6, 7, 8], "found": [0, 3, 5, 6, 7, 8, 10], "url": [0, 3, 9, 10, 14, 15], "wa": [0, 10], "login": 0, "an": [0, 1, 3, 5, 7, 9, 10, 12, 14, 15], "can": [0, 7, 9, 10, 12, 13, 14, 15], "log": [0, 1, 3, 4, 5, 6, 7, 8, 12, 13, 14, 15], "successfulli": 0, "401": [0, 1, 3, 4, 5, 6, 7, 8], "unauthor": [0, 1, 3, 4, 5, 6, 7, 8], "credenti": [0, 14], "get": [0, 1, 3, 4, 5, 6, 7, 8, 9], "profil": [0, 3, 9, 10], "info": 0, "scope": [0, 1, 3, 4, 5, 6, 7, 8], "read": [0, 3, 4, 5, 6, 7, 8, 9, 10], "data": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "admin": [0, 1, 4, 5, 6, 7, 8, 10, 11, 12, 14], "fals": [0, 1, 3, 5, 7, 8, 14], "bio": [0, 7], "null": [0, 5, 7, 8, 10], "birth_dat": [0, 7], "created_at": [0, 7], "sun": [0, 4, 7, 8], "14": [0, 3, 7, 8], "jul": [0, 4, 7, 8], "2019": [0, 4, 6, 7, 8], "09": [0, 7], "58": [0, 7, 10], "gmt": [0, 3, 4, 7, 8], "display_asc": 0, "true": [0, 1, 3, 5, 7, 10, 14], "sam": [0, 4, 7, 8], "com": [0, 1, 3, 7, 9, 14], "first_nam": [0, 7], "imperial_unit": [0, 7], "is_act": [0, 5, 7], "last_nam": [0, 7], "locat": [0, 7, 14], "nb_sport": [0, 7], "nb_workout": [0, 6, 7], "6": [0, 5, 7, 8, 11, 12, 14], "pictur": [0, 7, 8, 10], "record": [0, 2, 7, 8, 10, 12], "id": [0, 3, 4, 5, 6, 7, 8, 9], "9": [0, 4, 7, 12, 14], "record_typ": [0, 4, 7, 8], "AS": [0, 4, 7, 8], "sport_id": [0, 4, 5, 6, 7, 8], "valu": [0, 3, 4, 7, 8, 9, 10, 14], "18": [0, 4, 7, 8, 10], "workout_d": [0, 4, 7, 8], "07": [0, 4, 7, 8], "08": [0, 4, 7, 8], "00": [0, 4, 7, 8], "workout_id": [0, 4, 7, 8], "hvybqybra7wwxpastwr4v2": [0, 4, 7, 8], "10": [0, 1, 4, 7, 8, 14], "fd": [0, 4, 7, 8], "13": [0, 4, 7, 8], "ha": [0, 4, 7, 8, 12, 13], "43": [0, 4, 7, 8, 10], "97": [0, 4, 7, 8], "11": [0, 4, 7, 12], "ld": [0, 4, 7, 8], "01": [0, 4, 6, 7, 8], "12": [0, 4, 7, 8, 12], "m": [0, 4, 6, 7, 8], "sports_list": [0, 7], "4": [0, 1, 5, 6, 7, 8, 12, 14], "timezon": [0, 7, 8, 10, 12], "europ": [0, 7], "pari": [0, 7], "total_dist": [0, 6, 7], "67": [0, 7], "895": [0, 7], "total_dur": [0, 6, 7], "50": [0, 7, 10, 14], "27": [0, 3, 7], "weekm": [0, 6, 7], "header": [0, 1, 3, 4, 5, 6, 7, 8, 9], "author": [0, 1, 3, 4, 5, 6, 7, 8, 9, 14], "oauth": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 14], "2": [0, 1, 3, 4, 5, 6, 7, 8, 9, 12, 14], "0": [0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14], "bearer": [0, 1, 3, 4, 5, 6, 7, 8], "signatur": [0, 1, 3, 4, 5, 6, 7, 8], "expir": [0, 1, 3, 4, 5, 6, 7, 8, 11], "edit": [0, 10, 12], "write": [0, 1, 3, 5, 7, 8, 9], "updat": [0, 1, 5, 7, 8, 10, 12, 14], "first": [0, 3, 9, 12], "name": [0, 3, 7, 10, 14], "last": [0, 10, 14], "biographi": 0, "birth": [0, 10], "date": [0, 6, 8, 10, 12], "format": [0, 6, 8, 10, 12], "y": [0, 6, 8, 14], "d": [0, 6, 8], "support": [0, 3, 9, 10, 12, 14, 15], "mm": 0, "dd": 0, "yyyi": 0, "default": [0, 3, 6, 7, 8, 10, 12, 14], "date_str": 0, "correspond": 0, "client": [0, 3, 9, 10, 12, 14], "mmm": 0, "do": [0, 1, 5, 6, 7, 8], "local": [0, 10, 13, 14], "fr": [0, 7, 14], "de": [0, 14], "date_format": 0, "us": [0, 3, 7, 8, 9, 10, 12, 13, 14], "displai": [0, 8, 9, 10, 11, 12, 13, 14, 16], "app": [0, 3, 9, 10, 12, 13], "boolean": [0, 1, 3, 7, 11], "highest": [0, 4, 12], "ascent": [0, 4, 8, 10, 12], "total": [0, 3, 10, 12], "distanc": [0, 4, 8, 10, 12], "imperi": [0, 10, 12], "unit": [0, 10, 14], "time": [0, 6, 8, 10, 12], "zone": 0, "doe": [0, 6, 7, 8, 10], "week": [0, 6, 10, 12], "start": [0, 6, 8, 10, 12, 14, 16], "mondai": [0, 6, 12], "don": 0, "t": [0, 10, 15], "match": [0, 10], "sport": [0, 2, 6, 8, 10, 12, 14], "color": [0, 5, 10, 12], "000000": 0, "stopped_speed_threshold": [0, 5], "user_id": 0, "hexadecim": 0, "when": [0, 1, 10, 11, 12, 14], "ad": [0, 10, 11, 12], "workout": [0, 2, 3, 4, 5, 6, 9, 10, 13, 16], "float": [0, 8], "stop": [0, 10, 12, 14], "speed": [0, 4, 8, 10, 12, 14], "threshold": [0, 10, 12], "gpxpy": [0, 12, 14], "exist": [0, 6, 7, 8, 12, 13, 14], "delet": [0, 3, 7, 8, 10, 11, 12], "reset": [0, 7, 10, 11, 12, 14], "given": [0, 3, 14], "204": [0, 3, 7, 8], "paramet": [0, 3, 5, 6, 7, 8, 9, 10, 12, 14], "No": [0, 3, 7, 8, 10, 13], "multipart": [0, 3, 8], "form": [0, 3, 8], "file": [0, 1, 8, 10, 11, 12, 13, 14], "imag": [0, 7, 8, 10, 12, 14, 16], "extens": [0, 8, 14], "jpg": 0, "png": [0, 8, 14], "gif": 0, "part": [0, 8], "select": [0, 8, 12], "413": [0, 8], "entiti": [0, 8], "too": [0, 8], "larg": [0, 8, 12, 14], "dure": [0, 8], "size": [0, 1, 8, 10, 12, 14], "exce": [0, 8, 10], "0mb": [0, 8], "NO": [0, 3, 7, 8], "handl": [0, 12, 14], "process": [0, 10, 14], "patch": [0, 1, 5, 7, 8], "It": [0, 7, 9, 10, 12, 13, 15], "enabl": [0, 1, 7, 12, 14], "chang": [0, 12, 13, 14], "one": [0, 7, 8, 12], "current": [0, 10], "address": [0, 12, 14], "inform": [0, 10, 13, 14], "anoth": [0, 7, 14], "new": [0, 7, 9, 11, 12, 14], "new_password": 0, "miss": [0, 10], "logout": [0, 10], "blacklist": [0, 11], "out": 0, "access": [0, 3, 9, 10, 14], "revok": [0, 3], "malform": 0, "other": [0, 7, 14], "reason": 0, "config": [1, 10, 14], "admin_contact": 1, "gpx_limit_import": 1, "is_email_sending_en": 1, "is_registration_en": 1, "max_single_file_s": 1, "1048576": 1, "max_us": 1, "max_zip_file_s": 1, "10485760": 1, "map_attribut": [1, 14], "copi": [1, 14], "href": [1, 14], "www": [1, 14], "openstreetmap": [1, 10, 14], "org": [1, 14], "copyright": [1, 14], "contributor": [1, 10, 14], "version": [1, 11, 14], "7": [1, 8, 9, 11, 12, 14], "authent": [1, 2, 3, 4, 5, 7, 8, 9], "integ": [1, 3, 5, 6, 7, 8], "max": [1, 7, 8, 10], "number": [1, 7, 8, 10, 11, 12, 14], "zip": [1, 8, 10, 12], "archiv": [1, 10, 12, 14], "singl": [1, 7, 10, 12, 14], "instanc": [1, 3, 9, 10, 12, 14], "you": [1, 5, 6, 7, 8, 12, 13, 14], "have": [1, 5, 6, 7, 8, 10], "permiss": [1, 5, 6, 7, 8], "ping": 1, "health": 1, "check": [1, 10, 14, 15], "pong": 1, "configur": [2, 9, 10, 12, 14], "oauth2": [2, 9], "statist": 2, "pagin": [3, 7, 8], "5": [3, 5, 6, 7, 8, 11, 12, 14], "page": [3, 7, 8, 10], "fittracke": [3, 9, 11, 12, 14, 16], "parti": [3, 12, 13], "without": [3, 6, 7, 8, 10, 12, 13], "client_descript": 3, "client_id": [3, 9], "o22a27s2abpuoxjbxv3ujdox": 3, "issued_at": 3, "thu": 3, "juli": 3, "2022": 3, "06": [3, 6], "53": [3, 10], "gpx": [3, 8, 10, 12, 13, 14], "import": [3, 10, 14], "redirect_uri": 3, "callback": [3, 9], "websit": 3, "has_next": 3, "has_prev": 3, "queri": [3, 6, 7, 8], "client_secret": 3, "secret": [3, 9, 14], "client_nam": 3, "client_uri": 3, "arrai": 3, "list": [3, 10, 13, 14], "redirect": [3, 9], "descript": [3, 11, 14], "option": [3, 9, 10, 11, 14], "client_client_id": 3, "NOT": [3, 5, 8], "int": [3, 5, 8], "by_id": 3, "all": [3, 4, 5, 6, 7, 14], "associ": 3, "issu": [3, 13, 14], "response_typ": [3, 9], "state": [3, 9], "uniqu": [3, 9], "prevent": [3, 9, 14], "cross": [3, 9, 12], "site": [3, 9], "forgeri": [3, 9], "mandatori": [3, 8, 9, 10, 14], "recommend": [3, 9, 14], "code_challeng": [3, 9], "gener": [3, 9, 10, 12, 14], "from": [3, 6, 8, 9, 10, 12, 13], "verifi": [3, 9], "pkce": [3, 9], "code_challenge_method": [3, 9], "method": [3, 9, 14], "challeng": [3, 9], "s256": [3, 9], "return": [3, 4, 7, 8, 10, 14], "authlib": [3, 9, 14], "librari": [3, 9, 14], "refresh": [3, 10], "access_token": 3, "roehv64thcg28wcewzhrnvlusoduvw8nvnhkcml57": 3, "expires_in": 3, "864000": 3, "refresh_token": 3, "nuv9cy8vqonrqkhtz5pqaq2zw7msh0mornpjr14amswd6f6i": 3, "token_typ": 3, "expires_at": 3, "1658660147": 3, "0667062": 3, "grant_typ": 3, "grant": [3, 9], "authorization_cod": [3, 9], "ar": [3, 4, 8, 9, 10, 11, 12, 13, 14, 16], "code_verifi": 3, "follow": [4, 9, 11, 12, 14, 15], "averag": [4, 8, 10, 12], "farthest": [4, 10, 12], "longest": [4, 10, 12], "durat": [4, 8, 10, 12], "maximum": [4, 10, 12], "non": [5, 13], "is_active_for_us": 5, "label": [5, 10], "cycl": [5, 10, 12], "transport": [5, 10, 12], "hike": [5, 10, 12], "mountain": [5, 12], "bike": [5, 8, 10, 12], "run": [5, 9, 10, 12, 14], "walk": [5, 10, 12], "has_workout": 5, "stat": [6, 10], "user_nam": [6, 7], "by_tim": 6, "2018": [6, 8], "2017": [6, 8], "average_spe": 6, "48": 6, "total_asc": 6, "203": 6, "156": [6, 10], "15": [6, 8], "282": 6, "12341": 6, "16": [6, 8], "99": [6, 10], "150": 6, "178": [6, 10], "47": [6, 8, 10], "9960": 6, "95": [6, 10], "46": [6, 10], "78": 6, "613": 6, "1267": 6, "end": [6, 8], "frame": 6, "sundai": [6, 8, 12], "month": [6, 10, 12], "year": [6, 12], "by_sport": 6, "uploads_dir_s": 6, "1000": 6, "regardless": 7, "right": [7, 9, 10, 11, 12, 14], "some": [7, 8, 9, 10, 12, 13, 14], "order_bi": [7, 8], "workouts_count": 7, "par_pag": 7, "is_admin": 7, "sat": 7, "20": 7, "03": [7, 8], "per_pag": [7, 8], "per": [7, 8, 10, 14], "q": 7, "order": [7, 8, 9, 10], "sort": [7, 8], "asc": [7, 8], "desc": [7, 8], "criteria": [7, 8], "detail": [7, 10, 14, 16], "jpeg": 7, "add": [7, 10, 11, 12, 13], "remov": [7, 10, 11, 12], "modifi": [7, 10, 11, 14], "new_email": 7, "reset_password": 7, "differ": [7, 10, 12], "than": [7, 10, 11], "curent": 7, "A": [7, 10, 11, 12, 14, 15], "own": [7, 12, 13], "except": [7, 14, 15], "he": 7, "": [7, 8, 10, 14], "john_do": 7, "your": [7, 12, 13, 14], "02": 8, "31": 8, "least": 8, "ave_spe": 8, "bound": 8, "creation_d": 8, "51": 8, "descent": [8, 10, 12], "17": [8, 14], "04": 8, "kjxavsturjvoah2wvcegef": 8, "map": [8, 10, 12, 13, 16], "max_alt": 8, "max_spe": 8, "min_alt": 8, "modification_d": 8, "move": [8, 10], "next_workout": 8, "note": [8, 10, 12, 14], "paus": [8, 10], "previous_workout": 8, "mon": 8, "jan": 8, "segment": [8, 10, 12], "titl": 8, "weather_end": 8, "weather_start": 8, "with_gpx": 8, "100": [8, 10, 12], "distance_from": 8, "minim": [8, 9], "distance_to": 8, "maxim": 8, "duration_from": 8, "h": [8, 12], "duration_to": 8, "ave_speed_from": 8, "ave_speed_to": 8, "max_speed_from": 8, "max_speed_to": 8, "workout_short_id": 8, "57": [8, 10], "45": 8, "22": 8, "morn": 8, "short": 8, "leaflet": [8, 14], "chart_data": 8, "chart": [8, 10, 12, 14], "j": [8, 10, 14], "elev": [8, 10, 12, 14], "279": 8, "latitud": 8, "5078118": 8, "longitud": 8, "1232004": 8, "63": 8, "fri": 8, "44": [8, 10], "7380": 8, "280": 8, "5079733": 8, "1234538": 8, "39": 8, "segment_id": 8, "rechart": 8, "map_id": 8, "fa33f4d996844a5c73ecd1ae24456ab8": 8, "1563529507772": 8, "map_til": 8, "z": [8, 14], "x": [8, 9, 14], "tile": [8, 10, 12], "c": [8, 14], "4109": 8, "2930": 8, "subdomain": [8, 10, 14], "zoom": 8, "index": 8, "along": 8, "axi": 8, "download": [8, 10, 12, 14], "xml": 8, "201": [8, 10], "no_gpx": 8, "uuid": [8, 10], "km": [8, 12], "second": 8, "rest": 9, "see": [9, 10, 12, 13, 14, 15], "document": [9, 13, 14], "whose": 9, "most": 9, "To": [9, 10, 14], "interact": 9, "set": [9, 10, 11, 12, 14, 15], "tab": 9, "exchang": 9, "sent": [9, 10, 12, 14], "bodi": [9, 10, 14], "better": [9, 10], "secur": 9, "relat": [9, 12, 14], "shown": [9, 10, 16], "thei": [9, 14], "store": [9, 12, 13], "3rd": 9, "need": [9, 10, 14], "fittrackee_host": 9, "sinc": [9, 14], "separ": [9, 14], "space": 9, "For": [9, 12, 14], "3aread": 9, "3awrit": 9, "so": 9, "fetch": [9, 14], "implement": 9, "behind": 9, "proxi": [9, 14], "forward": [9, 14], "proto": [9, 14], "nginx": [9, 10, 12, 14], "proxy_set_head": [9, 14], "scheme": [9, 14], "about": [9, 14], "simplifi": [9, 10], "aaron": 9, "parecki": 9, "oauthlib": 9, "python": [9, 10, 14], "session": 9, "260": 10, "261": 10, "should": [10, 14], "limit": [10, 12], "still": [10, 12, 13, 14], "89": 10, "b1536fc": 10, "257": 10, "thank": 10, "jat255": 10, "112": 10, "244": 10, "virtual": [10, 12], "ride": 10, "246": 10, "postgresql": [10, 14, 15], "247": 10, "microsecond": 10, "pr": 10, "252": 10, "init": [10, 14], "norwegian": 10, "bokm\u00e5l": 10, "contain": [10, 14], "databas": [10, 12, 14, 15], "migrat": [10, 11, 14], "upgrad": 10, "242": 10, "weblat": 10, "german": 10, "qwerty287": 10, "241": 10, "strength": 10, "estim": 10, "packag": [10, 14], "239": 10, "cb9d02f": 10, "88": 10, "231": 10, "236": 10, "rate": 10, "232": 10, "hidden": [10, 12], "237": 10, "212": 10, "host": [10, 14], "lavoi": 10, "230": 10, "problem": 10, "225": 10, "grammar": 10, "skylan0916": 10, "In": [10, 12], "execut": 10, "lower": 10, "v0": [10, 14], "postgr": [10, 15], "213": 10, "measur": 10, "ft": 10, "mi": 10, "223": 10, "icon": [10, 14], "167": 10, "dashboard": 10, "162": 10, "fmstrat": 10, "210": 10, "could": 10, "environ": [10, 11, 15], "variabl": [10, 15], "staticmap_subdomain": [10, 14], "209": 10, "incorrect": 10, "track": [10, 13], "multipl": 10, "gorgobacka": 10, "now": [10, 11, 12, 14], "And": 10, "detect": 10, "browser": 10, "208": 10, "card": 10, "html": 10, "attribut": [10, 14], "197": 10, "196": 10, "manag": [10, 11, 14], "tool": [10, 14], "190": 10, "were": 10, "193": 10, "192": 10, "instead": [10, 12], "191": 10, "layout": 10, "includ": 10, "195": 10, "affect": 10, "previous": 10, "cc4287e": 10, "docker": 10, "env": [10, 14], "offset": 10, "depend": [10, 14], "refacto": 10, "befor": [10, 14], "introduc": 10, "possibl": [10, 12, 13, 14], "smtp": [10, 14], "reduc": 10, "pre": 10, "requisit": 10, "cli": [10, 11, 12, 14], "180": 10, "cannot": [10, 12], "tl": [10, 14], "177": 10, "posit": [10, 12], "small": 10, "screen": [10, 12], "175": 10, "173": 10, "link": [10, 14], "171": 10, "correctli": 10, "155": 10, "106": 10, "169": 10, "161": 10, "160": 10, "sever": [10, 12, 13, 14], "danielsiersleben": 10, "report": 10, "initi": [10, 14], "command": [10, 12, 13, 14], "149": 10, "initialis": [10, 14], "152": 10, "autoescap": 10, "jinja": 10, "templat": 10, "151": 10, "sanit": 10, "input": 10, "serv": [10, 14], "dramatiq": [10, 14], "warn": [10, 12], "launch": 10, "worker": [10, 14], "w": 10, "script": 10, "entrypoint": 10, "drop": 10, "avoid": 10, "product": 10, "dotenv": 10, "146": 10, "filter": [10, 12], "145": 10, "model": 10, "140": 10, "fullscreen": 10, "control": [10, 12, 14], "138": 10, "135": 10, "finish": 10, "marker": 10, "134": 10, "wind": [10, 12], "direct": [10, 12], "877fa0f": 10, "calendar": [10, 12], "resolut": 10, "131": 10, "129": 10, "127": [10, 14], "pars": [10, 14], "legitim": 10, "uri": 10, "localhost": [10, 14], "25": [10, 14], "123": 10, "121": 10, "snowsho": [10, 12], "116": 10, "ui": 10, "button": 10, "graph": 10, "115": 10, "91": 10, "min": 10, "altitud": 10, "90": 10, "seem": 10, "104": 10, "switch": 10, "agplv3": 10, "licens": [10, 13, 14], "101": 10, "full": [10, 12], "develop": [10, 11, 13], "98": 10, "109": 10, "slow": 10, "movement": 10, "84": 10, "93": 10, "paf38": 10, "83": 10, "static": [10, 12, 14], "keep": [10, 13, 14], "default_staticmap": [10, 14], "81": 10, "remain": 10, "textarea": 10, "82": 10, "dai": [10, 11, 12, 14], "80": [10, 14], "save": [10, 12], "79": 10, "fail": [10, 16], "make": [10, 14], "rebuild": 10, "75": 10, "same": 10, "javascript": [10, 14], "due": 10, "sqlalchemi": [10, 14, 15], "engin": [10, 14, 15], "longer": [10, 15], "database_url": [10, 14], "72": 10, "exceed": 10, "71": 10, "greater": 10, "70": 10, "less": 10, "upload": [10, 11, 12, 14], "66": 10, "64": 10, "62": 10, "refactor": 10, "evalu": [10, 14], "purpos": [10, 14], "standard": [10, 14], "term": [10, 14], "directori": [10, 12, 14], "also": [10, 11, 13, 14], "59": 10, "major": 10, "instal": [10, 13], "becom": 10, "more": [10, 11, 13, 14], "easi": 10, "been": [10, 13], "renam": 10, "layer": [10, 14], "replac": [10, 14], "thunderforest": [10, 14], "outdoor": [10, 12, 13, 14], "54": 10, "redi": [10, 14], "complet": 10, "side": 10, "4c3fc34": 10, "empti": [10, 11, 14], "34614d5": 10, "spinner": 10, "load": [10, 15], "b862a77": 10, "2e1ee2c": 10, "interceptor": 10, "rout": [10, 14], "definit": 10, "down": 10, "weekend": 10, "background": 10, "40": 10, "i18n": 10, "41": 10, "show": [10, 11, 14], "point": [10, 14], "mous": 10, "over": 10, "choos": [10, 12], "36": 10, "33": 10, "37": 10, "34": 10, "weather": [10, 12, 14], "anymor": 10, "poetri": [10, 14], "pipenv": 10, "calcul": 10, "28": 10, "26": 10, "tooltip": [10, 12], "creation": [10, 12], "montain": 10, "even": [10, 12], "enter": [10, 12], "darkski": [10, 12], "kei": [10, 12, 14], "farest": 10, "search": 10, "owner": [10, 12, 14], "view": [10, 12, 14], "usag": [11, 14], "arg": [11, 14], "help": [11, 14], "exit": [11, 14], "deprec": 11, "next": [11, 12], "fittrackee_set_admin": 11, "fittrackee_upgrade_db": 11, "appli": 11, "kind": 12, "encrypt": 12, "With": [12, 14], "open": [12, 13, 14], "street": [12, 13], "electr": 12, "row": 12, "ski": 12, "alpin": 12, "countri": 12, "trail": 12, "overridden": 12, "which": 12, "up": [12, 13], "metric": 12, "system": [12, 14], "arrow": 12, "indic": 12, "come": 12, "period": 12, "mai": [12, 13, 14], "origin": 12, "dropdown": 12, "On": [12, 14], "case": [12, 14], "line": [12, 13, 14], "between": 12, "hide": 12, "overrid": 12, "appear": 12, "third": [12, 13], "defin": 12, "individu": 12, "necessari": [12, 14], "like": [12, 14], "lock": 12, "via": 12, "mobil": 13, "yet": 13, "export": [13, 14], "them": 13, "android": 13, "exhaust": 13, "runner": 13, "gpl": 13, "v3": 13, "forrunn": 13, "opentrack": 13, "apach": 13, "fitotrack": 13, "under": [13, 14], "heavi": [13, 14], "featur": [13, 14], "unstabl": [13, 14], "interfac": [13, 14], "troubleshoot": 13, "written": 14, "typescript": 14, "flask": 14, "staticmap": 14, "coordin": 14, "forecast": 14, "io": 14, "dark": 14, "sky": 14, "former": 14, "task": 14, "queue": 14, "vue3": 14, "vuex": 14, "logo": 14, "made": 14, "freepik": 14, "flaticon": 14, "fork": 14, "awesom": 14, "yarn": 14, "compos": 14, "step": 14, "describ": 14, "linux": 14, "test": 14, "debian": 14, "arch": 14, "o": 14, "encount": 14, "adapt": 14, "makefil": 14, "custom": 14, "flask_app": 14, "modul": 14, "pwd": 14, "__main__": 14, "py": 14, "els": 14, "port": 14, "5000": 14, "app_set": 14, "productionconfig": 14, "app_secret_kei": 14, "strong": 14, "jwt": 14, "app_work": 14, "spawn": 14, "gunicorn": [14, 15], "app_log": 14, "path": [14, 15], "upload_fold": [14, 15], "absolut": [14, 15], "where": 14, "folder": 14, "application_directori": 14, "virtualenv": 14, "5432": 14, "begin": 14, "database_disable_pool": 14, "pool": 14, "entri": 14, "directli": 14, "ui_url": 14, "email_url": [14, 15], "sender_email": 14, "sender": 14, "redis_url": 14, "workers_process": 14, "api_rate_limit": 14, "300": 14, "minut": 14, "tile_server_url": 14, "b": 14, "osm": 14, "franc": 14, "target": 14, "_blank": 14, "rel": 14, "noopen": 14, "noreferr": 14, "komoot": 14, "otherwis": 14, "insensit": 14, "weather_api_kei": 14, "weather_api": 14, "vue_app_api_url": 14, "unencrypt": 14, "ssl": 14, "465": 14, "starttl": 14, "587": 14, "office365": 14, "work": 14, "omit": 14, "old": 14, "adress": 14, "apikei": 14, "xxxx": 14, "servic": 14, "expect": 14, "osmfr": 14, "fond": 14, "cart": 14, "par": 14, "mention": 14, "legal": 14, "nofollow": 14, "sou": 14, "nbsp": 14, "creativecommon": 14, "sa": 14, "licenc": 14, "cc": 14, "BY": 14, "chosen": 14, "randomli": 14, "base": 14, "ip": 14, "fix": 14, "window": 14, "strategi": 14, "subject": 14, "asset": 14, "notat": 14, "comma": 14, "hour": 14, "mainten": 14, "diagnost": 14, "util": 14, "commmand": 14, "clear": 14, "specif": 14, "enumer": 14, "wai": 14, "pip": 14, "WITH": 14, "schema": 14, "privileg": 14, "nano": 14, "ftcli": 14, "db": 14, "fittrackee_work": 14, "systemd": 14, "3000": 14, "archlinux": 14, "yai": 14, "project": 14, "clone": 14, "repo": 14, "git": 14, "github": 14, "samr1": 14, "cd": 14, "vue": 14, "releas": 14, "wget": 14, "tar": 14, "gz": 14, "xzf": 14, "mv": 14, "sql": 14, "backup": 14, "pg_dump": 14, "u": 14, "changelog": 14, "restart": 14, "pull": 14, "repositori": 14, "overwrit": 14, "cp": 14, "r": 14, "There": 14, "One": 14, "pass": 14, "distribut": 14, "network": 14, "startlimitintervalsec": 14, "simpl": 14, "alwai": 14, "restartsec": 14, "standardoutput": 14, "syslog": 14, "standarderror": 14, "syslogidentifi": 14, "workingdirectori": 14, "home": 14, "execstart": 14, "venv": 14, "bin": 14, "create_app": 14, "logfil": 14, "wantedbi": 14, "multi": 14, "OF": 14, "listen": 14, "443": 14, "http2": 14, "server_nam": 14, "ssl_certif": 14, "fullchain": 14, "pem": 14, "ssl_certificate_kei": 14, "privkei": 14, "how": 14, "1mb": 14, "larger": 14, "ll": 14, "uncom": 14, "below": 14, "want": 14, "client_max_body_s": 14, "1m": 14, "proxy_pass": 14, "proxy_redirect": 14, "real": 14, "remote_addr": 14, "proxy_add_x_forwarded_for": 14, "301": 14, "request_uri": 14, "build": 14, "8025": 14, "mailhog": 14, "shell": 14, "insid": 14, "addit": 14, "fittrackee_cli": 14, "lint": 14, "exc": 15, "nosuchmoduleerror": 15, "plugin": 15, "dialect": 15, "invalidemailurlschem": 15, "todo": 17}, "objects": {"": [[0, 0, 1, "post--api-auth-account-confirm", "/api/auth/account/confirm"], [0, 0, 1, "post--api-auth-account-resend-confirmation", "/api/auth/account/resend-confirmation"], [0, 0, 1, "post--api-auth-email-update", "/api/auth/email/update"], [0, 0, 1, "post--api-auth-login", "/api/auth/login"], [0, 0, 1, "post--api-auth-logout", "/api/auth/logout"], [0, 0, 1, "post--api-auth-password-reset-request", "/api/auth/password/reset-request"], [0, 0, 1, "post--api-auth-password-update", "/api/auth/password/update"], [0, 1, 1, "delete--api-auth-picture", "/api/auth/picture"], [0, 0, 1, "post--api-auth-picture", "/api/auth/picture"], [0, 2, 1, "get--api-auth-profile", "/api/auth/profile"], [0, 0, 1, "post--api-auth-profile-edit", "/api/auth/profile/edit"], [0, 3, 1, "patch--api-auth-profile-edit-account", "/api/auth/profile/edit/account"], [0, 0, 1, "post--api-auth-profile-edit-preferences", "/api/auth/profile/edit/preferences"], [0, 0, 1, "post--api-auth-profile-edit-sports", "/api/auth/profile/edit/sports"], [0, 1, 1, "delete--api-auth-profile-reset-sports-(sport_id)", "/api/auth/profile/reset/sports/(sport_id)"], [0, 0, 1, "post--api-auth-register", "/api/auth/register"], [1, 2, 1, "get--api-config", "/api/config"], [1, 3, 1, "patch--api-config", "/api/config"], [3, 2, 1, "get--api-oauth-apps", "/api/oauth/apps"], [3, 0, 1, "post--api-oauth-apps", "/api/oauth/apps"], [3, 1, 1, "delete--api-oauth-apps-(int-client_id)", "/api/oauth/apps/(int:client_id)"], [3, 2, 1, "get--api-oauth-apps-(int-client_id)-by_id", "/api/oauth/apps/(int:client_id)/by_id"], [3, 0, 1, "post--api-oauth-apps-(int-client_id)-revoke", "/api/oauth/apps/(int:client_id)/revoke"], [3, 2, 1, "get--api-oauth-apps-(string-client_client_id)", "/api/oauth/apps/(string:client_client_id)"], [3, 0, 1, "post--api-oauth-authorize", "/api/oauth/authorize"], [3, 0, 1, "post--api-oauth-revoke", "/api/oauth/revoke"], [3, 0, 1, "post--api-oauth-token", "/api/oauth/token"], [1, 2, 1, "get--api-ping", "/api/ping"], [4, 2, 1, "get--api-records", "/api/records"], [5, 2, 1, "get--api-sports", "/api/sports"], [5, 2, 1, "get--api-sports-(int-sport_id)", "/api/sports/(int:sport_id)"], [5, 3, 1, "patch--api-sports-(int-sport_id)", "/api/sports/(int:sport_id)"], [6, 2, 1, "get--api-stats-(user_name)-by_sport", "/api/stats/(user_name)/by_sport"], [6, 2, 1, "get--api-stats-(user_name)-by_time", "/api/stats/(user_name)/by_time"], [6, 2, 1, "get--api-stats-all", "/api/stats/all"], [7, 2, 1, "get--api-users", "/api/users"], [7, 1, 1, "delete--api-users-(user_name)", "/api/users/(user_name)"], [7, 2, 1, "get--api-users-(user_name)", "/api/users/(user_name)"], [7, 3, 1, "patch--api-users-(user_name)", "/api/users/(user_name)"], [7, 2, 1, "get--api-users-(user_name)-picture", "/api/users/(user_name)/picture"], [8, 2, 1, "get--api-workouts", "/api/workouts"], [8, 0, 1, "post--api-workouts", "/api/workouts"], [8, 1, 1, "delete--api-workouts-(string-workout_short_id)", "/api/workouts/(string:workout_short_id)"], [8, 2, 1, "get--api-workouts-(string-workout_short_id)", "/api/workouts/(string:workout_short_id)"], [8, 3, 1, "patch--api-workouts-(string-workout_short_id)", "/api/workouts/(string:workout_short_id)"], [8, 2, 1, "get--api-workouts-(string-workout_short_id)-chart_data", "/api/workouts/(string:workout_short_id)/chart_data"], [8, 2, 1, "get--api-workouts-(string-workout_short_id)-chart_data-segment-(int-segment_id)", "/api/workouts/(string:workout_short_id)/chart_data/segment/(int:segment_id)"], [8, 2, 1, "get--api-workouts-(string-workout_short_id)-gpx", "/api/workouts/(string:workout_short_id)/gpx"], [8, 2, 1, "get--api-workouts-(string-workout_short_id)-gpx-download", "/api/workouts/(string:workout_short_id)/gpx/download"], [8, 2, 1, "get--api-workouts-(string-workout_short_id)-gpx-segment-(int-segment_id)", "/api/workouts/(string:workout_short_id)/gpx/segment/(int:segment_id)"], [8, 2, 1, "get--api-workouts-map-(map_id)", "/api/workouts/map/(map_id)"], [8, 0, 1, "post--api-workouts-no_gpx", "/api/workouts/no_gpx"], [14, 4, 1, "envvar-API_RATE_LIMITS", "API_RATE_LIMITS \ud83c\udd95"], [14, 4, 1, "-", "APP_LOG"], [14, 4, 1, "-", "APP_SECRET_KEY"], [14, 4, 1, "-", "APP_SETTINGS"], [14, 4, 1, "-", "APP_WORKERS"], [14, 4, 1, "-", "DATABASE_DISABLE_POOLING"], [14, 4, 1, "-", "DATABASE_URL"], [14, 4, 1, "-", "DEFAULT_STATICMAP"], [14, 4, 1, "-", "EMAIL_URL"], [14, 4, 1, "-", "FLASK_APP"], [14, 4, 1, "-", "HOST"], [14, 4, 1, "-", "MAP_ATTRIBUTION"], [14, 4, 1, "-", "PORT"], [14, 4, 1, "-", "REDIS_URL"], [14, 4, 1, "-", "SENDER_EMAIL"], [14, 4, 1, "-", "STATICMAP_SUBDOMAINS"], [14, 4, 1, "-", "TILE_SERVER_URL"], [14, 4, 1, "-", "UI_URL"], [14, 4, 1, "-", "UPLOAD_FOLDER"], [14, 4, 1, "-", "VUE_APP_API_URL"], [14, 4, 1, "-", "WEATHER_API_KEY"], [14, 4, 1, "-", "WORKERS_PROCESSES"]], "/api/workouts/map_tile/(s)/(z)/(x)/(y)": [[8, 2, 1, "get--api-workouts-map_tile-(s)-(z)-(x)-(y).png", "png"]]}, "objtypes": {"0": "http:post", "1": "http:delete", "2": "http:get", "3": "http:patch", "4": "std:envvar"}, "objnames": {"0": ["http", "post", "HTTP post"], "1": ["http", "delete", "HTTP delete"], "2": ["http", "get", "HTTP get"], "3": ["http", "patch", "HTTP patch"], "4": ["std", "envvar", "environment variable"]}, "titleterms": {"authent": 0, "configur": 1, "api": [2, 14], "document": [2, 10], "endpoint": 2, "oauth2": [3, 11], "record": 4, "sport": 5, "statist": [6, 10, 12], "user": [7, 11, 17], "workout": [8, 12, 15], "third": 9, "parti": 9, "applic": 9, "scope": 9, "flow": 9, "resourc": 9, "chang": 10, "log": 10, "version": 10, "0": 10, "7": 10, "4": 10, "2022": 10, "11": 10, "05": 10, "bug": 10, "fix": 10, "translat": [10, 12], "3": 10, "01": 10, "featur": [10, 12], "enhanc": 10, "2": 10, "09": 10, "21": 10, "1": 10, "19": 10, "6": 10, "12": 10, "14": 10, "issu": 10, "close": 10, "pull": 10, "request": 10, "misc": 10, "07": 10, "27": 10, "10": 10, "13": 10, "9": 10, "03": 10, "8": 10, "06": 10, "22": 10, "29": 10, "5": 10, "04": 10, "24": 10, "23": 10, "02": 10, "secur": 10, "new": 10, "2021": 10, "30": 10, "16": 10, "17": 10, "31": 10, "2020": 10, "fittracke": [10, 13, 15], "pypi": [10, 14], "administr": [10, 12, 15], "15": 10, "improv": 10, "minor": 10, "avail": 10, "french": 10, "2019": 10, "first": 10, "releas": 10, "2018": 10, "command": 11, "line": 11, "interfac": 11, "databas": 11, "ftcli": 11, "db": 11, "upgrad": [11, 14], "drop": 11, "clean": 11, "clean_token": 11, "updat": 11, "account": 12, "prefer": 12, "screenshot": 12, "dashboard": 12, "detail": [12, 15], "list": 12, "tabl": 13, "content": 13, "instal": 14, "prerequisit": 14, "environ": 14, "variabl": 14, "email": 14, "map": [14, 15], "tile": 14, "server": 14, "rate": 14, "limit": 14, "from": 14, "sourc": 14, "dev": 14, "product": 14, "prod": 14, "deploy": 14, "docker": 14, "develop": 14, "fail": 15, "start": 15, "imag": 15, "ar": 15, "displai": 15, "i": 15, "shown": 15, "troubleshoot": 16}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Authentication": [[0, "authentication"]], "Configuration": [[1, "configuration"]], "API documentation": [[2, "api-documentation"]], "Endpoints:": [[2, null]], "OAuth2": [[3, "oauth2"], [11, "oauth2"]], "Records": [[4, "records"]], "Sports": [[5, "sports"]], "Statistics": [[6, "statistics"], [12, "statistics"]], "Users": [[7, "users"], [11, "users"]], "Workouts": [[8, "workouts"], [12, "workouts"]], "Third-party applications": [[9, "third-party-applications"]], "Scopes": [[9, "scopes"]], "Flow": [[9, "flow"]], "Resources": [[9, "resources"]], "Change log": [[10, "change-log"]], "Version 0.7.4 (2022/11/05)": [[10, "version-0-7-4-2022-11-05"]], "Bugs Fixed": [[10, "bugs-fixed"], [10, "id1"], [10, "id4"], [10, "id7"], [10, "id9"], [10, "id11"], [10, "id14"], [10, "id16"], [10, "id19"], [10, "id22"], [10, "id25"], [10, "id30"], [10, "id32"], [10, "id34"], [10, "id36"], [10, "id39"], [10, "id41"], [10, "id47"], [10, "id50"], [10, "id52"], [10, "id54"], [10, "id61"], [10, "id66"], [10, "id68"], [10, "id70"], [10, "id73"], [10, "id75"], [10, "id77"], [10, "id81"], [10, "id91"], [10, "id94"], [10, "id96"], [10, "id99"], [10, "id106"]], "Translations": [[10, "translations"], [10, "id2"], [10, "id3"], [10, "id5"], [10, "id8"], [10, "id20"], [12, "translations"]], "Documentation": [[10, "documentation"]], "Version 0.7.3 (2022/11/01)": [[10, "version-0-7-3-2022-11-01"]], "Features and enhancements": [[10, "features-and-enhancements"], [10, "id6"]], "Version 0.7.2 (2022/09/21)": [[10, "version-0-7-2-2022-09-21"]], "Version 0.7.1 (2022/09/21)": [[10, "version-0-7-1-2022-09-21"]], "Version 0.7.0 (2022/09/19)": [[10, "version-0-7-0-2022-09-19"]], "Version 0.6.12 (2022/09/14)": [[10, "version-0-6-12-2022-09-14"]], "Issues Closed": [[10, "issues-closed"], [10, "id10"], [10, "id13"], [10, "id17"], [10, "id21"], [10, "id24"], [10, "id27"], [10, "id29"], [10, "id33"], [10, "id35"], [10, "id37"], [10, "id42"], [10, "id46"], [10, "id49"], [10, "id51"], [10, "id53"], [10, "id55"], [10, "id57"], [10, "id59"], [10, "id64"], [10, "id67"], [10, "id69"], [10, "id72"], [10, "id74"], [10, "id76"], [10, "id79"], [10, "id83"], [10, "id85"], [10, "id87"], [10, "id90"], [10, "id92"], [10, "id95"], [10, "id97"], [10, "id101"], [10, "id104"], [10, "id107"]], "Pull Requests": [[10, "pull-requests"], [10, "id12"], [10, "id15"], [10, "id31"], [10, "id40"], [10, "id44"], [10, "id48"], [10, "id63"]], "Misc": [[10, "misc"], [10, "id23"], [10, "id26"], [10, "id43"], [10, "id45"], [10, "id62"], [10, "id71"], [10, "id78"], [10, "id82"], [10, "id89"], [10, "id100"], [10, "id103"]], "Version 0.6.11 (2022/07/27)": [[10, "version-0-6-11-2022-07-27"]], "Features": [[10, "features"], [10, "id18"], [10, "id28"], [10, "id38"], [12, "features"]], "Version 0.6.10 (2022/07/13)": [[10, "version-0-6-10-2022-07-13"]], "Version 0.6.9 (2022/07/03)": [[10, "version-0-6-9-2022-07-03"]], "Version 0.6.8 (2022/06/22)": [[10, "version-0-6-8-2022-06-22"]], "Version 0.6.7 (2022/06/11)": [[10, "version-0-6-7-2022-06-11"]], "Version 0.6.6 (2022/05/29)": [[10, "version-0-6-6-2022-05-29"]], "Version 0.6.5 (2022/04/24)": [[10, "version-0-6-5-2022-04-24"]], "Version 0.6.4 (2022/04/23)": [[10, "version-0-6-4-2022-04-23"]], "Version 0.6.3 (2022/04/09)": [[10, "version-0-6-3-2022-04-09"]], "Version 0.6.2 (2022/04/03)": [[10, "version-0-6-2-2022-04-03"]], "Version 0.6.1 (2022/03/27)": [[10, "version-0-6-1-2022-03-27"]], "Version 0.6.0 (2022/03/27)": [[10, "version-0-6-0-2022-03-27"]], "Version 0.5.7 (2022/02/13)": [[10, "version-0-5-7-2022-02-13"]], "Security": [[10, "security"]], "Version 0.5.6 (2022/02/05)": [[10, "version-0-5-6-2022-02-05"]], "Version 0.5.5 (2022/01/19)": [[10, "version-0-5-5-2022-01-19"]], "New Features": [[10, "new-features"], [10, "id56"], [10, "id58"], [10, "id60"], [10, "id65"], [10, "id80"], [10, "id84"], [10, "id86"], [10, "id88"], [10, "id93"], [10, "id98"], [10, "id102"], [10, "id105"], [10, "id108"]], "Version 0.5.4 (2022/01/01)": [[10, "version-0-5-4-2022-01-01"]], "Version 0.5.3 (2022/01/01)": [[10, "version-0-5-3-2022-01-01"]], "Version 0.5.2 (2021/12/19)": [[10, "version-0-5-2-2021-12-19"]], "Version 0.5.1 (2021/11/30)": [[10, "version-0-5-1-2021-11-30"]], "Version 0.5.0 (2021/11/14)": [[10, "version-0-5-0-2021-11-14"]], "Version 0.4.9 (2021/07/16)": [[10, "version-0-4-9-2021-07-16"]], "Version 0.4.8 (2021/07/03)": [[10, "version-0-4-8-2021-07-03"]], "Version 0.4.7 (2021/04/07)": [[10, "version-0-4-7-2021-04-07"]], "Version 0.4.6 (2021/02/21)": [[10, "version-0-4-6-2021-02-21"]], "Version 0.4.5 (2021/02/17)": [[10, "version-0-4-5-2021-02-17"]], "Version 0.4.4 (2021/01/31)": [[10, "version-0-4-4-2021-01-31"]], "Version 0.4.3 (2021/01/10)": [[10, "version-0-4-3-2021-01-10"]], "Version 0.4.2 (2021/01/03)": [[10, "version-0-4-2-2021-01-03"]], "Version 0.4.1 (2020/12/31)": [[10, "version-0-4-1-2020-12-31"]], "Version 0.4.0 - FitTrackee on PyPI (2020/09/19)": [[10, "version-0-4-0-fittrackee-on-pypi-2020-09-19"]], "Version 0.3.0 - Administration (2020/07/15)": [[10, "version-0-3-0-administration-2020-07-15"]], "Version 0.2.5 - Fix and improvements (2020/01/31)": [[10, "version-0-2-5-fix-and-improvements-2020-01-31"]], "Version 0.2.4 - Minor fix (2020/01/30)": [[10, "version-0-2-4-minor-fix-2020-01-30"]], "Version 0.2.3 - FitTrackee available in French (2019/12/29)": [[10, "version-0-2-3-fittrackee-available-in-french-2019-12-29"]], "Version 0.2.2 - Statistics fix (2019/09/23)": [[10, "version-0-2-2-statistics-fix-2019-09-23"]], "Version 0.2.1 - Fix and improvements (2019/09/01)": [[10, "version-0-2-1-fix-and-improvements-2019-09-01"]], "Version 0.2.0 - Statistics (2019/07/07)": [[10, "version-0-2-0-statistics-2019-07-07"]], "Version 0.1.1 - Fix and improvements (2019/02/07)": [[10, "version-0-1-1-fix-and-improvements-2019-02-07"]], "Version 0.1.0 - First release \ud83c\udf89 (2018-07-04)": [[10, "version-0-1-0-first-release-2018-07-04"]], "Command line interface": [[11, "command-line-interface"]], "Database": [[11, "database"]], "ftcli db upgrade": [[11, "ftcli-db-upgrade"]], "ftcli db drop": [[11, "ftcli-db-drop"]], "ftcli oauth2 clean": [[11, "ftcli-oauth2-clean"]], "ftcli users clean_tokens": [[11, "ftcli-users-clean-tokens"]], "ftcli users update": [[11, "ftcli-users-update"]], "Account & preferences": [[12, "account-preferences"]], "Administration": [[12, "administration"], [12, "id1"]], "Screenshots": [[12, "screenshots"]], "Dashboard": [[12, "dashboard"]], "Workout detail": [[12, "workout-detail"]], "Workouts list": [[12, "workouts-list"]], "FitTrackee": [[13, "fittrackee"]], "Table of contents": [[13, "table-of-contents"]], "Installation": [[14, "installation"], [14, "id2"], [14, "id6"]], "Prerequisites": [[14, "prerequisites"]], "Environment variables": [[14, "environment-variables"]], "Emails": [[14, "emails"]], "Map tile server": [[14, "map-tile-server"]], "API rate limits \ud83c\udd95": [[14, "api-rate-limits"]], "From PyPI": [[14, "from-pypi"], [14, "id3"]], "From sources": [[14, "from-sources"], [14, "id4"]], "Dev environment": [[14, "dev-environment"], [14, "id5"]], "Production environment": [[14, "production-environment"]], "Upgrade": [[14, "upgrade"]], "Prod environment": [[14, "prod-environment"]], "Deployment": [[14, "deployment"]], "Docker": [[14, "docker"]], "Development": [[14, "development"]], "Administrator": [[15, "administrator"]], "FitTrackee fails to start": [[15, "fittrackee-fails-to-start"]], "Map images are not displayed but map is shown in Workout detail": [[15, "map-images-are-not-displayed-but-map-is-shown-in-workout-detail"]], "Troubleshooting": [[16, "troubleshooting"]], "User": [[17, "user"]]}, "indexentries": {"api_rate_limits \ud83c\udd95": [[14, "envvar-API_RATE_LIMITS"]], "app_log": [[14, "envvar-APP_LOG"]], "app_secret_key": [[14, "envvar-APP_SECRET_KEY"]], "app_settings": [[14, "envvar-APP_SETTINGS"]], "app_workers": [[14, "envvar-APP_WORKERS"]], "database_disable_pooling": [[14, "envvar-DATABASE_DISABLE_POOLING"]], "database_url": [[14, "envvar-DATABASE_URL"]], "default_staticmap": [[14, "envvar-DEFAULT_STATICMAP"]], "email_url": [[14, "envvar-EMAIL_URL"]], "flask_app": [[14, "envvar-FLASK_APP"]], "host": [[14, "envvar-HOST"]], "map_attribution": [[14, "envvar-MAP_ATTRIBUTION"]], "port": [[14, "envvar-PORT"]], "redis_url": [[14, "envvar-REDIS_URL"]], "sender_email": [[14, "envvar-SENDER_EMAIL"]], "staticmap_subdomains": [[14, "envvar-STATICMAP_SUBDOMAINS"]], "tile_server_url": [[14, "envvar-TILE_SERVER_URL"]], "ui_url": [[14, "envvar-UI_URL"]], "upload_folder": [[14, "envvar-UPLOAD_FOLDER"]], "vue_app_api_url": [[14, "envvar-VUE_APP_API_URL"]], "weather_api_key": [[14, "envvar-WEATHER_API_KEY"]], "workers_processes": [[14, "envvar-WORKERS_PROCESSES"]], "environment variable": [[14, "envvar-API_RATE_LIMITS"], [14, "envvar-APP_LOG"], [14, "envvar-APP_SECRET_KEY"], [14, "envvar-APP_SETTINGS"], [14, "envvar-APP_WORKERS"], [14, "envvar-DATABASE_DISABLE_POOLING"], [14, "envvar-DATABASE_URL"], [14, "envvar-DEFAULT_STATICMAP"], [14, "envvar-EMAIL_URL"], [14, "envvar-FLASK_APP"], [14, "envvar-HOST"], [14, "envvar-MAP_ATTRIBUTION"], [14, "envvar-PORT"], [14, "envvar-REDIS_URL"], [14, "envvar-SENDER_EMAIL"], [14, "envvar-STATICMAP_SUBDOMAINS"], [14, "envvar-TILE_SERVER_URL"], [14, "envvar-UI_URL"], [14, "envvar-UPLOAD_FOLDER"], [14, "envvar-VUE_APP_API_URL"], [14, "envvar-WEATHER_API_KEY"], [14, "envvar-WORKERS_PROCESSES"]]}}) \ No newline at end of file diff --git a/docs/troubleshooting/administrator.html b/docs/troubleshooting/administrator.html index a6467849..db5c665c 100644 --- a/docs/troubleshooting/administrator.html +++ b/docs/troubleshooting/administrator.html @@ -5,7 +5,7 @@ - Administrator — FitTrackee 0.7.3 + <title>Administrator — FitTrackee 0.7.4 documentation @@ -42,7 +42,7 @@ FitTrackee - 0.7.3 + 0.7.4
                                                                              diff --git a/docs/troubleshooting/index.html b/docs/troubleshooting/index.html index 67280899..7ab834d9 100644 --- a/docs/troubleshooting/index.html +++ b/docs/troubleshooting/index.html @@ -5,7 +5,7 @@ - Troubleshooting — FitTrackee 0.7.3 + <title>Troubleshooting — FitTrackee 0.7.4 documentation @@ -42,7 +42,7 @@ FitTrackee - 0.7.3 + 0.7.4
                                                                              diff --git a/docs/troubleshooting/user.html b/docs/troubleshooting/user.html index 4fc38829..386c169d 100644 --- a/docs/troubleshooting/user.html +++ b/docs/troubleshooting/user.html @@ -5,7 +5,7 @@ - User — FitTrackee 0.7.3 + <title>User — FitTrackee 0.7.4 documentation @@ -42,7 +42,7 @@ FitTrackee - 0.7.3 + 0.7.4
                                                                              diff --git a/docsrc/source/_images/fittrackee_screenshot-01.png b/docsrc/source/_images/fittrackee_screenshot-01.png index 84ff3912632e0fbd88ed26df72a9cf24df4ef560..d5bfb427b7b3e658e79174fd20ce5a318f1fe82b 100644 GIT binary patch delta 27421 zcmYhh18^qY^9C9_+1R#i8ynlUtqtDTeq(KH+qRu-Y}*^&{eAzsb#K=^Q*&z0^z_X1 zc^WlY<)qyeqzUApGl>*L0BaYr_N3}>Q;cp1xj17U?CD?7-5*~_)aEn~8rr(uRK?_! zI5EO~TeG_$TYrCl_gweB+6ewit8Q74z4JZF^}*-2`g-8lzS(_v|Lie&d49Tdob6=y z`-|VN8rggHAo|XKG5GRe==l1D2Ni!g8oB=V%lPX{bk>l}3Xpwz0T7iTi{f81q&hdG z`g!*t`pVn?x|zz44%=*BeuoVbd7z({yd+Z3fVv%8$bog#9)oL$- z$7Sh>ra8prV;KHrQBdCTJn2kajxMwB{W$aqB_!SJAPFasY}@PVrK1l^KX9(UCmz9A z^l2!@_0bb&Dyq71GNlOP;|S_9SaXf)9YNhT?=-yDuXa8n0C2NIDPSgJeLrt}Zg6c@ zs=)LEaPWLi9Ue^p({!ow&gEi|fh8XXFYlA=>oY*47q8b z`rKv9sB5|@$jB7|ki&w|<#l4Y^zJ-rZX@UTxjwKCOaMm*WY}GY(cwEd<@z(V&IgO4 zmE9RN92rRE$jXl{@7Nq?HZSfvo_EZ%fahay#rD683=8K2T4 zM~ve8W|w({vn zyL2cofD5|t|5j%pkGq3-tgPZ3o-XSLRdvJYMk@9v2J6R4^)|2nKfiGRb;j# zq~9_7wUA<1Dzs&!XG9p6ljf?3W#QUOo0?iFAa!wlW%lLj>B*L}E!*Hvo^!W3=xv{t zoE(9bm?->5D5{*>~^_j)BExH#^rnag+$XSXt!)N7k6tP{8@Uy|zeA9<4;e;20c?9RqP7P$vI=U=9=_;PD3XR6C|0Ovws6uL33+e%U*tJ0LZ@K*4dqxguFMDRYqq zFW#a{JTiG%25iJNau4i9Wb&QO>1B9Y7zlq4`%VebnNAk##V@_bBvG4i4I_%Ky**thoaR_Ax4Lk4IUdq9b;U>|GOQaH6E~SucjF~hC&}4 zpkTw=23z6UNsjBA?Js0s18)YSz62Ns5W|;P!FPnh2pjCe9_#0DyJJz?E#R9g&B(wo zmRmQD>ybed=Af}!DZzl)6tuTB!gVkUE*F{+Si0-kg{^o{K;kx(67FmA)+H%prpJk> zv-lCpaa<#4a&p_0!iPAMg$+k>Vl|W~3kyHwAnZXDjX+wQlY85jO0#k(2zRLg1{)2B z{e-zXY;uddC71JUWWEshezU{lAP4$8<-Ixw1iI+_ESkJKMS&U)Rf39P$Sd`@?_(7y z1WV`CnPKInW+BqNw%bw)|7Tk$)f{vn6nbct(LR_QJx`!@ zS(vh+Xd`~AGIjps&DW1s;weDv<3X43tSrD2Q7%9*RPKv*A$C+=*7t%|y<`Dfpd*XE z6RC3_+m+*sB_}?uLn%9XO_30c&U`XuX1or%iyyN$`J+_RZ7+@yC36}B@KjwKdM)jZ zKb}t+w|~-Ck*p=2LhAvo_rMKENc}@X4U@u_f!@c&mXpZy049%IEYn(GZ~PWI%_~<+ z!Z&dEDVS)Gj!0Q)x`=Wc+!>S~5GKEA3i_uF_7QdV*0yqS?uVQ%CTk=F3!E`1_LB=G zYaK)61+d?vW+tT??CKB)R1;VPYYf;HynN=R;>hBHv&e?1t`%KBkHFX?`e8ynxy_cH z+((X1RzlatDpjBBtTRmA93Xxme@bkJm~^q79H1f%Q3f_@^tjA4_Tz_tt_;%wo+x}n z8g-B#xZxUhNiml6d6K9TAdTeELk6E+d+-X!Hlg?|_?r1W<(+#QXAS8Nq)f z3=6}(uu@qS%H^!UFO4p>hZvA=ZAi0^#dj6|iec9gCWuYNfmX&?$hrbTBOEDYjx0e$ z=8|lke9H9rA?I>PCJ*eKD`B4H9CkVyD*ROqB42_~72ETp&r^Pa#UBR1AYN0hrk)?g zf;x1NlXt+RU2jmr%D(z@oG-s5@ebb%BPbY2v##X655fs}fq#Id;vdCt8hOVgpOX+sbMi1H$?NiGvUH~j+%7-nY|CdLzxqel5dzC{5}$A-4p6jWI!CI0HQmn&oI&_?L z^bRVTmm3%~mNS@fdWk5=yvj|6!j+A9I+!>oC=!^wkAiEx3;|!KF%bJJA>DS6mFZiA zppB?J%u|fRN#GUm*YVFyA`$TW&0YW~PA-7fbFZA6FH%uyb}QRq0D>Uy(Ro^cLQ~Pn zGMLTl+2*Gri#Crv8roR4-B;}v9Gg(@1lPy;veriYMZ9u7JM<-RQB6PR1GdNlluHLG z(+D#t@$6I%V7hn2Yt@8%fE3Bc*+o$@^o{T!o|yA8J%0lP4WTAa;>)vNggCaJRw307 zTHPE@oc0j;Cc+3W6bzwKP|?_3uUvE1f#Jk|aB#q(Jiuh1VR|3n$UyqSR`Mbq+EEIG zD^Pyz6pL1l=_t8RfI&{xk(gqlwU496z<0Hb^Tewa z>889HJ5wPqy@r&w_4epn~lna(6y|Ez!aLuIG$sp>uAib|h!U?O58UTMHes&qmR z(kED-&DvHsddCz>d#TmLl=jQUxLhzN0d!?XXM(Hh5j8Ge*npyBHdDULROMkiv^&}t z7Vs29WlB9*NPGHy5Jbh@JCOWN44oYGZX#}f&iVt`|9Ow9R0wy6Rr1aWJ=6%NBP4Jn zk6TUItWyJDU`@P3G#z(}U*C%xNxy$sW2}OX2%T_R95us~2<_#`hjllNf5IBWb6&Z( zlcco#VAcEl6VmRtC^>rznbz3e5ZhxYl};l-x;!6Z@L_`S5WoPz_fB*f7i0MLJNO2UjbN2&%Frf6xjBO0eBW(a8Z-D{=YTFj|p_otw+Jh}l z_BsDp$&Y0>eF4=D(>R5|)AG2Y%-rf^^Z*6WesEX!O%(rnW&WacGK%uHv&!P7smGcZ zyK$-89ET27a+_4KgyRnfi#3=d)QH5aW(v`wail(muBot3o**8e;zU(SDx#c2$P}Og z_tQ9h0|dn>1q-$aA4ELyvn>xj?*zFxE{eHA$n^~+R4=n3KhB7io`C-d8EFlz%~c5? znvA6qzO=mnL=4lcVg?V;*k)lKZFQpE17|nW&5L;go!lx%j7J@^?oyNCUED9$=|rAR z+Jc)y`vorOfT|Qa%naQ{L@SJEXF-!;DxF)z#B4bAVKg?Mca(%&HFl zPSM#&L(%NF)=cYkrgd-L&~257WfB5u0pork+Qi5&-c$wc5GiW}ZC|L@F4sdm)2oa9 z`>D55X?eIO+Z^)JQ5J0{U4hgFmSu#bIf(-!x#c+I4;Bw1(FDi(a=<5Dryc=V)S0sp zp;V(UQJeD>ld%>oQ8{>6b#JfWy%b*dV)Z4IW==8&%*c?;rRS(ns(dK%_mxx25Tw%m z@-=bm667}zlwcML{IfU)I))W2D)`anncrV{-&^@e2jz6cXXz>gqzoL8KFHzB_n0fY)?@$M~ z4Hg?uAPpEOu3=zRvVUq;+sPwU0=P+${5AShUL8V;n~+sU0Q%5QN83IiY^^2L0xqUq z7dzX1M0xpdP(M^jgow8rrYY1|v&oqISPdxDW+Z(4qCB8u1tV&meh#8lmvl_&&i@Hk z89a6ttC-k~B9VD5V7umifHfwe1H8Ot#hTGqpCxjNz~J>g7A4D0`!b3dNJnu2cWzrL z5kTk7yPS|RISv=3yEYC8ohuB&E!Tg5*uJed#x+%+A+n~n_-stD3|DsH9N!?{z|YZJ z3udC{AdYp*I7esEJ?UGl94-xb3*~QUL)!T)AHLPe))Iv`r((|XBo=E|jha8brycEK+OWw6@yXD6jM_U=hR?>`4cT*!Q5OIt`5CwKPIHckUlboT zg-OxEm@kRco=^0_CUK~#^C=rz3v>L<*&;>0 z$1oWSS`4T`2~7edoTrgA53{gX)S1A)EiY6}uvIT`7Ns8NW_ZE~Qy4}V{vn~4h*jDh z+bUb4fR)kWAfctMO+j{Yw!Qn&v#?Lg{3{xKD368QJmXmz(CwG~@#AgU>W2-^?g%Mq zK_@m13ozTaJQ}N8l`mE{7vI3dS$3CU_Aw!~s^lp{TALqW+}wx8opB{q2D7CXnrVgtyl(IfF;djCV7Fd>{9StH@PORfZGn-iFCWb75yHbH+kCCs1~xho+rY z7e}uf?=B7K<8YqBYfoDINZv(iq`QLjjVuABe)3-lPFp54THE&L3i2hTot$ zV6#f)ne5NpX?ujec0`mXAJI%$hJon$!z&4e>jtAZ7CdX?rOku5DlnfKnTN{N&F6vR0VyjVy0MSWX3&;gLc2{W;-4lC!Il<@&=Je^_cdz(TU zg2dXDYlDQ_bxsAyJ!V~MQsHjRr6M2)Y)IW%A9OPk>Oxo*I znGP8M4x^2A%)2?z8;aCJ1n<-3)EK1PXqP^CQO}!is1yX|dEqZm5emRP()Vb@rE+v+ zY|Is_TTSCCSAIb)Sv4r&0Ev4$11`ZP3*kw2Vhm{7kWuw$Va9uQAc$S1NNx8HFZv+9 zZ*i-C1#9oapLuIPNuf@X09FD85?X(<%cU#3O)4+g$K5P=v% z&JWdVJjkfrOgZ2#CJw-1jjMtQ1X6dpP?(g>pGId%M!k`y zOC2VPh}^h>ZP-tr2<3?J1SP(OM01E-HKd9}4u6%C2VYqF8Wgaiw1}!HeqHIT(HvYh zd&7?^Zh99{#;GEVjSjIHPPO3Q%p6GH8?~gH4iUuDNpb*JfmzcQkgAsG&kQhrYr=vb zSd`=*%f$;HG@2|Xh)qu8{4-AG7Gn=sno$T_Bz$=73QrizB$ae=$FZ-vp$r|)=+~Xek(AJ=DWMnu^F;0)aakQ z_A<~#BVP2MUyS%+){#1|lcF|iFmX|!*W79qU|vLj-VLZYz(U;Wf;-xc7poNV{4D+b z*Ny~t4J~?Xp-qw(3MmG?jh_muDz&;(7L4xbVHUo74d#Oa6pZO6r)+z0@N(Qgxd>cf^1jBrzdCh5)AKtz&e zZ3{_dV%s4$X?^nWsaXVCrx10n@JsyxoU2gpB~{Xpnw$hP6ls#ra(Q87xMfB3O8P66 zje?gDawc4&g<4uV52W>8;LtKd&@gnU{HwWUJ}R>#;+4e~4a`=Sm+jjYLbGT@6U}J9 z2@YV6vly-|R7neQ6jCBnAZ}24|BDuXj`4cpFmPX2c~n4M8NGy43cAud2hot5BtYus ziyon@MFzzK2C2}uNh0Z|LNd$*ZJETkvMh|{m6g1LkMU}D9#hb>jnr{URR4G4Uuu1P zM-@#KSa?@g=jc}=6QBBm^{KjMT_ZjP`yv374F0VeISMzNr#VBo18bKxaOC>l;vSG- zFvpsUHIeC|V)v8G@&`d|)r#f4HljlpP@^~UzU@2_^-sVV$n|=b!xDs33!9S`4hL78 zLjM5dN&UlE2~KbkS3k@^Q@Mb#?8)+aIHnzP&1*)%70(|fn&fYva;q!k5!WLXe18B| z6Z*Q$v-l)|8QQ*lC7H;(1gY!^5co}3T043nLy;$a5;j%a70q+Lad zD(f~CUA5aR zdJ(FadLDkfSRYArnfO&ql;IpPAZJ}}h`@>uo3V8`56QNnU*D!4H;)k`OCnbUNp=q^UJ(TrJZ?7D3VFx&{y@;F%T#S_z^8H=ujw#HIdQq(2g!(%%z!zn2Ow zYP*N^OR$3AiivH`tV}mhjNBeXuLSAu@GLfC2}r~IOvo@Y00>~v{BBjcF~q`&TZHT+5yr6W-CR_Z3ekm1@F$5tAiU!G4(u?qq(06+@Lr7Y5UGjII+S z!TzROuPY*$U@*C3?)Y2nSB@4^L-$e!3zMF zt~MU$tch$;_?8Hf$$dc}lz-($5p@ZaNl3aSjKEi{rn)9?kZ!qoVHJAm zEm}r5jY{#g)kzqbu-lX(cb#Tnl^{r9QiMd|n?sBPqB4@sM|5c(HkE;Kn~1uxeKHc( zOy3(PS@TAxoc#_`n+mnFH_Rly)vfxBV@5w)pIWiV)UnL7yiuWBme>2yGUZ75M-=s7 zJIOp10Rtes#__4 z3~dMkiew~vm^YD0TS7`=kS0xS?srVl;}Y3*Z{}n8LIMr08kJRv#nF;%#hgh{DRdpWnoh zYk$gG-SOLc%SM};Jm}&{xG%kquQzz(dUpH*;ADrt9mZwKV{IqFPt>oMN)?U7c|=r7 zfFJ+Cc|(p*eS1Q|npkc~?PYPQ-3YH8@DGG&4Kjum%>u_@fXh5=}VugZs9qKp<3#Zzr(o9O@g%72CsQb#vZN#J9tqB zzX|22Eww#OqDUDV$etWn9Um$LYJSR@n%jyC@gOiOE_y#=FEPB^ zkYU9Y=w`w(-1mBGk&7E$qSG(KLYl_B&s|AF;9nAafH3~Bp{i`O2L2TBenLL4HZlf^ zUK5-|8L~~N2Emk6Z=Q@;(*8bm8z%mTRuyj>_r>`xEldy*ah!re6r;-icamr{_K&#t zyX)b@o*Vi&hzGR=Jytq0*X^; z@WV){d|EUaxOe2va?5TLCk=#^F|F9PDVYl$R6fS+wYBtYImgIJT0^Mf|59Bs9E`Py z#R{MaiTpb((Rbbj);I;Q5+M{HzDzXu@U8y~u)V`3({}7`_u8g64B@l`1ngVngG;qqi@(<7x)q|Nno@)o**}#62#sv3hE_P=r{rT z*(&^!xvFbRRQf|WtmEev2y}R#bYjD*-!{S7<<$;b^_M@0Q;18+FH>b-5D*G$Yc(ym z#w4;ZFmg^VV-r&@Zf*uH6H^ujb~XzR1`~5`a|SaGV{>*hPIfakW-cH444T1R5tT2!;e5@_? zzWBi!(%~A?p#K2&58(d*@eh#y0QC>hts2rW;E;f=jlvg$D@dPOEfkKZk+p+aOb(kR zY&0MCmNlPP++kEaOf`fkQ8jukWDI3wiC^Id=cyTgzrNDDyLD@vh@FCNN`Daj;%jW| zY~0D&`a5;<{+E306;xX&)|U8~+_jkoNUoxddPd6{X;$sQLFZ{j>iIcw*B1t*msJaE z?yq zNOX#Vkr%dTzjp zlai7)bdcATK%zrr+i*=-|7tN?f*D26w#Pv;iivNg8OQ_Md26Q$HfF?gST6lMq{QKL zYB0Xn@9W=v*QTYVb;g&b+#kxpHiESirj$N7SY7JVVft%C7r>s59hU0e0ePY`dT0aK z)t18+=9PDt;a_=h!AWV}xl6$?8Usv*WQDK1Xgb0cpfMp5OM*AAVB{tD!>VB&SDk?y*65Y6z@ zn3ZD`queS`S9SPnVGhJ`CY%8X!^Y@cvmcux>N(ol-F#rt^5L&3#$N+)u*43o?xkX= z4ndd-@C}@@v~m)Ek~ty5eUaHZ){LC^e?Z5_$N*hv@5WKriMirjC?M$*INDZ<)tzm1 zu$ucHOw>x~v^CmeChABtkFThO+edogH_N&d+|zE%8n9RYeKCnwN-+TEDsg#6k4oD6 z)Ot{u(Q^My-x5S`j$U5_uab3?UJ?rxE#Gcg<;$C}$WIiML<>~`cRo#~Ido8oCAkZO zdBx6vOq#alZ=tt64L(>1v>-&+KR|1GnoAo*2+oheIgq%6-9sJr@ciKyKa*TwrvTQP zGa9=0a8VHL0CCmH=mp@7wCe9Flu`C(P4rPvN^|Ms$@UEL07CoOUHiIoT;o2BLCsMy zi+^&x#8vr7`;@|hFm59!pTg=FIyX`cn)@#gTlq!SN%vi9{MqThU+R{K67uD~w&P*S zqZX>n?woLfTEqz8L332(T9xnIL&qhm-(9PC%N&y`IBF_Knn?iI1^Edtk678MrwAXy zTs(6FZG?K}^G5;*A;&44gI(TvwPm-2sFD;_G%wd!5(m8~r+%&?6+!I-qr&#r<$9_v zJ$_oeLqVp$Bb@ECmBrf!i7ZGnvq&Zyjy%N7E!(Gg!0(YU^_|1HccRgj;Jz0| z)neGZ$|dIMd`^JFbDi}go3*fX9n-;M+YnA`y+7yWn_+#t?KB6<7R6~le0kA%B(w@j zWc_PEW!30OZHh3j29Ztk+NeWK#eC7sYc$N!iW=*w#S`H*!t!M&JZTi6lQqn4v*Dr+ zXz*CtFh>3!1_BjNL2wbz6W2>DoKcxL6KL-62Hb`kYRBivp!QVX&PEhGvF1HAQR z<$q>he=>fca$>KJE5dWN)3nUjh9~qvy|xP%TJnn)yi~jeOBpLfA86TGIs0N! zHLdmSj^G0}+k(TxgQFq&(F&hFzQ)$y(w*sid(h+=cXvy1R@gFU3K9|6|YzsDN)bP&IA&;XEm1!zTKhPs>bO8AbEzhTEhGW6!` zJ_YR~wtM07;AG(uhP6=Xe|MXUMgP8I@lS_W;ni}4Bxo+hIulL#&4oX>!9b8IGvu@0W4of!HH{E9El3Gaq)ODbQjziOQ>)mdxClF8V zp8#ZWs;cMB$DstRfh1?2U6=AZP-MuN5lg&nkO-yb)N|FkUCguOkygH|*wvwHByU}wF*#WR) zOE*JP^Tw#AQZ(~4h@7CIO><7QP$jpP<<}!?b`Dn%Trqg+<{y=*uJ^p4cHXejcD>r+ z#aW06)lU&~0_G5zC6E{ulHIN48I{uTct(u$v38uxS&^L4I5?cEAWd((AR@(OOIZtJ3rkN9p@G(nIy*owk6M&c40qtQJOtmQQLW!1w|Yz#Gcfy&%b%O zxdWqtaeJ?XuSoS8jCUbe=6X8eZMq?r`$L=9`H1B|)m2i;i7$%k6_g&b#8=wNR{oi2 zQ5V7;Cq+*ce(Be`hDsf%-vE}~ng{%YrSQ$8-P&KT3S&E{?|;aetS;3B*? zB~z{JIb^B~?HK2HD02i@EnR~UK+J31@>2;F&#|i>OS!ABx>=PYh_bfp<9ZgJ)#gT) zY~vEwk(3k5^GdIthxB0P7B{~dr@AE+@T-R1m_Iz7@Q+rime02O`**mxYdVc`zZ$EB zvtpnrk}%>}$OY0& z4vZU0j@RXSsN|L+D1q;X=2gS9J3{2-@19Ma` z^#5Yi!M@rHyi4RcbvV)p)w$@kw)C-vQ~%JIVcYHa{s^GJ1tUZ`+<4X5)t$!AjuFIO z|A$Z_Ia*lJVhXbC?l6!$E*y)FG?jrOS3c1>DWvjFZi`!()HB=N7I$L}A><5s2Yzg* zVaU{Z-ywSr;*~SY=O&HlZ&(7zs182f)haWA@IbJ51l~vl3Kb4r0kuZV$?)wUeM$x# z?dL=pQZb;gY(WR<;i$t}3JXeam4q<<;Ej-T48!_U;)Haa7m(2>Ttd0EdCV3f@qf%3 zNn8xy0%NKx`7{%=(f30v3!c^7B_nBBKlf87a8l=D-6BSu6PrAe6-3OIC9ZXVxY$-N z3SVqJ7KpTOX4gT?X5%O59dX=UTxewCU*!cb+80JyUS2G)4hE&%L23Rq(Gorm-C>XJ z!D8)HF*?a)Yggq~#{eT^*)adgqP$XUJz|oQYL)3piBLWzxo7~IRFm&c52yLJ{c@r& zOc_%!85@m{-=$}+-l>;r8j>1sLcfI*PRT+pIWiLoAtkQZesefF ztIQ*tWk@atn=rNDBX=sEE{nvz(X3i=1&SP1Fb*pL$;3=7t*_&?-Aez7-GeBcn7xRN zQDlABf}x21PgOh-6nX|W%P2V4svI>2sv2a7x^@-OK2W;{fzV)z;@EplPsR#>#>QRK z58GEFmK`E?8mg2XoxHM6ksr%yUw(~jcx2SD%S|}K0zo-N6kdISg4s-*RZ&#YfNrY0 zKb$oGQh1OctsPaN5&}ykRF4ZCE~ZB3%458aN{@IK4JNlxx<*sNol3rCh1RXNU3+&2 z3p1ENjJIn^(14Ss_0Ng)_U!>^O;+<@rU>O~7)O6xXoI85$dZF(Z1t^N4$$!+4^5RD z8S%v3%~sma7POg<=4Y+&8q?F~+jJDErD^^ZNF(a2IWfU9hb0dqu1_V|1BQC-G@I_M z6tFZ?6(8o1*)ABH=Wggff&%7(@S@QsA!!OrsF6mT&+WhulnyaXO_cx&+CB3T`Zp){ zYe!$UW0oVC%&Uj}RB%{omRiT_f@^xACF?X0EgfW@PhQ$mFFzTD&)!AUgl2VEwTW!? zO>#Hva8l-7VPRn4GeJ5>kX;eZ`u3rfmFSyD{>)L?e*Rw0woxBRo|f?N{m_dULJc7a z#5=^z6bBtjNRUgX#Ipdnun32{CG-zdm@X=dRn9r8U|P99AdHsJ6f|m~9c3>s5Ta_OsHin!Q!L^F z3@#X6^87XvqS>T);_YFaLq8Ua?&@Xgj58}@6xDgBETc|r7kI-e=IY2ztq6iK?L{}| zj6|`x_Kdp9gz5nGoacx32sI}nQ~O>e8p@rghNB$VTv+^*({Ws3Wlv5H=PkDMJ*tLx zGpC})|B7%hy-}m=vXweSL}f8=U{;Au-vbQ3SXe?Eq6;Fh06M1KIjNpJW6q?(+R1eO z@t)&pE9YGhsR7j3YJ7-w2$co@0=W@3sE?|S1UuR}^&K$24;EP_SbKmiN6(u}-o-s^ z0ME}Qi5+70iEt(d7c=ZyI9mma$Voh5hgi^&JK|dKtH2?B_M>v+i^t zJHFg3A*ib8-ufWoq1ll1^k6JiHUd1qEjIds3Y=objiNOG@vMr{CH?AOnX73qr|ws_NRNQ83-qEqtUp=wnDY^ zf#KrJJG(jINvy$NOVyDPp%4{pWS3J_(wsezEwe-?y&DUX*3Y&aj=o;+AjR$!EyTYu z=HT=JEdf#VUm1k=_8Rybo)!|qIDkmf{R9kfaT277lv_T89XsgaF`h?t{U};fv*WS7#ims$>Yqg`duD#A->_k4~-{GDTZF8=fBQMnYoVt zYZro!;4&`CaSci|8ESUK*$Kv;Q`5s3v3C_|SG(%pUkCeATRvO#`Dh#vQM}z*WoPk# zawH{QtsT@7h6GSxe`L6qfv{DB7QW~P*yz9H#w38ml)zV3)Zg9qxG_)MyN42(_?XvxN}Y(vsZM%m{rRC@zb! z62Bm|R5fSZ*qXY%JW$H2aC%v=neLcfT(`I+E zikq=P$#L#5S4=niFHsQ2(wr9uyo3@%Pn5M%=tb!NYM@0SBv(Ylm{>I4=Gh>z0=rf> zweY!>nIb(;gDjS?HcjybI?7|f2)x2t1^CZpOTT|fKLn^l4bXMaeX{_K(^PM&)@Z^L z&4ZnC_3wI>B?EosXe0|q&bIApL5#wOeGU-lwn7yqJ8+k2eYgrCEij5axx6wJmg;6y zeh=QD5I_=2^cK<^fF>-fR@y*|B?mKZuA-w0JhFDxkG2n}U%oQYXfOa2h@pd!{*KVJ z-8=@nrPS+prhs#!?BX_(hPDo3u0Y9fLTid^9^i)3z3@6ayk1<0onLs6)(R&Mu(P_2 z?QdgLQ1e2Wg_ZsVnw!<{{Gmr_uIg#__{BFuQ-<^|`zEJt8_5G}Vh|(F*ms#uy>^Vt zWJ78y*Rx%D1Nmw!jI9N*Gpf%A|3iK15HrkWT{WGASZI{*@o zZb4Gb!BhfC_OSOIlI<@gi)k+|`DP=PV@R$;(vjCG7>>>mFft(i^i`MB;0n_MjmquC zSleSb{ozK}tj>9to3RR^>$L1hafkD5VY;b1>pPse^QS%cX5sXMSI%mg6`x z=ep{?SibZal1DIBkuXwS@l8x)HgWfF6HKZ-WZ7Tyk2>^!k`+rxvnq`*OtPu52|`FP zGJfK(k|2Qp>k-CB?EAL{b_dr4LY$S?Tv zPX;?-mCYTTB>zG+DUmOK;FjkfNj_2W|4HwGIigY*K>NSJ|8|)v|J6kQ`kwz}q3S;; z{#VQYlSGSR;^K(^SJ>$wX(YtOi{hAdhX-gJRXA^KuMqy5r+vVG1@`Yqd%FsDR*4fp z3W9g}gcYUpGN1-HfCky3Qo7|zzN!sze5E^C z;$L?0Pi(VU|GQV;KZVSm`_c4Y&h!}-#eX+ciyJdurs+cd&|Z=M-@U7oW&U@Kw{Z)t zVKl1IHdpOo)`=SZS73{P=aRw%O>G%@&iGuuzV81SoA_JifAIl;GOo*e0sQ#(+%`jI z;I$hI8h6|uNwVwOaUM##0xi?xPigQ*8&_k zWB|?M)*j09^Emm@D->n0)oFt~e*Vs%nyjLs3@ZG>m_t)rRn%04AHbNyn-nqH1QfTq z`vjSFZ6;emIdcPq{dvHg>s6d}e{+u^;36D#Ub7#yXLpeBr~L0Nlh>LZm;U{BTy>?& z)=Jvu%hjoy>2fqMzH5592c%7B{j-A!FuvPLfrVj;^bbq%=!B`-L;qQcg)M&YXiE& zehB^r6zmFm8hEn2U$sxdDK0s--_(D2;eGAQ>p7cl)q76uK|2qJ&THkc0Z6zu|1t@F zyP(={H0@Ubj-xU!f4D(cHdV^*ueSzOTCs(cei5uVZheyo< z9GC8dKF8*%DJhMU&$`Y}hO_@3l3Mn2zSIz~KLZfZuKR-R6$p`?;p?99xb{A@=Jl`| zy#c&rNyb-jJdT6@omW+m)cbu@HE=Tx8U4Cg%;og7 zGh-1g&-t+&pX0_m=sGBMfAifnm6~Ng*8Sb(+blG4KU!FVzi|z?)F$-$X#Zdxb$$i7 zOhqFKN?L34U>Uf>KO8e1W~;{6di!P2$MbW9Hem~jqdfFM@)PJ2W zG95OT-jESSS1-Nl%pV}|z9Ae>8EVxbnj#b$zIlEj0cFQ#6>dl% z^=6&E#0_nOP)(=EIch0WA4SB%+6;h4Rk`Sj!sQ>TAqGU)zeGvweRirFs@|a z9RDVO00nd&dm!-`-F(=m8325sbNJkMGoT$U7LtkD_D6iyOcoLU)EPP=2D$f9oaE%r z63SvyX#C>oORxWZyE}K%c2p64x>+yqKkL)<0aV`|S2iGVZ_|O7ohLIOav#?|g#Iqr zC%GQJIag+lf=u5p1Yz5*V!*gczh52)xjOyz*ZRDlRnC9!P7Lo40d=d`tX{oA8@(SE ztbor^`(#bEuk%satKGx>VhWIKm&=6ZFYYIT_{?8+e1`$u+z&;Cpvy4{to{Qz?Edp=ySF8pYYC=?cEl* z|8BAQ6O>pu%32h7`5V5bE782z{9}hDy!IdGG=_CQYkYlA($V6$O=Wx>q(YxVm}v}e zcV6|imlBSKeg0~E@Bqi|`p)%znoj<>|HrscMZ6L}?iZIBpeH!N7`5RR_jqT4XqwU8klKT%XxCv45-y+GPKqe$Ng zYCBLp(V>G@eoPoPF-d^T*dvxZ#&;`f5z^@L1&pi{&6m;dc|xIyU;y+PaIo^n8PR=XHJ9|E1jS4EP_ALXN0~H8T+BFT#=pm$4yVn&Vb*<9rNm{6Ctfr&9{dOwR&rO2 zg$AD}BT0Yu+t$!PlA85Judd^-sLppGM5wzfZ;sWI*x7~sOqy>*D&il3(;${&Z4zX` zo3#Nx1&mE_v<}S1(~F%@1Zgc=jD^LKg*6mXG_%)0MoxHsdHtu#Aw z;VhN9W-Ts}zxYSUz``-p$zWlC*(K~uDALWQ0lTBqcBN*V>P|LpDCSr8;h@zGgM*^& zvBd8vSP&Xqz>pfBMjG2(uT499NYF69ztUcx>DL<=YfE2-us?Y6y)2cOwU^?pp>kO> zcJa}@&{UvUMAzZlXIlFX)Dh_^*~ZCNz*=!Yp43O2qi5w56uiofsBe0qb==GaoYL8@ zy9wJ=GtpTDdAJs|TfS3d1SVIjN_u-7QB8fsPN@=Ag{!{9!y&ZJJ9}Rj1rl-RPk-5v5H$sy@%?b8L^~e_+0Rp*(&RP7>__nNo%fcxI zOFxZb%_^31s@h&ca5}kLNIWqvDN>Ysm<(Yq zrXK{V5d4{U{2nep3vB&~3YKF4WaP#}oH>;F#4t00iwnA{RyNm5ijB;g>fp6@Sz#oI zFdK}Ttw}i>%J-p%p3e2v#JpeH_Dgtz>Fbr%yH01p!3m+6XibRpI;oX7ht39H--g zKBxiH7p2w8L{c`oyO{P!i0@4OvwRLI1D{mEzWIe$n zZj>>U23nb~Arh%)`)!=EhGRmfYQ}{-lW%@j@EJSi(4Cde)le{BePpFsUw(9B>eSYr zaob%&9N(?@=mtl0AGDfy_=wmJ^VLYNr6oB zh3?FU^5_S}#hW4JDCwptyS){5c}d@khV{0;Oe_U1jm-O&KF}dgn5g*8)G)(4JXT!n z8wCPqltChNFIfHj+|ce6SJ>xGBOkW-p=m`9&Tf6Py17b@eMfu7_r#vv?(j!>zD@I@ z7y3&8yh8?CI^c;9rDcbWzkGReTjfctQOfo0n}yEP`7@Jo&`ZbQnGyP;!t&3Og=!NL z;vgA8Lfc%3*zI?{Arkq9mW;ky)O0Cz5q`*ET;~$r0i5d`tMsOGX+g`S5LHCgnSCM$ zIyBGk=%7IqB}_9KMYYlQ+_NVc8Rr)P(>eT`#HaOs2W<%uzgBaly=R02B_K=X{^LR! zN$UH%yxGdyNV$MTeakc#r}e!-q(3P zEOqhXnuMtw^^~^5P~mmH9WjUC9mLL(FK2XaecM1PasW}~^%;1$t5Hu@w9_>DHhd6d zlO4}qB%~@k3f0&6%}$yM71v^#UV{OJ#zpSjpyA&9J>|L$3|9d7NKiRK^^F!XR1Ba` z5qlp~V-#)YA;Tm@5J-$8j^X_h_0v9W@3SuN!l`2o?fo!5L=HfXW)aIa+U8HtNN@lAMpYkg$5V z`RP5JWA2SMj~RnVPrR^RJD^~_O>ru!UDx-?YW_4#xZAb~4_%0zS3 zfQ;!W`1H&t%PpFP(#F=M(ZJ}Yb6y>Gx(%g(lG!s^5gQrYS&fTA#fm|c;U~Mir>LwQ z%2Zxz15AId%_y|bcigpi>u|!8)Rxj9alqQGfUCJ^JgYw(41Q8*2V% zLVBIRdG5HyzmiOizvuYqo{&iBnRB^y;LqrncX-b97wU*gZ)2S;11B@LIaj|Jr-5(< z;&_En^&RvNpRaHa5wbbP-B4m$8NpBrup0o4D*NDJwiHiZe)qBbRkQxisT(KaH_9F! zEyip}SJ}`NH%FYu&p?wwNOIv3TitYuFDQ>p~Hb6(SX*<>g-mg&QE4rG*TaeL`;N# zeYW)Ihv?9B*OBB7BVeXSR@nVp`P^;AWo#J_gaRvJf<2Z*RW+W=*`$& z4>W+xs@vVNlDLjO7bx%)>}Q;=;^O$!u@`6l7i0Isv0$MC){vUD zmTw611S68bj6DU0$7$zBOcVU)U-0_R1OWQiI$A%ePI1>m zpv`@PJDiU>^k+nzK+i$PU8o9c>-StoKWjliIf58_c4F!@K4Q^R+9rN_IIpfw4GA$@ zV!UrwUY}yCo|!OGUR!S(YfQ%bb0MI#`w3M9jJ`gPlv&L{*LbC~=0zb`@9y)1*bktH zF=3mX2`(W+L-PmYt zcTk5@CY2NCC*JRgLy~Qpm7w&uFw=$5A-?z`@|2R^jqlZ8eueHVDwPPG{3NM|CJG7-X4AN z)zZPksLfO(&Imq2&Q@Zy0~%@Nar{A(D!9(EcU@#K_`-O88BmUqE*8(!%`akG+qhEp zKqrdV?;VU;|AM!Q`QT@EGy77rf`wZr6T17BT3r3c%xjL6oS2m8)fTSrKHRL|kGA6P zg)D7dUlTB|aJ@khnp|UUcH8TCgIwYKo$bYTS=ZWG2Z@4k5sVseN+i_u`_UL)Ep-qwNva!RO0kg+j_>{ zAs)E)JULY!06a3si|bZd6~;O+bXFJO%7T)^`u+lE%BlZD z3La8(=B>!eTI>8`IaApPWY9Vu4i-z4iIvnJEj(C2~#o>Fr3 zV66qHW9OZPVmsuwaa_j9GXY?3J0*X;*eH zT{hj!iv;_+f52BpnoGuP;+WNpSm1g<(7rOMwU@)FF{-F~U~bY2(lfKV@@IK@*RT%V z(w{pjKg^cyTpui~^aTXl#*7~4>msiw50vI8s+xgTkHGLyC1r)GnGqbvUX6BV$je}M zql+=b{JTaeplj4W9+atw4?tpL)lWv{*dRkzeGZZp9YFsQytTl4jIR!nY0tkwiSan* z#~_P=1hi|O*0#Es&V)_5J+DB(WaG#(khn)6RIrCn0oU)F41mnH8kk=ROb%hRDArLM zm3o!8@6`B6*Uft~zfX5(*f8mq24*eaC^>R|jGOoXCd>`6z2ca)UMnJl0gXK$wNaEs zAY|l*8pQPv7@aA;H|EuW=vC6A=B&8rIjGiRxzeR77O(2zOLc(H~T@SlX`Vk73BO<`{M!) zqP`&6%re@t4t^+F0>RTW3n)(X(A4!D2Wy38e^yi}Eh=){#w6barL)P#B30KO(7#>< z8_DTO$>j1@SKsXkbkQm*I0NBqh%SzqdA&yyKa?h;9sydAi!Pwp<)r&<$~QQh|j?qc?r` zap6-n4BR6v;Xj>1K!p#MsBh1>WC?AmeDRLxQCRN7xYedX>ucEVo0+xz_<~InI2|&J zp@9Bvd@!gfT~d4o4_Noc_^CGm*5__i^$Mcachv{e?JGuG_mn}BgIa413fNv%z5dXo z=?t?D(?4s9-#U+gcyaN9suQneXqRV~&=dg9jsXd3l-o14+lBa8UY7xd)OsyDw^7sC zI24>w6-g8{vehJAGc`V(HXc6eMFN2(^zK96%X;6@tbFMmSf~Zop?5kBL|eze$-s^I z)@{d(_DA8H9S4JMuhkL+9_HpOzKqR}gYKP#wZ>*ErP{T@t9~?EFtR9tbsqo^lzab4 zG{})l(S(l!LTyHz-hqTgYaoWtpX7FC2M6|)j)eF*D^gVW z=HvDobgve53T$pS&68)zynL#cEW^-57p=Y2=2Y7`W(@#~=m$>(F1sKre4o!=#`*a{ zc29%MFq-L|#{Mj{O$YKjtFu17B%tjO+BA^bzrJ*xujDlMn+iw!uvf!YfxRl!8a#bo zesd(i;^39x3z$uo%MG9X)Mv8zrLndroS**6YTay^`LgYx1XBNe!F?y|#6iLE(tmyh z5`3Q(7+L%OP>9#m9OJ%t{2z<$*7){K3~oP0R|35 zfY|;nn14!-Hntx8IdoQKlMtO3%U|$yNz?*Neevw)r{3KDb?TbLa2}b(+(+=8AefT_ z3(#}>*H!z~ffbtl?-lN6sNRS;5sI#Rk)#GcdNNe1wUB5NkQF*_|&qwuXfH~d?WVrZ|#80 zL%MI_!cdunl*MTm$A4L=l&-d!CzhY*FOBNkK5Vg$i9O3yWA<;kNAP# z7yTb+AOCOK`nRTl|3Rkn|5aQ6))erc;rJ)3`v0q~S!Z6brEA5SI$af~Zr#E?jRju< z0H$DpsDewcDsWE}|8pNvcf9(&5&ujW_rFcqzYXKRb?rYj{%TpIW46w4i~U0Pf76cSc>YorHF<&iQksDi;a>po@pH(sjSTeoqyvKqGLyK$nF zdAMqIFf$jM?V`H$Izz`T@C~D0#iMmK$k`Db|EN2Hzg9&-_{*0sSL)J=S075=*3>*W z>Y8N#=@W~wiOJgLID**nSU}DHYO9CSXz67ZoH-b>xC=zi%shU&3k-8m;sm?G4jxrn z9)aD>#nwR||IyOY^0SoMdyri5WHjC=`RMIf`j1m%75VBVc7^ue_z|x=?5-UGa&iHi z?G!yhbC0Pk3n#|{w$_lNs6^q*|2Q%jC-4EM;2Iv5|9gM0!$I=}TInJ+tS$Oh`1#B+0spQeIvsa%kRgK4r zW(A*o`o$>MlMJu=O2Y@05jl@@9A2(vhVHB{Xq@=tUZzSS5r~B(*>@$$hVJ@nCrLHa zLTY>$n*Qbxx>M`BRDxS$&?)jBGq(&Et}TsMkye^H^UEelNFa+(-qG{N8?6D1jk-g3 zN+TWCR_fG$F}~wZRaXpT99|{J(v>6y1A)|?D$nsWMqw;!Z*!7&*ym{FcIV3UH<&CZ zbZcrCj)(!yX`YR6tsgRB@g|R5#}w!zp|1kzaB&F<{+_d$N?;ypXT8HQ1E=8FDxbYS@t5BwB@L80 z_J#c<4lMz~x^w*`f+If6-rJRsXPYYgOl{@I+1oLhw?z0$$i921d9H9LgA5ki>3BIe zAZSYpouU+es|m)OR3z0IZ4y@>311DeKAemUx)W+a7YI74fl!aZPmX)-)n6KMZFZ}p zuiEAGSl$}$g;%eXv-z*h#%(!t3Yb@3nTc2Dbm-CzWGSis7&a~(n$U;I(!0nF`<`Xt zj(fr8A<(=*iv^>}npJ$Y*shWncgHQ@6;*E(Iax_~IxZX#J&b3_F}LWHugYNShvFdW zNwUKF4vilSUnU%8c(0*tb*i9d#drpMaJrP=_?6R3{^&NaSE+7Ik6%RBbW)YAz2NF+udKDG4&tM4HY z=?fn>G&k3lOO+hKze<%)mGu${p>KWyFrkvxrO$XHj$aar!-7zq>rHQ)mxaxbe7yt- zT%Xz|A#;K9f>(^a9Rtuhn%abDM$bIXFiFt%;5Np?&NjDvCSRv|XY-wW7#h{i+xKW_tG6M6kG1!!I2UdrdEbu=aU9tSKn% zh=Z)RaG@w^r{>2{#{u-5S#SNK`ov1rB^0ArYpuPE0>1Gbe8xIIj%_N5g9!>ocZJZa z%!lUY9YcO~ovnMdB}}1owiWP1FMvF&RW=$i>AyLoU%g?2SR2rA^uirxbH<8yycH&S ztqOA_L}}%o*rR(tt`b!EXqC?Miaw*|2KUoO2HPL`o0MczL7EQzCt2|1el7R(6{ z-s$H5sU>vUs(j0L(K65n(U;(tp=U4N%$I!3{znkOeT#K`{=5vhB}~ZhH2~@pc7p3W zQQV-{xW%9x?N!Iv29R-uqoA4hpXm@?z}Ks4aH`kc9rqE4JQb^+RS6$IP_nlPz8it? z&;>;;s(o1Peu2d%gwI}EFyI^a`qFsv`9q6#YO#WF^#7r0%CH+{9PJ&DOK?L-i0O0LfHr4emke;fwp*;8^h&B-Cl%7H5KQ&%qE( zmJ+v%6bp5(&#^J=p!dRneT91OiovN7SX+$J) ztE|y4`PzdGuHDdn>ZL!H{IL6zu4D&z7o^CAqw5FHg9ys{m9?`IEDt7T3?&NkM7ON5 zYCjzqFobTcXyoW4^&UJpbK}I1aOmYO@X_6t`SB{5zcL%9cu$GkH#BU5vT*Rl zp*q>;e41@SD%O*@Em>F&4eW0wu(bl=)72U$+_$w#q;@3{+&0LQkE5khwt5s@D~3#h z=}T3vsM)0coh;MbuQ3%#SC8>$F4KpGZOUeOECxrDjdJciTKmz_Eh+6VA&UHg06<2v zF!1SUn~+!cxd4El9^~^CPv9R*-EMs5(!zr8- z*ihqw9TSe@2iic6t0$NGZ7ykV?z_g(9GNP&$+Q=zL=Ti;^;Ewa6peCS6L`me)s}_W z8UveddcLa!KgZ@ZnpS90@c}I7%gXBN1U{#3*4O3biRb8Lc8YCW<6gw(a^+?QK4DPK zAM*dX+NQkYhsm$4n zVg0#JZ;*=Bp(6Z)_j-y*;M*EDq(sa=nJtxeNlQMgejOiw(s$w!$5^?wd?uI?cV&1P zAe}ISWyQyyJ!)3%uwCOlnDzl32V*c4jyN&=<`3$QS){@`VLTn+kJePQ;D zb7&9_*!!kd<*biWSjbT+E=IMz-5*Eg--J9jkL}J7Hp0}z*;(xJ<;&#=LKZ6<`+Wn0 z8)qY`QMUI$D`{5aEtZgb?@>aGqDVqMml?bv$)eP~|DuRqMtijf@vM^j`K7VSS6*|;0c5-)Xef!@Ifuys)(Bc{}do5A>&7DD;;u2jlZhd(&{VS|(pGyTdlz=?> zEGz{IW8b4|Vyzu}Gr%jC76-cv6r2bC3|yZ#Kuq@Dx@fQ>ke3?-&RSs1P_DOCRfo|! z5PO%<_lRPp(4oItsBP~)8KIi2pQaLNJ(=w`zfTP-{LqqzO!U)HR{q@s@h2+H zs;1zBtwrpkPY2xdKfuQ;GuG*Z;?=#8FCqD1dbq>~sbPJOs`TI~a&RGjT3k+AUrJfZ z)nf~|FUOe#e0{4ixLgI8?bCl*{&Aqcq5J5?4$VKM-)DE+6O-v0_k@TKOFEW`En4cr zM_qAgZatDZ&+9%$T?XEMoSSp*x!*r${OvDP=k#X|B}=svet|5iFCJqneFyNxk&a9z zbC(9eWO5)w0D=uxxbTTH+!TeneJM*|&~FKa%KNg7zaD(zhDPwvz*v!Xbk8b3^iVQu z2phI3p8uSzGEShM(S7eOB=cGPX>PoHo3yB?mh-~G z&SSEPSz!pNMK|N>4fgOGBpJ)slWxP+_=GB5k%ZFH(zgLqPtjwQx;;HTM-Cr;lboCk zhI-|G1gO0|;OIh+6%-c}Ly=U$sPD_ia$|#fi~3JloV`&i?y2`g%nD7+BzgAI((_YN z&fYaNGD_eSQv1BKgQ-lMBavJzjg66x!qDI?1cq*K;`DsJSF*SF|GBbKfe%6UtP?IODhj-CSrd=Pi%UzJ zjHJkda@BnejqsY<+Qiqd-;InsM4?a}ZdDRjuFMyu#zCRbm$9)XT3V5MSt_3z8vfEn zLaoqfw77&!a*uNt~)h*YRY!9F2Km4%&a-$IF`tuE$}xtcBxZ<6~oXg+(ShF8YyaEsqV1yvlA9DqAe$3xmGXfTr4)Bo}?R{n4cd#hem1UD+qiq9nNj<8^&^% z)GLV@l8%U%`)>$kLTz?H06Z~#=8*f%X($45-LIdA&(iYRWiiX+^%WWF^44N~n)CHB zqvq?&(vUf~!L{c`g0y0t%*$MU*-0U<-zSpgA9xm$-1A00PiyM|$FO0E&Vko`B2Tu) z4gPomqo_Wt!=_a^iZ}G>NZ=^L13rA>^(KYAMRc-*?km2_rl#R|f5&7w&ddk*z8M8B zY&%I=Rp}!N_ilH*cyxq+BwIsE&u;maX0*58LpXD(d+=l|S`AOHA$IAy$#pCrLZb5TO4XTiiZS-DxT~pmtLUa}*na_Y^0X2F delta 27423 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 diff --git a/docsrc/source/_images/fittrackee_screenshot-02.png b/docsrc/source/_images/fittrackee_screenshot-02.png index d6ee9be30c519c0de9284f525a6e9db82e8e76e5..999706a5030729b10e6b5452f85b1a9a48ec5d3e 100644 GIT binary patch delta 19342 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 W;eGpzD4oY3!#!R7T-G@yGywpRwU>YZ diff --git a/docsrc/source/_images/fittrackee_screenshot-03.png b/docsrc/source/_images/fittrackee_screenshot-03.png index a4db44e54dc846c6d20c15c15658cc7c9519455c..1a5ada6e909feb8450e9efd889ac55e0acb26b6c 100644 GIT binary patch delta 10649 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 G1OFFg1!3I) delta 10648 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 delta 13791 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 diff --git a/docsrc/source/_images/fittrackee_screenshot-06.png b/docsrc/source/_images/fittrackee_screenshot-06.png index 0c1ad13303ff010f605bc18b9c20ccc3b42b8687..3db29c059957f73c13e2394cddb513da11fa48eb 100644 GIT binary patch delta 22826 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 delta 22903 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 diff --git a/docsrc/source/_images/fittrackee_screenshot-07.png b/docsrc/source/_images/fittrackee_screenshot-07.png index e0b97bf2f5e6104aae219dcb832c79da12d77a7c..ec53d138ae9dc8a3414cfba8c84a443221bbfc27 100644 GIT binary patch delta 22666 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

                                                                              2su?`5<2~lY!Z}nJ1ON;hb z_K#*5 zwi4=1uc__TK;|Y}@l;pcnOXDS>g;U&5mt~Ep38|@s(T!a0ZiacABPm(1ikZOBgSq(jLOk$kj7}6;*S($c zMyT{@$5dDjsntKyTDrjTvJ|t7YU+IV@Uh>ny@;3Cs9g4(B%<7SqN2GtW4n|~o^oW} zumJ*`!V`&owo49G7=g_g^H6zv=*M9v_Yt~p@)O#!#zj(yjt6#g3hxJN0I(SanEbx} zK*(xomiPKECXP$tDk91cCGHQ^S2)5lbG~?a?U@jQTihK%!nB&iW>BsfGI@VLsYPQ1QS#4XbuI9K_}5>0%z$7~XYP#K|j#YnQ>%uS<# zoTFc3Bcq4J4M>+ibv;D;)5}~Cky{8FG|Zo`&*;jf+Dcc!te&39NABcoqslbCq<*c(gQB!>sV9?V9qJKRPsiG$0u91{EA z;r;V2{GafU;I%j8Wa^B`e-Ngy-zEM9Tk{N=hr|S`2F#E}CtB{$pa8~(W8<7qCmOZq zaBc+b_WjdcMz=-&N+HRIEzMEPv!wK%xuoKU07g{5c-F)k{&0Ty_ph@Cjr@b-pZ|fY z8(9AF|Mt4b+fgX+_4U73TH^kH1Bibfl!E9~{5#-V6TQD(-G7I-VR`!R=uV@_j{m=R a?HV=F^t6Jd)uhgjopdw}HOkZ-U;H1v0}yur delta 22642 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 a-ZeQ!?JBgl!WHhR*7-uJ$@ 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 d017y}V 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 diff --git a/docsrc/source/features.rst b/docsrc/source/features.rst index 7f17a1f1..01f757a7 100644 --- a/docsrc/source/features.rst +++ b/docsrc/source/features.rst @@ -105,9 +105,9 @@ Administration The following parameters can be set: - active users limit. If 0, registration is enabled (no limit defined) - - maximum size of uploaded files + - maximum size of gpx file (individually uploaded or in a zip archive) (*changed in 0.7.4*) - maximum size of zip archive - - maximum number of files in the zip archive. If an archive contains more files, only the configured number of files is processed, without raising errors. + - maximum number of files in the zip archive (*changed in 0.7.4*) - administrator email for contact (*new in 0.6.0*) .. warning:: diff --git a/docsrc/source/installation.rst b/docsrc/source/installation.rst index 494c7c9b..4f59215e 100644 --- a/docsrc/source/installation.rst +++ b/docsrc/source/installation.rst @@ -480,13 +480,13 @@ Production environment .. warning:: | Note that FitTrackee is under heavy development, some features may be unstable. -- Download the last release (for now, it is the release v0.7.3): +- Download the last release (for now, it is the release v0.7.4): .. code:: bash - $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.3.tar.gz - $ tar -xzf v0.7.3.tar.gz - $ mv FitTrackee-0.7.3 FitTrackee + $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.4.tar.gz + $ tar -xzf v0.7.4.tar.gz + $ mv FitTrackee-0.7.4 FitTrackee $ cd FitTrackee - Create **.env** from example and update it @@ -606,13 +606,13 @@ Prod environment - Change to the directory where FitTrackee directory is located -- Download the last release (for now, it is the release v0.7.3) and overwrite existing files: +- Download the last release (for now, it is the release v0.7.4) and overwrite existing files: .. code:: bash - $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.3.tar.gz - $ tar -xzf v0.7.3.tar.gz - $ cp -R FitTrackee-0.7.3/* FitTrackee/ + $ wget https://github.com/SamR1/FitTrackee/archive/v0.7.4.tar.gz + $ tar -xzf v0.7.4.tar.gz + $ cp -R FitTrackee-0.7.4/* FitTrackee/ $ cd FitTrackee - Update **.env** if needed (see `Environment variables `__). diff --git a/fittrackee/__init__.py b/fittrackee/__init__.py index 2829a9f1..d06b4378 100644 --- a/fittrackee/__init__.py +++ b/fittrackee/__init__.py @@ -25,7 +25,7 @@ from werkzeug.middleware.proxy_fix import ProxyFix from fittrackee.emails.email import EmailService from fittrackee.request import CustomRequest -VERSION = __version__ = '0.7.3' +VERSION = __version__ = '0.7.4' REDIS_URL = os.getenv('REDIS_URL', 'redis://') API_RATE_LIMITS = os.environ.get('API_RATE_LIMITS', '300 per 5 minutes').split( ',' diff --git a/fittrackee/application/app_config.py b/fittrackee/application/app_config.py index ca63218a..f9aafee9 100644 --- a/fittrackee/application/app_config.py +++ b/fittrackee/application/app_config.py @@ -48,7 +48,7 @@ def get_application_config() -> Union[Dict, HttpResponse]: "max_users": 0, "max_zip_file_size": 10485760, "map_attribution": "© OpenStreetMap contributors" - "version": "0.7.3" + "version": "0.7.4" }, "status": "success" } @@ -100,7 +100,7 @@ def update_application_config(auth_user: User) -> Union[Dict, HttpResponse]: "max_users": 10, "max_zip_file_size": 10485760, "map_attribution": "© OpenStreetMap contributors" - "version": "0.7.3" + "version": "0.7.4" }, "status": "success" } diff --git a/fittrackee/dist/index.html b/fittrackee/dist/index.html index 5b67e0b8..ecf8f0e7 100644 --- a/fittrackee/dist/index.html +++ b/fittrackee/dist/index.html @@ -1 +1 @@ -FitTrackee

                                                                              \ No newline at end of file +FitTrackee
                                                                              \ No newline at end of file diff --git a/fittrackee/dist/service-worker.js b/fittrackee/dist/service-worker.js index 4f026804..b8765afd 100644 --- a/fittrackee/dist/service-worker.js +++ b/fittrackee/dist/service-worker.js @@ -1,2 +1,2 @@ -if(!self.define){let s,i={};const e=(e,t)=>(e=new URL(e+".js",t).href,i[e]||new Promise((i=>{if("document"in self){const s=document.createElement("script");s.src=e,s.onload=i,document.head.appendChild(s)}else s=e,importScripts(e),i()})).then((()=>{let s=i[e];if(!s)throw new Error(`Module ${e} didn’t register its module`);return s})));self.define=(t,r)=>{const a=s||("document"in self?document.currentScript.src:"")||location.href;if(i[a])return;let n={};const l=s=>e(s,a),c={module:{uri:a},exports:n,require:l};i[a]=Promise.all(t.map((s=>c[s]||l(s)))).then((s=>(r(...s),n)))}}define(["./workbox-db5fc017"],(function(s){"use strict";s.setCacheNameDetails({prefix:"fittrackee_client"}),self.addEventListener("message",(s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()})),s.precacheAndRoute([{url:"/img/bike.svg",revision:"ab4faed007625b209af72b9b8dce84db"},{url:"/img/weather/breeze.svg",revision:"428c6ccb838f8e91dc4826c5b650a98b"},{url:"/img/weather/clear-day.svg",revision:"f3e8628de2e5089f508f03944f8be951"},{url:"/img/weather/clear-night.svg",revision:"6a0d6579a93e89fdf1a2a95b398e0935"},{url:"/img/weather/cloudy.svg",revision:"c52fe62c9d9fea2cdf5ae2813b3df366"},{url:"/img/weather/fog.svg",revision:"9f4d74289594eb83f9c175d13167a0eb"},{url:"/img/weather/partly-cloudy-day.svg",revision:"f730c2e4f4c014e8b49c9d4a0a141b90"},{url:"/img/weather/partly-cloudy-night.svg",revision:"0d9270901c4dffbc05f3998d835171c8"},{url:"/img/weather/pour-rain.svg",revision:"91eb3159ba8781d258d8c384a8ef987c"},{url:"/img/weather/rain.svg",revision:"c52ca88ce0ddf4de0fc29167e578b2be"},{url:"/img/weather/sleet.svg",revision:"97d61d89332f912c1ec27bcbe077b7bd"},{url:"/img/weather/snow.svg",revision:"9e88c89c0d6d14174e9665e98932dd80"},{url:"/img/weather/temperature.svg",revision:"d42b62d0b57d5d326506277d87b70435"},{url:"/img/weather/wind.svg",revision:"d75fbe559220d7b2b9577a98a91f38d0"},{url:"/img/workouts/finish.svg",revision:"375196b7ade7c07c3b64ac4cb8b850a8"},{url:"/img/workouts/mountains.svg",revision:"0b94f1d4a050a86ca5ac89ab3ed60f9c"},{url:"/img/workouts/start.svg",revision:"97f6a197b6c2869e0cb2ff0e7697af86"},{url:"/index.html",revision:"6d62a7d391fad1f1475e4c68b5b0d1d5"},{url:"/manifest.json",revision:"c61028ca6e9f81bf958e6b66238e2d7c"},{url:"/robots.txt",revision:"b6216d61c03e6ce0c9aea6ca7808f7ca"},{url:"/static/css/admin.73df498d.css",revision:null},{url:"/static/css/app.564b9516.css",revision:null},{url:"/static/css/fork-awesome.min.css",revision:"82c1118c918377daaa71a320ab8eea42"},{url:"/static/css/leaflet.css",revision:"5c761a156eea82263d8bacf1718fe04d"},{url:"/static/css/profile.203e78e2.css",revision:null},{url:"/static/css/reset.e2527ec6.css",revision:null},{url:"/static/css/statistics.40e24e75.css",revision:null},{url:"/static/css/workouts.41709693.css",revision:null},{url:"/static/fonts/forkawesome-webfont.eot",revision:"e719f9244c69e28e7d00e725ca1e280e"},{url:"/static/fonts/forkawesome-webfont.svg",revision:"d58987a18774d859d98af95281c1dee5"},{url:"/static/fonts/forkawesome-webfont.ttf",revision:"fe45770c6c277da3921355d971045ea5"},{url:"/static/fonts/forkawesome-webfont.woff",revision:"92cd4d8328b2ae614386a01ff935a9f3"},{url:"/static/fonts/forkawesome-webfont.woff2",revision:"12ee76445f0383c58529169d700b6650"},{url:"/static/fonts/pt-sans-v9-latin-700.01a58da9.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.51b1613b.woff2",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.5ff2a2d7.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.6514157e.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.10011d51.woff2",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.6206408d.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.8293436e.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.fe36f54f.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.b5b74f16.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.c43bc0a2.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.c5a514ae.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.e7867499.woff2",revision:null},{url:"/static/img/map.5b26d82b.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-700.b8a7047e.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-italic.0b285c83.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-regular.59a385b4.svg",revision:null},{url:"/static/js/243.e551248f.js",revision:null},{url:"/static/js/431.e5102e07.js",revision:null},{url:"/static/js/633.81a8ddc8.js",revision:null},{url:"/static/js/858.3f2a93f2.js",revision:null},{url:"/static/js/93.02cf293c.js",revision:null},{url:"/static/js/admin.c8949458.js",revision:null},{url:"/static/js/app.948d4b2d.js",revision:null},{url:"/static/js/chunk-vendors.50f5c7a2.js",revision:null},{url:"/static/js/profile.ff8ee2f9.js",revision:null},{url:"/static/js/reset.f6540a23.js",revision:null},{url:"/static/js/statistics.faaccb1e.js",revision:null},{url:"/static/js/workouts.f1d6cc45.js",revision:null}],{})})); +if(!self.define){let s,i={};const e=(e,t)=>(e=new URL(e+".js",t).href,i[e]||new Promise((i=>{if("document"in self){const s=document.createElement("script");s.src=e,s.onload=i,document.head.appendChild(s)}else s=e,importScripts(e),i()})).then((()=>{let s=i[e];if(!s)throw new Error(`Module ${e} didn’t register its module`);return s})));self.define=(t,r)=>{const a=s||("document"in self?document.currentScript.src:"")||location.href;if(i[a])return;let n={};const l=s=>e(s,a),c={module:{uri:a},exports:n,require:l};i[a]=Promise.all(t.map((s=>c[s]||l(s)))).then((s=>(r(...s),n)))}}define(["./workbox-db5fc017"],(function(s){"use strict";s.setCacheNameDetails({prefix:"fittrackee_client"}),self.addEventListener("message",(s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()})),s.precacheAndRoute([{url:"/img/bike.svg",revision:"ab4faed007625b209af72b9b8dce84db"},{url:"/img/weather/breeze.svg",revision:"428c6ccb838f8e91dc4826c5b650a98b"},{url:"/img/weather/clear-day.svg",revision:"f3e8628de2e5089f508f03944f8be951"},{url:"/img/weather/clear-night.svg",revision:"6a0d6579a93e89fdf1a2a95b398e0935"},{url:"/img/weather/cloudy.svg",revision:"c52fe62c9d9fea2cdf5ae2813b3df366"},{url:"/img/weather/fog.svg",revision:"9f4d74289594eb83f9c175d13167a0eb"},{url:"/img/weather/partly-cloudy-day.svg",revision:"f730c2e4f4c014e8b49c9d4a0a141b90"},{url:"/img/weather/partly-cloudy-night.svg",revision:"0d9270901c4dffbc05f3998d835171c8"},{url:"/img/weather/pour-rain.svg",revision:"91eb3159ba8781d258d8c384a8ef987c"},{url:"/img/weather/rain.svg",revision:"c52ca88ce0ddf4de0fc29167e578b2be"},{url:"/img/weather/sleet.svg",revision:"97d61d89332f912c1ec27bcbe077b7bd"},{url:"/img/weather/snow.svg",revision:"9e88c89c0d6d14174e9665e98932dd80"},{url:"/img/weather/temperature.svg",revision:"d42b62d0b57d5d326506277d87b70435"},{url:"/img/weather/wind.svg",revision:"d75fbe559220d7b2b9577a98a91f38d0"},{url:"/img/workouts/finish.svg",revision:"375196b7ade7c07c3b64ac4cb8b850a8"},{url:"/img/workouts/mountains.svg",revision:"0b94f1d4a050a86ca5ac89ab3ed60f9c"},{url:"/img/workouts/start.svg",revision:"97f6a197b6c2869e0cb2ff0e7697af86"},{url:"/index.html",revision:"a8885bb9d0d68196751346759769272f"},{url:"/manifest.json",revision:"c61028ca6e9f81bf958e6b66238e2d7c"},{url:"/robots.txt",revision:"b6216d61c03e6ce0c9aea6ca7808f7ca"},{url:"/static/css/admin.73df498d.css",revision:null},{url:"/static/css/app.564b9516.css",revision:null},{url:"/static/css/fork-awesome.min.css",revision:"82c1118c918377daaa71a320ab8eea42"},{url:"/static/css/leaflet.css",revision:"5c761a156eea82263d8bacf1718fe04d"},{url:"/static/css/profile.203e78e2.css",revision:null},{url:"/static/css/reset.e2527ec6.css",revision:null},{url:"/static/css/statistics.40e24e75.css",revision:null},{url:"/static/css/workouts.41709693.css",revision:null},{url:"/static/fonts/forkawesome-webfont.eot",revision:"e719f9244c69e28e7d00e725ca1e280e"},{url:"/static/fonts/forkawesome-webfont.svg",revision:"d58987a18774d859d98af95281c1dee5"},{url:"/static/fonts/forkawesome-webfont.ttf",revision:"fe45770c6c277da3921355d971045ea5"},{url:"/static/fonts/forkawesome-webfont.woff",revision:"92cd4d8328b2ae614386a01ff935a9f3"},{url:"/static/fonts/forkawesome-webfont.woff2",revision:"12ee76445f0383c58529169d700b6650"},{url:"/static/fonts/pt-sans-v9-latin-700.01a58da9.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.51b1613b.woff2",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.5ff2a2d7.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-700.6514157e.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.10011d51.woff2",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.6206408d.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.8293436e.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-italic.fe36f54f.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.b5b74f16.woff",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.c43bc0a2.ttf",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.c5a514ae.eot",revision:null},{url:"/static/fonts/pt-sans-v9-latin-regular.e7867499.woff2",revision:null},{url:"/static/img/map.5b26d82b.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-700.b8a7047e.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-italic.0b285c83.svg",revision:null},{url:"/static/img/pt-sans-v9-latin-regular.59a385b4.svg",revision:null},{url:"/static/js/243.e551248f.js",revision:null},{url:"/static/js/431.e5102e07.js",revision:null},{url:"/static/js/633.81a8ddc8.js",revision:null},{url:"/static/js/858.3f2a93f2.js",revision:null},{url:"/static/js/93.02cf293c.js",revision:null},{url:"/static/js/admin.9bc68088.js",revision:null},{url:"/static/js/app.1f6c95cb.js",revision:null},{url:"/static/js/chunk-vendors.50f5c7a2.js",revision:null},{url:"/static/js/profile.430ae7df.js",revision:null},{url:"/static/js/reset.112f801c.js",revision:null},{url:"/static/js/statistics.04a17f2e.js",revision:null},{url:"/static/js/workouts.71e8fef0.js",revision:null}],{})})); //# sourceMappingURL=service-worker.js.map diff --git a/fittrackee/dist/service-worker.js.map b/fittrackee/dist/service-worker.js.map index b37ca264..10828de2 100644 --- a/fittrackee/dist/service-worker.js.map +++ b/fittrackee/dist/service-worker.js.map @@ -1 +1 @@ -{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/3c896925405f76f060fe53d72939edef/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"fittrackee_client\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/img/bike.svg\",\n \"revision\": \"ab4faed007625b209af72b9b8dce84db\"\n },\n {\n \"url\": \"/img/weather/breeze.svg\",\n \"revision\": \"428c6ccb838f8e91dc4826c5b650a98b\"\n },\n {\n \"url\": \"/img/weather/clear-day.svg\",\n \"revision\": \"f3e8628de2e5089f508f03944f8be951\"\n },\n {\n \"url\": \"/img/weather/clear-night.svg\",\n \"revision\": \"6a0d6579a93e89fdf1a2a95b398e0935\"\n },\n {\n \"url\": \"/img/weather/cloudy.svg\",\n \"revision\": \"c52fe62c9d9fea2cdf5ae2813b3df366\"\n },\n {\n \"url\": \"/img/weather/fog.svg\",\n \"revision\": \"9f4d74289594eb83f9c175d13167a0eb\"\n },\n {\n \"url\": \"/img/weather/partly-cloudy-day.svg\",\n \"revision\": \"f730c2e4f4c014e8b49c9d4a0a141b90\"\n },\n {\n \"url\": \"/img/weather/partly-cloudy-night.svg\",\n \"revision\": \"0d9270901c4dffbc05f3998d835171c8\"\n },\n {\n \"url\": \"/img/weather/pour-rain.svg\",\n \"revision\": \"91eb3159ba8781d258d8c384a8ef987c\"\n },\n {\n \"url\": \"/img/weather/rain.svg\",\n \"revision\": \"c52ca88ce0ddf4de0fc29167e578b2be\"\n },\n {\n \"url\": \"/img/weather/sleet.svg\",\n \"revision\": \"97d61d89332f912c1ec27bcbe077b7bd\"\n },\n {\n \"url\": \"/img/weather/snow.svg\",\n \"revision\": \"9e88c89c0d6d14174e9665e98932dd80\"\n },\n {\n \"url\": \"/img/weather/temperature.svg\",\n \"revision\": \"d42b62d0b57d5d326506277d87b70435\"\n },\n {\n \"url\": \"/img/weather/wind.svg\",\n \"revision\": \"d75fbe559220d7b2b9577a98a91f38d0\"\n },\n {\n \"url\": \"/img/workouts/finish.svg\",\n \"revision\": \"375196b7ade7c07c3b64ac4cb8b850a8\"\n },\n {\n \"url\": \"/img/workouts/mountains.svg\",\n \"revision\": \"0b94f1d4a050a86ca5ac89ab3ed60f9c\"\n },\n {\n \"url\": \"/img/workouts/start.svg\",\n \"revision\": \"97f6a197b6c2869e0cb2ff0e7697af86\"\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"6d62a7d391fad1f1475e4c68b5b0d1d5\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"c61028ca6e9f81bf958e6b66238e2d7c\"\n },\n {\n \"url\": \"/robots.txt\",\n \"revision\": \"b6216d61c03e6ce0c9aea6ca7808f7ca\"\n },\n {\n \"url\": \"/static/css/admin.73df498d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/app.564b9516.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/fork-awesome.min.css\",\n \"revision\": \"82c1118c918377daaa71a320ab8eea42\"\n },\n {\n \"url\": \"/static/css/leaflet.css\",\n \"revision\": \"5c761a156eea82263d8bacf1718fe04d\"\n },\n {\n \"url\": \"/static/css/profile.203e78e2.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/reset.e2527ec6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/statistics.40e24e75.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/workouts.41709693.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.eot\",\n \"revision\": \"e719f9244c69e28e7d00e725ca1e280e\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.svg\",\n \"revision\": \"d58987a18774d859d98af95281c1dee5\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.ttf\",\n \"revision\": \"fe45770c6c277da3921355d971045ea5\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.woff\",\n \"revision\": \"92cd4d8328b2ae614386a01ff935a9f3\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.woff2\",\n \"revision\": \"12ee76445f0383c58529169d700b6650\"\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.01a58da9.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.51b1613b.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.5ff2a2d7.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.6514157e.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.10011d51.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.6206408d.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.8293436e.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.fe36f54f.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.b5b74f16.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.c43bc0a2.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.c5a514ae.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.e7867499.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/map.5b26d82b.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-700.b8a7047e.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-italic.0b285c83.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-regular.59a385b4.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/243.e551248f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/431.e5102e07.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/633.81a8ddc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/858.3f2a93f2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/93.02cf293c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/admin.c8949458.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/app.948d4b2d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/chunk-vendors.50f5c7a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/profile.ff8ee2f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/reset.f6540a23.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/statistics.faaccb1e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/workouts.f1d6cc45.js\",\n \"revision\": null\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"0nBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,sBAG1CC,KAAKC,iBAAiB,WAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,aACP,IAWFC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,gBACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,sCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,MAEd,CACED,IAAO,oDACPC,SAAY,MAEd,CACED,IAAO,mDACPC,SAAY,MAEd,CACED,IAAO,kDACPC,SAAY,MAEd,CACED,IAAO,uDACPC,SAAY,MAEd,CACED,IAAO,qDACPC,SAAY,MAEd,CACED,IAAO,qDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,uDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,wDACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,gDACPC,SAAY,MAEd,CACED,IAAO,mDACPC,SAAY,MAEd,CACED,IAAO,oDACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,4BACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,uCACPC,SAAY,MAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,OAEb,CAAA"} \ No newline at end of file +{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/8c37c5aeff6539c0835d75c0358b21c6/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"fittrackee_client\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/img/bike.svg\",\n \"revision\": \"ab4faed007625b209af72b9b8dce84db\"\n },\n {\n \"url\": \"/img/weather/breeze.svg\",\n \"revision\": \"428c6ccb838f8e91dc4826c5b650a98b\"\n },\n {\n \"url\": \"/img/weather/clear-day.svg\",\n \"revision\": \"f3e8628de2e5089f508f03944f8be951\"\n },\n {\n \"url\": \"/img/weather/clear-night.svg\",\n \"revision\": \"6a0d6579a93e89fdf1a2a95b398e0935\"\n },\n {\n \"url\": \"/img/weather/cloudy.svg\",\n \"revision\": \"c52fe62c9d9fea2cdf5ae2813b3df366\"\n },\n {\n \"url\": \"/img/weather/fog.svg\",\n \"revision\": \"9f4d74289594eb83f9c175d13167a0eb\"\n },\n {\n \"url\": \"/img/weather/partly-cloudy-day.svg\",\n \"revision\": \"f730c2e4f4c014e8b49c9d4a0a141b90\"\n },\n {\n \"url\": \"/img/weather/partly-cloudy-night.svg\",\n \"revision\": \"0d9270901c4dffbc05f3998d835171c8\"\n },\n {\n \"url\": \"/img/weather/pour-rain.svg\",\n \"revision\": \"91eb3159ba8781d258d8c384a8ef987c\"\n },\n {\n \"url\": \"/img/weather/rain.svg\",\n \"revision\": \"c52ca88ce0ddf4de0fc29167e578b2be\"\n },\n {\n \"url\": \"/img/weather/sleet.svg\",\n \"revision\": \"97d61d89332f912c1ec27bcbe077b7bd\"\n },\n {\n \"url\": \"/img/weather/snow.svg\",\n \"revision\": \"9e88c89c0d6d14174e9665e98932dd80\"\n },\n {\n \"url\": \"/img/weather/temperature.svg\",\n \"revision\": \"d42b62d0b57d5d326506277d87b70435\"\n },\n {\n \"url\": \"/img/weather/wind.svg\",\n \"revision\": \"d75fbe559220d7b2b9577a98a91f38d0\"\n },\n {\n \"url\": \"/img/workouts/finish.svg\",\n \"revision\": \"375196b7ade7c07c3b64ac4cb8b850a8\"\n },\n {\n \"url\": \"/img/workouts/mountains.svg\",\n \"revision\": \"0b94f1d4a050a86ca5ac89ab3ed60f9c\"\n },\n {\n \"url\": \"/img/workouts/start.svg\",\n \"revision\": \"97f6a197b6c2869e0cb2ff0e7697af86\"\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"a8885bb9d0d68196751346759769272f\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"c61028ca6e9f81bf958e6b66238e2d7c\"\n },\n {\n \"url\": \"/robots.txt\",\n \"revision\": \"b6216d61c03e6ce0c9aea6ca7808f7ca\"\n },\n {\n \"url\": \"/static/css/admin.73df498d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/app.564b9516.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/fork-awesome.min.css\",\n \"revision\": \"82c1118c918377daaa71a320ab8eea42\"\n },\n {\n \"url\": \"/static/css/leaflet.css\",\n \"revision\": \"5c761a156eea82263d8bacf1718fe04d\"\n },\n {\n \"url\": \"/static/css/profile.203e78e2.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/reset.e2527ec6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/statistics.40e24e75.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/css/workouts.41709693.css\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.eot\",\n \"revision\": \"e719f9244c69e28e7d00e725ca1e280e\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.svg\",\n \"revision\": \"d58987a18774d859d98af95281c1dee5\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.ttf\",\n \"revision\": \"fe45770c6c277da3921355d971045ea5\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.woff\",\n \"revision\": \"92cd4d8328b2ae614386a01ff935a9f3\"\n },\n {\n \"url\": \"/static/fonts/forkawesome-webfont.woff2\",\n \"revision\": \"12ee76445f0383c58529169d700b6650\"\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.01a58da9.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.51b1613b.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.5ff2a2d7.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-700.6514157e.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.10011d51.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.6206408d.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.8293436e.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-italic.fe36f54f.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.b5b74f16.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.c43bc0a2.ttf\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.c5a514ae.eot\",\n \"revision\": null\n },\n {\n \"url\": \"/static/fonts/pt-sans-v9-latin-regular.e7867499.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/map.5b26d82b.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-700.b8a7047e.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-italic.0b285c83.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/img/pt-sans-v9-latin-regular.59a385b4.svg\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/243.e551248f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/431.e5102e07.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/633.81a8ddc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/858.3f2a93f2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/93.02cf293c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/admin.9bc68088.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/app.1f6c95cb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/chunk-vendors.50f5c7a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/profile.430ae7df.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/reset.112f801c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/statistics.04a17f2e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/static/js/workouts.71e8fef0.js\",\n \"revision\": null\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"0nBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,sBAG1CC,KAAKC,iBAAiB,WAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,aACP,IAWFC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,gBACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,qCACPC,SAAY,oCAEd,CACED,IAAO,uCACPC,SAAY,oCAEd,CACED,IAAO,6BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,yBACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,+BACPC,SAAY,oCAEd,CACED,IAAO,wBACPC,SAAY,oCAEd,CACED,IAAO,2BACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,mCACPC,SAAY,oCAEd,CACED,IAAO,0BACPC,SAAY,oCAEd,CACED,IAAO,mCACPC,SAAY,MAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,sCACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,wCACPC,SAAY,oCAEd,CACED,IAAO,yCACPC,SAAY,oCAEd,CACED,IAAO,0CACPC,SAAY,oCAEd,CACED,IAAO,kDACPC,SAAY,MAEd,CACED,IAAO,oDACPC,SAAY,MAEd,CACED,IAAO,mDACPC,SAAY,MAEd,CACED,IAAO,kDACPC,SAAY,MAEd,CACED,IAAO,uDACPC,SAAY,MAEd,CACED,IAAO,qDACPC,SAAY,MAEd,CACED,IAAO,qDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,uDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,sDACPC,SAAY,MAEd,CACED,IAAO,wDACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,gDACPC,SAAY,MAEd,CACED,IAAO,mDACPC,SAAY,MAEd,CACED,IAAO,oDACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,4BACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,6BACPC,SAAY,MAEd,CACED,IAAO,uCACPC,SAAY,MAEd,CACED,IAAO,iCACPC,SAAY,MAEd,CACED,IAAO,+BACPC,SAAY,MAEd,CACED,IAAO,oCACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,OAEb,CAAA"} \ No newline at end of file diff --git a/fittrackee/dist/static/js/admin.c8949458.js b/fittrackee/dist/static/js/admin.9bc68088.js similarity index 96% rename from fittrackee/dist/static/js/admin.c8949458.js rename to fittrackee/dist/static/js/admin.9bc68088.js index 90cc43c9..259f4776 100644 --- a/fittrackee/dist/static/js/admin.c8949458.js +++ b/fittrackee/dist/static/js/admin.9bc68088.js @@ -1,2 +1,2 @@ "use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[328],{6e3:function(t,e,i){i.r(e),i.d(e,{default:function(){return _}});var a=i(6252),n=i(2262),s=i(8273),c=i(5801),r=i(9917);const S=t=>((0,a.dD)("data-v-64629971"),t=t(),(0,a.Cn)(),t),l={id:"admin",class:"view"},p={key:0,class:"container"},u=S((()=>(0,a._)("div",{id:"bottom"},null,-1)));var T=(0,a.aZ)({__name:"AdminView",setup(t){const e=(0,r.o)(),i=(0,a.Fl)((()=>e.getters[c.SY.GETTERS.APP_CONFIG])),S=(0,a.Fl)((()=>e.getters[c.SY.GETTERS.APP_STATS])),T=(0,a.Fl)((()=>e.getters[c.YN.GETTERS.IS_ADMIN])),d=(0,a.Fl)((()=>e.getters[c.YN.GETTERS.USER_LOADING]));return(0,a.wF)((()=>e.dispatch(c.SY.ACTIONS.GET_APPLICATION_STATS))),(t,e)=>{const c=(0,a.up)("router-view");return(0,a.wg)(),(0,a.iD)("div",l,[(0,n.SU)(d)?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("div",p,[(0,n.SU)(T)?((0,a.wg)(),(0,a.j4)(c,{key:0,appConfig:(0,n.SU)(i),appStatistics:(0,n.SU)(S)},null,8,["appConfig","appStatistics"])):((0,a.wg)(),(0,a.j4)(s.Z,{key:1})),u]))])}}}),d=i(3744);const o=(0,d.Z)(T,[["__scopeId","data-v-64629971"]]);var _=o}}]); -//# sourceMappingURL=admin.c8949458.js.map \ No newline at end of file +//# sourceMappingURL=admin.9bc68088.js.map \ No newline at end of file diff --git a/fittrackee/dist/static/js/admin.c8949458.js.map b/fittrackee/dist/static/js/admin.9bc68088.js.map similarity index 98% rename from fittrackee/dist/static/js/admin.c8949458.js.map rename to fittrackee/dist/static/js/admin.9bc68088.js.map index 37ec87c8..d2599353 100644 --- a/fittrackee/dist/static/js/admin.c8949458.js.map +++ b/fittrackee/dist/static/js/admin.9bc68088.js.map @@ -1 +1 @@ -{"version":3,"file":"static/js/admin.c8949458.js","mappings":"mOAGA,MAAMA,EAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzEG,EAAa,CACjBC,GAAI,QACJC,MAAO,QAEHC,EAAa,CACjBC,IAAK,EACLF,MAAO,aAEHG,EAA2BT,GAAa,KAAmBU,EAAAA,EAAAA,GAAoB,MAAO,CAAEL,GAAI,UAAY,MAAO,KAUrH,OAA4BM,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,YACRC,MAAMC,GAEN,MAAMC,GAAQC,EAAAA,EAAAA,KAERC,GAAqCC,EAAAA,EAAAA,KACzC,IAAMH,EAAMI,QAAQC,EAAAA,GAAAA,QAAAA,cAEhBC,GAA6CH,EAAAA,EAAAA,KACjD,IAAMH,EAAMI,QAAQC,EAAAA,GAAAA,QAAAA,aAEhBE,GAAuCJ,EAAAA,EAAAA,KAC3C,IAAMH,EAAMI,QAAQI,EAAAA,GAAAA,QAAAA,YAEhBC,GAAoCN,EAAAA,EAAAA,KACxC,IAAMH,EAAMI,QAAQI,EAAAA,GAAAA,QAAAA,gBAKxB,OAFEE,EAAAA,EAAAA,KAAc,IAAMV,EAAMW,SAASN,EAAAA,GAAAA,QAAAA,yBAE9B,CAACO,EAAUC,KAChB,MAAMC,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO5B,EAAY,EACzD6B,EAAAA,EAAAA,IAAOT,IAWLU,EAAAA,EAAAA,IAAoB,IAAI,KAVvBH,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOzB,EAAY,EACnD0B,EAAAA,EAAAA,IAAOX,KACHS,EAAAA,EAAAA,OAAcI,EAAAA,EAAAA,IAAaN,EAAwB,CAClDrB,IAAK,EACLS,WAAWgB,EAAAA,EAAAA,IAAOhB,GAClBI,eAAeY,EAAAA,EAAAA,IAAOZ,IACrB,KAAM,EAAG,CAAC,YAAa,qBACzBU,EAAAA,EAAAA,OAAcI,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CAAE5B,IAAK,KACjDC,MAGN,CAEJ,I,UCvDA,MAAM4B,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,O","sources":["webpack://fittrackee_client/./src/views/AdminView.vue?67de","webpack://fittrackee_client/./src/views/AdminView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-64629971\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin\",\n class: \"view\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"container\"\n}\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\n\nimport { computed, ComputedRef, onBeforeMount } from 'vue'\n\n import NotFound from '@/components/Common/NotFound.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig, IAppStatistics } from '@/types/application'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminView',\n setup(__props) {\n\n const store = useStore()\n\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const appStatistics: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_STATS]\n )\n const isAuthUserAmin: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_ADMIN]\n )\n const userLoading: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n\n onBeforeMount(() => store.dispatch(ROOT_STORE.ACTIONS.GET_APPLICATION_STATS))\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (!_unref(userLoading))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (_unref(isAuthUserAmin))\n ? (_openBlock(), _createBlock(_component_router_view, {\n key: 0,\n appConfig: _unref(appConfig),\n appStatistics: _unref(appStatistics)\n }, null, 8, [\"appConfig\", \"appStatistics\"]))\n : (_openBlock(), _createBlock(NotFound, { key: 1 })),\n _hoisted_3\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./AdminView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminView.vue?vue&type=style&index=0&id=64629971&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-64629971\"]])\n\nexport default __exports__"],"names":["_withScopeId","n","_pushScopeId","_popScopeId","_hoisted_1","id","class","_hoisted_2","key","_hoisted_3","_createElementVNode","_defineComponent","__name","setup","__props","store","useStore","appConfig","computed","getters","ROOT_STORE","appStatistics","isAuthUserAmin","AUTH_USER_STORE","userLoading","onBeforeMount","dispatch","_ctx","_cache","_component_router_view","_resolveComponent","_openBlock","_createElementBlock","_unref","_createCommentVNode","_createBlock","NotFound","__exports__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/admin.9bc68088.js","mappings":"mOAGA,MAAMA,EAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzEG,EAAa,CACjBC,GAAI,QACJC,MAAO,QAEHC,EAAa,CACjBC,IAAK,EACLF,MAAO,aAEHG,EAA2BT,GAAa,KAAmBU,EAAAA,EAAAA,GAAoB,MAAO,CAAEL,GAAI,UAAY,MAAO,KAUrH,OAA4BM,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,YACRC,MAAMC,GAEN,MAAMC,GAAQC,EAAAA,EAAAA,KAERC,GAAqCC,EAAAA,EAAAA,KACzC,IAAMH,EAAMI,QAAQC,EAAAA,GAAAA,QAAAA,cAEhBC,GAA6CH,EAAAA,EAAAA,KACjD,IAAMH,EAAMI,QAAQC,EAAAA,GAAAA,QAAAA,aAEhBE,GAAuCJ,EAAAA,EAAAA,KAC3C,IAAMH,EAAMI,QAAQI,EAAAA,GAAAA,QAAAA,YAEhBC,GAAoCN,EAAAA,EAAAA,KACxC,IAAMH,EAAMI,QAAQI,EAAAA,GAAAA,QAAAA,gBAKxB,OAFEE,EAAAA,EAAAA,KAAc,IAAMV,EAAMW,SAASN,EAAAA,GAAAA,QAAAA,yBAE9B,CAACO,EAAUC,KAChB,MAAMC,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO5B,EAAY,EACzD6B,EAAAA,EAAAA,IAAOT,IAWLU,EAAAA,EAAAA,IAAoB,IAAI,KAVvBH,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOzB,EAAY,EACnD0B,EAAAA,EAAAA,IAAOX,KACHS,EAAAA,EAAAA,OAAcI,EAAAA,EAAAA,IAAaN,EAAwB,CAClDrB,IAAK,EACLS,WAAWgB,EAAAA,EAAAA,IAAOhB,GAClBI,eAAeY,EAAAA,EAAAA,IAAOZ,IACrB,KAAM,EAAG,CAAC,YAAa,qBACzBU,EAAAA,EAAAA,OAAcI,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CAAE5B,IAAK,KACjDC,MAGN,CAEJ,I,UCvDA,MAAM4B,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,O","sources":["webpack://fittrackee_client/./src/views/AdminView.vue?67de","webpack://fittrackee_client/./src/views/AdminView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-64629971\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin\",\n class: \"view\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"container\"\n}\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\n\nimport { computed, ComputedRef, onBeforeMount } from 'vue'\n\n import NotFound from '@/components/Common/NotFound.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig, IAppStatistics } from '@/types/application'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminView',\n setup(__props) {\n\n const store = useStore()\n\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const appStatistics: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_STATS]\n )\n const isAuthUserAmin: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_ADMIN]\n )\n const userLoading: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n\n onBeforeMount(() => store.dispatch(ROOT_STORE.ACTIONS.GET_APPLICATION_STATS))\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (!_unref(userLoading))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (_unref(isAuthUserAmin))\n ? (_openBlock(), _createBlock(_component_router_view, {\n key: 0,\n appConfig: _unref(appConfig),\n appStatistics: _unref(appStatistics)\n }, null, 8, [\"appConfig\", \"appStatistics\"]))\n : (_openBlock(), _createBlock(NotFound, { key: 1 })),\n _hoisted_3\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./AdminView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminView.vue?vue&type=style&index=0&id=64629971&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-64629971\"]])\n\nexport default __exports__"],"names":["_withScopeId","n","_pushScopeId","_popScopeId","_hoisted_1","id","class","_hoisted_2","key","_hoisted_3","_createElementVNode","_defineComponent","__name","setup","__props","store","useStore","appConfig","computed","getters","ROOT_STORE","appStatistics","isAuthUserAmin","AUTH_USER_STORE","userLoading","onBeforeMount","dispatch","_ctx","_cache","_component_router_view","_resolveComponent","_openBlock","_createElementBlock","_unref","_createCommentVNode","_createBlock","NotFound","__exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/fittrackee/dist/static/js/app.948d4b2d.js b/fittrackee/dist/static/js/app.1f6c95cb.js similarity index 99% rename from fittrackee/dist/static/js/app.948d4b2d.js rename to fittrackee/dist/static/js/app.1f6c95cb.js index 3c9110ec..a199e35c 100644 --- a/fittrackee/dist/static/js/app.948d4b2d.js +++ b/fittrackee/dist/static/js/app.1f6c95cb.js @@ -1,2 +1,2 @@ -(function(){var e={5167:function(e,t,n){"use strict";var r=n(9669),a=n.n(r),o=n(8566),s=n(2894),i=n(5801),l=n(2024);const c=a().create({baseURL:(0,l.k)()});c.interceptors.request.use((e=>{const t=new AbortController;e.signal=t.signal;const n=(0,o.a)(e);o.j.set(n,t);const r=s.Z.getters[i.YN.GETTERS.AUTH_TOKEN];if(r){const t=`Bearer ${r}`;e.headers&&e.headers.Authorization!==t&&(e.headers.Authorization=`Bearer ${r}`)}return e}),(e=>Promise.reject(e))),c.interceptors.response.use((e=>((0,o.a)(e.config),e)),(e=>("canceled"!==e.message&&(0,o.a)(e.response.config),Promise.reject(e)))),t["Z"]=c},8566:function(e,t,n){"use strict";n.d(t,{a:function(){return o},j:function(){return r}});const r=new Map,a=e=>{const{method:t,url:n,params:r={},data:a={}}=e;return[t,n,JSON.stringify(r),JSON.stringify(a)].join("")},o=e=>{const t=a(e);if(r.has(t)){const e=r.get(t)||{};e?.abort(),r.delete(t)}return t}},2540:function(e,t,n){"use strict";var r=n(9150);const a=["nb"];function o(){const e=n(4612),t={};return e.keys().forEach((n=>{const r=n.match(/([A-Za-z0-9-_]+)\./i);if(r&&r.length>1&&!a.includes(r[1])){const a=r[1];t[a]=e(n).default}})),t}t["Z"]=(0,r.o)({legacy:!1,locale:"en",fallbackLocale:"en",globalInjection:!0,messages:o()})},9923:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Kontaktiere den Administrator"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee ist ein selbst-gehosteter Outdoor-Aktivitäts-Tracker."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["unter ",n(r(0))," Lizenz "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Quellkode"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Aktion"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Aktiviere Konto"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Aktiv"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Hinzufügen/Entfernen von Administratorrechten, Lösche Nutzerkonto."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Anwendung"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Kontakt-E-Mail des Administrators"])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Max. Anzahl aktiver Nutzer"])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["Wenn 0, gibt es keine Registrierungslimitierung.."])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Max. Dateianzahl im zip Archiv"])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["keine Kontakt-E-Mail"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. Größe der hochgeladenen Dateien (in Mb)"])},TITLE:e=>{const{normalize:t}=e;return t(["Anwendungskonfiguration"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. Größe des zip Archives (in Mb)"])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Zurück zu Admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Möchtest du wirklich das ",n(r(0))," Konto löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Möchtest du wirklich das ",n(r(0))," Passwort zurücksetzen?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Aktuelle E-Mail"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Lösche Nutzer"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["E-Mail-Versand ist deaktiviert."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Aktivieren/Deaktivieren von Sportarten."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["Neue E-Mail"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Das wasswort wurde zurückgesetzt."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Registrierung ist derzeit deaktiviert."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Registrierung ist derzeit aktiviert."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Aktiv"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["Trainings existieren"])},IMAGE:e=>{const{normalize:t}=e;return t(["Bild"])},LABEL:e=>{const{normalize:t}=e;return t(["Titel"])}},TITLE:e=>{const{normalize:t}=e;return t(["Sportarten Administration"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Aktualisiere Anwemdungskonfiguration (maximale Anzahl an registrierten Nutzern, maximale Dateigröße)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Aktualisiere E-Mail"])},USER:e=>{const{normalize:t}=e;return t(["Nutzer"])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Die E-Mail Adresse wurde aktualisiert."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Administratorrechte hinzufügen"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Administratorrechte entfernen"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["Adminstatus"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["Registrierungsdatum"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["Accountstatus"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nutzername"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["Trainingsanzahl"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["E-Mail: Eine gültige E-Mail muss angegeben werden."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Fehler bei der GPX-Verarbeitung."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Fehler beim Einlesen der GPX-Datei"])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Fehler beim Abrufen der Konfiguration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Fehler beim Aktualisieren der Konfiguration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Fehler. Die Registrierung ist deaktiviert."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["Dateierweiterung ist nicht erlaubt."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["Die Datei ist größer als erlaubt."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Ungültige Anmeldedaten."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Die bereitgestellten Daten sind ungültig."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte erneut anmelden."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte erneut anmelden."])},"Network Error":e=>{const{normalize:t}=e;return t(["Netzwerkfehler."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["Die neue E-Mail muss sich von der aktuellen E-Mail unterscheiden"])},"no file part":e=>{const{normalize:t}=e;return t(["Keine Datei angegeben."])},"no selected file":e=>{const{normalize:t}=e;return t(["Keine Datei ausgewählt."])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Passwort: Passwort und Passwortbestätigung stimmen nicht überein."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Gebe ein gültiges Authentifizierungstoken an."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Es tut mir leid, der Benutzername ist schon vergeben."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Sportart existiert nicht."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Die Signatur ist abgelaufen. Bitte melde dich erneut an."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Registrierung erfolgreich."])},"user does not exist":e=>{const{normalize:t}=e;return t(["Der Nutzer existiert nicht."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["Um den Administrator zu kontaktieren, muss eine gültige E-Mail-Adresse angegeben werden"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["Du kannst Dein Konto nicht löschen, da kein anderer Nutzer hat Administratorrechte besitzt."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["Du hast keine Berechtigung."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["Vorhergehende"])},NEXT:e=>{const{normalize:t}=e;return t(["Nächste"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Bestätigungs-E-Mail erneut senden"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Autorisieren"])},BACK:e=>{const{normalize:t}=e;return t(["Zurück"])},CANCEL:e=>{const{normalize:t}=e;return t(["Abbrechen"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Filter löschen"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Mein Konto löschen"])},DISABLE:e=>{const{normalize:t}=e;return t(["Deaktivieren"])},EDIT:e=>{const{normalize:t}=e;return t(["Bearbeiten"])},ENABLE:e=>{const{normalize:t}=e;return t(["Aktivieren"])},FILTER:e=>{const{normalize:t}=e;return t(["Filter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Anmelden"])},NO:e=>{const{normalize:t}=e;return t(["Nein"])},REGISTER:e=>{const{normalize:t}=e;return t(["Registrieren"])},RESET:e=>{const{normalize:t}=e;return t(["Zurücksetzen"])},SUBMIT:e=>{const{normalize:t}=e;return t(["Speichern"])},YES:e=>{const{normalize:t}=e;return t(["Ja"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["Über"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bestätigung"])},CONTACT:e=>{const{normalize:t}=e;return t(["Kontakt"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["Tag"]),t(["Tage"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Angezeigt"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["Dokumentation (en)"])},HERE:e=>{const{normalize:t}=e;return t(["hier"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Versteckt"])},HOME:e=>{const{normalize:t}=e;return t(["Startseite"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["sortiert nach"])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["sortieren"])},ASC:e=>{const{normalize:t}=e;return t(["aufsteigend"])},DESC:e=>{const{normalize:t}=e;return t(["absteigend"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["pro Seite"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Insgesamt"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Dashboard"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["Dieser Monat"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["Bei der Anwendung scheinen einige Probleme aufgetreten zu sein.
                                                                              Bitte versuche es später noch einmal oder kontaktiere den Administrator."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Seite nicht gefunden"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Training nicht gefunden"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Etwas lief schief"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Eine neue OAuth2-Anwendung hinzufügen"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["ID"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Geheimnis"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Anwendungsbeschreibung"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Erstellt am"])},NAME:e=>{const{normalize:t}=e;return t(["Anwendungsname"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["Weiterleitungs-URL"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Geltungsbereich"])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf auth-Endpunkte"])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf auth-Endpunkte"])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf users-Endpunkte"])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf users-Endpunkte"])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf workouts-Endpunkte"])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf workouts-Endpunkte"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf die Anwendungskonfiguration"])}},URL:e=>{const{normalize:t}=e;return t(["Anwendungs-URL"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Anwendung erfolgreich erstellt. Stelle sicher, dass du das Geheimnis kopierst, du kannst es nicht erneut anzeigen."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist sicher, dass du diese App löschen willst?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Die Anwendung ",n(r(0))," fragt an:"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["OAuth2-Anwendungen"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t([n(r(0))," den Zugriff auf deinen Account erlauben?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["in Zwischenablage kopieren"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Anwendung löschen"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Anwendung hinzufügen"])},NO_APP:e=>{const{normalize:t}=e;return t(["Anwendung wurde nicht gefunden!"])},NO_APPS:e=>{const{normalize:t}=e;return t(["keine Anwendungen"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["keine Beschreibung"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Alle Tokens zurückrufen"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist du sicher, dass du alle Tokens zurückrufen möchtest?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["Alle vorhandenen und vergebenen Tokens wurde zurückgerufen."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Pendeln)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Virtuell)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Wandern"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["Mountainbiken"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["Mountainbiken (elektrisch)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Rudern"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Laufen"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Skifahren (Alpin)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Skifahren (Langlauf)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Schneeschuhe"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Gehen"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistik"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["Woche"])},month:e=>{const{normalize:t}=e;return t(["Monat"])},year:e=>{const{normalize:t}=e;return t(["Jahr"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Hast du keine Anweisungen erhalten?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Prüfe deine E-Mail. Eine neue Bestätigungs-E-Mail wurde an die angegebene Adresse geschickt."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Hast du bereits ein Konto?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Möchtest du dein Konto wirklich löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Aktuelles Passwort"])},EMAIL:e=>{const{normalize:t}=e;return t(["E-Mail"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Gebe eine gültige E-Mail-Adresse an."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Gebe ein Passwort ein"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Nach Benutzernamen filtern"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort verbergen"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte fordere ein neues Passworts an."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Sprache"])},LOG_IN:e=>{const{normalize:t}=e;return t(["Anmelden"])},LOGIN:e=>{const{normalize:t}=e;return t(["Anmeldung"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Abmelden"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["Neues Passwort"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["Keine Nutzer gefunden."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["Mindestens 8 Zeichen sind erforderlich."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Passwort vergessen?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Prüfe Deine E-Mail. Wenn Deine Adresse in der Datenbank enthalten ist, wirst du eine E-Mail mit einem Link erhalten um Dein Passwort zurückzusetzen."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["schwach"])},AVERAGE:e=>{const{normalize:t}=e;return t(["mittel"])},GOOD:e=>{const{normalize:t}=e;return t(["gut"])},STRONG:e=>{const{normalize:t}=e;return t(["start"])},LABEL:e=>{const{normalize:t}=e;return t(["Passwortstärke"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Vermeide vorhersehbare Buchstabenersetzungen wie ","@"," für a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Vermeide umgekehrte Schreibweisen gebräuchlicher Wörter."])},allUppercase:e=>{const{normalize:t}=e;return t(["Schreibe einige, aber nicht alle Buchstaben groß."])},capitalization:e=>{const{normalize:t}=e;return t(["Schreibe mehr als nur den ersten Buchstaben groß."])},dates:e=>{const{normalize:t}=e;return t(["Vermeide Daten und Jahreszahlen, die mit Dir in Verbindung gebracht werden."])},recentYears:e=>{const{normalize:t}=e;return t(["Vermeide Angabe von letzten Jahreszahlen."])},associatedYears:e=>{const{normalize:t}=e;return t(["Vermeide Jahreszahlen, die mit Dir in Verbindung gebracht werden."])},sequences:e=>{const{normalize:t}=e;return t(["Vermeide gebräuchliche Zeichenfolgen."])},repeated:e=>{const{normalize:t}=e;return t(["Vermeide wiederholungen von Wörtern und Zeichen."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Verwende längere Tastaturmuster und ändere mehrmals die Schreibrichtung."])},anotherWord:e=>{const{normalize:t}=e;return t(["Füge weitere weniger gebräuchliche Wörter hinzu."])},useWords:e=>{const{normalize:t}=e;return t(["Verwenden Sie mehrere Wörter, aber vermeide gebräuchliche Ausdrücke."])},noNeed:e=>{const{normalize:t}=e;return t(["Du kannst sichere Passwörter erstellen, ohne Symbole, Zahlen oder Großbuchstaben zu verwenden."])},pwned:e=>{const{normalize:t}=e;return t(["Wenn Sie dieses Passwort auch anderweitig verwenden, sollten Sie es ändern."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Dein Passwort wurde aktualisiert. Klicke ",n(r(0))," um dich anzumelden."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Kontoausgabe"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Anstiegs-bezogene Daten (Aufnahmen, gesamt)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Zurück zum Profil"])},BIO:e=>{const{normalize:t}=e;return t(["Biographie"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Geburtsdatum"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Datumsanzeigeformat"])},EDIT:e=>{const{normalize:t}=e;return t(["Profil bearbeiten"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen ändern"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen für Sportarten ändern"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Bitte ",n(r(0))," um Deine E-Mail Adresse nochmals zu ändern oder kontaktiere den Administrator"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["Vorname"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["Erster Tag der Woche"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Sprache"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Nachname"])},LOCATION:e=>{const{normalize:t}=e;return t(["Ort"])},MONDAY:e=>{const{normalize:t}=e;return t(["Montag"])},PICTURE:e=>{const{normalize:t}=e;return t(["Bild"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Bildausgabe"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Bild aktualisieren"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Bild entfernen"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Einstellungsausgabe"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Profil-Ausgabe"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Regirierungsdatum"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Sportarten-Einstellungsausgabe"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Sontag"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["Konto"])},APPS:e=>{const{normalize:t}=e;return t(["Anwendungen"])},PICTURE:e=>{const{normalize:t}=e;return t(["Bild"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen"])},PROFILE:e=>{const{normalize:t}=e;return t(["Profil"])},SPORTS:e=>{const{normalize:t}=e;return t(["Sportarten"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["Aktion"])},COLOR:e=>{const{normalize:t}=e;return t(["Farbe"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["vom Admin deaktiviert"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["aktiv"])},LABEL:e=>{const{normalize:t}=e;return t(["Titel"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["Geschwindigkeitsschwellenwert für Stopp"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich aktualisiert. Bitte prüfe Deine E-Mail um die neue E-Mail Adresse zu bestätigen."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich erstellt."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["Ein Aktivierungslink für Dein Konto wurde an die angegebene E-Mail Adresse geschickt."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich aktualisiert."])},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Einheiten für die Distanz"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Imperiales System (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Metrisches System (m, km)"])}},TIMEZONE:e=>{const{normalize:t}=e;return t(["Zeitzone"])}},REGISTER:e=>{const{normalize:t}=e;return t(["Registrieren"])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["E-Mail zur Kontobestätigung erneut senden"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Entschuldigung, die Registrierung ist deaktiviert."])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort anzeigen"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["Dieser Account ist inaktiv."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["Benutzerbild"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nutzername"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(["3 bis 30 Zeichen sind erforderlich, nur alphanumerische Zeichen und der Unterstrich _ sind erlaubt."])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Training hinzufügen"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["Analyse"])},ASCENT:e=>{const{normalize:t}=e;return t(["Aufstieg"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["Durchschn. Geschwindigkeit"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["Durchschnittsgeschwindigkeit"])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["zurück zum Training"])},DATE:e=>{const{normalize:t}=e;return t(["Datum"])},DESCENT:e=>{const{normalize:t}=e;return t(["Abstieg"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["zeige Filter"])},DISTANCE:e=>{const{normalize:t}=e;return t(["Entfernung"])},DURATION:e=>{const{normalize:t}=e;return t(["Dauer"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Training bearbeiten"])},ELEVATION:e=>{const{normalize:t}=e;return t(["Höhe"])},END:e=>{const{normalize:t}=e;return t(["Ende"])},FROM:e=>{const{normalize:t}=e;return t(["Von"])},GPX_FILE:e=>{const{normalize:t}=e;return t([".gpx Datei"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["verberge Filter"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Letzte Trainings"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Lade mehr Trainings"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["maximale Höhe"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["Maximale Dateianzahl"])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["Maximalgröße"])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["Max. Geschwindigkeit"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["minimale Höhe"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Nächstes Segment"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Nächstes Training"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["Daten aus gpx, ohne Bereinigung"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["Keine Datei angegeben"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["enthält keinen Ordner"])},NO_MAP:e=>{const{normalize:t}=e;return t(["Keine Karte"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Kein nächstes Segment"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Kein nächstes Training"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["Keine Anmerkungen"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Kein vorheriges Segment"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Kein vorheriges Training"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["Keine Aufzeichnungen."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["Keine Trainings."])},NOTES:e=>{const{normalize:t}=e;return t(["Anmerkungen"])},PAUSES:e=>{const{normalize:t}=e;return t(["Pausen"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Vorheriges Segment"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Vorheriges Training"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["Aufzeichnung"]),t(["Aufzeichnungen"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Durchschn. Geschwindigkeit"])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Weiteste Entfernung"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Höchster Anstieg"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Längste Dauer"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Max. Geschwindigkeit"])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["verbleibende Zeichen"])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["Segment"]),t(["Segmente"])])},SPEED:e=>{const{normalize:t}=e;return t(["Geschwindigkeit"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["Sportart"]),t(["Sportarten"])])},START:e=>{const{normalize:t}=e;return t(["Start"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Start und Ziel"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["Höhenachse bei Null starten"])},TITLE:e=>{const{normalize:t}=e;return t(["Titel"])},TO:e=>{const{normalize:t}=e;return t(["bis"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["Gesamtdauer"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Füge erstes Training hinzu!"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["Luftfeuchtigkeit"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["Temperatur"])},WIND:e=>{const{normalize:t}=e;return t(["Wind"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNO"])},NE:e=>{const{normalize:t}=e;return t(["NO"])},ENE:e=>{const{normalize:t}=e;return t(["ONO"])},E:e=>{const{normalize:t}=e;return t(["O"])},ESE:e=>{const{normalize:t}=e;return t(["OSO"])},SE:e=>{const{normalize:t}=e;return t(["SO"])},SSE:e=>{const{normalize:t}=e;return t(["SSO"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSW"])},SW:e=>{const{normalize:t}=e;return t(["SW"])},WSW:e=>{const{normalize:t}=e;return t(["WSW"])},W:e=>{const{normalize:t}=e;return t(["W"])},WNW:e=>{const{normalize:t}=e;return t(["WNW"])},NW:e=>{const{normalize:t}=e;return t(["NW"])},NNW:e=>{const{normalize:t}=e;return t(["NNW"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["klarer Tag"])},"clear-night":e=>{const{normalize:t}=e;return t(["klare Nacht"])},cloudy:e=>{const{normalize:t}=e;return t(["wolkig"])},fog:e=>{const{normalize:t}=e;return t(["Nebel"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["teilweise bewölkter Tag"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["teilweise bewölkte Nacht"])},rain:e=>{const{normalize:t}=e;return t(["Regen"])},sleet:e=>{const{normalize:t}=e;return t(["Schneeregen"])},snow:e=>{const{normalize:t}=e;return t(["Schnee"])},wind:e=>{const{normalize:t}=e;return t(["Wind"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["mit .gpx Datei"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["ohne .gpx Datei"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["Training"]),t(["Trainings"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["Trainingsdatum"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist du sicher, dass du dieses Training löschen möchtest?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t([".zip Datei"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["oder .zip Datei mit .gpx Dateien"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},8757:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Contact the administrator"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee is a self-hosted outdoor activity tracker."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["under ",n(r(0))," license "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Source code"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Action"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Activate account"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Active"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Add/remove admin rights, delete user account."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Application"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Administrator email for contact"])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Max. number of active users"])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["If 0, no limitation on registration."])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Max. files of zip archive"])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["no contact email"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. size of uploaded files (in Mb)"])},TITLE:e=>{const{normalize:t}=e;return t(["Application configuration"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. size of zip archive (in Mb)"])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Back to admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Are you sure you want to delete ",n(r(0))," account? All data will be deleted, this cannot be undone."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Are you sure you want to reset ",n(r(0))," password?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Current email"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Delete user"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["Email sending is disabled."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Enable/disable sports."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["New email"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["The password has been reset."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Registration is currently disabled."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Registration is currently enabled."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Reset password"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Active"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["workouts exist"])},IMAGE:e=>{const{normalize:t}=e;return t(["Image"])},LABEL:e=>{const{normalize:t}=e;return t(["Label"])}},TITLE:e=>{const{normalize:t}=e;return t(["Sports administration"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Update application configuration (maximum number of registered users, maximum files size)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Update email"])},USER:e=>{const{normalize:t,plural:n}=e;return n([t(["user"]),t(["users"])])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["The email address has been updated."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Add admin rights"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Remove admin rights"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["admin status"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["registration date"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["account status"])},USERNAME:e=>{const{normalize:t}=e;return t(["username"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["workout count"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Error. Please try again or contact the administrator."])},"at least one file in zip archive exceeds size limit, please check the archive":e=>{const{normalize:t}=e;return t(["At least one file in zip archive exceeds size limit, please check the archive."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["Email: valid email must be provided."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Error during gpx processing."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Error during gpx file parsing."])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Error on getting configuration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Error when updating configuration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Error, please try again or contact the administrator."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Error, registration is disabled."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["File extension not allowed."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["File size is greater than the allowed size."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Invalid credentials."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Provided data are invalid."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Invalid token, please log in again."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Invalid token, please log in again."])},"Network Error":e=>{const{normalize:t}=e;return t(["Network Error."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["The new email must be different than curent email"])},"no file part":e=>{const{normalize:t}=e;return t(["No file provided."])},"no selected file":e=>{const{normalize:t}=e;return t(["No selected file."])},"the number of files in the archive exceeds the limit":e=>{const{normalize:t}=e;return t(["The number of files in the archive exceeds the limit."])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Password: password and password confirmation don't match."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Provide a valid auth token."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Sorry, that username is already taken."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Sport does not exist."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Signature expired. Please log in again."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Successfully registered."])},"user does not exist":e=>{const{normalize:t}=e;return t(["User does not exist."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["A valid email must be provided for administrator contact"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["You can not delete your account, no other user has admin rights."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["You do not have permissions."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["previous"])},NEXT:e=>{const{normalize:t}=e;return t(["next"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Resend confirmation email"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Authorize"])},BACK:e=>{const{normalize:t}=e;return t(["Back"])},CANCEL:e=>{const{normalize:t}=e;return t(["Cancel"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Clear filters"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Delete my account"])},DISABLE:e=>{const{normalize:t}=e;return t(["Disable"])},EDIT:e=>{const{normalize:t}=e;return t(["Edit"])},ENABLE:e=>{const{normalize:t}=e;return t(["Enable"])},FILTER:e=>{const{normalize:t}=e;return t(["Filter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Log in"])},NO:e=>{const{normalize:t}=e;return t(["No"])},REGISTER:e=>{const{normalize:t}=e;return t(["Register"])},RESET:e=>{const{normalize:t}=e;return t(["Reset"])},SUBMIT:e=>{const{normalize:t}=e;return t(["Submit"])},YES:e=>{const{normalize:t}=e;return t(["Yes"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["about"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Confirmation"])},CONTACT:e=>{const{normalize:t}=e;return t(["contact"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["day"]),t(["days"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Displayed"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["documentation"])},HERE:e=>{const{normalize:t}=e;return t(["here"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Hidden"])},HOME:e=>{const{normalize:t}=e;return t(["Home"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["order by"])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["sort"])},ASC:e=>{const{normalize:t}=e;return t(["ascending"])},DESC:e=>{const{normalize:t}=e;return t(["descending"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["par page"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Total"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Dashboard"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["This month"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Error. Please try again or contact the administrator."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["The application seems to have encountered some issues.
                                                                              Please try again later or contact the administrator."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Page not found"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Workout not found"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Something went wrong"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Add a new OAuth2 application"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["Id"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Secret"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Application description"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Issue at"])},NAME:e=>{const{normalize:t}=e;return t(["Application name"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["Redirect URL"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Scope"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to application configuration."])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to auth endpoints."])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to auth endpoints."])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to users endpoints."])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to users endpoints."])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to workouts endpoints."])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to workouts endpoints."])}},URL:e=>{const{normalize:t}=e;return t(["Application URL"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Application created successfully. Make sure to copy the secret now, it won't show up again."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete this app?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["The application ",n(r(0))," is requesting:"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["OAuth2 applications"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Authorize ",n(r(0))," to use your account?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["copy to the clipboard"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Delete application"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Add an application"])},NO_APP:e=>{const{normalize:t}=e;return t(["Application not found!"])},NO_APPS:e=>{const{normalize:t}=e;return t(["no applications"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["no description"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Revoke all tokens"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to revoke all tokens?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["All existing associated tokens have been revoked."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Transport)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Virtual)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Hiking"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["Mountain Biking"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["Mountain Biking (Electric)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Rowing"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Running"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Skiing (Alpine)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Skiing (Cross Country)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Snowshoes"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Walking"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistics"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["week"])},month:e=>{const{normalize:t}=e;return t(["month"])},year:e=>{const{normalize:t}=e;return t(["year"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Didn't received instructions?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Check your email. A new confirmation email has been sent to the address provided."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Already have an account?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete your account? All data will be deleted, this cannot be undone"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Current password"])},EMAIL:e=>{const{normalize:t}=e;return t(["Email"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Enter a valid email address."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Enter a password"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Filter on username"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["hide password"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Invalid token, please request a new password reset."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Language"])},LOG_IN:e=>{const{normalize:t}=e;return t(["log in"])},LOGIN:e=>{const{normalize:t}=e;return t(["Login"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Logout"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["New password"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["No users found."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Password"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["At least 8 characters required."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Forgot password?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Password reset"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Check your email. If your address is in our database, you'll received an email with a link to reset your password."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["weak"])},AVERAGE:e=>{const{normalize:t}=e;return t(["average"])},GOOD:e=>{const{normalize:t}=e;return t(["good"])},STRONG:e=>{const{normalize:t}=e;return t(["strong"])},LABEL:e=>{const{normalize:t}=e;return t(["password strength"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Avoid predictable letter substitutions like ","@"," for a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Avoid reversed spellings of common words."])},allUppercase:e=>{const{normalize:t}=e;return t(["Capitalize some, but not all letters."])},capitalization:e=>{const{normalize:t}=e;return t(["Capitalize more than the first letter."])},dates:e=>{const{normalize:t}=e;return t(["Avoid dates and years that are associated with you."])},recentYears:e=>{const{normalize:t}=e;return t(["Avoid recent years."])},associatedYears:e=>{const{normalize:t}=e;return t(["Avoid years that are associated with you."])},sequences:e=>{const{normalize:t}=e;return t(["Avoid common character sequences."])},repeated:e=>{const{normalize:t}=e;return t(["Avoid repeated words and characters."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Use longer keyboard patterns and change typing direction multiple times."])},anotherWord:e=>{const{normalize:t}=e;return t(["Add more words that are less common."])},useWords:e=>{const{normalize:t}=e;return t(["Use multiple words, but avoid common phrases."])},noNeed:e=>{const{normalize:t}=e;return t(["You can create strong passwords without using symbols, numbers, or uppercase letters."])},pwned:e=>{const{normalize:t}=e;return t(["If you use this password elsewhere, you should change it."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Your password have been updated. Click ",n(r(0))," to log in."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Account edition"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Ascent-related data (records, total)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Back to profile"])},BIO:e=>{const{normalize:t}=e;return t(["Bio"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Birth date"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Date display format"])},EDIT:e=>{const{normalize:t}=e;return t(["Edit profile"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Edit preferences"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Edit sports preferences"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Please ",n(r(0))," to change your email address again or contact the administrator"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["First name"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["First day of week"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Language"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Last name"])},LOCATION:e=>{const{normalize:t}=e;return t(["Location"])},MONDAY:e=>{const{normalize:t}=e;return t(["Monday"])},PICTURE:e=>{const{normalize:t}=e;return t(["Picture"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Picture edition"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Update picture"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Remove picture"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Preferences edition"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Profile edition"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Registration date"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Sports preferences edition"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Sunday"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["account"])},APPS:e=>{const{normalize:t}=e;return t(["apps"])},PICTURE:e=>{const{normalize:t}=e;return t(["picture"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["preferences"])},PROFILE:e=>{const{normalize:t}=e;return t(["profile"])},SPORTS:e=>{const{normalize:t}=e;return t(["sports"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["action"])},COLOR:e=>{const{normalize:t}=e;return t(["color"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["disabled by admin"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["active"])},LABEL:e=>{const{normalize:t}=e;return t(["label"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["stopped speed threshold"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Your account has been updated successfully. Please check your email to confirm your new email address."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Your account has been created successfully."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["A link to activate your account has been emailed to the address provided."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Your account has been updated successfully."])},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Units for distance"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Imperial system (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Metric system (m, km)"])}},TIMEZONE:e=>{const{normalize:t}=e;return t(["Timezone"])}},REGISTER:e=>{const{normalize:t}=e;return t(["Register"])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Resend account confirmation email"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Sorry, registration is disabled."])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Reset your password"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["show password"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["This user account is inactive."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["user picture"])},USERNAME:e=>{const{normalize:t}=e;return t(["Username"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(['3 to 30 characters required, only alphanumeric characters and the underscore character "_" allowed.'])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Add a workout"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["analysis"])},ASCENT:e=>{const{normalize:t}=e;return t(["ascent"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["ave. speed"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["average speed"])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["back to workout"])},DATE:e=>{const{normalize:t}=e;return t(["date"])},DESCENT:e=>{const{normalize:t}=e;return t(["descent"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["display filters"])},DISTANCE:e=>{const{normalize:t}=e;return t(["distance"])},DURATION:e=>{const{normalize:t}=e;return t(["duration"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Edit the workout"])},ELEVATION:e=>{const{normalize:t}=e;return t(["elevation"])},END:e=>{const{normalize:t}=e;return t(["end"])},FROM:e=>{const{normalize:t}=e;return t(["from"])},GPX_FILE:e=>{const{normalize:t}=e;return t([".gpx file"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["hide filters"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Latest workouts"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Load more workouts"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["max. altitude"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["max files"])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["max size"])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["max. speed"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["min. altitude"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["No next segment"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Next workout"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["data from gpx, without any cleaning"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["No file provided"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["no folder inside"])},NO_MAP:e=>{const{normalize:t}=e;return t(["No map"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["No next segment"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["No next workout"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["No notes"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["No previous segment"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["No previous workout"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["No records."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["No workouts."])},NOTES:e=>{const{normalize:t}=e;return t(["notes"])},PAUSES:e=>{const{normalize:t}=e;return t(["pauses"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Previous segment"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Previous workout"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["record"]),t(["records"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Ave. speed"])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Farthest distance"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Highest ascent"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Longest duration"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Max. speed"])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["remaining characters"])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["segment"]),t(["segments"])])},SPEED:e=>{const{normalize:t}=e;return t(["speed"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["sport"]),t(["sports"])])},START:e=>{const{normalize:t}=e;return t(["start"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Start and finish"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["start elevation axis at zero"])},TITLE:e=>{const{normalize:t}=e;return t(["title"])},TO:e=>{const{normalize:t}=e;return t(["to"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["total duration"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Upload one!"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["humidity"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["temperature"])},WIND:e=>{const{normalize:t}=e;return t(["wind"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNE"])},NE:e=>{const{normalize:t}=e;return t(["NE"])},ENE:e=>{const{normalize:t}=e;return t(["ENE"])},E:e=>{const{normalize:t}=e;return t(["E"])},ESE:e=>{const{normalize:t}=e;return t(["ESE"])},SE:e=>{const{normalize:t}=e;return t(["SE"])},SSE:e=>{const{normalize:t}=e;return t(["SSE"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSW"])},SW:e=>{const{normalize:t}=e;return t(["SW"])},WSW:e=>{const{normalize:t}=e;return t(["WSW"])},W:e=>{const{normalize:t}=e;return t(["W"])},WNW:e=>{const{normalize:t}=e;return t(["WNW"])},NW:e=>{const{normalize:t}=e;return t(["NW"])},NNW:e=>{const{normalize:t}=e;return t(["NNW"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["clear day"])},"clear-night":e=>{const{normalize:t}=e;return t(["clear night"])},cloudy:e=>{const{normalize:t}=e;return t(["cloudy"])},fog:e=>{const{normalize:t}=e;return t(["fog"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["partly cloudy day"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["partly cloudy night"])},rain:e=>{const{normalize:t}=e;return t(["rain"])},sleet:e=>{const{normalize:t}=e;return t(["sleet"])},snow:e=>{const{normalize:t}=e;return t(["snow"])},wind:e=>{const{normalize:t}=e;return t(["wind"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["with .gpx file"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["without .gpx file"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["workout"]),t(["workouts"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["workout date"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete this workout?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t([".zip file"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["or .zip file containing .gpx files"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},6625:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Contacter l'administrateur"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee est un tracker d'activités sportives (en extérieur)."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["sous licence ",n(r(0))," (en) "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Code source (en)"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Action"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Activer le compte"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Actif"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Ajouter/retirer des droits d'administration, supprimer des comptes utilisateurs."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Application"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Email de l'administrateur pour contact "])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Nombre maximum d'utilisateurs actifs "])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["Si égal à 0, pas limite d'inscription"])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Nombre max. de fichiers dans une archive zip "])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["non renseigné"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Taille max. des fichiers (en Mo) "])},TITLE:e=>{const{normalize:t}=e;return t(["Configuration de l'application"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Taille max. des archives zip (en Mo) "])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Revenir à l'admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Êtes-vous sûr de vouloir supprimer le compte de l'utilisateur ",n(r(0))," ? Toutes les données seront définitivement."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Êtes-vous sûr de vouloir réinitialiser le mot de passe de l'utilisateur ",n(r(0))," ?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Adresse email actuelle"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Supprimer l'utilisateur"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["L'envoi d'emails est désactivé."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Activer/désactiver des sports."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["Nouvelle adresse email"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Le mot de passe a été réinitialisé."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Les inscriptions sont actuellement désactivées."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Les inscriptions sont actuellement activées."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Réinit. le mot de passe"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Actif"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["des séances existent"])},IMAGE:e=>{const{normalize:t}=e;return t(["Image"])},LABEL:e=>{const{normalize:t}=e;return t(["Label"])}},TITLE:e=>{const{normalize:t}=e;return t(["Administration - Sports"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Configurer l'application (nombre maximum d'utilisateurs inscrits, taille maximale des fichers)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Changer l'email"])},USER:e=>{const{normalize:t,plural:n}=e;return n([t(["utilisateur"]),t(["utilisateurs"])])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["L'adresse email a été mise à jour."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Ajouter les droits d'admin"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Retirer les droits d'admin"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["status administrateur"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["date d'inscription"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["statut du compte"])},USERNAME:e=>{const{normalize:t}=e;return t(["nom d'utilisateur"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["nombre de séances"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Erreur. Veuillez réessayer ou contacter l'administrateur."])},"at least one file in zip archive exceeds size limit, please check the archive":e=>{const{normalize:t}=e;return t(["Au moins un fichier de l'archive zip dépasse la taille maximale, veuillez vérifier l'archive."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["Courriel : une adresse électronique valide doit être fournie."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Erreur lors du traitement du fichier gpx."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Erreur lors de l'analyse du fichier."])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Erreur lors de la récupération de la configuration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Erreur lors de la mise à jour de la configuration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Erreur, veuillez réessayer ou contacter l'administrateur."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Erreur, les inscriptions sont désactivées."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["Extension de fichier non autorisée."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["La taille du fichier est supérieure à la limite autorisée."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Identifiants invalides."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Données fournies incorrectes."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Jeton de connexion invalide, merci de vous reconnecter."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Jeton de connexion, merci de vous reconnecter."])},"no file part":e=>{const{normalize:t}=e;return t(["Pas de fichier fourni."])},"no selected file":e=>{const{normalize:t}=e;return t(["Pas de fichier sélectionné."])},"Network Error":e=>{const{normalize:t}=e;return t(["Erreur réseau."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["La nouvelle addresse électronique doit être differente de l'adresse actuelle"])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Mot de passe : les mots de passe saisis sont différents."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Merci de fournir un jeton de connexion valide."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Ce sport n'existe pas."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Signature expirée. Merci de vous reconnecter."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Désolé, ce nom d'utilisateur est déjà utilisé."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Inscription validée."])},"the number of files in the archive exceeds the limit":e=>{const{normalize:t}=e;return t(["Le nombre de fichiers de l'archive dépasse la limite."])},"user does not exist":e=>{const{normalize:t}=e;return t(["L'utilisateur n'existe pas."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["Une adresse électronique doit être fournie pour le contact de l'administrateur"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["Vous ne pouvez pas supprimer votre compte, aucun autre utilisateur n'a des droits d'administration."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["Vous n'avez pas les permissions nécessaires."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["précédent"])},NEXT:e=>{const{normalize:t}=e;return t(["suivant"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Renvoyer le message de confirmation"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Autoriser"])},BACK:e=>{const{normalize:t}=e;return t(["Retour"])},CANCEL:e=>{const{normalize:t}=e;return t(["Annuler"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Réinitialiser"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Supprimer mon compte"])},DISABLE:e=>{const{normalize:t}=e;return t(["Désactiver"])},EDIT:e=>{const{normalize:t}=e;return t(["Modifier"])},ENABLE:e=>{const{normalize:t}=e;return t(["Activer"])},FILTER:e=>{const{normalize:t}=e;return t(["Filtrer"])},LOGIN:e=>{const{normalize:t}=e;return t(["Se connecter"])},NO:e=>{const{normalize:t}=e;return t(["Non"])},REGISTER:e=>{const{normalize:t}=e;return t(["S'inscrire"])},RESET:e=>{const{normalize:t}=e;return t(["Réinit."])},SUBMIT:e=>{const{normalize:t}=e;return t(["Valider"])},YES:e=>{const{normalize:t}=e;return t(["Oui"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["à propos"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Confirmation"])},CONTACT:e=>{const{normalize:t}=e;return t(["contact"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["jour"]),t(["jours"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Affiché"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["documentation (en)"])},HERE:e=>{const{normalize:t}=e;return t(["ici"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Masqué"])},HOME:e=>{const{normalize:t}=e;return t(["Accueil"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["trier par "])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["tri"])},ASC:e=>{const{normalize:t}=e;return t(["ascendant"])},DESC:e=>{const{normalize:t}=e;return t(["descendant"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["par page"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Total"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Tableau de bord"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["Ce mois-ci"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Erreur. Veuillez réessayer ou contacter l'administrateur."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["L'application semble rencontrer quelques problèmes.
                                                                              Veuillez réessayer plus tard ou contacter l'administrateur."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Page introuvable"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Séance introuvable"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Une erreur s'est produite"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Ajouter une nouvelle application OAuth2"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["Identifiant"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Secret"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Description de l'application"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Créée le"])},NAME:e=>{const{normalize:t}=e;return t(["Nom de l'application"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["URL de redirection"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Scope"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture à la configuration de l'application."])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes auth."])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes auth."])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes users."])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes users."])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes workouts."])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes workouts."])}},URL:e=>{const{normalize:t}=e;return t(["URL de l'application"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Application créée avec succès. Assurez-vous de copier le secret maintenant, il ne s'affichera plus."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr de vouloir supprimer cette application ?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["L'application ",n(r(0))," demande les accès suivants :"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["Applications OAuth2"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Autoriser ",n(r(0))," à utiliser votre compte ?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["copier dans le presse papier"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Supprimer l'application"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Ajouter une application"])},NO_APP:e=>{const{normalize:t}=e;return t(["Application introuvable !"])},NO_APPS:e=>{const{normalize:t}=e;return t(["pas de applications"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["pas de description"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Révoquer tous les jetons"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr de vouloir révoquer tous les jetons ?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["Tous les jetons associés existants ont été révoqués."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Transport)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Virtuel)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Randonnée"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["VTT"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["VTT (Électrique)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Aviron"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Course"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Ski (Alpin)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Ski (Randonnée)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Raquettes"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Marche"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistiques"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["semaine"])},month:e=>{const{normalize:t}=e;return t(["mois"])},year:e=>{const{normalize:t}=e;return t(["année"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Vous n'avez pas reçu les instructions ?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Vérifiez vos courriels. Un nouveau courriel de confirmation a été envoyé à l'adresse électronique fournie."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Vous avez déjà un compte ?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr·e de vouloir supprimer votre compte ? Toutes les données seront définitivement effacés"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Mot de passe actuel"])},EMAIL:e=>{const{normalize:t}=e;return t(["Courriel"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Saisissez une adresse électronique valide."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Saisissez un mot de passe"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Filtrer sur le nom d'utilisateur"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["masquer le mot de passe"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Jeton invalide, veuillez demander une nouvelle réinitialisation de mot de passe."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Langue"])},LOG_IN:e=>{const{normalize:t}=e;return t(["connecter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Se connecter"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Se déconnecter"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["Nouveau mot de passe"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["Aucun utilisateur trouvé."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Mot de passe"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["8 caractères minimum."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Mot de passe oublié ?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Réinitialisation du mot de passe"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Vérifiez vos courriels. Si vote adresse est dans notre base de données, vous recevrez un courriel avec un lien pour réinitialiser votre mot de passe."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["faible"])},AVERAGE:e=>{const{normalize:t}=e;return t(["moyenne"])},GOOD:e=>{const{normalize:t}=e;return t(["bonne"])},STRONG:e=>{const{normalize:t}=e;return t(["forte"])},LABEL:e=>{const{normalize:t}=e;return t(["robustesse du mot de passe"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Évitez les substitutions de lettres prévisibles comme ","@"," pour a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Évitez les orthographes inversées des mots courants."])},allUppercase:e=>{const{normalize:t}=e;return t(["Mettez quelques lettres en majuscules, mais pas toutes."])},capitalization:e=>{const{normalize:t}=e;return t(["Capitalisez mais pas seulement la première lettre."])},dates:e=>{const{normalize:t}=e;return t(["Évitez les dates et les années qui vous sont associées. (ex : date ou année de naissance)."])},recentYears:e=>{const{normalize:t}=e;return t(["Évitez les dernières années."])},associatedYears:e=>{const{normalize:t}=e;return t(["Évitez les années qui vous sont associées. (ex : date de naissance)."])},sequences:e=>{const{normalize:t}=e;return t(["Évitez les séquences de caractères courantes."])},repeated:e=>{const{normalize:t}=e;return t(["Évitez les mots et les caractères répétés."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Utilisez des motifs de clavier plus longs et changez de sens de frappe plusieurs fois."])},anotherWord:e=>{const{normalize:t}=e;return t(["Ajoutez des mots moins courants."])},useWords:e=>{const{normalize:t}=e;return t(["Utilisez plusieurs mots, mais évitez les phrases courantes."])},noNeed:e=>{const{normalize:t}=e;return t(["Vous pouvez créer des mots de passe forts sans utiliser de symboles, de chiffres ou de lettres majuscules."])},pwned:e=>{const{normalize:t}=e;return t(["Si vous utilisez ce mot de passe ailleurs, vous devriez le modifier."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Votre mot de passe a été mis à jour. Cliquez ",n(r(0))," pour vous connecter."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour du compte"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Données relatives au dénivelé positif (records, total)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Revenir au profil"])},BIO:e=>{const{normalize:t}=e;return t(["Bio"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Date de naissance"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Format d'affichage de la date"])},EDIT:e=>{const{normalize:t}=e;return t(["Modifier le profil"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Modifier les préférences"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Modifier les préférences des sports"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Veuillez vous ",n(r(0))," pour changer de nouveau votre adresse électronique ou contacter l'administrateur"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["Premier jour de la semaine"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["Prénom"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Langue"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Nom"])},LOCATION:e=>{const{normalize:t}=e;return t(["Lieu"])},MONDAY:e=>{const{normalize:t}=e;return t(["Lundi"])},PICTURE:e=>{const{normalize:t}=e;return t(["Image de profil"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour de l'image de profil"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Mettre à jour l'image"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Supprimer"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour des préférences"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour du profil"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Date d'inscription"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour des préférences des sports"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Dimanche"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["compte"])},APPS:e=>{const{normalize:t}=e;return t(["apps"])},PICTURE:e=>{const{normalize:t}=e;return t(["image"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["préférences"])},PROFILE:e=>{const{normalize:t}=e;return t(["profil"])},SPORTS:e=>{const{normalize:t}=e;return t(["sports"])}},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Unités pour les distances"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Système impérial (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Système métrique (m, km)"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["action"])},COLOR:e=>{const{normalize:t}=e;return t(["couleur"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["désactivé par l'administrateur"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["actif"])},LABEL:e=>{const{normalize:t}=e;return t(["label"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["seuil de vitesse arrêtée"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Votre compte a été modifié avec succès. Veuillez vérifier votre boîte de réception pour valider votre nouvelle adresse électronique."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Votre compte a été créé avec succès."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["Un lien pour activer votre compte a été envoyé à l'adresse électronique fournie."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Votre compte a été modifié avec succès."])},TIMEZONE:e=>{const{normalize:t}=e;return t(["Fuseau horaire"])}},REGISTER:e=>{const{normalize:t}=e;return t(["S'inscrire"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Désolé, les inscriptions sont désactivées."])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Envoyer à nouveau le courriel de confirmation de compte"])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Réinitialiser votre mot de passe"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["afficher le mot de passe"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["Le compte de cet utilisateur est inactif."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["photo de l'utilisateur"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nom d'utilisateur"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(["3 à 30 caractères requis, seuls les caractères alphanumériques et le caractère _ sont autorisés."])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Ajouter une séance"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["analyse"])},ASCENT:e=>{const{normalize:t}=e;return t(["dénivelé positif"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["vitesse moyenne"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["vitesse moy."])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["revenir à la séance"])},DATE:e=>{const{normalize:t}=e;return t(["date"])},DESCENT:e=>{const{normalize:t}=e;return t(["dénivelé négatif"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["afficher les filtres"])},DISTANCE:e=>{const{normalize:t}=e;return t(["distance"])},DURATION:e=>{const{normalize:t}=e;return t(["durée"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Modifier la séance"])},ELEVATION:e=>{const{normalize:t}=e;return t(["altitude"])},END:e=>{const{normalize:t}=e;return t(["fin"])},FROM:e=>{const{normalize:t}=e;return t(["à partir de"])},GPX_FILE:e=>{const{normalize:t}=e;return t(["fichier .gpx"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["masquer les filtres"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Séances récentes"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Charger les séances suivantes"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["altitude max"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["fichiers max. "])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["taille max. "])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["vitesse max"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["altitude min"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Segment suivant"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Séance suivante"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["données issues du fichier gpx, sans correction"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["Pas de fichier fourni"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["pas de répertoire"])},NO_MAP:e=>{const{normalize:t}=e;return t(["Pas de carte"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Pas de segment suivant"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Pas de séance suivante"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["Pas de notes"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Pas de segment précédent"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Pas de séance précédente"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["Pas de records."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["Pas de séances."])},NOTES:e=>{const{normalize:t}=e;return t(["notes"])},PAUSES:e=>{const{normalize:t}=e;return t(["pauses"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Segment précédent"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Séance précédente"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["record"]),t(["records"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Vitesse moy."])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Distance la + longue"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Dénivelé positif le + élevé"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Durée la + longue"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Vitesse max."])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["nombre de caractères restants "])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["segment"]),t(["segments"])])},SPEED:e=>{const{normalize:t}=e;return t(["vitesse"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["sport"]),t(["sports"])])},START:e=>{const{normalize:t}=e;return t(["début"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Départ et arrivée"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["démarrer l'axe de l'altitude à 0"])},TITLE:e=>{const{normalize:t}=e;return t(["titre"])},TO:e=>{const{normalize:t}=e;return t(["jusqu'au"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["durée totale"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Ajoutez votre première séance !"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["humidité"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["température"])},WIND:e=>{const{normalize:t}=e;return t(["vent"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNE"])},NE:e=>{const{normalize:t}=e;return t(["NE"])},ENE:e=>{const{normalize:t}=e;return t(["ENE"])},E:e=>{const{normalize:t}=e;return t(["E"])},ESE:e=>{const{normalize:t}=e;return t(["ESE"])},SE:e=>{const{normalize:t}=e;return t(["SE"])},SSE:e=>{const{normalize:t}=e;return t(["SSE"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSO"])},SW:e=>{const{normalize:t}=e;return t(["SO"])},WSW:e=>{const{normalize:t}=e;return t(["OSO"])},W:e=>{const{normalize:t}=e;return t(["O"])},WNW:e=>{const{normalize:t}=e;return t(["ONO"])},NW:e=>{const{normalize:t}=e;return t(["NO"])},NNW:e=>{const{normalize:t}=e;return t(["NNO"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["ensoleillé"])},"clear-night":e=>{const{normalize:t}=e;return t(["nuit claire"])},cloudy:e=>{const{normalize:t}=e;return t(["nuageux"])},fog:e=>{const{normalize:t}=e;return t(["brouillard"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["partiellement nuageux"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["nuit partiellement nuageuse"])},rain:e=>{const{normalize:t}=e;return t(["pluie"])},sleet:e=>{const{normalize:t}=e;return t(["neige fondue"])},snow:e=>{const{normalize:t}=e;return t(["neige"])},wind:e=>{const{normalize:t}=e;return t(["venteux"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["avec un fichier .gpx"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["sans fichier .gpx"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["séance"]),t(["séances"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["date de la séance"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Etes-vous sûr de vouloir supprimer cette séance ?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t(["archive .zip"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["ou une archive .zip contenant des fichiers .gpx"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},8891:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={},a={},o={},s={},i={},l={},c={},u={},d={},m={},_={},E={},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},4970:function(e,t,n){"use strict";var r=n(6775),a=n(6429),o=n(9963),s=n(2343),i=n(5205);(0,i.z)("/service-worker.js",{ready(){console.log("App is being served from cache by a service worker.\nFor more details, visit https://goo.gl/AFskqB")},registered(){console.log("Service worker has been registered.")},cached(){console.log("Content has been cached for offline use.")},updatefound(){console.log("New content is downloading.")},updated(){console.log("New content is available; please refresh.")},offline(){console.log("No internet connection found. App is running in offline mode.")},error(e){console.error("Error during service worker registration:",e)}});var l=n(6252),c=n(2262),u=n(3577);const d=e=>((0,l.dD)("data-v-2c73279e"),e=e(),(0,l.Cn)(),e),m={id:"footer"},_={class:"footer-items"},E={class:"footer-item"},S=d((()=>(0,l._)("strong",null,"FitTrackee",-1))),T=d((()=>(0,l._)("div",{class:"footer-item bullet"},"•",-1))),p={class:"footer-item"},A={key:0,class:"footer-item bullet"},O={key:1,class:"footer-item"},R=["href"],I=d((()=>(0,l._)("div",{class:"footer-item bullet"},"•",-1))),U={class:"footer-item"},g={href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer"};var N=(0,l.aZ)({__name:"Footer",props:{version:null,adminContact:null},setup(e){const t=e,{adminContact:n,version:r}=(0,c.BK)(t);return(e,t)=>{const a=(0,l.up)("router-link");return(0,l.wg)(),(0,l.iD)("div",m,[(0,l._)("div",_,[(0,l._)("div",E,[S,(0,l.Uk)(" v"+(0,u.zw)((0,c.SU)(r)),1)]),T,(0,l._)("div",p,[(0,l.Wm)(a,{to:"/about"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("common.ABOUT")),1)])),_:1})]),(0,c.SU)(n)?((0,l.wg)(),(0,l.iD)("div",A,"•")):(0,l.kq)("",!0),(0,c.SU)(n)?((0,l.wg)(),(0,l.iD)("div",O,[(0,l._)("a",{href:`mailto:${(0,c.SU)(n)}`},(0,u.zw)(e.$t("common.CONTACT")),9,R)])):(0,l.kq)("",!0),I,(0,l._)("div",U,[(0,l._)("a",g,(0,u.zw)(e.$t("common.DOCUMENTATION")),1)])])])}}}),h=n(3744);const z=(0,h.Z)(N,[["__scopeId","data-v-2c73279e"]]);var w=z,f=(n(7658),n(6595)),v=n(5801),C=n(9917),D=n(6287);const k=e=>((0,l.dD)("data-v-95c1cc02"),e=e(),(0,l.Cn)(),e),P={id:"nav"},L={class:"nav-container"},M={class:"nav-app-name"},b={class:"nav-items-close"},y=k((()=>(0,l._)("div",{class:"app-name"},"FitTrackee",-1))),G={key:0,class:"nav-items-group"},F=k((()=>(0,l._)("div",{class:"nav-item nav-separator"},null,-1))),W={class:"nav-items-user-menu"},K={key:0,class:"nav-items-group"},Y={class:"nav-item nav-profile-img"},x={key:1,class:"nav-items-group"},$=k((()=>(0,l._)("i",{class:"fa fa-language"},null,-1)));var B=(0,l.aZ)({__name:"NavBar",emits:["menuInteraction"],setup(e,{emit:t}){const n=(0,C.o)(),r=(0,l.Fl)((()=>n.getters[v.YN.GETTERS.AUTH_USER_PROFILE])),a=(0,l.Fl)((()=>n.getters[v.YN.GETTERS.IS_AUTHENTICATED])),o=(0,l.Fl)((()=>n.getters[v.SY.GETTERS.LANGUAGE])),s=(0,c.iH)(!1);function i(){s.value=!0,t("menuInteraction",!0)}function d(){s.value=!1,t("menuInteraction",!1)}function m(e){n.dispatch(v.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,e.value.toString())}function _(){n.dispatch(v.YN.ACTIONS.LOGOUT)}return(e,t)=>{const n=(0,l.up)("router-link"),E=(0,l.up)("Dropdown");return(0,l.wg)(),(0,l.iD)("div",P,[(0,l._)("div",L,[(0,l._)("div",M,[(0,l._)("div",{class:"nav-item app-name",onClick:t[0]||(t[0]=t=>e.$router.push("/"))}," FitTrackee ")]),(0,l._)("div",{class:(0,u.C_)(["nav-icon-open",{"menu-open":s.value}])},[(0,l._)("i",{class:"fa fa-bars hamburger-icon",onClick:t[1]||(t[1]=e=>i())})],2),(0,l._)("div",{class:(0,u.C_)(["nav-items",{"menu-open":s.value}])},[(0,l._)("div",b,[y,(0,l._)("i",{class:(0,u.C_)(["fa fa-close close-icon nav-item",{"menu-closed":!s.value}]),onClick:t[2]||(t[2]=e=>d())},null,2)]),(0,l._)("div",{class:"nav-items-app-menu",onClick:t[3]||(t[3]=e=>d())},[(0,c.SU)(a)?((0,l.wg)(),(0,l.iD)("div",G,[(0,l.Wm)(n,{class:"nav-item",to:"/"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("dashboard.DASHBOARD")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/workouts"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,u.kC)(e.$t("workouts.WORKOUT",2))),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/statistics"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("statistics.STATISTICS")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/workouts/add"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("workouts.ADD_WORKOUT")),1)])),_:1}),(0,c.SU)(a)&&(0,c.SU)(r).admin?((0,l.wg)(),(0,l.j4)(n,{key:0,class:"nav-item",to:"/admin"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("admin.ADMIN")),1)])),_:1})):(0,l.kq)("",!0),F])):(0,l.kq)("",!0)]),(0,l._)("div",W,[(0,c.SU)(a)?((0,l.wg)(),(0,l.iD)("div",K,[(0,l._)("div",Y,[(0,l.Wm)(f.Z,{user:(0,c.SU)(r)},null,8,["user"])]),(0,l.Wm)(n,{class:"nav-item",to:"/profile",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,c.SU)(r).username),1)])),_:1}),(0,l._)("div",{class:"nav-item nav-link",onClick:_},(0,u.zw)(e.$t("user.LOGOUT")),1)])):((0,l.wg)(),(0,l.iD)("div",x,[(0,l.Wm)(n,{class:"nav-item",to:"/login",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("user.LOGIN")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/register",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("user.REGISTER")),1)])),_:1})])),(0,c.SU)(D.mT)&&(0,c.SU)(o)?((0,l.wg)(),(0,l.j4)(E,{key:2,class:"nav-item",options:(0,c.SU)(D.mT),selected:(0,c.SU)(o),onSelected:m},{default:(0,l.w5)((()=>[$])),_:1},8,["options","selected"])):(0,l.kq)("",!0)])],2)])])}}});const Z=(0,h.Z)(B,[["__scopeId","data-v-95c1cc02"]]);var H=Z,q=n(7167);const V={id:"no-config"},j={class:"error-page"},X={class:"error-img"},J=["innerHTML"];var Q=(0,l.aZ)({__name:"NoConfig",setup(e){return(e,t)=>((0,l.wg)(),(0,l.iD)("div",V,[(0,l._)("div",j,[(0,l._)("div",X,[(0,l.Wm)(q.Z)]),(0,l._)("p",{class:"error-message",innerHTML:e.$t("error.APP_ERROR")},null,8,J)])]))}});const ee=(0,h.Z)(Q,[["__scopeId","data-v-47759238"]]);var te=ee;const ne=(0,l._)("div",{id:"top"},null,-1),re={key:0,class:"app-container"},ae={class:"app-loading"},oe={class:"container scroll"},se=(0,l._)("i",{class:"fa fa-chevron-up","aria-hidden":"true"},null,-1),ie=[se];var le=(0,l.aZ)({__name:"App",setup(e){const t=(0,C.o)(),n=(0,l.Fl)((()=>t.getters[v.SY.GETTERS.APP_CONFIG])),r=(0,l.Fl)((()=>t.getters[v.SY.GETTERS.APP_LOADING])),a=(0,c.iH)(!1),o=(0,c.iH)(!1);function s(e){a.value=e}function i(e){return e.getBoundingClientRect().top=0}function d(){window.onscroll=()=>{const e=document.querySelector("#bottom");o.value=null!==e&&i(e)}}function m(){window.scrollTo({top:0,behavior:"smooth"}),setTimeout((()=>{o.value=!1}),300)}function _(){let e="en";try{const t=navigator.language.split("-")[0];t in D.v1&&(e=t)}catch(n){e="en"}t.dispatch(v.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,e)}return(0,l.wF)((()=>{_(),t.dispatch(v.SY.ACTIONS.GET_APPLICATION_CONFIG)})),(0,l.bv)((()=>d())),(e,t)=>{const i=(0,l.up)("Loader"),d=(0,l.up)("router-view");return(0,l.wg)(),(0,l.iD)(l.HY,null,[ne,(0,l.Wm)(H,{onMenuInteraction:s}),(0,c.SU)(r)?((0,l.wg)(),(0,l.iD)("div",re,[(0,l._)("div",ae,[(0,l.Wm)(i)])])):((0,l.wg)(),(0,l.iD)("div",{key:1,class:(0,u.C_)(["app-container",{"hide-scroll":a.value}])},[(0,c.SU)(n)?((0,l.wg)(),(0,l.j4)(d,{key:0})):((0,l.wg)(),(0,l.j4)(te,{key:1}))],2)),(0,l._)("div",oe,[(0,l._)("div",{class:(0,u.C_)(["scroll-button",{"display-button":o.value}]),onClick:m},ie,2)]),(0,c.SU)(n)?((0,l.wg)(),(0,l.j4)(w,{key:2,version:(0,c.SU)(n)?(0,c.SU)(n).version:"",adminContact:(0,c.SU)(n).admin_contact},null,8,["version","adminContact"])):(0,l.kq)("",!0)],64)}}});const ce=le;var ue=ce,de=n(2540),me=n(5073),_e=n(2894);const Ee={class:"alert-message"},Se=["innerHTML"];var Te=(0,l.aZ)({__name:"AlertMessage",props:{message:null},setup(e){const t=e,{message:n}=(0,c.BK)(t);return(e,t)=>((0,l.wg)(),(0,l.iD)("div",Ee,[(0,l._)("div",{innerHTML:e.$t((0,c.SU)(n))},null,8,Se)]))}});const pe=(0,h.Z)(Te,[["__scopeId","data-v-69d7e4ff"]]);var Ae=pe,Oe=n(2531);const Re={class:"custom-textarea"},Ie=["id","name","maxLenght","disabled"],Ue={class:"remaining-chars"};var ge=(0,l.aZ)({__name:"CustomTextArea",props:{name:null,charLimit:{default:500},disabled:{type:Boolean,default:!1},input:{default:""}},emits:["updateValue"],setup(e,{emit:t}){const n=e,r=(0,c.iH)("");function a(e){t("updateValue",e.target.value)}return(0,l.YP)((()=>n.input),(e=>{r.value=null===e?"":e})),(t,n)=>((0,l.wg)(),(0,l.iD)("div",Re,[(0,l.wy)((0,l._)("textarea",{id:e.name,name:e.name,maxLenght:e.charLimit,disabled:e.disabled,"onUpdate:modelValue":n[0]||(n[0]=e=>r.value=e),onInput:a},null,40,Ie),[[o.nr,r.value]]),(0,l._)("div",Ue,(0,u.zw)(t.$t("workouts.REMAINING_CHARS"))+": "+(0,u.zw)(r.value.length)+"/"+(0,u.zw)(e.charLimit),1)]))}});const Ne=(0,h.Z)(ge,[["__scopeId","data-v-8cf5cc64"]]);var he=Ne,ze=n(3649),we=(0,l.aZ)({__name:"Distance",props:{distance:null,unitFrom:null,useImperialUnits:{type:Boolean},digits:{default:2},displayUnit:{type:Boolean,default:!0},speed:{type:Boolean,default:!1},strong:{type:Boolean,default:!1}},setup(e){const t=e,{digits:n,displayUnit:r,distance:a,speed:o,strong:s,unitFrom:i,useImperialUnits:d}=(0,c.BK)(t),m=(0,l.Fl)((()=>d.value?ze.Dl[i.value].defaultTarget:i.value)),_=(0,l.Fl)((()=>d.value?(0,ze.sC)(a.value,i.value,m.value,n.value):parseFloat(a.value.toFixed(n.value))));return(e,t)=>((0,l.wg)(),(0,l.iD)(l.HY,null,[(0,l._)("span",{class:(0,u.C_)(["distance",{strong:(0,c.SU)(s)}])},(0,u.zw)((0,c.SU)(_)),3),(0,l.Uk)(" "+(0,u.zw)(" ")+" "),(0,c.SU)(r)?((0,l.wg)(),(0,l.iD)("span",{key:0,class:(0,u.C_)(["unit",{strong:(0,c.SU)(s)}])},(0,u.zw)((0,c.SU)(m))+(0,u.zw)((0,c.SU)(o)?"/h":""),3)):(0,l.kq)("",!0)],64))}});const fe=(0,h.Z)(we,[["__scopeId","data-v-f46ff1d6"]]);var ve=fe,Ce=n(2201);const De={class:"dropdown-wrapper"},ke={key:0,class:"dropdown-list"},Pe=["onClick"];var Le=(0,l.aZ)({__name:"Dropdown",props:{options:null,selected:null},emits:{selected:e=>e},setup(e,{emit:t}){const n=e,r=(0,Ce.yj)(),a=(0,c.iH)(!1),o=n.options.map((e=>e));function s(){a.value=!a.value}function i(e){t("selected",e),a.value=!1}return(0,l.YP)((()=>r.path),(()=>a.value=!1)),(t,n)=>((0,l.wg)(),(0,l.iD)("div",De,[(0,l._)("div",{class:"dropdown-selected",onClick:s},[(0,l.WI)(t.$slots,"default")]),a.value?((0,l.wg)(),(0,l.iD)("ul",ke,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)((0,c.SU)(o),((t,n)=>((0,l.wg)(),(0,l.iD)("li",{class:(0,u.C_)(["dropdown-item",{selected:t.value===e.selected}]),key:n,onClick:e=>i(t)},(0,u.zw)(t.label),11,Pe)))),128))])):(0,l.kq)("",!0)]))}});const Me=(0,h.Z)(Le,[["__scopeId","data-v-2d3b4eac"]]);var be=Me;const ye={class:"error-message"},Ge={key:0},Fe={key:1};var We=(0,l.aZ)({__name:"ErrorMessage",props:{message:null},setup(e){const t=e,{message:n}=(0,c.BK)(t);return(e,t)=>((0,l.wg)(),(0,l.iD)("div",ye,[Array.isArray((0,c.SU)(n))?((0,l.wg)(),(0,l.iD)("ul",Ge,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)((0,c.SU)(n),((t,n)=>((0,l.wg)(),(0,l.iD)("li",{key:n},(0,u.zw)(e.$t(t)),1)))),128))])):((0,l.wg)(),(0,l.iD)("div",Fe,(0,u.zw)(e.$t((0,c.SU)(n))),1))]))}});const Ke=(0,h.Z)(We,[["__scopeId","data-v-2659a79a"]]);var Ye=Ke;const xe={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve"},$e=(0,l._)("desc",{id:"cyclingSportDescription"}," silhouette of a person riding a bicycle ",-1),Be=(0,l._)("g",null,[(0,l._)("path",{d:"M321.097,112.359c20.973,12.338,47.985,5.315,60.293-15.652c12.34-20.973,5.35-47.974-15.623-60.304\n\t\tc-21.009-12.332-47.99-5.317-60.314,15.65C293.129,73.036,300.103,100.027,321.097,112.359z"}),(0,l._)("path",{d:"M393.081,264.102c-2.414,0-4.8,0.194-7.169,0.362l-14.431-71.605l4.702-1.757c10.666-3.987,16.093-15.868,12.098-26.54\n\t\tc-3.994-10.681-15.946-16.084-26.531-12.09l-51.823,19.38l-2.321-18.864c6.3-13.193,5.541-29.78-4.767-41.482\n\t\tc-21.224-24.092-47.12-12.508-55.191-5.976l-106.884,86.555l0.016,0.024c-3.319,2.893-6.089,6.485-7.86,10.842\n\t\tc-2.191,5.396-2.596,11.067-1.564,16.384c-8.503,0.669-15.255,7.571-15.255,16.246c0,9.085,7.346,16.44,16.432,16.48l-6.797,15.906\n\t\tc-8.62-2.465-17.674-3.866-27.066-3.866C44.27,264.102,0,308.354,0,362.754c0,54.403,44.27,98.663,98.668,98.663\n\t\tc54.403,0,98.652-44.26,98.652-98.663c0-36.228-19.683-67.867-48.858-85.024l10.957-25.652h17.767l60.281,24.462l-32.201,52.773\n\t\tc-8.297,13.612-3.994,31.382,9.615,39.685c4.691,2.86,9.878,4.229,15,4.229c9.729,0,19.234-4.929,24.677-13.838l29.339-48.095\n\t\tl19.072,11.511c-5.447,12.227-8.54,25.726-8.54,39.95c0,54.403,44.254,98.663,98.652,98.663c54.402,0,98.656-44.26,98.656-98.663\n\t\tC491.737,308.354,447.483,264.102,393.081,264.102z M98.668,436.671c-40.756,0-73.923-33.161-73.923-73.917\n\t\tc0-40.756,33.167-73.909,73.923-73.909c5.944,0,11.649,0.896,17.188,2.224l-20.476,47.893\n\t\tc-11.758,1.619-20.843,11.598-20.843,23.792c0,13.323,10.808,24.132,24.13,24.132c8.767,0,16.367-4.745,20.589-11.76h52.065\n\t\tC165.395,409.988,135.188,436.671,98.668,436.671z M171.322,350.383h-52.065c-0.355-0.588-0.708-1.176-1.112-1.732l20.476-47.901\n\t\tC155.679,311.776,167.793,329.595,171.322,350.383z M296.781,290.175l7.666-12.564c4.416-7.233,5.431-16.038,2.774-24.084\n\t\tc-2.661-8.046-8.718-14.515-16.562-17.704l-52.725-21.395l32.443-26.281l1.804,14.691c0.756,6.267,4.366,11.841,9.761,15.12\n\t\tc3.271,1.981,6.979,2.988,10.698,2.988c2.435,0,4.88-0.435,7.218-1.306l48.15-18.001l13.627,67.691\n\t\tc-18.268,6.162-34.117,17.51-45.848,32.314L296.781,290.175z M375.396,337.633l-38.003-22.94\n\t\tc7.877-9.118,17.787-16.319,29.205-20.734L375.396,337.633z M393.081,436.671c-40.757,0-73.907-33.161-73.907-73.917\n\t\tc0-9.544,1.965-18.597,5.268-26.983l44.541,26.888c0,0.032-0.016,0.064-0.016,0.095c0,13.323,10.808,24.132,24.114,24.132\n\t\tc13.322,0,24.118-10.81,24.118-24.132c0-10.478-6.721-19.307-16.06-22.64l-10.277-51.043c0.756-0.024,1.463-0.226,2.22-0.226\n\t\tc40.757,0,73.911,33.153,73.911,73.909C466.992,403.51,433.838,436.671,393.081,436.671z"})],-1),Ze=[$e,Be];function He(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",xe,Ze)}var qe={name:"CyclingSport"};const Ve=(0,h.Z)(qe,[["render",He]]);var je=Ve;const Xe={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Je=(0,l._)("desc",{id:"cyclingTransportDescription"}," silhouette of a person riding a bicycle (for transportation) ",-1),Qe=(0,l._)("g",{id:"g147"},[(0,l._)("path",{d:"m 189.097,82.359 c 20.97701,12.331184 47.97442,5.308784 60.293,-15.652 12.32942,-20.979222 5.35418,-47.981117 -15.623,-60.304 -21.00482,-12.3391184 -47.99,-5.317 -60.314,15.65 -12.324,20.983 -5.34599,47.967183 15.644,60.306 z",id:"path143"}),(0,l._)("path",{d:"m 393.081,264.102 c -2.414,0 -4.8,0.194 -7.169,0.362 l -14.431,-71.605 4.702,-1.757 c 10.666,-3.987 16.093,-15.868 12.098,-26.54 -3.994,-10.681 -15.946,-16.084 -26.531,-12.09 l -63.05508,-1.53717 C 284.04753,137.09803 248.90259,106.55858 243.33317,101.62481 217.77732,75.090916 186.1698,85.012419 178.0988,91.544419 L 140.764,192.085 l 0.016,0.024 c -3.319,2.893 -6.089,6.485 -7.86,10.842 -2.191,5.396 -2.596,11.067 -1.564,16.384 -8.503,0.669 -15.255,7.571 -15.255,16.246 0,9.085 7.346,16.44 16.432,16.48 l -6.797,15.906 c -8.62,-2.465 -17.674,-3.866 -27.066,-3.866 C 44.27,264.102 0,308.354 0,362.754 c 0,54.403 44.27,98.663 98.668,98.663 54.403,0 98.652,-44.26 98.652,-98.663 0,-36.228 -19.683,-67.867 -48.858,-85.024 l 10.957,-25.652 h 17.767 l 60.281,24.462 -32.201,52.773 c -8.297,13.612 -3.994,31.382 9.615,39.685 4.691,2.86 9.878,4.229 15,4.229 9.729,0 19.234,-4.929 24.677,-13.838 l 29.339,-48.095 19.072,11.511 c -5.447,12.227 -8.54,25.726 -8.54,39.95 0,54.403 44.254,98.663 98.652,98.663 54.402,0 98.656,-44.26 98.656,-98.663 0,-54.401 -44.254,-98.653 -98.656,-98.653 z M 98.668,436.671 c -40.756,0 -73.923,-33.161 -73.923,-73.917 0,-40.756 33.167,-73.909 73.923,-73.909 5.944,0 11.649,0.896 17.188,2.224 L 95.38,338.962 c -11.758,1.619 -20.843,11.598 -20.843,23.792 0,13.323 10.808,24.132 24.13,24.132 8.767,0 16.367,-4.745 20.589,-11.76 h 52.065 c -5.926,34.862 -36.133,61.545 -72.653,61.545 z m 72.654,-86.288 h -52.065 c -0.355,-0.588 -0.708,-1.176 -1.112,-1.732 l 20.476,-47.901 c 17.058,11.026 29.172,28.845 32.701,49.633 z m 125.459,-60.208 7.666,-12.564 c 4.416,-7.233 5.431,-16.038 2.774,-24.084 -2.661,-8.046 -8.718,-14.515 -16.562,-17.704 l -73.83357,-31.7176 16.7558,-45.21274 c 10.36934,4.13303 41.82171,27.90767 45.77423,28.08592 3.271,1.981 8.57725,1.46711 12.29625,1.46711 2.435,0 18.50584,0.70472 20.84384,-0.16628 L 343.32113,188.03378 361.635,269.33 c -18.268,6.162 -34.117,17.51 -45.848,32.314 z m 78.615,47.458 -38.003,-22.94 c 7.877,-9.118 17.787,-16.319 29.205,-20.734 z m 17.685,99.038 c -40.757,0 -73.907,-33.161 -73.907,-73.917 0,-9.544 1.965,-18.597 5.268,-26.983 l 44.541,26.888 c 0,0.032 -0.016,0.064 -0.016,0.095 0,13.323 10.808,24.132 24.114,24.132 13.322,0 24.118,-10.81 24.118,-24.132 0,-10.478 -6.721,-19.307 -16.06,-22.64 l -10.277,-51.043 c 0.756,-0.024 1.463,-0.226 2.22,-0.226 40.757,0 73.911,33.153 73.911,73.909 -10e-4,40.756 -33.155,73.917 -73.912,73.917 z",id:"path145"})],-1),et=[Je,Qe];function tt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Xe,et)}var nt={name:"CyclingTransport"};const rt=(0,h.Z)(nt,[["render",tt]]);var at=rt;const ot={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},st=(0,l.uE)(' silhouette of a person riding a bicycle with virtual indicator ',4),it=[st];function lt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",ot,it)}var ct={name:"CyclingVirtual"};const ut=(0,h.Z)(ct,[["render",lt]]);var dt=ut;const mt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 463.507 463.507",style:{"enable-background":"new 0 0 463.507 463.507"},"xml:space":"preserve"},_t=(0,l._)("desc",{id:"hikingDescription"},"silhouette of a person hiking",-1),Et=(0,l._)("g",null,[(0,l._)("path",{d:"M246.413,78.492c21.688,0,39.255-17.573,39.255-39.251c0-21.67-17.567-39.24-39.255-39.24\n\t\tc-21.652,0-39.242,17.57-39.242,39.24C207.171,60.919,224.761,78.492,246.413,78.492z"}),(0,l._)("path",{d:"M386.604,202.858c0-11.185-9.066-20.251-20.253-20.251h-68.479l-38.62-54.832l0.127-0.933\n\t\tc1.378-10.474-1.474-21.067-7.911-29.444c-6.441-8.378-15.932-13.852-26.408-15.23c-11.596-1.511-22.592,2.224-30.852,9.225V45.779\n\t\tc0-7.847-6.362-14.217-14.225-14.217H140.59c-7.867,0-14.225,6.37-14.225,14.217v168.953c0,20.68,15.821,37.476,35.979,39.446\n\t\tl-3.043,7.073l-23.859,90.136l-53.73,72.188c-8.006,10.768-5.794,25.987,4.984,34.001c4.348,3.245,9.443,4.811,14.491,4.811\n\t\tc7.422,0,14.729-3.385,19.511-9.795l56.529-75.945c1.851-2.484,3.213-5.299,4.003-8.289l16.266-61.414l44.521,40.877l-6.076,88.603\n\t\tc-0.917,13.393,9.177,24.99,22.58,25.908c0.552,0.04,1.124,0.056,1.691,0.056c12.66,0,23.339-9.819,24.208-22.642l6.882-100.264\n\t\tc0.508-7.364-2.371-14.572-7.815-19.564l-45.994-42.219l13.992-90.613l19.331,27.435c3.801,5.387,9.972,8.592,16.552,8.592h70.882\n\t\tl1.339,232.294c0,4.478,3.626,8.101,8.101,8.101c4.479,0,8.101-3.624,8.101-8.101l-1.339-234.036\n\t\tC381.588,218.245,386.604,211.15,386.604,202.858z"})],-1),St=[_t,Et];function Tt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",mt,St)}var pt={name:"Hiking"};const At=(0,h.Z)(pt,[["render",Tt]]);var Ot=At;const Rt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 503.162 503.162",style:{"enable-background":"new 0 0 503.162 503.162"},"xml:space":"preserve"},It=(0,l._)("desc",{id:"mountainBikingDescription"}," silhouette of a person riding a mountain bike ",-1),Ut=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M149.951,67.997c15.711-7.143,22.739-25.675,15.596-41.416c-7.124-15.701-25.723-22.682-41.453-15.539\n\t\t\tc-15.721,7.134-22.702,25.752-15.578,41.444C115.679,68.216,134.23,75.14,149.951,67.997z"}),(0,l._)("path",{d:"M87.517,89.072l-32.828,87.755c-1.979,5.967-1.683,12.594,1.1,18.733c4.055,8.922,12.604,14.525,21.755,15.271\n\t\t\tl76.873,6.244l29.137,64.184c4.122,9.046,14.832,13.148,23.906,9.017c9.075-4.131,13.072-14.859,8.951-23.944l-36.424-80.201\n\t\t\tc0,0-3.605-13.76-21.343-14.133l-43.873-2.572l21.009-55.166l31.671,20.588c5.584,3.663,10.997,3.682,15.1,1.722l55.051-24.997\n\t\t\tc17.069-7.755,6.952-30.036-10.108-22.29l-47.506,21.707l-53.55-34.846c0,0-11.638-8.013-24.241-2.285\n\t\t\tC102.205,73.858,91.112,77.243,87.517,89.072z"}),(0,l._)("path",{d:"M423.687,182.488l-2.61,15.042c-2.123,12.154-13.35,25.092-25.092,28.888l-3.711,1.195\n\t\t\tc3.041-16.543,1.282-34.148-6.215-50.633c-19.498-42.974-70.094-61.87-112.943-42.419\n\t\t\tc-42.878,19.479-61.936,70.017-42.438,112.981c17.069,37.562,57.881,56.744,96.534,47.966l-0.784,1.415\n\t\t\tc-5.968,10.796-20.817,19.221-33.144,18.8l-17.892-0.622c-12.336-0.411-30.514,5.002-40.603,12.116l-22.376,15.759\n\t\t\tc-10.107,7.104-28.276,12.632-40.612,12.354l-12.001-0.277c12.718-22.845,14.889-51.159,3.242-76.806\n\t\t\tc-19.517-42.955-70.074-61.879-113.019-42.381c-42.792,19.44-61.87,70.007-42.372,112.933\n\t\t\tc16.667,36.711,56.084,55.788,93.914,48.444l-1.32,2.056c-6.675,10.385-22.08,18.398-34.406,17.92l-32.79-1.291\n\t\t\tc-12.326-0.497-24.021,8.97-26.096,21.143l-2.62,15.339c-0.564,3.271-0.354,6.11,0.401,8.501c-0.43,1.778-0.736,3.548-0.736,5.326\n\t\t\tv9.562c0,10.557,8.568,19.125,19.125,19.125h460.932c10.557,0,19.115-8.568,19.106-19.125l-0.125-167.507\n\t\t\tc0-2.782-0.593-5.221-1.616-7.286c1.396-3.806,2.057-7.841,1.598-11.839l-4.677-40.497c-1.415-12.249-9.763-29.146-18.637-37.724\n\t\t\tl-36.127-34.951C434.712,167.418,425.79,170.325,423.687,182.488z"})])],-1),gt=[It,Ut];function Nt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Rt,gt)}var ht={name:"MountainBiking"};const zt=(0,h.Z)(ht,[["render",Nt]]);var wt=zt;const ft={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 503.162 503.162",style:{"enable-background":"new 0 0 503.162 503.162"},"xml:space":"preserve"},vt=(0,l.uE)(' silhouette of a person riding an electric mountain bike ',18),Ct=[vt];function Dt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",ft,Ct)}var kt={name:"MountainBikingElectric"};const Pt=(0,h.Z)(kt,[["render",Dt]]);var Lt=Pt;const Mt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 534.51 534.51",style:{"enable-background":"new 0 0 534.51 534.51"},"xml:space":"preserve"},bt=(0,l._)("desc",{id:"rowingDescription"},"silhouette of a person rowing",-1),yt=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M70.517,393.857h132.622l-67.205,68.631c-3.28,3.385-3.204,8.797,0.172,12.076c1.597,1.568,3.72,2.43,5.958,2.43\n\t\t\tc2.305,0,4.533-0.947,6.12-2.572l78.881-80.555h221.315c12.45,0,30.676-6.006,40.296-13.914\n\t\t\tc8.788-7.229,19.049-16.217,26.345-24.299c10.375-9.811,22.214-23.639-4.255-22.834c-6.98,0.248-206.789,0.02-223.926,0\n\t\t\tl47.144-48.139l22.176-22.032l28.209,9.17c10.414,3.385,22.472-0.803,26.919-9.362c4.446-8.558,0.268-18.407-9.343-21.993\n\t\t\tl-17.404-6.512l54.698-54.774c12.507,6.617,28.362,4.867,38.899-5.671l46.541-46.607c13.11-13.015,13.11-33.957,0-46.923\n\t\t\tc-12.909-13.034-34.042-13.034-46.942,0l-46.512,46.598c-10.892,10.815-12.508,27.139-5.26,39.742l-57.853,59.077L253.744,183.09\n\t\t\tc-1.482-0.851-14.153-5.786-26.833-10.643c-14.898-5.719-30.371,0.583-34.53,13.971l-7.525,24.241l-35.324,118.451\n\t\t\tc-0.468,1.34-0.603,2.562-0.746,3.711H14.136c-12.45,0-17.662,8.836-11.618,19.727l23.237,21.592\n\t\t\tC39.123,385.068,58.066,393.857,70.517,393.857z M272.63,248.727c1.797-5.967,8.099-9.39,14.075-7.64l51.37,14.975l-33.038,33.737\n\t\t\tl-43.453,43.012h-14.2L272.63,248.727z"}),(0,l._)("circle",{cx:"248.953",cy:"109.842",r:"52.326"})])],-1),Gt=[bt,yt];function Ft(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Mt,Gt)}var Wt={name:"Rowing"};const Kt=(0,h.Z)(Wt,[["render",Ft]]);var Yt=Kt;const xt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve"},$t=(0,l._)("desc",{id:"runningDescription"},"silhouette of a running person",-1),Bt=(0,l._)("g",null,[(0,l._)("path",{d:"M282.74,80.771c22.318,0,40.401-18.08,40.401-40.389C323.141,18.084,305.058,0,282.74,0\n\t\tc-22.281,0-40.378,18.084-40.378,40.383C242.362,62.691,260.458,80.771,282.74,80.771z"}),(0,l._)("path",{d:"M400.207,188.547H331.47l-38.766-55.03l0.123-0.944c1.384-10.514-1.475-21.146-7.94-29.556\n\t\tc-6.461-8.409-16.007-13.903-26.52-15.287c-10.926-1.429-22.619,3.12-31.206,8.646c-1.441,0.928-84.97,54.921-84.97,54.921\n\t\tc-5.175,3.358-8.542,8.877-9.165,15.016c-0.634,6.13,1.574,12.222,5.976,16.541l58.982,58l-6.417,48.954l-18.707,65.584l-67.8-19.4\n\t\tc-12.911-3.676-26.44,3.796-30.159,16.747c-3.699,12.951,3.799,26.459,16.758,30.168l91.271,26.109\n\t\tc2.192,0.627,4.444,0.936,6.7,0.936c4.113,0,8.195-1.04,11.848-3.073c5.655-3.146,9.833-8.409,11.611-14.635l21.963-77.057\n\t\tl26.365,36.639l6.684,119.628c0.73,12.991,11.501,23.036,24.349,23.036c0.441,0,0.92-0.016,1.379-0.039\n\t\tc13.453-0.748,23.745-12.262,23-25.713l-7.083-126.736c-0.271-4.643-1.846-9.116-4.56-12.887l-32.24-44.811l11.959-91.279\n\t\tl19.409,27.555c3.794,5.407,10.005,8.624,16.613,8.624h79.28c11.226,0,20.326-9.101,20.326-20.329\n\t\tC420.533,197.647,411.432,188.547,400.207,188.547z M204.606,190.357l-19.026-18.717l23.476-15.206L204.606,190.357z"})],-1),Zt=[$t,Bt];function Ht(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",xt,Zt)}var qt={name:"Running"};const Vt=(0,h.Z)(qt,[["render",Ht]]);var jt=Vt;const Xt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 522.362 522.362",style:{"enable-background":"new 0 0 522.362 522.362"},"xml:space":"preserve"},Jt=(0,l._)("desc",{id:"alpineSkiingDescription"},"silhouette of a person skiing",-1),Qt=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M14.314,351.859L408.088,461.78c4.484,1.311,9.104,1.97,13.731,1.97l0,0c17.471,0,33.746-9.429,42.467-24.604\n\t\t\tc2.716-4.724,3.137-10.27,1.157-15.214c-1.912-4.762-5.767-8.31-10.576-9.744c-7.373-2.237-15.481,1.109-22.146,9.229\n\t\t\tc-3.548,4.303-9.496,6.244-15.07,4.714l-136.467-38.078c1.396-0.555,2.812-1.195,4.236-2.065l103.266-63.15\n\t\t\tc15.443-9.362,18.493-33.957,7.812-43.883l-64.758-60.233l39.972-21.688l69.682,9.744c5.23,0.736,9.744-2.037,10.079-6.187\n\t\t\tc0.344-4.141-3.624-8.1-8.855-8.826l-48.605-6.828l22.472-12.192c39.895-23.275,5.823-85.192-35.334-63.112l-87.554,61.19\n\t\t\tl-117.503-16.515l2.543-12.087c0.545-2.582-1.109-5.116-3.691-5.661c-2.572-0.593-5.116,1.1-5.661,3.701l-2.678,12.709\n\t\t\tl-18.331-2.582c-5.231-0.727-9.467,2.123-9.467,6.369s4.236,8.281,9.467,9.017l15.176,2.123l-2.544,12.087\n\t\t\tc-0.545,2.582,1.109,5.125,3.691,5.671c0.334,0.076,0.66,0.105,0.994,0.105c2.209,0,4.198-1.54,4.676-3.787l2.678-12.737\n\t\t\tl102.414,14.315l-5.308,3.72c-4.332,3.022-10.155,9.151-11.723,14.201c-3.844,12.45-1.473,26.717,10.452,37.705l68.802,62.175\n\t\t\tc0,0-50.978,31.776-74.998,46.397c-14.219,8.606-13.674,23.858-6.129,33.393L23.705,318.199\n\t\t\tc-10.012-2.792-20.569,2.554-23.113,11.695C-2,339.169,4.159,349.029,14.314,351.859z"}),(0,l._)("path",{d:"M450.842,72.003c-15.291,16.715-14.201,42.667,2.639,58.121c16.706,15.31,42.716,14.086,58.073-2.668\n\t\t\tc15.386-16.677,14.172-42.734-2.544-58.016C492.305,54.064,466.17,55.192,450.842,72.003z"})])],-1),en=[Jt,Qt];function tn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Xt,en)}var nn={name:"SkiingAlpine"};const rn=(0,h.Z)(nn,[["render",tn]]);var an=rn;const on={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 296 296",style:{"enable-background":"new 0 0 296 296"},"xml:space":"preserve"},sn=(0,l._)("desc",{id:"crossCountrySkiingDescription"}," silhouette of a person skiing (cross country) ",-1),ln=(0,l._)("g",null,[(0,l._)("path",{d:"M241.313,246.906h-39.564l0.456-1.273c5.62-18.374,3.479-37.58-6.027-54.278c-5.653-9.929-13.443-18.018-22.745-23.959\n\t\tl12.886-51.126c3.035-12.05-4.272-24.266-16.322-27.301c-2.634-0.664-5.278-0.826-7.833-0.559\n\t\tc-0.151-0.011-0.299-0.032-0.452-0.038c-26.03-1.077-51.443,8.485-70.33,25.993L41.586,82.855\n\t\tc-4.332-2.741-10.065-1.451-12.806,2.881s-1.451,10.065,2.88,12.806l47.625,30.136c-2.557,6.013-0.962,13.224,4.375,17.531\n\t\tc2.774,2.24,6.104,3.33,9.413,3.33c4.377-0.001,8.717-1.907,11.68-5.579l0.478-0.591c8.686-10.766,20.465-18.479,33.484-22.317\n\t\tl-11.095,44.046c-1.061,4.214-0.854,8.448,0.374,12.305c-12.908,17.917-28.398,33.68-46.198,46.979l-14.649,10.727\n\t\tc-3.938,2.943-6.001,7.798-6.005,11.798H8.25c-4.556,0-8.083,4.131-8.083,8.688v2.063c0,4.556,3.527,8.25,8.083,8.25h55.188\n\t\th161.375H280c9.113,0,16.167-7.387,16.167-16.5v-2.5H241.313z M153.974,192.398c0.741-0.153,1.471-0.231,2.188-0.457\n\t\tc5.742,3.406,10.53,8.313,13.945,14.311c5.378,9.447,6.59,20.402,3.41,30.797l-1.799,5.674c-0.447,1.461-0.656,3.184-0.657,4.184\n\t\th-69.909C121.581,231.906,139.297,213.274,153.974,192.398z M167,57.938c0-15.378,12.466-27.844,27.844-27.844\n\t\ts27.844,12.466,27.844,27.844s-12.466,27.844-27.844,27.844S167,73.315,167,57.938z"})],-1),cn=[sn,ln];function un(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",on,cn)}var dn={name:"SkiingCrossCountry"};const mn=(0,h.Z)(dn,[["render",un]]);var _n=mn;const En={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Sn=(0,l.uE)('silhouette of a person with snowshoes',6),Tn=[Sn];function pn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",En,Tn)}var An={name:"Snowshoes"};const On=(0,h.Z)(An,[["render",pn]]);var Rn=On;const In={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 535.876 535.876",style:{"enable-background":"new 0 0 535.876 535.876"},"xml:space":"preserve"},Un=(0,l._)("desc",{id:"trailDescription"},"silhouette of a person running (trail)",-1),gn=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M505.204,326.949c-5.805-10.892-15.176-10.862-20.923,0.067l-7.114,13.512c-5.757,10.92-20.416,19.775-32.752,19.775\n\t\t\th-16.753c-12.346,0-29.645,6.847-38.643,15.29l-32.35,30.342l-1.233-105.388c0.822-18.446-10.596-24.634-10.596-24.634\n\t\t\tl-56.543-25.972l33.67-67.645l38.527,22.912c0,0,15.472,9.715,26.727-9.324l37.026-63.093c1.625-3.519,2.094-7.564,1.052-11.609\n\t\t\tc-2.381-9.256-11.81-14.86-21.095-12.479c-4.083,1.042-7.459,3.49-9.754,6.713l-30.772,51.962l-62.777-37.102\n\t\t\tc-4.733-2.716-10.519-3.691-16.257-2.209l-78.345,20.12c-5.03,1.291-8.96,4.762-11.017,9.142l-38.097,76.165\n\t\t\tc-2.591,3.854-3.624,8.73-2.371,13.607c2.285,8.941,11.456,14.363,20.435,12.059c5.04-1.291,8.951-4.743,10.997-9.161\n\t\t\tl35.314-70.858l28.936-7.296l-76.203,149.921l-65.981,16.734c-1.759,0.393-3.48,1.023-5.163,1.836\n\t\t\tc-10.596,5.412-14.679,18.179-9.267,28.803c4.733,9.266,15.252,13.636,24.901,10.978l78.067-20.187\n\t\t\tc18.6-4.093,23.313-14.449,23.313-14.449l30.581-58.79l62.28,35.678l0.593,86.216c0.01,1.08,0.259,2.161,0.421,3.241l-11.6-4.188\n\t\t\tc-11.608-4.188-30.57-4.608-42.361-0.956l-26.135,8.128c-11.79,3.663-30.791,3.338-42.447-0.717l-19.221-6.694\n\t\t\tc-11.657-4.054-28.831-0.984-38.374,6.838L109.9,433.954c-9.544,7.822-26.67,10.72-38.25,6.483L40.84,429.135\n\t\t\tc-11.58-4.256-25.608,1.157-31.336,12.097l-7.21,13.789c-5.728,10.93-0.354,19.794,11.982,19.794H500.27\n\t\t\tc12.336,0,24.309-9.802,26.728-21.907l8.004-39.981c2.409-12.097-0.325-30.733-6.14-41.616L505.204,326.949z"}),(0,l._)("path",{d:"M326.395,126.625c17.806-4.562,28.563-22.721,23.983-40.526c-4.581-17.844-22.74-28.554-40.555-23.983\n\t\t\tc-17.796,4.581-28.535,22.711-23.964,40.535C290.439,120.476,308.599,131.205,326.395,126.625z"})])],-1),Nn=[Un,gn];function hn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",In,Nn)}var zn={name:"Trail"};const wn=(0,h.Z)(zn,[["render",hn]]);var fn=wn;const vn={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Cn=(0,l.uE)('silhouette of a walking person',3),Dn=[Cn];function kn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",vn,Dn)}var Pn={name:"Walking"};const Ln=(0,h.Z)(Pn,[["render",kn]]);var Mn=Ln;const bn=["title"];var yn=(0,l.aZ)({__name:"index",props:{sportLabel:null,color:null,title:{default:""}},setup(e){const t=e,{color:n,sportLabel:r,title:a}=(0,c.BK)(t),o=(0,l.f3)("sportColors");return(e,t)=>((0,l.wg)(),(0,l.iD)("div",{class:"sport-img",style:(0,u.j5)({fill:(0,c.SU)(n)?(0,c.SU)(n):(0,c.SU)(o)[(0,c.SU)(r)]}),title:(0,c.SU)(a)?(0,c.SU)(a):e.$t(`sports.${(0,c.SU)(r)}.LABEL`)},["Cycling (Sport)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(je,{key:0})):(0,l.kq)("",!0),"Cycling (Transport)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(at,{key:1})):(0,l.kq)("",!0),"Cycling (Virtual)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(dt,{key:2})):(0,l.kq)("",!0),"Hiking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Ot,{key:3})):(0,l.kq)("",!0),"Mountain Biking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(wt,{key:4})):(0,l.kq)("",!0),"Mountain Biking (Electric)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Lt,{key:5})):(0,l.kq)("",!0),"Rowing"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Yt,{key:6})):(0,l.kq)("",!0),"Running"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(jt,{key:7})):(0,l.kq)("",!0),"Skiing (Alpine)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(an,{key:8})):(0,l.kq)("",!0),"Skiing (Cross Country)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(_n,{key:9})):(0,l.kq)("",!0),"Snowshoes"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Rn,{key:10})):(0,l.kq)("",!0),"Trail"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(fn,{key:11})):(0,l.kq)("",!0),"Walking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Mn,{key:12})):(0,l.kq)("",!0)],12,bn))}});const Gn=yn;var Fn=Gn;const Wn={class:"loader"};function Kn(e,t){return(0,l.wg)(),(0,l.iD)("div",Wn)}const Yn={},xn=(0,h.Z)(Yn,[["render",Kn],["__scopeId","data-v-4c9921ee"]]);var $n=xn;const Bn={id:"modal"},Zn={class:"custom-modal"},Hn={key:0,class:"modal-message"},qn={key:1,class:"modal-message"},Vn={class:"modal-buttons"};var jn=(0,l.aZ)({__name:"Modal",props:{title:null,message:null,strongMessage:{default:()=>null}},emits:["cancelAction","confirmAction"],setup(e,{emit:t}){const n=e,r=(0,C.o)(),{title:a,message:o,strongMessage:s}=(0,c.BK)(n),i=(0,l.Fl)((()=>r.getters[v.SY.GETTERS.ERROR_MESSAGES]));return(0,l.Ah)((()=>r.commit(v.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(e,n)=>{const r=(0,l.up)("i18n-t"),d=(0,l.up)("ErrorMessage"),m=(0,l.up)("Card");return(0,l.wg)(),(0,l.iD)("div",Bn,[(0,l._)("div",Zn,[(0,l.Wm)(m,null,{title:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,c.SU)(a)),1)])),content:(0,l.w5)((()=>[(0,c.SU)(s)?((0,l.wg)(),(0,l.iD)("div",Hn,[(0,l.Wm)(r,{keypath:(0,c.SU)(o)},{default:(0,l.w5)((()=>[(0,l._)("span",null,(0,u.zw)((0,c.SU)(s)),1)])),_:1},8,["keypath"])])):((0,l.wg)(),(0,l.iD)("div",qn,(0,u.zw)((0,c.SU)(o)),1)),(0,c.SU)(i)?((0,l.wg)(),(0,l.j4)(d,{key:2,message:(0,c.SU)(i)},null,8,["message"])):(0,l.kq)("",!0),(0,l._)("div",Vn,[(0,c.SU)(i)?(0,l.kq)("",!0):((0,l.wg)(),(0,l.iD)("button",{key:0,class:"confirm",onClick:n[0]||(n[0]=e=>t("confirmAction"))},(0,u.zw)(e.$t("buttons.YES")),1)),(0,l._)("button",{class:"cancel",onClick:n[1]||(n[1]=e=>t("cancelAction"))},(0,u.zw)(e.$t("buttons."+((0,c.SU)(i)?"CANCEL":"NO"))),1)])])),_:1})])])}}});const Xn=(0,h.Z)(jn,[["__scopeId","data-v-e8fcfaba"]]);var Jn=Xn;const Qn=[{target:Ae,name:"AlertMessage"},{target:Oe.Z,name:"Card"},{target:he,name:"CustomTextArea"},{target:ve,name:"Distance"},{target:be,name:"Dropdown"},{target:Ye,name:"ErrorMessage"},{target:$n,name:"Loader"},{target:Jn,name:"Modal"},{target:Fn,name:"SportImage"}],er={mounted:(e,t)=>{e.clickOutsideEvent=function(n){e===n.target||e.contains(n.target)||t.value(n)},document.body.addEventListener("click",e.clickOutsideEvent),document.body.addEventListener("touchstart",e.clickOutsideEvent)},unmounted:function(e){e.clickOutsideEvent&&(document.body.removeEventListener("click",e.clickOutsideEvent),document.body.removeEventListener("touchstart",e.clickOutsideEvent),e.clickOutsideEvent=void 0)}};var tr=n(631);r.kL.register(r.ZL,r.jn,r.od,r.De,r.Dx,r.u,r.Gu,r.vn,r.uw,r.ST,r.f$,a.Z);const nr=(0,o.ri)(ue).provide("sportColors",tr.Zo).use(de.Z).use(_e.Z).use(me.Z).use(s.ZP,{name:"VFullscreen"}).directive("click-outside",er);Qn.forEach((e=>{nr.component(e.name,e.target)})),nr.mount("#app")},5073:function(e,t,n){"use strict";n.d(t,{Z:function(){return wl}});var r=n(2201),a=(n(7658),n(6252)),o=n(3577),s=n(9963),i=n(2262),l=n(5801),c=n(9917),u=n(8966);const d=e=>((0,a.dD)("data-v-24ec93e2"),e=e(),(0,a.Cn)(),e),m={id:"admin-app",class:"admin-card"},_=["onSubmit"],E={for:"admin_contact"},S=["value"],T=["disabled"],p={for:"max_users"},A=["disabled"],O={class:"user-limit-help"},R={class:"info-box"},I=d((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),U={for:"max_single_file_size"},g=["disabled"],N={for:"max_zip_file_size"},h=["disabled"],z={for:"gpx_limit_import"},w=["disabled"],f={key:1,class:"form-buttons"},v={class:"confirm",type:"submit"},C=["onClick"],D={key:2,class:"form-buttons"};var k=(0,a.aZ)({__name:"AdminApplication",props:{appConfig:null,edition:{type:Boolean,default:!1}},setup(e){const t=e,{edition:n}=(0,i.BK)(t),d=(0,c.o)(),k=(0,r.tv)(),P=(0,i.qj)({admin_contact:"",max_users:0,max_single_file_size:0,max_zip_file_size:0,gpx_limit_import:0}),L=(0,a.Fl)((()=>d.getters[l.SY.GETTERS.ERROR_MESSAGES]));function M(e){Object.keys(P).map((t=>{["max_single_file_size","max_zip_file_size"].includes(t)?P[t]=(0,u.j)(e[t]):P[t]=e[t]}))}function b(){M(t.appConfig),d.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),k.push("/admin/application")}function y(){const e=Object.assign({},P);e.max_single_file_size*=1048576,e.max_zip_file_size*=1048576,d.dispatch(l.SY.ACTIONS.UPDATE_APPLICATION_CONFIG,e)}return(0,a.wF)((()=>{t.appConfig&&M(t.appConfig)})),(e,t)=>{const r=(0,a.up)("ErrorMessage"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",m,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.TITLE")),1)])),content:(0,a.w5)((()=>[(0,a._)("form",{class:"admin-form",onSubmit:(0,s.iM)(y,["prevent"])},[(0,a._)("label",E,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.ADMIN_CONTACT"))+": ",1),(0,i.SU)(n)||P.admin_contact?(0,a.wy)(((0,a.wg)(),(0,a.iD)("input",{key:1,id:"admin_contact",name:"admin_contact",type:"email","onUpdate:modelValue":t[0]||(t[0]=e=>P.admin_contact=e),disabled:!(0,i.SU)(n)},null,8,T)),[[s.nr,P.admin_contact]]):((0,a.wg)(),(0,a.iD)("input",{key:0,class:"no-contact",value:e.$t("admin.APP_CONFIG.NO_CONTACT_EMAIL"),disabled:""},null,8,S))]),(0,a._)("label",p,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.MAX_USERS_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_users",name:"max_users",type:"number",min:"0","onUpdate:modelValue":t[1]||(t[1]=e=>P.max_users=e),disabled:!(0,i.SU)(n)},null,8,A),[[s.nr,P.max_users]])]),(0,a._)("div",O,[(0,a._)("span",R,[I,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.APP_CONFIG.MAX_USERS_HELP")),1)])]),(0,a._)("label",U,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.SINGLE_UPLOAD_MAX_SIZE_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_single_file_size",name:"max_single_file_size",type:"number",step:"0.1",min:"0","onUpdate:modelValue":t[2]||(t[2]=e=>P.max_single_file_size=e),disabled:!(0,i.SU)(n)},null,8,g),[[s.nr,P.max_single_file_size]])]),(0,a._)("label",N,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.ZIP_UPLOAD_MAX_SIZE_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_zip_file_size",name:"max_zip_file_size",type:"number",step:"0.1",min:"0","onUpdate:modelValue":t[3]||(t[3]=e=>P.max_zip_file_size=e),disabled:!(0,i.SU)(n)},null,8,h),[[s.nr,P.max_zip_file_size]])]),(0,a._)("label",z,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.MAX_FILES_IN_ZIP_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"gpx_limit_import",name:"gpx_limit_import",type:"number",min:"0","onUpdate:modelValue":t[4]||(t[4]=e=>P.gpx_limit_import=e),disabled:!(0,i.SU)(n)},null,8,w),[[s.nr,P.gpx_limit_import]])]),(0,i.SU)(L)?((0,a.wg)(),(0,a.j4)(r,{key:0,message:(0,i.SU)(L)},null,8,["message"])):(0,a.kq)("",!0),(0,i.SU)(n)?((0,a.wg)(),(0,a.iD)("div",f,[(0,a._)("button",v,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:(0,s.iM)(b,["prevent"])},(0,o.zw)(e.$t("buttons.CANCEL")),9,C)])):((0,a.wg)(),(0,a.iD)("div",D,[(0,a._)("button",{class:"confirm",onClick:t[5]||(t[5]=(0,s.iM)((t=>e.$router.push("/admin/application/edit")),["prevent"]))},(0,o.zw)(e.$t("buttons.EDIT")),1),(0,a._)("button",{class:"cancel",onClick:t[6]||(t[6]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)]))],40,_)])),_:1})])}}}),P=n(3744);const L=(0,P.Z)(k,[["__scopeId","data-v-24ec93e2"]]);var M=L;const b={class:"stat-card"},y={class:"stat-content box"},G={class:"stat-icon"},F={class:"stat-details"},W={class:"stat-huge"},K={class:"stat"};var Y=(0,a.aZ)({__name:"StatCard",props:{icon:null,text:null,value:null},setup(e){const t=e,{icon:n,text:r,value:s}=(0,i.BK)(t);return(e,t)=>((0,a.wg)(),(0,a.iD)("div",b,[(0,a._)("div",y,[(0,a._)("div",G,[(0,a._)("i",{class:(0,o.C_)(["fa",`fa-${(0,i.SU)(n)}`])},null,2)]),(0,a._)("div",F,[(0,a._)("div",W,(0,o.zw)((0,i.SU)(s)),1),(0,a._)("div",K,(0,o.zw)((0,i.SU)(r)),1)])])]))}});const x=Y;var $=x;const B={id:"user-stats"};var Z=(0,a.aZ)({__name:"AppStatsCards",props:{appStatistics:null},setup(e){const t=e,{appStatistics:n}=(0,i.BK)(t),r=(0,a.Fl)((()=>(0,u.Z)(n.value.uploads_dir_size,!1)));return(e,t)=>((0,a.wg)(),(0,a.iD)("div",B,[(0,a.Wm)($,{icon:"users",value:(0,i.SU)(n).users,text:e.$t("admin.USER",(0,i.SU)(n).users)},null,8,["value","text"]),(0,a.Wm)($,{icon:"tags",value:(0,i.SU)(n).sports,text:e.$t("workouts.SPORT",(0,i.SU)(n).sports)},null,8,["value","text"]),(0,a.Wm)($,{icon:"calendar",value:(0,i.SU)(n).workouts,text:e.$t("workouts.WORKOUT",(0,i.SU)(n).workouts)},null,8,["value","text"]),(0,a.Wm)($,{icon:"folder-open",value:(0,i.SU)(r).size,text:(0,i.SU)(r).suffix},null,8,["value","text"])]))}});const H=Z;var q=H,V=n(2531);const j=e=>((0,a.dD)("data-v-0dd66f89"),e=e(),(0,a.Cn)(),e),X={id:"admin-menu",class:"center-card"},J={class:"admin-menu description-list"},Q={class:"application-config-details"},ee=j((()=>(0,a._)("br",null,null,-1))),te={class:"registration-status"},ne={key:0,class:"email-sending-status"},re=j((()=>(0,a._)("i",{class:"fa fa-exclamation-triangle","aria-hidden":"true"},null,-1)));var ae=(0,a.aZ)({__name:"AdminMenu",props:{appConfig:null,appStatistics:{default:()=>({})}},setup(e){const t=e,{appConfig:n,appStatistics:r}=(0,i.BK)(t);return(e,t)=>{const s=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("div",X,[(0,a.Wm)(V.Z,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.ADMINISTRATION")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(q,{appStatistics:(0,i.SU)(r)},null,8,["appStatistics"]),(0,a._)("div",J,[(0,a._)("dl",null,[(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/application"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.APPLICATION")),1)])),_:1})]),(0,a._)("dd",Q,[(0,a.Uk)((0,o.zw)(e.$t("admin.UPDATE_APPLICATION_DESCRIPTION")),1),ee,(0,a._)("span",te,(0,o.zw)(e.$t("admin.REGISTRATION_"+((0,i.SU)(n).is_registration_enabled?"ENABLED":"DISABLED"))),1),(0,i.SU)(n).is_email_sending_enabled?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("span",ne,[re,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.EMAIL_SENDING_DISABLED")),1)]))]),(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/sports"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("workouts.SPORT",0))),1)])),_:1})]),(0,a._)("dd",null,(0,o.zw)(e.$t("admin.ENABLE_DISABLE_SPORTS")),1),(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/users"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("admin.USER",0))),1)])),_:1})]),(0,a._)("dd",null,(0,o.zw)(e.$t("admin.ADMIN_RIGHTS_DELETE_USER_ACCOUNT")),1)])])])),_:1})])}}});const oe=(0,P.Z)(ae,[["__scopeId","data-v-0dd66f89"]]);var se=oe,ie=n(9150),le=n(631);const ce=e=>((0,a.dD)("data-v-6d62af67"),e=e(),(0,a.Cn)(),e),ue={id:"admin-sports",class:"admin-card"},de={class:"responsive-table"},me=ce((()=>(0,a._)("th",null,"#",-1))),_e={class:"text-left"},Ee={class:"text-left sport-action"},Se=ce((()=>(0,a._)("th",null,null,-1))),Te={class:"text-center"},pe=ce((()=>(0,a._)("span",{class:"cell-heading"},"id",-1))),Ae={class:"cell-heading"},Oe={class:"sport-label"},Re={class:"cell-heading"},Ie={class:"text-center"},Ue={class:"cell-heading"},ge={class:"sport-action"},Ne={class:"cell-heading"},he={class:"action-button"},ze=["onClick"],we={key:0,class:"has-workouts"},fe=ce((()=>(0,a._)("i",{class:"fa fa-warning","aria-hidden":"true"},null,-1)));var ve=(0,a.aZ)({__name:"AdminSports",setup(e){const{t:t}=(0,ie.QT)(),n=(0,c.o)(),r=(0,a.Fl)((()=>(0,le.xH)(n.getters[l.O8.GETTERS.SPORTS],t))),u=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function d(e,t){n.dispatch(l.O8.ACTIONS.UPDATE_SPORTS,{id:e,isActive:t})}return(e,t)=>{const n=(0,a.up)("SportImage"),l=(0,a.up)("ErrorMessage"),c=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",ue,[(0,a.Wm)(c,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.SPORTS.TITLE")),1)])),content:(0,a.w5)((()=>[(0,a._)("button",{class:"top-button",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1),(0,a._)("div",de,[(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[me,(0,a._)("th",null,(0,o.zw)(e.$t("admin.SPORTS.TABLE.IMAGE")),1),(0,a._)("th",_e,(0,o.zw)(e.$t("admin.SPORTS.TABLE.LABEL")),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.SPORTS.TABLE.ACTIVE")),1),(0,a._)("th",Ee,(0,o.zw)(e.$t("admin.ACTION")),1),Se])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(r),(t=>((0,a.wg)(),(0,a.iD)("tr",{key:t.id},[(0,a._)("td",Te,[pe,(0,a.Uk)(" "+(0,o.zw)(t.id),1)]),(0,a._)("td",null,[(0,a._)("span",Ae,(0,o.zw)(e.$t("admin.SPORTS.TABLE.IMAGE")),1),(0,a.Wm)(n,{title:t.translatedLabel,"sport-label":t.label,color:t.color},null,8,["title","sport-label","color"])]),(0,a._)("td",Oe,[(0,a._)("span",Re,(0,o.zw)(e.$t("admin.SPORTS.TABLE.LABEL")),1),(0,a.Uk)(" "+(0,o.zw)(t.translatedLabel),1)]),(0,a._)("td",Ie,[(0,a._)("span",Ue,(0,o.zw)(e.$t("admin.SPORTS.TABLE.ACTIVE")),1),(0,a._)("i",{class:(0,o.C_)("fa fa"+(t.is_active?"-check":"")),"aria-hidden":"true"},null,2)]),(0,a._)("td",ge,[(0,a._)("span",Ne,(0,o.zw)(e.$t("admin.ACTION")),1),(0,a._)("div",he,[(0,a._)("button",{class:(0,o.C_)({danger:t.is_active}),onClick:e=>d(t.id,!t.is_active)},(0,o.zw)(e.$t(`buttons.${t.is_active?"DIS":"EN"}ABLE`)),11,ze),t.has_workouts?((0,a.wg)(),(0,a.iD)("span",we,[fe,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.SPORTS.TABLE.HAS_WORKOUTS")),1)])):(0,a.kq)("",!0)])])])))),128))])]),(0,i.SU)(u)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(u)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("button",{onClick:t[1]||(t[1]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)])])),_:1})])}}});const Ce=(0,P.Z)(ve,[["__scopeId","data-v-6d62af67"]]);var De=Ce,ke=n(8626),Pe=n(5020),Le=n(6595);const Me={class:"users-filters"},be={class:"search-username"},ye=["onKeyup","placeholder"];var Ge=(0,a.aZ)({__name:"UsersNameFilter",emits:["filterOnUsername"],setup(e,{emit:t}){const n=(0,r.yj)(),l=(0,i.iH)(n.query.q?n.query.q:"");function c(){""!==l.value&&t("filterOnUsername",l)}function u(){l.value="",t("filterOnUsername",l.value)}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Me,[(0,a._)("div",be,[(0,a.wy)((0,a._)("input",{id:"username",name:"username","onUpdate:modelValue":t[0]||(t[0]=e=>l.value=e),onKeyup:(0,s.D2)(c,["enter"]),placeholder:e.$t("user.FILTER_ON_USERNAME")},null,40,ye),[[s.nr,l.value,void 0,{trim:!0}]]),""!==l.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-times","aria-hidden":"true",onClick:u})):(0,a.kq)("",!0)]),(0,a._)("i",{class:(0,o.C_)(["fa fa-search",{"fa-disabled":""===l.value}]),"aria-hidden":"true",onClick:c},null,2)]))}});const Fe=(0,P.Z)(Ge,[["__scopeId","data-v-627a8e91"]]);var We=Fe,Ke=n(2766),Ye=n(6558);const xe=e=>((0,a.dD)("data-v-dc12ff78"),e=e(),(0,a.Cn)(),e),$e={id:"admin-users",class:"admin-card"},Be={key:0,class:"no-users"},Ze={key:1,class:"responsive-table"},He=xe((()=>(0,a._)("th",null,"#",-1))),qe={class:"left-text"},Ve={class:"left-text"},je={class:"left-text"},Xe={class:"cell-heading"},Je={class:"cell-heading"},Qe={class:"cell-heading"},et={class:"cell-heading"},tt={class:"text-center"},nt={class:"cell-heading"},rt={class:"text-center"},at={class:"cell-heading"},ot={class:"text-center"},st={class:"cell-heading"},it={class:"text-center"},lt={class:"cell-heading"},ct=["disabled","onClick"];var ut=(0,a.aZ)({__name:"AdminUsers",setup(e){const t=(0,c.o)(),n=(0,r.yj)(),u=(0,r.tv)(),d=["is_active","admin","created_at","username","workouts_count"],m="created_at";let _=(0,i.qj)((0,Ke.pm)(n.query,d,m));const E=(0,a.Fl)((()=>t.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),S=(0,a.Fl)((()=>t.getters[l.RT.GETTERS.USERS])),T=(0,a.Fl)((()=>t.getters[l.RT.GETTERS.USERS_PAGINATION])),p=(0,a.Fl)((()=>t.getters[l.SY.GETTERS.ERROR_MESSAGES]));function A(e){t.dispatch(l.RT.ACTIONS.GET_USERS,e)}function O(e){I("q",e.value)}function R(e,n){t.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,admin:n})}function I(e,t){_[e]=t,"per_page"===e&&(_.page=1),u.push({path:"/admin/users",query:_})}return(0,a.wF)((()=>A(_))),(0,a.Ah)((()=>{t.dispatch(l.RT.ACTIONS.EMPTY_USERS)})),(0,a.YP)((()=>n.query),(e=>{_=(0,Ke.pm)(e,d,m,{query:_}),A(_)})),(e,t)=>{const n=(0,a.up)("router-link"),r=(0,a.up)("ErrorMessage"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",$e,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("admin.USER",0))),1)])),content:(0,a.w5)((()=>[(0,a._)("button",{class:"top-button",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1),(0,a.Wm)(We,{onFilterOnUsername:O}),(0,a.Wm)(ke.Z,{sort:(0,i.SU)(Ke.fS),order_by:d,query:(0,i.SU)(_),message:"admin.USERS.SELECTS.ORDER_BY",onUpdateSelect:I},null,8,["sort","query"]),0===(0,i.SU)(S).length?((0,a.wg)(),(0,a.iD)("div",Be,(0,o.zw)(e.$t("user.NO_USERS_FOUND")),1)):((0,a.wg)(),(0,a.iD)("div",Ze,[(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[He,(0,a._)("th",qe,(0,o.zw)(e.$t("user.USERNAME")),1),(0,a._)("th",Ve,(0,o.zw)(e.$t("user.EMAIL")),1),(0,a._)("th",je,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE")),1),(0,a._)("th",null,(0,o.zw)((0,o.kC)(e.$t("workouts.WORKOUT",0))),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.ACTIVE")),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.ADMIN")),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.ACTION")),1)])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(t=>((0,a.wg)(),(0,a.iD)("tr",{key:t.username},[(0,a._)("td",null,[(0,a._)("span",Xe,(0,o.zw)(e.$t("user.PROFILE.PICTURE")),1),(0,a.Wm)(Le.Z,{user:t},null,8,["user"])]),(0,a._)("td",null,[(0,a._)("span",Je,(0,o.zw)(e.$t("user.USERNAME")),1),(0,a.Wm)(n,{to:`/admin/users/${t.username}`},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.username),1)])),_:2},1032,["to"])]),(0,a._)("td",null,[(0,a._)("span",Qe,(0,o.zw)(e.$t("user.EMAIL")),1),(0,a.Uk)(" "+(0,o.zw)(t.email),1)]),(0,a._)("td",null,[(0,a._)("span",et,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE")),1),(0,a.Uk)(" "+(0,o.zw)((0,i.SU)(Ye.p6)(t.created_at,(0,i.SU)(E).timezone,(0,i.SU)(E).date_format)),1)]),(0,a._)("td",tt,[(0,a._)("span",nt,(0,o.zw)((0,o.kC)(e.$t("workouts.WORKOUT",0))),1),(0,a.Uk)(" "+(0,o.zw)(t.nb_workouts),1)]),(0,a._)("td",rt,[(0,a._)("span",at,(0,o.zw)(e.$t("admin.ACTIVE")),1),(0,a._)("i",{class:(0,o.C_)(`fa fa${t.is_active?"-check":""}-square-o`),"aria-hidden":"true"},null,2)]),(0,a._)("td",ot,[(0,a._)("span",st,(0,o.zw)(e.$t("user.ADMIN")),1),(0,a._)("i",{class:(0,o.C_)(`fa fa${t.admin?"-check":""}-square-o`),"aria-hidden":"true"},null,2)]),(0,a._)("td",it,[(0,a._)("span",lt,(0,o.zw)(e.$t("admin.ACTION")),1),(0,a._)("button",{class:(0,o.C_)({danger:t.admin}),disabled:t.username===(0,i.SU)(E).username,onClick:e=>R(t.username,!t.admin)},(0,o.zw)(e.$t(`admin.USERS.TABLE.${t.admin?"REMOVE":"ADD"}_ADMIN_RIGHTS`)),11,ct)])])))),128))])]),(0,i.SU)(T).page?((0,a.wg)(),(0,a.j4)(Pe.Z,{key:0,path:"/admin/users",pagination:(0,i.SU)(T),query:(0,i.SU)(_)},null,8,["pagination","query"])):(0,a.kq)("",!0),(0,i.SU)(p)?((0,a.wg)(),(0,a.j4)(r,{key:1,message:(0,i.SU)(p)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("button",{onClick:t[1]||(t[1]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)]))])),_:1})])}}});const dt=(0,P.Z)(ut,[["__scopeId","data-v-dc12ff78"]]);var mt=dt,_t=n(2179);const Et={class:"profile-tabs custom-checkboxes-group"},St={class:"profile-tabs-checkboxes custom-checkboxes"},Tt=["id","name","checked","disabled","onInput"];var pt=(0,a.aZ)({__name:"UserProfileTabs",props:{tabs:null,selectedTab:null,edition:{type:Boolean},disabled:{type:Boolean,default:!1}},setup(e){const t=e,{tabs:n,selectedTab:r,disabled:s}=(0,i.BK)(t);function l(e){switch(e){case"ACCOUNT":case"PICTURE":return`/profile/edit/${e.toLocaleLowerCase()}`;case"APPS":case"PREFERENCES":case"SPORTS":return`/profile${t.edition?"/edit":""}/${e.toLocaleLowerCase()}`;default:case"PROFILE":return"/profile"+(t.edition?"/edit":"")}}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Et,[(0,a._)("div",St,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(n),(t=>((0,a.wg)(),(0,a.iD)("div",{class:"profile-tab custom-checkbox",key:t},[(0,a._)("label",null,[(0,a._)("input",{type:"radio",id:t,name:t,checked:(0,i.SU)(r).split("/")[0]===t,disabled:(0,i.SU)(s),onInput:n=>e.$router.push(l(t))},null,40,Tt),(0,a._)("span",null,(0,o.zw)(e.$t(`user.PROFILE.TABS.${t}`)),1)])])))),128))])]))}});const At=pt;var Ot=At;const Rt={id:"user-profile"},It={class:"box"};var Ut=(0,a.aZ)({__name:"index",props:{user:null,tab:null},setup(e){const t=e,{user:n,tab:r}=(0,i.BK)(t),o=["PROFILE","PREFERENCES","SPORTS","APPS"];return(e,t)=>{const s=(0,a.up)("router-view");return(0,a.wg)(),(0,a.iD)("div",Rt,[(0,a.Wm)(_t.Z,{user:(0,i.SU)(n)},null,8,["user"]),(0,a._)("div",It,[(0,a.Wm)(Ot,{tabs:o,selectedTab:(0,i.SU)(r),edition:!1},null,8,["selectedTab"]),(0,a.Wm)(s,{user:(0,i.SU)(n)},null,8,["user"])])])}}});const gt=(0,P.Z)(Ut,[["__scopeId","data-v-9729cba4"]]);var Nt=gt,ht=n(1585),zt=n(6287);const wt={id:"user-preferences",class:"description-list"},ft={class:"profile-buttons"};var vt=(0,a.aZ)({__name:"UserPreferences",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LANGUAGE])),s=(0,a.Fl)((()=>t.user.language?zt.zK[t.user.language]:zt.zK.en)),u=(0,a.Fl)((()=>t.user.weekm?"MONDAY":"SUNDAY")),d=(0,a.Fl)((()=>t.user.timezone?t.user.timezone:"Europe/Paris")),m=(0,a.Fl)((()=>t.user.date_format?t.user.date_format:"MM/dd/yyyy")),_=(0,a.Fl)((()=>t.user.display_ascent?"DISPLAYED":"HIDDEN"));return(t,n)=>((0,a.wg)(),(0,a.iD)("div",wt,[(0,a._)("dl",null,[(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.LANGUAGE"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(s)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.TIMEZONE"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(d)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.DATE_FORMAT"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(Ye.mh)((0,i.SU)(m),(0,i.SU)(r))),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.FIRST_DAY_OF_WEEK"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t(`user.PROFILE.${(0,i.SU)(u)}`)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.UNITS.LABEL"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t("user.PROFILE.UNITS."+(e.user.imperial_units?"IMPERIAL":"METRIC"))),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.ASCENT_DATA"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t(`common.${(0,i.SU)(_)}`)),1)]),(0,a._)("div",ft,[(0,a._)("button",{onClick:n[0]||(n[0]=e=>t.$router.push("/profile/edit/preferences"))},(0,o.zw)(t.$t("user.PROFILE.EDIT_PREFERENCES")),1),(0,a._)("button",{onClick:n[1]||(n[1]=e=>t.$router.push("/"))},(0,o.zw)(t.$t("common.HOME")),1)])]))}});const Ct=vt;var Dt=Ct;const kt={id:"user-profile-edition",class:"center-card"};var Pt=(0,a.aZ)({__name:"index",props:{user:null,tab:null},setup(e){const t=e,n=(0,c.o)(),{user:r,tab:s}=(0,i.BK)(t),u=["PROFILE","ACCOUNT","PICTURE","PREFERENCES","SPORTS"],d=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING]));return(e,t)=>{const n=(0,a.up)("router-view"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",kt,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t(`user.PROFILE.${(0,i.SU)(s)}_EDITION`)),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(Ot,{tabs:u,selectedTab:(0,i.SU)(s),edition:!0,disabled:(0,i.SU)(d)},null,8,["selectedTab","disabled"]),(0,a.Wm)(n,{user:(0,i.SU)(r)},null,8,["user"])])),_:1})])}}});const Lt=Pt;var Mt=Lt,bt=n(8403);const yt={id:"user-infos-edition"},Gt={class:"profile-form form-box"},Ft={key:1,class:"info-box success-message"},Wt=["onSubmit"],Kt={class:"form-items",for:"email"},Yt=["disabled"],xt={class:"form-items",for:"password-field"},$t={class:"form-items",for:"new-password-field"},Bt={class:"form-buttons"},Zt={class:"confirm",type:"submit"};var Ht=(0,a.aZ)({__name:"UserAccountEdition",props:{user:null},setup(e){const t=e,{user:n}=(0,i.BK)(t),r=(0,c.o)(),u=(0,i.qj)({email:"",password:"",new_password:""}),d=(0,a.Fl)((()=>r.getters[l.YN.GETTERS.USER_LOADING])),m=(0,a.Fl)((()=>r.getters[l.SY.GETTERS.APP_CONFIG])),_=(0,a.Fl)((()=>r.getters[l.YN.GETTERS.IS_SUCCESS])),E=(0,i.iH)(!1),S=(0,a.Fl)((()=>r.getters[l.SY.GETTERS.ERROR_MESSAGES])),T=(0,i.iH)(!1),p=(0,i.iH)(!1);function A(){T.value=!0}function O(e){u.email=e.email}function R(e){u.password=e}function I(e){u.new_password=e}function U(){const e={email:u.email,password:u.password};u.new_password&&(e.new_password=u.new_password),E.value=u.email!==n.value.email,r.dispatch(l.YN.ACTIONS.UPDATE_USER_ACCOUNT,e)}function g(e){p.value=e}function N(e){r.dispatch(l.YN.ACTIONS.DELETE_ACCOUNT,{username:e})}return(0,a.bv)((()=>{t.user&&O(t.user)})),(0,a.Ah)((()=>{r.commit(l.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),r.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(0,a.YP)((()=>_.value),(async e=>{e&&(R(""),I(""),O(n.value),T.value=!1)})),(0,a.YP)((()=>n.value.email),(async()=>{O(n.value)})),(e,t)=>{const r=(0,a.up)("Modal"),l=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",yt,[p.value?((0,a.wg)(),(0,a.j4)(r,{key:0,title:e.$t("common.CONFIRMATION"),message:e.$t("user.CONFIRM_ACCOUNT_DELETION"),onConfirmAction:t[0]||(t[0]=e=>N((0,i.SU)(n).username)),onCancelAction:t[1]||(t[1]=e=>g(!1))},null,8,["title","message"])):(0,a.kq)("",!0),(0,a._)("div",Gt,[(0,i.SU)(S)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(S)},null,8,["message"])):(0,a.kq)("",!0),(0,i.SU)(_)?((0,a.wg)(),(0,a.iD)("div",Ft,(0,o.zw)(e.$t(`user.PROFILE.SUCCESSFUL_${E.value&&(0,i.SU)(m).is_email_sending_enabled?"EMAIL_":""}UPDATE`)),1)):(0,a.kq)("",!0),(0,a._)("form",{class:(0,o.C_)({errors:T.value}),onSubmit:(0,s.iM)(U,["prevent"])},[(0,a._)("label",Kt,[(0,a.Uk)((0,o.zw)(e.$t("user.EMAIL"))+"* ",1),(0,a.wy)((0,a._)("input",{id:"email","onUpdate:modelValue":t[2]||(t[2]=e=>u.email=e),disabled:(0,i.SU)(d),required:!0,onInvalid:A},null,40,Yt),[[s.nr,u.email]])]),(0,a._)("label",xt,[(0,a.Uk)((0,o.zw)(e.$t("user.CURRENT_PASSWORD"))+"* ",1),(0,a.Wm)(bt.Z,{id:"password-field",disabled:(0,i.SU)(d),password:u.password,required:!0,onUpdatePassword:R,onPasswordError:A},null,8,["disabled","password"])]),(0,a._)("label",$t,[(0,a.Uk)((0,o.zw)(e.$t("user.NEW_PASSWORD"))+" ",1),(0,a.Wm)(bt.Z,{id:"new-password-field",disabled:(0,i.SU)(d),checkStrength:!0,password:u.new_password,isSuccess:!1,onUpdatePassword:I,onPasswordError:A},null,8,["disabled","password"])]),(0,a._)("div",Bt,[(0,a._)("button",Zt,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[3]||(t[3]=(0,s.iM)((t=>e.$router.push("/profile")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1),(0,a._)("button",{class:"danger",onClick:t[4]||(t[4]=(0,s.iM)((e=>g(!0)),["prevent"]))},(0,o.zw)(e.$t("buttons.DELETE_MY_ACCOUNT")),1)])],42,Wt)])])}}});const qt=(0,P.Z)(Ht,[["__scopeId","data-v-37b8c4c8"]]);var Vt=qt,jt=n(4850);const Xt={id:"user-infos-edition"},Jt={class:"profile-form form-box"},Qt=["onSubmit"],en={class:"form-items",for:"registrationDate"},tn=["value"],nn={class:"form-items",for:"first_name"},rn=["disabled"],an={class:"form-items",for:"last_name"},on={class:"form-items",for:"birth_date"},sn=["disabled"],ln={class:"form-items",for:"location"},cn=["disabled"],un={class:"form-items"},dn={class:"form-buttons"},mn={class:"confirm",type:"submit"};var _n=(0,a.aZ)({__name:"UserInfosEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({first_name:"",last_name:"",birth_date:"",location:"",bio:""}),u=(0,a.Fl)((()=>t.user.created_at?(0,Ye.p6)(t.user.created_at,t.user.timezone,t.user.date_format):"")),d=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function _(e){r.first_name=e.first_name?e.first_name:"",r.last_name=e.last_name?e.last_name:"",r.birth_date=e.birth_date?(0,jt.Z)(new Date(e.birth_date),"yyyy-MM-dd"):"",r.location=e.location?e.location:"",r.bio=e.bio?e.bio:""}function E(e){r.bio=e}function S(){n.dispatch(l.YN.ACTIONS.UPDATE_USER_PROFILE,r)}return(0,a.bv)((()=>{t.user&&_(t.user)})),(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage"),l=(0,a.up)("CustomTextArea");return(0,a.wg)(),(0,a.iD)("div",Xt,[(0,a._)("div",Jt,[(0,i.SU)(m)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(m)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("form",{onSubmit:(0,s.iM)(S,["prevent"])},[(0,a._)("label",en,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE"))+" ",1),(0,a._)("input",{id:"registrationDate",value:(0,i.SU)(u),disabled:""},null,8,tn)]),(0,a._)("label",nn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.FIRST_NAME"))+" ",1),(0,a.wy)((0,a._)("input",{id:"first_name","onUpdate:modelValue":t[0]||(t[0]=e=>r.first_name=e),disabled:(0,i.SU)(d)},null,8,rn),[[s.nr,r.first_name]])]),(0,a._)("label",an,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LAST_NAME"))+" ",1),(0,a.wy)((0,a._)("input",{id:"last_name","onUpdate:modelValue":t[1]||(t[1]=e=>r.last_name=e)},null,512),[[s.nr,r.last_name]])]),(0,a._)("label",on,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.BIRTH_DATE"))+" ",1),(0,a.wy)((0,a._)("input",{id:"birth_date",type:"date",class:"birth-date","onUpdate:modelValue":t[2]||(t[2]=e=>r.birth_date=e),disabled:(0,i.SU)(d)},null,8,sn),[[s.nr,r.birth_date]])]),(0,a._)("label",ln,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LOCATION"))+" ",1),(0,a.wy)((0,a._)("input",{id:"location","onUpdate:modelValue":t[3]||(t[3]=e=>r.location=e),disabled:(0,i.SU)(d)},null,8,cn),[[s.nr,r.location]])]),(0,a._)("label",un,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.BIO"))+" ",1),(0,a.Wm)(l,{name:"bio",charLimit:200,input:r.bio,disabled:(0,i.SU)(d),onUpdateValue:E},null,8,["input","disabled"])]),(0,a._)("div",dn,[(0,a._)("button",mn,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[4]||(t[4]=(0,s.iM)((t=>e.$router.push("/profile")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,Qt)])])}}});const En=(0,P.Z)(_n,[["__scopeId","data-v-5e5a4552"]]);var Sn=En;const Tn=e=>((0,a.dD)("data-v-687e9604"),e=e(),(0,a.Cn)(),e),pn={id:"user-picture-edition"},An={class:"user-picture-form"},On=["onSubmit"],Rn={class:"picture-help"},In={class:"info-box"},Un=Tn((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),gn={class:"picture-buttons"},Nn=["disabled"];var hn=(0,a.aZ)({__name:"UserPictureEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),{user:r}=(0,i.BK)(t),d=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.APP_CONFIG])),_=m.value.max_single_file_size?(0,u.Z)(m.value.max_single_file_size):"",E=(0,i.iH)(null);function S(){n.dispatch(l.YN.ACTIONS.DELETE_PICTURE)}function T(e){e.target.files&&(E.value=e.target.files[0])}function p(){E.value&&n.dispatch(l.YN.ACTIONS.UPDATE_USER_PICTURE,{picture:E.value})}return(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",pn,[(0,a._)("div",An,[(0,i.SU)(d)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(d)},null,8,["message"])):(0,a.kq)("",!0),(0,a.Wm)(Le.Z,{user:(0,i.SU)(r)},null,8,["user"]),(0,a._)("form",{onSubmit:(0,s.iM)(p,["prevent"])},[(0,a._)("input",{type:"file",name:"picture",accept:".png,.jpg,.gif",onInput:T},null,32),(0,a._)("div",Rn,[(0,a._)("span",In,[Un,(0,a.Uk)(" "+(0,o.zw)(e.$t("workouts.MAX_SIZE"))+": "+(0,o.zw)((0,i.SU)(_)),1)])]),(0,a._)("div",gn,[(0,a._)("button",{type:"submit",disabled:!E.value},(0,o.zw)(e.$t("user.PROFILE.PICTURE_UPDATE")),9,Nn),(0,i.SU)(r).picture?((0,a.wg)(),(0,a.iD)("button",{key:0,class:"danger",onClick:S},(0,o.zw)(e.$t("user.PROFILE.PICTURE_REMOVE")),1)):(0,a.kq)("",!0),(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=t=>e.$router.push("/profile"))},(0,o.zw)(e.$t("user.PROFILE.BACK_TO_PROFILE")),1)])],40,On)])])}}});const zn=(0,P.Z)(hn,[["__scopeId","data-v-687e9604"]]);var wn=zn;const fn=["Africa/Abidjan","Africa/Accra","Africa/Algiers","Africa/Bissau","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/El_Aaiun","Africa/Johannesburg","Africa/Juba","Africa/Khartoum","Africa/Lagos","Africa/Maputo","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Sao_Tome","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Araguaina","America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Asuncion","America/Atikokan","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Cayenne","America/Chicago","America/Chihuahua","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Fortaleza","America/Fort_Nelson","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Inuvik","America/Iqaluit","America/Jamaica","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/La_Paz","America/Lima","America/Los_Angeles","America/Maceio","America/Managua","America/Manaus","America/Martinique","America/Matamoros","America/Mazatlan","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Sitka","America/St_Johns","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Atyrau","Asia/Baghdad","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Chita","Asia/Choibalsan","Asia/Colombo","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Kathmandu","Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Riyadh","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ulaanbaatar","Asia/Urumqi","Asia/Ust-Nera","Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faroe","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/Stanley","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/Perth","Australia/Sydney","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belgrade","Europe/Berlin","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Helsinki","Europe/Istanbul","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Oslo","Europe/Paris","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/Saratov","Europe/Simferopol","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zaporozhye","Europe/Zurich","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Reunion","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Chuuk","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Pohnpei","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Wake","Pacific/Wallis"],vn={id:"tz-dropdown"},Cn=["value","disabled","onKeydown"],Dn=["onClick","onMouseover","autofocus"];var kn=(0,a.aZ)({__name:"TimezoneDropdown",props:{input:null,disabled:{type:Boolean,default:!1}},emits:["updateTimezone"],setup(e,{emit:t}){const n=e,{input:r,disabled:l}=(0,i.BK)(n),c=(0,i.iH)(n.input),u=(0,i.iH)(!1),d=(0,i.iH)(null),m=(0,i.iH)(0);function _(e){return e.toLowerCase().match(c.value.toLowerCase())}function E(e){m.value=e}function S(e){c.value=e,u.value=!1,t("updateTimezone",e)}function T(e){e.preventDefault(),d.value?.firstElementChild?.innerHTML&&S(d.value?.firstElementChild?.innerHTML)}function p(e){e.preventDefault(),u.value=!0,c.value=e.target.value.trim()}return(0,a.YP)((()=>n.input),(e=>{c.value=e})),(e,t)=>((0,a.wg)(),(0,a.iD)("div",vn,[(0,a._)("input",{class:"tz-dropdown-input",id:"timezone",name:"timezone",value:c.value,disabled:(0,i.SU)(l),required:"",onKeydown:[t[0]||(t[0]=(0,s.D2)((e=>S((0,i.SU)(r))),["esc"])),(0,s.D2)(T,["enter"])],onInput:p},null,40,Cn),u.value?((0,a.wg)(),(0,a.iD)("ul",{key:0,class:"tz-dropdown-list",ref_key:"tzList",ref:d},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(fn).filter((e=>_(e))),((e,t)=>((0,a.wg)(),(0,a.iD)("li",{key:e,class:(0,o.C_)(["tz-dropdown-item",{focus:t===m.value}]),onClick:t=>S(e),onMouseover:e=>E(t),autofocus:t===m.value},(0,o.zw)(e),43,Dn)))),128))],512)):(0,a.kq)("",!0)]))}});const Pn=(0,P.Z)(kn,[["__scopeId","data-v-47ea2903"]]);var Ln=Pn;const Mn={id:"user-preferences-edition"},bn={class:"profile-form form-box"},yn=["onSubmit"],Gn={class:"form-items"},Fn=["disabled"],Wn=["value"],Kn={class:"form-items"},Yn={class:"form-items"},xn=["disabled"],$n=["value"],Bn={class:"form-items form-checkboxes"},Zn={class:"checkboxes-label"},Hn={class:"checkboxes"},qn=["id","name","checked","disabled","onInput"],Vn={class:"checkbox-label"},jn={class:"form-items form-checkboxes"},Xn={class:"checkboxes-label"},Jn={class:"checkboxes"},Qn=["id","name","checked","disabled","onInput"],er={class:"checkbox-label"},tr={class:"form-items form-checkboxes"},nr={class:"checkboxes-label"},rr={class:"checkboxes"},ar=["id","name","checked","disabled","onInput"],or={class:"checkbox-label"},sr={class:"form-buttons"},ir={class:"confirm",type:"submit"};var lr=(0,a.aZ)({__name:"UserPreferencesEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({display_ascent:!0,imperial_units:!1,language:"",timezone:"Europe/Paris",date_format:"dd/MM/yyyy",weekm:!1}),u=[{label:"SUNDAY",value:!1},{label:"MONDAY",value:!0}],d=[{label:"METRIC",value:!1},{label:"IMPERIAL",value:!0}],m=[{label:"DISPLAYED",value:!0},{label:"HIDDEN",value:!1}],_=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),E=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),S=(0,a.Fl)((()=>(0,Ye.d2)((new Date).toUTCString(),t.user.timezone,r.language)));function T(e){r.display_ascent=e.display_ascent,r.imperial_units=!!e.imperial_units&&e.imperial_units,r.language=e.language?e.language:"en",r.timezone=e.timezone?e.timezone:"Europe/Paris",r.date_format=e.date_format?e.date_format:"dd/MM/yyyy",r.weekm=!!e.weekm&&e.weekm}function p(){n.dispatch(l.YN.ACTIONS.UPDATE_USER_PREFERENCES,r)}function A(e){r.timezone=e}function O(e){r.display_ascent=e}function R(e){r.imperial_units=e}function I(e){r.weekm=e}return(0,a.bv)((()=>{t.user&&T(t.user)})),(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",Mn,[(0,a._)("div",bn,[(0,i.SU)(E)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(E)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("form",{onSubmit:(0,s.iM)(p,["prevent"])},[(0,a._)("label",Gn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LANGUAGE"))+" ",1),(0,a.wy)((0,a._)("select",{id:"language","onUpdate:modelValue":t[0]||(t[0]=e=>r.language=e),disabled:(0,i.SU)(_)},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(zt.mT),(e=>((0,a.wg)(),(0,a.iD)("option",{value:e.value,key:e.value},(0,o.zw)(e.label),9,Wn)))),128))],8,Fn),[[s.bM,r.language]])]),(0,a._)("label",Kn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.TIMEZONE"))+" ",1),(0,a.Wm)(Ln,{input:r.timezone,disabled:(0,i.SU)(_),onUpdateTimezone:A},null,8,["input","disabled"])]),(0,a._)("label",Yn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.DATE_FORMAT"))+" ",1),(0,a.wy)((0,a._)("select",{id:"date_format","onUpdate:modelValue":t[1]||(t[1]=e=>r.date_format=e),disabled:(0,i.SU)(_)},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(e=>((0,a.wg)(),(0,a.iD)("option",{value:e.value,key:e.value},(0,o.zw)(e.label),9,$n)))),128))],8,xn),[[s.bM,r.date_format]])]),(0,a._)("div",Bn,[(0,a._)("span",Zn,(0,o.zw)(e.$t("user.PROFILE.FIRST_DAY_OF_WEEK")),1),(0,a._)("div",Hn,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(u,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.weekm,disabled:(0,i.SU)(_),onInput:e=>I(t.value)},null,40,qn),(0,a._)("span",Vn,(0,o.zw)(e.$t(`user.PROFILE.${t.label}`)),1)]))),64))])]),(0,a._)("div",jn,[(0,a._)("span",Xn,(0,o.zw)(e.$t("user.PROFILE.UNITS.LABEL")),1),(0,a._)("div",Jn,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(d,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.imperial_units,disabled:(0,i.SU)(_),onInput:e=>R(t.value)},null,40,Qn),(0,a._)("span",er,(0,o.zw)(e.$t(`user.PROFILE.UNITS.${t.label}`)),1)]))),64))])]),(0,a._)("div",tr,[(0,a._)("span",nr,(0,o.zw)(e.$t("user.PROFILE.ASCENT_DATA")),1),(0,a._)("div",rr,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(m,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.display_ascent,disabled:(0,i.SU)(_),onInput:e=>O(t.value)},null,40,ar),(0,a._)("span",or,(0,o.zw)(e.$t(`common.${t.label}`)),1)]))),64))])]),(0,a._)("div",sr,[(0,a._)("button",ir,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[2]||(t[2]=(0,s.iM)((t=>e.$router.push("/profile/preferences")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,yn)])])}}});const cr=(0,P.Z)(lr,[["__scopeId","data-v-065d5e6c"]]);var ur=cr;const dr=["profile:read","profile:write","users:read","users:write","workouts:read","workouts:write"],mr=["application:write"],_r={id:"new-oauth2-app"},Er={id:"new-oauth2-title"},Sr={id:"apps-form"},Tr=["onSubmit"],pr={class:"form-items"},Ar={class:"form-item"},Or={for:"app-name"},Rr={class:"form-item"},Ir={for:"app-description"},Ur={class:"form-item"},gr={for:"app-url"},Nr={class:"form-item"},hr={for:"app-redirect-uri"},zr={class:"form-item-scope"},wr={class:"form-item-scope-label"},fr={class:"scope-label"},vr=["name","checked","onChange"],Cr=["innerHTML"],Dr={class:"form-buttons"},kr=["disabled"];var Pr=(0,a.aZ)({__name:"AddUserApp",props:{authUser:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({client_name:"",client_uri:"",client_description:"",redirect_uri:""}),u=(0,i.qj)([]),d=(0,a.Fl)((()=>S(t.authUser,mr,dr)));function m(){const e={client_name:r.client_name,client_description:r.client_description,client_uri:r.client_uri,redirect_uris:[r.redirect_uri],scope:u.sort().join(" ")};n.dispatch(l.Km.ACTIONS.CREATE_CLIENT,e)}function _(e){r.client_description=e}function E(e){const t=u.indexOf(e);t>-1?u.splice(t,1):u.push(e)}function S(e,t,n){const r=[...n];return e.admin&&r.push(...t),r.sort()}return(e,t)=>{const n=(0,a.up)("CustomTextArea");return(0,a.wg)(),(0,a.iD)("div",_r,[(0,a._)("h1",Er,(0,o.zw)(e.$t("oauth2.ADD_A_NEW_APP")),1),(0,a._)("div",Sr,[(0,a._)("form",{onSubmit:(0,s.iM)(m,["prevent"])},[(0,a._)("div",pr,[(0,a._)("div",Ar,[(0,a._)("label",Or,(0,o.zw)(e.$t("oauth2.APP.NAME"))+"*",1),(0,a.wy)((0,a._)("input",{id:"app-name",type:"text",required:"","onUpdate:modelValue":t[0]||(t[0]=e=>r.client_name=e)},null,512),[[s.nr,r.client_name]])]),(0,a._)("div",Rr,[(0,a._)("label",Ir,(0,o.zw)(e.$t("oauth2.APP.DESCRIPTION")),1),(0,a.Wm)(n,{name:"app-description",charLimit:200,input:r.description,onUpdateValue:_},null,8,["input"])]),(0,a._)("div",Ur,[(0,a._)("label",gr,(0,o.zw)(e.$t("oauth2.APP.URL"))+"*",1),(0,a.wy)((0,a._)("input",{id:"app-url",type:"text",required:"","onUpdate:modelValue":t[1]||(t[1]=e=>r.client_uri=e)},null,512),[[s.nr,r.client_uri]])]),(0,a._)("div",Nr,[(0,a._)("label",hr,(0,o.zw)(e.$t("oauth2.APP.REDIRECT_URL"))+"* ",1),(0,a.wy)((0,a._)("input",{id:"app-redirect-uri",type:"text",required:"","onUpdate:modelValue":t[2]||(t[2]=e=>r.redirect_uri=e)},null,512),[[s.nr,r.redirect_uri]])]),(0,a._)("div",zr,[(0,a._)("div",wr,(0,o.zw)(e.$t("oauth2.APP.SCOPE.LABEL"))+"* ",1),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(d),(t=>((0,a.wg)(),(0,a.iD)("div",{class:"form-item-scope-checkboxes",key:t},[(0,a._)("label",fr,[(0,a._)("input",{type:"checkbox",name:t,checked:u.includes(t),onChange:e=>E(t)},null,40,vr),(0,a._)("code",null,(0,o.zw)(t),1)]),(0,a._)("p",{class:"scope-description",innerHTML:e.$t(`oauth2.APP.SCOPE.${t}_DESCRIPTION`)},null,8,Cr)])))),128))])]),(0,a._)("div",Dr,[(0,a._)("button",{class:"confirm",type:"submit",disabled:0===u.length},(0,o.zw)(e.$t("buttons.SUBMIT")),9,kr),(0,a._)("button",{class:"cancel",onClick:t[3]||(t[3]=(0,s.iM)((()=>e.$router.push("/profile/apps")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,Tr)])])}}});const Lr=(0,P.Z)(Pr,[["__scopeId","data-v-0657ee77"]]);var Mr=Lr;const br={id:"authorize-oauth2-app"},yr={key:0},Gr={id:"authorize-oauth2-title"},Fr={class:"oauth2-access description-list"},Wr={class:"client-scope"},Kr=["innerHTML"],Yr={class:"authorize-oauth2-buttons"},xr={key:1},$r={class:"no-app"};var Br=(0,a.aZ)({__name:"AuthorizeUserApp",setup(e){const t=(0,r.yj)(),n=(0,c.o)(),s=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENT])),u=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function d(){t.query.client_id&&"string"===typeof t.query.client_id&&n.dispatch(l.Km.ACTIONS.GET_CLIENT_BY_CLIENT_ID,t.query.client_id)}function m(){n.dispatch(l.Km.ACTIONS.AUTHORIZE_CLIENT,{client_id:`${t.query.client_id}`,redirect_uri:`${t.query.redirect_uri}`,response_type:`${t.query.response_type}`,scope:`${t.query.scope}`,state:`${t.query.state?t.query.state:""}`,code_challenge:`${t.query.code_challenge?t.query.code_challenge:""}`,code_challenge_method:`${t.query.code_challenge_method?t.query.code_challenge_method:""}`})}return(0,a.wF)((()=>d())),(e,t)=>{const n=(0,a.up)("router-link"),r=(0,a.up)("i18n-t"),l=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",br,[(0,i.SU)(s).client_id?((0,a.wg)(),(0,a.iD)("div",yr,[(0,a._)("h1",Gr,[(0,a.Wm)(r,{keypath:"oauth2.AUTHORIZE_APP"},{default:(0,a.w5)((()=>[(0,a.Wm)(n,{to:{name:"UserApp",params:{id:(0,i.SU)(s).id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(s).name),1)])),_:1},8,["to"])])),_:1})]),(0,i.SU)(u)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(u)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("div",Fr,[(0,a._)("p",null,(0,o.zw)(e.$t("oauth2.APP_REQUESTING_ACCESS")),1),(0,a._)("dl",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(s).scope.split(" "),(t=>((0,a.wg)(),(0,a.iD)(a.HY,{key:t},[(0,a._)("dt",Wr,[(0,a._)("code",null,(0,o.zw)(t),1)]),(0,a._)("dd",{innerHTML:e.$t(`oauth2.APP.SCOPE.${t}_DESCRIPTION`)},null,8,Kr)],64)))),128))]),(0,a._)("div",Yr,[(0,a._)("button",{class:"danger",onClick:m},(0,o.zw)(e.$t("buttons.AUTHORIZE")),1),(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])])])):((0,a.wg)(),(0,a.iD)("div",xr,[(0,a._)("p",$r,(0,o.zw)(e.$t("oauth2.NO_APP")),1),(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)]))])}}});const Zr=(0,P.Z)(Br,[["__scopeId","data-v-3b2fe9ed"]]);var Hr=Zr;const qr={id:"oauth2-apps"};var Vr=(0,a.aZ)({__name:"index",props:{user:null},setup(e){const t=e,n=(0,c.o)(),{user:r}=(0,i.BK)(t);return(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),n.commit(l.Km.MUTATIONS.SET_CLIENTS,[])})),(e,t)=>{const n=(0,a.up)("router-view");return(0,a.wg)(),(0,a.iD)("div",qr,[(0,a.Wm)(n,{authUser:(0,i.SU)(r)},null,8,["authUser"])])}}});const jr=Vr;var Xr=jr;const Jr={id:"oauth2-app",class:"description-list"},Qr={key:1},ea={key:0,class:"info-box success-message"},ta=["title"],na={key:0},ra={key:1,class:"app-secret"},aa=["title"],oa={class:"client-scopes"},sa={class:"app-buttons"},ia={key:2},la={class:"no-app"};var ca=(0,a.aZ)({__name:"UserApp",props:{authUser:null,afterCreation:{type:Boolean,default:!1}},setup(e){const t=e,n=(0,r.yj)(),s=(0,c.o)(),{afterCreation:u,authUser:d}=(0,i.BK)(t),m=(0,a.Fl)((()=>s.getters[l.Km.GETTERS.CLIENT])),_=(0,a.Fl)((()=>s.getters[l.Km.GETTERS.REVOCATION_SUCCESSFUL])),E=(0,i.iH)(!1),S=(0,i.iH)(null),T=(0,i.iH)(!1),p=(0,i.iH)(!1),A=(0,i.iH)(!1);function O(){!u.value&&n.params.id&&"string"===typeof n.params.id&&s.dispatch(l.Km.ACTIONS.GET_CLIENT_BY_ID,+n.params.id)}function R(e){S.value=e?"oauth2.APP_DELETION_CONFIRMATION":"oauth2.TOKENS_REVOCATION_CONFIRMATION",I(!0)}function I(e){E.value=e,e||(S.value=null)}function U(e){"oauth2.APP_DELETION_CONFIRMATION"===S.value?s.dispatch(l.Km.ACTIONS.DELETE_CLIENT,e):s.dispatch(l.Km.ACTIONS.REVOKE_ALL_TOKENS,e)}function g(){navigator.clipboard.writeText(m.value.client_id),T.value=!0,p.value=!1,setTimeout((()=>{T.value=!1}),3e3)}function N(){m.value.client_secret&&(navigator.clipboard.writeText(m.value.client_secret),p.value=!0,T.value=!1,setTimeout((()=>{p.value=!1}),3e3))}return(0,a.wF)((()=>{O(),navigator.clipboard&&(A.value=!0)})),(0,a.Ah)((()=>{s.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),s.commit(l.Km.MUTATIONS.EMPTY_CLIENT),s.commit(l.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!1)})),(0,a.YP)((()=>_.value),(e=>{e&&I(!1)})),(e,t)=>{const n=(0,a.up)("Modal");return(0,a.wg)(),(0,a.iD)("div",Jr,[E.value?((0,a.wg)(),(0,a.j4)(n,{key:0,title:e.$t("common.CONFIRMATION"),message:e.$t(S.value),onConfirmAction:t[0]||(t[0]=e=>U((0,i.SU)(m).id)),onCancelAction:t[1]||(t[1]=e=>I(!1))},null,8,["title","message"])):(0,a.kq)("",!0),(0,i.SU)(m)&&(0,i.SU)(m).client_id?((0,a.wg)(),(0,a.iD)("div",Qr,[(0,i.SU)(u)||(0,i.SU)(_)?((0,a.wg)(),(0,a.iD)("div",ea,(0,o.zw)(e.$t((0,i.SU)(u)?"oauth2.APP_CREATED_SUCCESSFULLY":"oauth2.TOKENS_REVOKED")),1)):(0,a.kq)("",!0),(0,a._)("dl",null,[(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.CLIENT_ID"))+":",1),(0,a._)("dd",null,[(0,a.Uk)((0,o.zw)((0,i.SU)(m).client_id)+" ",1),(0,i.SU)(u)&&A.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:(0,o.C_)("fa fa-"+(T.value?"check":"copy")),"aria-hidden":"true",title:e.$t("oauth2.COPY_TO_CLIPBOARD"),onClick:g},null,10,ta)):(0,a.kq)("",!0)]),(0,i.SU)(u)&&(0,i.SU)(m).client_secret?((0,a.wg)(),(0,a.iD)("dt",na,(0,o.zw)(e.$t("oauth2.APP.CLIENT_SECRET"))+": ",1)):(0,a.kq)("",!0),(0,i.SU)(u)&&(0,i.SU)(m).client_secret?((0,a.wg)(),(0,a.iD)("dd",ra,[(0,a.Uk)((0,o.zw)((0,i.SU)(m).client_secret)+" ",1),A.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:(0,o.C_)("fa fa-"+(p.value?"check":"copy")),"aria-hidden":"true",title:e.$t("oauth2.COPY_TO_CLIPBOARD"),onClick:N},null,10,aa)):(0,a.kq)("",!0)])):(0,a.kq)("",!0),(0,a._)("dt",null,(0,o.zw)((0,o.kC)(e.$t("oauth2.APP.ISSUE_AT")))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(Ye.p6)((0,i.SU)(m).issued_at,(0,i.SU)(d).timezone,(0,i.SU)(d).date_format)),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.NAME"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).name),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.DESCRIPTION"))+":",1),(0,a._)("dd",{class:(0,o.C_)({"no-description":!(0,i.SU)(m).client_description})},(0,o.zw)((0,i.SU)(m).client_description?(0,i.SU)(m).client_description:e.$t("oauth2.NO_DESCRIPTION")),3),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.URL"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).website),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.REDIRECT_URL"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).redirect_uris.length>0?(0,i.SU)(m).redirect_uris[0]:""),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.SCOPE.LABEL"))+":",1),(0,a._)("dd",oa,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(m).scope.split(" "),(e=>((0,a.wg)(),(0,a.iD)("span",{class:"client-scope",key:e},[(0,a._)("code",null,(0,o.zw)(e),1)])))),128))])]),(0,a._)("div",sa,[(0,a._)("button",{class:"danger",onClick:t[2]||(t[2]=e=>R(!1))},(0,o.zw)(e.$t("oauth2.REVOKE_ALL_TOKENS")),1),(0,a._)("button",{class:"danger",onClick:t[3]||(t[3]=e=>R(!0))},(0,o.zw)(e.$t("oauth2.DELETE_APP")),1),(0,a._)("button",{onClick:t[4]||(t[4]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)])])):((0,a.wg)(),(0,a.iD)("div",ia,[(0,a._)("p",la,(0,o.zw)(e.$t("oauth2.NO_APP")),1),(0,a._)("button",{onClick:t[5]||(t[5]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)]))])}}});const ua=(0,P.Z)(ca,[["__scopeId","data-v-3a844fa2"]]);var da=ua;const ma={id:"oauth2-apps-list"},_a={class:"apps-list"},Ea={key:0},Sa={class:"app-issued-at"},Ta={key:1,class:"no-apps"},pa={class:"app-list-buttons"};var Aa=(0,a.aZ)({__name:"UserAppsList",props:{authUser:null},setup(e){const t=e,n=(0,c.o)(),s=(0,r.yj)(),{authUser:u}=(0,i.BK)(t),d=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENTS])),m=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENTS_PAGINATION]));let _=E(s.query);function E(e){const t={};return e.page&&(t.page=(0,Ke.z_)(e.page,Ke.Hf)),t}function S(e){n.dispatch(l.Km.ACTIONS.GET_CLIENTS,e)}return(0,a.wF)((()=>{S(_)})),(0,a.YP)((()=>s.query),(async e=>{_=E(e),S(_)})),(e,t)=>{const n=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("div",ma,[(0,a._)("p",_a,(0,o.zw)(e.$t("oauth2.APPS_LIST")),1),(0,i.SU)(d).length>0?((0,a.wg)(),(0,a.iD)("ul",Ea,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(d),(t=>((0,a.wg)(),(0,a.iD)("li",{key:t.client_id},[(0,a.Wm)(n,{to:{name:"UserApp",params:{id:t.id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.name),1)])),_:2},1032,["to"]),(0,a._)("span",Sa,(0,o.zw)(e.$t("oauth2.APP.ISSUE_AT"))+" "+(0,o.zw)((0,i.SU)(Ye.p6)(t.issued_at,(0,i.SU)(u).timezone,(0,i.SU)(u).date_format)),1)])))),128))])):((0,a.wg)(),(0,a.iD)("div",Ta,(0,o.zw)(e.$t("oauth2.NO_APPS")),1)),(0,i.SU)(d).length>0?((0,a.wg)(),(0,a.j4)(Pe.Z,{key:2,pagination:(0,i.SU)(m),path:"/profile/apps",query:(0,i.SU)(_)},null,8,["pagination","query"])):(0,a.kq)("",!0),(0,a._)("div",pa,[(0,a._)("button",{onClick:t[0]||(t[0]=t=>e.$router.push("/profile/apps/new"))},(0,o.zw)(e.$t("oauth2.NEW_APP")),1),(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)])])}}});const Oa=(0,P.Z)(Aa,[["__scopeId","data-v-efa45ea0"]]);var Ra=Oa;const Ia={id:"user-sport-preferences"},Ua={key:0,class:"responsive-table"},ga={class:"mobile-display"},Na={key:0,class:"profile-buttons mobile-display"},ha={key:1,class:"profile-buttons"},za={class:"text-left"},wa={key:0},fa={class:"cell-heading"},va=["value"],Ca={class:"cell-heading"},Da={key:0,class:"disabled-message"},ka={key:1,class:"fa fa-refresh fa-spin fa-fw"},Pa={class:"cell-heading"},La={class:"cell-heading"},Ma=["checked"],ba={class:"cell-heading"},ya=["value"],Ga={key:1},Fa={key:0,class:"action-buttons"},Wa={class:"cell-heading"},Ka=["onClick"],Ya={key:1,class:"edition-buttons"},xa=["disabled"],$a=["disabled","onClick"],Ba=["disabled"],Za={key:0,class:"profile-buttons"},Ha={key:1,class:"profile-buttons"};var qa=(0,a.aZ)({__name:"UserSportPreferences",props:{user:null,isEdition:{type:Boolean}},setup(e){const t=e,n=(0,c.o)(),{t:r}=(0,ie.QT)(),{isEdition:u,user:d}=(0,i.BK)(t),m="#838383",_=(0,a.f3)("sportColors"),E=(0,a.Fl)((()=>n.getters[l.O8.GETTERS.SPORTS])),S=(0,a.Fl)((()=>(0,le.xH)(E.value,r,"is_active",d.value.sports_list))),T=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),p=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),A=(0,i.qj)({sport_id:0,color:null,is_active:!0,stopped_speed_threshold:1});function O(e){null!==e?(A.sport_id=e.id,A.color=e.color?e.color:_?_[e.label]:m,A.is_active=e.is_active_for_user,A.stopped_speed_threshold=e.stopped_speed_threshold):N()}function R(e){return A.sport_id===e}function I(e){A.color=e.target.value}function U(e){A.stopped_speed_threshold=parseFloat(e.target.value)}function g(e){A.is_active=e.target.checked}function N(){A.sport_id=0,A.color=null,A.is_active=!0,A.stopped_speed_threshold=1,n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)}function h(e){e.preventDefault(),n.dispatch(l.YN.ACTIONS.UPDATE_USER_SPORT_PREFERENCES,A)}function z(e,t){e.preventDefault(),n.dispatch(l.YN.ACTIONS.RESET_USER_SPORT_PREFERENCES,t)}return(0,a.YP)((()=>T.value),(e=>{e||p.value||N()})),(e,t)=>{const n=(0,a.up)("SportImage"),r=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",Ia,[(0,i.SU)(E).length>0?((0,a.wg)(),(0,a.iD)("div",Ua,[(0,a._)("div",ga,[(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("div",Na,[(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/profile/sports")),["prevent"]))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,a.wg)(),(0,a.iD)("div",ha,[(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/profile/edit/sports"))},(0,o.zw)(e.$t("user.PROFILE.EDIT_SPORTS_PREFERENCES")),1),(0,a._)("button",{onClick:t[2]||(t[2]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))]),(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.COLOR")),1),(0,a._)("th",za,(0,o.zw)(e.$t("workouts.SPORT",0)),1),(0,a._)("th",null,(0,o.zw)(e.$t("workouts.WORKOUT",0)),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.IS_ACTIVE")),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD")),1),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("th",wa,(0,o.zw)(e.$t("user.PROFILE.SPORT.ACTION")),1)):(0,a.kq)("",!0)])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(s=>((0,a.wg)(),(0,a.iD)("tr",{key:s.id},[(0,a._)("td",null,[(0,a._)("span",fa,(0,o.zw)(e.$t("user.PROFILE.SPORT.COLOR")),1),R(s.id)?((0,a.wg)(),(0,a.iD)("input",{key:0,class:"sport-color",type:"color",value:A.color,onInput:I},null,40,va)):((0,a.wg)(),(0,a.j4)(n,{key:1,title:s.translatedLabel,"sport-label":s.label,color:s.color?s.color:(0,i.SU)(_)[s.label]},null,8,["title","sport-label","color"]))]),(0,a._)("td",{class:(0,o.C_)(["sport-label",{"disabled-sport":!s.is_active}])},[(0,a._)("span",Ca,(0,o.zw)(e.$t("user.PROFILE.SPORT.LABEL")),1),(0,a.Uk)(" "+(0,o.zw)(s.translatedLabel)+" ",1),s.is_active?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("span",Da," ("+(0,o.zw)(e.$t("user.PROFILE.SPORT.DISABLED_BY_ADMIN"))+") ",1)),(0,i.SU)(T)&&R(s.id)?((0,a.wg)(),(0,a.iD)("i",ka)):(0,a.kq)("",!0),(0,i.SU)(p)&&A.sport_id===s.id?((0,a.wg)(),(0,a.j4)(r,{key:2,message:(0,i.SU)(p)},null,8,["message"])):(0,a.kq)("",!0)],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",Pa,(0,o.zw)(e.$t("workouts.WORKOUT",0)),1),(0,a._)("i",{class:(0,o.C_)("fa fa"+((0,i.SU)(d).sports_list.includes(s.id)?"-check":"")),"aria-hidden":"true"},null,2)],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",La,(0,o.zw)(e.$t("user.PROFILE.SPORT.IS_ACTIVE")),1),R(s.id)&&s.is_active?((0,a.wg)(),(0,a.iD)("input",{key:0,type:"checkbox",checked:s.is_active_for_user,onChange:g},null,40,Ma)):((0,a.wg)(),(0,a.iD)("i",{key:1,class:(0,o.C_)("fa fa"+(s.is_active_for_user?"-check":"")),"aria-hidden":"true"},null,2))],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",ba,(0,o.zw)(e.$t("user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD")),1),R(s.id)&&s.is_active?((0,a.wg)(),(0,a.iD)("input",{key:0,class:"threshold-input",type:"number",min:"0",step:"0.1",value:A.stopped_speed_threshold,onInput:U},null,40,ya)):((0,a.wg)(),(0,a.iD)("span",Ga,(0,o.zw)(s.stopped_speed_threshold),1))],2),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("td",Fa,[(0,a._)("span",Wa,(0,o.zw)(e.$t("user.PROFILE.SPORT.ACTION")),1),0===A.sport_id?((0,a.wg)(),(0,a.iD)("button",{key:0,onClick:e=>O(s)},(0,o.zw)(e.$t("buttons.EDIT")),9,Ka)):(0,a.kq)("",!0),R(s.id)?((0,a.wg)(),(0,a.iD)("div",Ya,[(0,a._)("button",{disabled:(0,i.SU)(T),onClick:h},(0,o.zw)(e.$t("buttons.SUBMIT")),9,xa),(0,a._)("button",{disabled:(0,i.SU)(T),onClick:e=>z(e,s.id)},(0,o.zw)(e.$t("buttons.RESET")),9,$a),(0,a._)("button",{disabled:(0,i.SU)(T),onClick:t[3]||(t[3]=e=>O(null))},(0,o.zw)(e.$t("buttons.CANCEL")),9,Ba)])):(0,a.kq)("",!0)])):(0,a.kq)("",!0)])))),128))])]),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("div",Za,[(0,a._)("button",{class:"cancel",onClick:t[4]||(t[4]=(0,s.iM)((t=>e.$router.push("/profile/sports")),["prevent"]))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,a.wg)(),(0,a.iD)("div",Ha,[(0,a._)("button",{onClick:t[5]||(t[5]=t=>e.$router.push("/profile/edit/sports"))},(0,o.zw)(e.$t("user.PROFILE.EDIT_SPORTS_PREFERENCES")),1),(0,a._)("button",{onClick:t[6]||(t[6]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))])):(0,a.kq)("",!0)])}}});const Va=(0,P.Z)(qa,[["__scopeId","data-v-74e52489"]]);var ja=Va,Xa=n(2894);const Ja=e=>((0,a.dD)("data-v-74257266"),e=e(),(0,a.Cn)(),e),Qa={class:"about-text"},eo=["innerHTML"],to=Ja((()=>(0,a._)("i",{class:"fa fa-book fa-padding","aria-hidden":"true"},null,-1))),no={href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer"},ro=Ja((()=>(0,a._)("i",{class:"fa fa-github fa-padding","aria-hidden":"true"},null,-1))),ao={href:"https://github.com/SamR1/FitTrackee",target:"_blank",rel:"noopener noreferrer"},oo=Ja((()=>(0,a._)("i",{class:"fa fa-balance-scale fa-padding","aria-hidden":"true"},null,-1))),so=Ja((()=>(0,a._)("a",{href:"https://choosealicense.com/licenses/agpl-3.0/",target:"_blank",rel:"noopener noreferrer"}," AGPLv3 ",-1))),io={key:0},lo=Ja((()=>(0,a._)("i",{class:"fa fa-envelope-o fa-padding","aria-hidden":"true"},null,-1))),co=["href"];var uo=(0,a.aZ)({__name:"About",setup(e){const t=(0,c.o)(),n=(0,a.Fl)((()=>t.getters[l.SY.GETTERS.APP_CONFIG]));return(e,t)=>{const r=(0,a.up)("i18n-t");return(0,a.wg)(),(0,a.iD)("div",Qa,[(0,a._)("div",null,[(0,a._)("p",{class:"error-message",innerHTML:e.$t("about.FITTRACKEE_DESCRIPTION")},null,8,eo),(0,a._)("p",null,[to,(0,a._)("a",no,(0,o.zw)((0,o.kC)(e.$t("common.DOCUMENTATION"))),1)]),(0,a._)("p",null,[ro,(0,a._)("a",ao,(0,o.zw)(e.$t("about.SOURCE_CODE")),1)]),(0,a._)("p",null,[oo,(0,a.Wm)(r,{keypath:"about.FITTRACKEE_LICENSE"},{default:(0,a.w5)((()=>[so])),_:1})]),(0,i.SU)(n).admin_contact?((0,a.wg)(),(0,a.iD)("div",io,[lo,(0,a._)("a",{href:`mailto:${(0,i.SU)(n).admin_contact}`},(0,o.zw)(e.$t("about.CONTACT_ADMIN")),9,co)])):(0,a.kq)("",!0)])])}}});const mo=(0,P.Z)(uo,[["__scopeId","data-v-74257266"]]);var _o=mo;const Eo={id:"bike"},So=["src"];function To(e,t){return(0,a.wg)(),(0,a.iD)("div",Eo,[(0,a._)("img",{class:"bike-img",src:"/img/bike.svg",alt:"mountain bike"},null,8,So)])}const po={},Ao=(0,P.Z)(po,[["render",To],["__scopeId","data-v-795f7f5f"]]);var Oo=Ao;const Ro={id:"about",class:"view"},Io={class:"container"},Uo={class:"container-sub"},go={class:"container-sub about-details"};var No=(0,a.aZ)({__name:"AboutView",setup(e){return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ro,[(0,a._)("div",Io,[(0,a._)("div",Uo,[(0,a.Wm)(Oo)]),(0,a._)("div",go,[(0,a.Wm)(_o)])])]))}});const ho=(0,P.Z)(No,[["__scopeId","data-v-bffb50d0"]]);var zo=ho,wo=n(1818),fo=n(2056);const vo=e=>((0,a.dD)("data-v-96abcc38"),e=e(),(0,a.Cn)(),e),Co={class:"timeline-workout"},Do={class:"box"},ko={class:"workout-user-date"},Po={class:"workout-user"},Lo=["title"],Mo={key:0},bo={key:1,class:"no-map"},yo={class:"img"},Go={class:"data"},Fo=vo((()=>(0,a._)("i",{class:"fa fa-clock-o","aria-hidden":"true"},null,-1))),Wo={key:0},Ko={class:"data"},Yo=vo((()=>(0,a._)("i",{class:"fa fa-road","aria-hidden":"true"},null,-1))),xo={key:0,class:"data elevation"},$o=["alt"],Bo={class:"data-values"},Zo={key:1,class:"data altitude"},Ho=vo((()=>(0,a._)("i",{class:"fa fa-location-arrow","aria-hidden":"true"},null,-1))),qo={class:"data-values"};var Vo=(0,a.aZ)({__name:"WorkoutCard",props:{user:null,useImperialUnits:{type:Boolean},workout:{default:()=>({})},sport:{default:()=>({})}},setup(e){const t=e,n=(0,c.o)(),{user:r,workout:s,sport:u,useImperialUnits:d}=(0,i.BK)(t),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LOCALE]));return(e,t)=>{const n=(0,a.up)("router-link"),l=(0,a.up)("SportImage"),c=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",Co,[(0,a._)("div",Do,[(0,a._)("div",ko,[(0,a._)("div",Po,[(0,a.Wm)(Le.Z,{user:(0,i.SU)(r)},null,8,["user"]),(0,i.SU)(r).username?((0,a.wg)(),(0,a.j4)(n,{key:0,class:"workout-user-name",to:{name:"User",params:{username:(0,i.SU)(r).username}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(r).username),1)])),_:1},8,["to"])):(0,a.kq)("",!0)]),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(n,{key:0,class:"workout-title",to:{name:"Workout",params:{workoutId:(0,i.SU)(s).id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(s).title),1)])),_:1},8,["to"])):(0,a.kq)("",!0),(0,i.SU)(s).workout_date&&(0,i.SU)(r)?((0,a.wg)(),(0,a.iD)("div",{key:1,class:"workout-date",title:(0,i.SU)(Ye.p6)((0,i.SU)(s).workout_date,(0,i.SU)(r).timezone,(0,i.SU)(r).date_format)},(0,o.zw)((0,i.SU)(wo.Z)(new Date((0,i.SU)(s).workout_date),new Date,{addSuffix:!0,locale:(0,i.SU)(m)})),9,Lo)):(0,a.kq)("",!0)]),(0,a._)("div",{class:(0,o.C_)(["workout-map",{"no-cursor":!(0,i.SU)(s)}]),onClick:t[0]||(t[0]=t=>(0,i.SU)(s).id?e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(s).id}}):null)},[(0,i.SU)(s)?((0,a.wg)(),(0,a.iD)("div",Mo,[(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.j4)(fo.Z,{key:0,workout:(0,i.SU)(s)},null,8,["workout"])):((0,a.wg)(),(0,a.iD)("div",bo,(0,o.zw)(e.$t("workouts.NO_MAP")),1))])):(0,a.kq)("",!0)],2),(0,a._)("div",{class:(0,o.C_)(["workout-data",{"without-gpx":(0,i.SU)(s)&&!(0,i.SU)(s).with_gpx}]),onClick:t[1]||(t[1]=t=>(0,i.SU)(s).id?e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(s).id}}):null)},[(0,a._)("div",yo,[(0,i.SU)(u).label?((0,a.wg)(),(0,a.j4)(l,{key:0,"sport-label":(0,i.SU)(u).label,color:(0,i.SU)(u).color},null,8,["sport-label","color"])):(0,a.kq)("",!0)]),(0,a._)("div",Go,[Fo,(0,i.SU)(s)?((0,a.wg)(),(0,a.iD)("span",Wo,(0,o.zw)((0,i.SU)(s).moving),1)):(0,a.kq)("",!0)]),(0,a._)("div",Ko,[Yo,(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).distance,digits:3,unitFrom:"km",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)]),(0,i.SU)(s)&&(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.iD)("div",xo,[(0,a._)("img",{class:"mountains",src:"/img/workouts/mountains.svg",alt:e.$t("workouts.ELEVATION")},null,8,$o),(0,a._)("div",Bo,[(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).min_alt,unitFrom:"m",displayUnit:!1,useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0),(0,a.Uk)("/ "),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:1,distance:(0,i.SU)(s).max_alt,unitFrom:"m",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)])])):(0,a.kq)("",!0),(0,i.SU)(s)&&(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.iD)("div",Zo,[Ho,(0,a._)("div",qo,[(0,a.Uk)(" +"),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).ascent,unitFrom:"m",displayUnit:!1,useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0),(0,a.Uk)("/- "),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:1,distance:(0,i.SU)(s).descent,unitFrom:"m",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)])])):(0,a.kq)("",!0)],2)])])}}});const jo=(0,P.Z)(Vo,[["__scopeId","data-v-96abcc38"]]);var Xo=jo,Jo=n(5630),Qo=n(3768);const es={id:"timeline"},ts={class:"section-title"},ns={key:0},rs={key:1},as={key:1,class:"more-workouts"};var os=(0,a.aZ)({__name:"Timeline",props:{sports:null,user:null},setup(e){const t=e,n=(0,c.o)(),{sports:r,user:s}=(0,i.BK)(t),u=(0,i.iH)(1),d=5,m=t.user.nb_workouts>=d?d:t.user.nb_workouts;(0,a.wF)((()=>S()));const _=(0,a.Fl)((()=>n.getters[l.aX.GETTERS.TIMELINE_WORKOUTS])),E=(0,a.Fl)((()=>_.value.length>0&&null!==_.value[_.value.length-1].previous_workout));function S(){n.dispatch(l.aX.ACTIONS.GET_TIMELINE_WORKOUTS,{page:u.value,per_page:d,...Qo.eR})}function T(){u.value+=1,n.dispatch(l.aX.ACTIONS.GET_MORE_TIMELINE_WORKOUTS,{page:u.value,per_page:d,...Qo.eR})}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",es,[(0,a._)("div",ts,(0,o.zw)(e.$t("workouts.LATEST_WORKOUTS")),1),(0,i.SU)(s).nb_workouts>0&&0===(0,i.SU)(_).length?((0,a.wg)(),(0,a.iD)("div",ns,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)([...Array((0,i.SU)(m)).keys()],(e=>((0,a.wg)(),(0,a.j4)(Xo,{user:(0,i.SU)(s),useImperialUnits:(0,i.SU)(s).imperial_units,key:e},null,8,["user","useImperialUnits"])))),128))])):((0,a.wg)(),(0,a.iD)("div",rs,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(_),(e=>((0,a.wg)(),(0,a.j4)(Xo,{workout:e,sport:(0,i.SU)(_).length>0?(0,i.SU)(r).filter((t=>t.id===e.sport_id))[0]:null,user:(0,i.SU)(s),useImperialUnits:(0,i.SU)(s).imperial_units,key:e.id},null,8,["workout","sport","user","useImperialUnits"])))),128)),0===(0,i.SU)(_).length?((0,a.wg)(),(0,a.j4)(Jo.Z,{key:0})):(0,a.kq)("",!0),(0,i.SU)(E)?((0,a.wg)(),(0,a.iD)("div",as,[(0,a._)("button",{onClick:T},(0,o.zw)(e.$t("workouts.LOAD_MORE_WORKOUT")),1)])):(0,a.kq)("",!0)]))]))}});const ss=(0,P.Z)(os,[["__scopeId","data-v-35567bf2"]]);var is=ss,ls=n(1640),cs=n(4559),us=n(7349),ds=n(1743),ms=n(9160),_s=n(1085);const Es=["title"];var Ss=(0,a.aZ)({__name:"CalendarWorkout",props:{displayHARecord:{type:Boolean},workout:null,sportLabel:null,sportColor:null},setup(e){const t=e,{displayHARecord:n,workout:r,sportLabel:o,sportColor:s}=(0,i.BK)(t);return(e,t)=>{const l=(0,a.up)("SportImage");return(0,a.wg)(),(0,a.iD)("div",{class:"calendar-workout",onClick:t[0]||(t[0]=t=>e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(r).id}}))},[(0,a.Wm)(l,{"sport-label":(0,i.SU)(o),title:(0,i.SU)(r).title,color:(0,i.SU)(s)},null,8,["sport-label","title","color"]),(0,a._)("sup",null,[(0,i.SU)(r).records.length>0?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-trophy custom-fa-small","aria-hidden":"true",title:(0,i.SU)(r).records.filter((e=>!!(0,i.SU)(n)||"HA"!==e.record_type)).map((t=>` ${e.$t(`workouts.RECORD_${t.record_type}`)}`))},null,8,Es)):(0,a.kq)("",!0)])])}}});const Ts=Ss;var ps=Ts;const As={class:"donut-chart"},Os={height:"34",width:"34",viewBox:"0 0 34 34"},Rs=["stroke","stroke-dashoffset","transform"];var Is=(0,a.aZ)({__name:"DonutChart",props:{colors:null,datasets:null},setup(e){const t=e,{colors:n,datasets:r}=(0,i.BK)(t);let o=-90;const s=16,l=16,c=14,u=2*Math.PI*c;function d(e,t){return t-e*t}function m(e,t){const n=`rotate(${o}, ${s}, ${l})`;return o=360*t+o,n}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",As,[((0,a.wg)(),(0,a.iD)("svg",Os,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(Object.entries((0,i.SU)(r)),((e,t)=>((0,a.wg)(),(0,a.iD)("g",{key:t},[(0,a._)("circle",{cx:s,cy:l,r:c,fill:"transparent",stroke:(0,i.SU)(n)[+e[0]],"stroke-dashoffset":d(e[1].percentage,u),"stroke-dasharray":u,"stroke-width":"3","stroke-opacity":"0.8",transform:m(t,e[1].percentage)},null,8,Rs)])))),128))]))]))}});const Us=Is;var gs=Us;const Ns={class:"calendar-workouts-chart"},hs={class:"workouts-count"},zs={key:0,class:"workouts-pane"},ws={class:"more-workouts"};var fs=(0,a.aZ)({__name:"CalendarWorkoutsChart",props:{colors:null,datasets:null,sports:null,workouts:null},setup(e){const t=e,{colors:n,datasets:r,sports:s,workouts:l}=(0,i.BK)(t),c=(0,i.iH)(!0);function u(e){e.stopPropagation(),c.value=!c.value}return(e,t)=>{const d=(0,a.Q2)("click-outside");return(0,a.wg)(),(0,a.iD)("div",Ns,[(0,a._)("div",{class:"workouts-chart",onClick:u},[(0,a._)("div",hs,(0,o.zw)((0,i.SU)(l).length),1),(0,a.Wm)(gs,{datasets:(0,i.SU)(r),colors:(0,i.SU)(n)},null,8,["datasets","colors"])]),c.value?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("div",zs,[(0,a.wy)(((0,a.wg)(),(0,a.iD)("div",ws,[(0,a._)("i",{class:"fa fa-times calendar-more","aria-hidden":"true",onClick:u}),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(l),((e,t)=>((0,a.wg)(),(0,a.j4)(ps,{key:t,workout:e,sportLabel:(0,i.SU)(le.PA)(e,(0,i.SU)(s)),sportColor:(0,i.SU)(le.CM)(e,(0,i.SU)(s))},null,8,["workout","sportLabel","sportColor"])))),128))])),[[d,u]])]))])}}});const vs=(0,P.Z)(fs,[["__scopeId","data-v-52d4310a"]]);var Cs=vs;const Ds={class:"calendar-workouts"},ks={class:"desktop-display"},Ps={key:0,class:"workouts-display"},Ls={key:1,class:"donut-display"},Ms={class:"mobile-display"},bs={key:0,class:"donut-display"};var ys=(0,a.aZ)({__name:"CalendarWorkouts",props:{displayHARecord:{type:Boolean},workouts:null,sports:null},setup(e){const t=e,{displayHARecord:n,workouts:r,sports:o}=(0,i.BK)(t),s=(0,a.Fl)((()=>(0,Qo.BN)(t.workouts))),l=(0,a.Fl)((()=>(0,le.Yx)(t.sports))),c=6;return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ds,[(0,a._)("div",ks,[(0,i.SU)(r).length<=c?((0,a.wg)(),(0,a.iD)("div",Ps,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(r).slice(0,c),((e,t)=>((0,a.wg)(),(0,a.j4)(ps,{key:t,displayHARecord:(0,i.SU)(n),workout:e,sportLabel:(0,i.SU)(le.PA)(e,(0,i.SU)(o)),sportColor:(0,i.SU)(le.CM)(e,(0,i.SU)(o))},null,8,["displayHARecord","workout","sportLabel","sportColor"])))),128))])):((0,a.wg)(),(0,a.iD)("div",Ls,[(0,a.Wm)(Cs,{workouts:(0,i.SU)(r),sports:(0,i.SU)(o),datasets:(0,i.SU)(s),colors:(0,i.SU)(l)},null,8,["workouts","sports","datasets","colors"])]))]),(0,a._)("div",Ms,[(0,i.SU)(r).length>0?((0,a.wg)(),(0,a.iD)("div",bs,[(0,a.Wm)(Cs,{workouts:(0,i.SU)(r),sports:(0,i.SU)(o),datasets:(0,i.SU)(s),colors:(0,i.SU)(l)},null,8,["workouts","sports","datasets","colors"])])):(0,a.kq)("",!0)])]))}});const Gs=ys;var Fs=Gs;const Ws={class:"calendar-cells"},Ks={class:"calendar-cell-day"};var Ys=(0,a.aZ)({__name:"CalendarCells",props:{currentDay:null,displayHARecord:{type:Boolean},endDate:null,sports:null,startDate:null,timezone:null,weekStartingMonday:{type:Boolean},workouts:null},setup(e){const t=e,{currentDay:n,displayHARecord:r,endDate:s,sports:l,startDate:c,timezone:u,weekStartingMonday:d,workouts:m}=(0,i.BK)(t),_=(0,i.iH)([]);function E(){_.value=[];let e=c.value;while(e<=s.value){const t=[];for(let n=0;n<7;n++)t.push(e),e=(0,us.Z)(e,1);_.value.push(t)}}function S(e){return d.value?[5,6].includes(e):[0,6].includes(e)}function T(e,t){return t?t.filter((t=>(0,ds.Z)((0,Ye.eB)(t.workout_date,u.value),e))).reverse():[]}return(0,a.bv)((()=>E())),(0,a.YP)((()=>t.currentDay),(()=>E())),(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ws,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(_.value,((e,t)=>((0,a.wg)(),(0,a.iD)("div",{class:"calendar-row",key:t},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(e,((e,t)=>((0,a.wg)(),(0,a.iD)("div",{class:(0,o.C_)(["calendar-cell",{"disabled-cell":!(0,i.SU)(ms.Z)(e,(0,i.SU)(n)),"week-end":S(t),today:(0,i.SU)(_s.Z)(e)}]),key:t},[(0,a.Wm)(Fs,{workouts:T(e,(0,i.SU)(m)),sports:(0,i.SU)(l),displayHARecord:(0,i.SU)(r)},null,8,["workouts","sports","displayHARecord"]),(0,a._)("div",Ks,(0,o.zw)((0,i.SU)(jt.Z)(e,"d")),1)],2)))),128))])))),128))]))}});const xs=Ys;var $s=xs;const Bs={class:"calendar-days"};var Zs=(0,a.aZ)({__name:"CalendarDays",props:{startDate:null,localeOptions:null},setup(e){const t=e,n=[];for(let r=0;r<7;r++)n.push((0,us.Z)(t.startDate,r));return(t,r)=>((0,a.wg)(),(0,a.iD)("div",Bs,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(n,((t,n)=>(0,a._)("div",{class:"calendar-day",key:n},(0,o.zw)((0,i.SU)(jt.Z)(t,"EEE",{locale:e.localeOptions})),1))),64))]))}});const Hs=Zs;var qs=Hs;const Vs={class:"calendar-header"},js=(0,a._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1),Xs=[js],Js={class:"calendar-month"},Qs=(0,a._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1),ei=[Qs];var ti=(0,a.aZ)({__name:"CalendarHeader",props:{day:null,localeOptions:null},emits:["displayNextMonth","displayPreviousMonth"],setup(e,{emit:t}){const n=e,{day:r,localeOptions:s}=(0,i.BK)(n);return(e,n)=>((0,a.wg)(),(0,a.iD)("div",Vs,[(0,a._)("div",{class:"calendar-arrow calendar-arrow-left",onClick:n[0]||(n[0]=e=>t("displayPreviousMonth"))},Xs),(0,a._)("div",Js,[(0,a._)("span",null,(0,o.zw)((0,i.SU)(jt.Z)((0,i.SU)(r),"MMM yyyy",{locale:(0,i.SU)(s)})),1)]),(0,a._)("div",{class:"calendar-arrow calendar-arrow-right",onClick:n[1]||(n[1]=e=>t("displayNextMonth"))},ei)]))}});const ni=ti;var ri=ni;const ai={id:"user-calendar"},oi={class:"calendar-card box"};var si=(0,a.aZ)({__name:"index",props:{sports:null,user:null},setup(e){const t=e,n=(0,c.o)(),{sports:r,user:o}=(0,i.BK)(t),s="yyyy-MM-dd",u=(0,i.iH)(new Date),d=(0,i.iH)((0,Ye.yx)(u.value,t.user.weekm)),m=(0,a.Fl)((()=>n.getters[l.aX.GETTERS.CALENDAR_WORKOUTS])),_=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LOCALE]));function E(){d.value=(0,Ye.yx)(u.value,t.user.weekm);const e={from:(0,jt.Z)(d.value.start,s),to:(0,jt.Z)(d.value.end,s),page:1,per_page:100,...Qo.eR};n.dispatch(l.aX.ACTIONS.GET_CALENDAR_WORKOUTS,e)}function S(){u.value=(0,ls.Z)(u.value,1),E()}function T(){u.value=(0,cs.Z)(u.value,1),E()}return(0,a.wF)((()=>E())),(e,t)=>((0,a.wg)(),(0,a.iD)("div",ai,[(0,a._)("div",oi,[(0,a.Wm)(ri,{day:u.value,"locale-options":(0,i.SU)(_),onDisplayNextMonth:S,onDisplayPreviousMonth:T},null,8,["day","locale-options"]),(0,a.Wm)(qs,{"start-date":d.value.start,"locale-options":(0,i.SU)(_)},null,8,["start-date","locale-options"]),(0,a.Wm)($s,{currentDay:u.value,displayHARecord:(0,i.SU)(o).display_ascent,"end-date":d.value.end,sports:(0,i.SU)(r),"start-date":d.value.start,timezone:(0,i.SU)(o).timezone,workouts:(0,i.SU)(m),weekStartingMonday:(0,i.SU)(o).weekm},null,8,["currentDay","displayHARecord","end-date","sports","start-date","timezone","workouts","weekStartingMonday"])])]))}});const ii=si;var li=ii,ci=n(3703),ui=n(4135),di=n(3170);const mi={class:"user-month-stats"};var _i=(0,a.aZ)({__name:"UserMonthStats",props:{sports:null,user:null},setup(e){const t=e,{sports:n,user:r}=(0,i.BK)(t),s=new Date,l={duration:"week",start:(0,ci.Z)(s),end:(0,ui.Z)(s)},c=t.sports.map((e=>e.id));return(e,t)=>{const s=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",mi,[(0,a.Wm)(s,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("dashboard.THIS_MONTH")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(di.Z,{sports:(0,i.SU)(n),user:(0,i.SU)(r),"chart-params":l,"displayed-sport-ids":(0,i.SU)(c),"hide-chart-if-no-data":!0},null,8,["sports","user","displayed-sport-ids"])])),_:1})])}}});const Ei=(0,P.Z)(_i,[["__scopeId","data-v-1bcddc12"]]);var Si=Ei,Ti=n(2540),pi=n(3649);const{locale:Ai}=Ti.Z.global,Oi=(e,t,n,r)=>{const a="km",o=n?pi.Dl[a].defaultTarget:a,s="m",i=n?pi.Dl[s].defaultTarget:s;let l;switch(e.record_type){case"AS":case"MS":l=`${(0,pi.sC)(+e.value,a,o,2)} ${o}/h`;break;case"FD":l=`${(0,pi.sC)(+e.value,a,o,3)} ${o}`;break;case"HA":l=`${(0,pi.sC)(+e.value,s,i,2)} ${i}`;break;case"LD":l=e.value;break;default:throw new Error(`Invalid record type, expected: "AS", "FD", "HA", "LD", "MD", got: "${e.record_type}"`)}return{workout_date:(0,Ye.p6)(e.workout_date,t,r,!1),workout_id:e.workout_id,id:e.id,record_type:e.record_type,value:l}},Ri=(e,t)=>{const n=e.label.toLowerCase(),r=t.label.toLowerCase();return n>r?1:n(o=(0,Ye.mh)(o,Ai.value),e.filter((e=>!!a||"HA"!==e.record_type)).reduce(((e,a)=>{const s=t.find((e=>e.id===a.sport_id));return s&&s.label&&(void 0===e[s.translatedLabel]&&(e[s.translatedLabel]={label:s.label,color:s.color,records:[]}),e[s.translatedLabel].records.push(Oi(a,n,r,o))),e}),{})),Ui={class:"records-card"},gi={class:"record-type"},Ni={class:"record-value"},hi={class:"record-date"};var zi=(0,a.aZ)({__name:"RecordsCard",props:{records:null,sportTranslatedLabel:null},setup(e){const t=e,{records:n,sportTranslatedLabel:r}=(0,i.BK)(t),{t:s}=(0,ie.QT)();function l(e){const t=[];return e.map((e=>{t.push({...e,label:s(`workouts.RECORD_${e.record_type}`)})})),t.sort(Ri)}return(e,t)=>{const s=(0,a.up)("SportImage"),c=(0,a.up)("router-link"),u=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",Ui,[(0,a.Wm)(u,null,{title:(0,a.w5)((()=>[(0,a.Wm)(s,{"sport-label":(0,i.SU)(n).label,color:(0,i.SU)(n).color},null,8,["sport-label","color"]),(0,a.Uk)(" "+(0,o.zw)((0,i.SU)(r)),1)])),content:(0,a.w5)((()=>[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(l((0,i.SU)(n).records),(e=>((0,a.wg)(),(0,a.iD)("div",{class:"record",key:e.id},[(0,a._)("span",gi,(0,o.zw)(e.label),1),(0,a._)("span",Ni,(0,o.zw)(e.value),1),(0,a._)("span",hi,[(0,a.Wm)(c,{to:{name:"Workout",params:{workoutId:e.workout_id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.workout_date),1)])),_:2},1032,["to"])])])))),128))])),_:1})])}}});const wi=(0,P.Z)(zi,[["__scopeId","data-v-8d17c606"]]);var fi=wi;const vi=e=>((0,a.dD)("data-v-f0c85cb8"),e=e(),(0,a.Cn)(),e),Ci={class:"user-records-section"},Di={class:"section-title"},ki=vi((()=>(0,a._)("i",{class:"fa fa-trophy custom-fa-small","aria-hidden":"true"},null,-1))),Pi={class:"user-records"},Li={key:0,class:"no-records"};var Mi=(0,a.aZ)({__name:"index",props:{sports:null,user:null},setup(e){const t=e,{t:n}=(0,ie.QT)(),r=(0,a.Fl)((()=>Ii(t.user.records,(0,le.xH)(t.sports,n),t.user.timezone,t.user.imperial_units,t.user.display_ascent,t.user.date_format)));return(t,n)=>((0,a.wg)(),(0,a.iD)("div",Ci,[(0,a._)("div",Di,[ki,(0,a.Uk)(" "+(0,o.zw)(t.$t("workouts.RECORD",2)),1)]),(0,a._)("div",Pi,[0===Object.keys((0,i.SU)(r)).length?((0,a.wg)(),(0,a.iD)("div",Li,(0,o.zw)(t.$t("workouts.NO_RECORDS")),1)):(0,a.kq)("",!0),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(Object.keys((0,i.SU)(r)).sort(),(t=>((0,a.wg)(),(0,a.j4)(fi,{sportTranslatedLabel:t,records:(0,i.SU)(r)[t],key:t,useImperialUnits:e.user.imperial_units},null,8,["sportTranslatedLabel","records","useImperialUnits"])))),128))])]))}});const bi=(0,P.Z)(Mi,[["__scopeId","data-v-f0c85cb8"]]);var yi=bi;const Gi={id:"user-stats"};var Fi=(0,a.aZ)({__name:"index",props:{user:null},setup(e){const t=e,{t:n}=(0,ie.QT)(),{user:r}=(0,i.BK)(t),o=(0,a.Fl)((()=>t.user.total_duration)),s=(0,a.Fl)((()=>E(o))),l="km",c=r.value.imperial_units?pi.Dl[l].defaultTarget:l,u=(0,a.Fl)((()=>r.value.imperial_units?(0,pi.sC)(r.value.total_distance,l,c,2):parseFloat(r.value.total_distance.toFixed(2)))),d="m",m=r.value.imperial_units?pi.Dl[d].defaultTarget:d,_=(0,a.Fl)((()=>r.value.imperial_units?(0,pi.sC)(r.value.total_ascent,d,m,2):parseFloat(r.value.total_ascent.toFixed(2))));function E(e){const t=e.value.match(/day/g)?e.value.split(", ")[1]:e.value;return{days:e.value.match(/day/g)?`${e.value.split(" ")[0]} ${e.value.match(/days/g)?n("common.DAY",2):n("common.DAY",1)}`:`0 ${n("common.DAY",2)},`,duration:`${t.split(":")[0]}h ${t.split(":")[1]}min`}}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Gi,[(0,a.Wm)($,{icon:"calendar",value:(0,i.SU)(r).nb_workouts,text:e.$t("workouts.WORKOUT",(0,i.SU)(r).nb_workouts)},null,8,["value","text"]),(0,a.Wm)($,{icon:"road",value:(0,i.SU)(u),text:"mi"===(0,i.SU)(c)?"miles":(0,i.SU)(c)},null,8,["value","text"]),(0,i.SU)(r).display_ascent?((0,a.wg)(),(0,a.j4)($,{key:0,icon:"location-arrow",value:(0,i.SU)(_),text:"ft"===(0,i.SU)(m)?"feet":(0,i.SU)(m)},null,8,["value","text"])):(0,a.kq)("",!0),(0,a.Wm)($,{icon:"clock-o",value:(0,i.SU)(s).days,text:(0,i.SU)(s).duration},null,8,["value","text"]),(0,i.SU)(r).display_ascent?(0,a.kq)("",!0):((0,a.wg)(),(0,a.j4)($,{key:1,icon:"tags",value:(0,i.SU)(r).nb_sports,text:e.$t("workouts.SPORT",(0,i.SU)(r).nb_sports)},null,8,["value","text"]))]))}});const Wi=Fi;var Ki=Wi;const Yi=e=>((0,a.dD)("data-v-4c0893c1"),e=e(),(0,a.Cn)(),e),xi={key:0,id:"dashboard",class:"view"},$i={class:"container mobile-menu"},Bi={class:"box"},Zi=Yi((()=>(0,a._)("i",{class:"fa fa-calendar","aria-hidden":"true"},null,-1))),Hi=[Zi],qi=Yi((()=>(0,a._)("i",{class:"fa fa-bar-chart","aria-hidden":"true"},null,-1))),Vi=[qi],ji=Yi((()=>(0,a._)("i",{class:"fa fa-map-o","aria-hidden":"true"},null,-1))),Xi=[ji],Ji=Yi((()=>(0,a._)("i",{class:"fa fa-trophy","aria-hidden":"true"},null,-1))),Qi=[Ji],el={class:"container"},tl={class:"container dashboard-container"},nl={class:"left-container dashboard-sub-container"},rl={class:"right-container dashboard-sub-container"},al=Yi((()=>(0,a._)("div",{id:"bottom"},null,-1))),ol={key:1,class:"app-loading"};var sl=(0,a.aZ)({__name:"Dashboard",setup(e){const t=(0,c.o)(),n=(0,a.Fl)((()=>t.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),r=(0,a.Fl)((()=>t.getters[l.O8.GETTERS.SPORTS])),s=(0,i.iH)("calendar");function u(e){s.value=e}return(0,a.wF)((()=>t.dispatch(l.YN.ACTIONS.GET_USER_PROFILE))),(e,t)=>{const l=(0,a.up)("Loader");return(0,i.SU)(n).username&&(0,i.SU)(r).length>0?((0,a.wg)(),(0,a.iD)("div",xi,[(0,a._)("div",$i,[(0,a._)("div",Bi,[(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"calendar"===s.value}]),onClick:t[0]||(t[0]=e=>u("calendar"))},Hi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"chart"===s.value}]),onClick:t[1]||(t[1]=e=>u("chart"))},Vi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"timeline"===s.value}]),onClick:t[2]||(t[2]=e=>u("timeline"))},Xi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"records"===s.value}]),onClick:t[3]||(t[3]=e=>u("records"))},Qi,2)])]),(0,a._)("div",el,[(0,a.Wm)(Ki,{user:(0,i.SU)(n)},null,8,["user"])]),(0,a._)("div",tl,[(0,a._)("div",nl,[(0,a.Wm)(Si,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("chart"===s.value)})},null,8,["sports","user","class"]),(0,a.Wm)(yi,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("records"===s.value)})},null,8,["sports","user","class"])]),(0,a._)("div",rl,[(0,a.Wm)(li,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("calendar"===s.value)})},null,8,["sports","user","class"]),(0,a.Wm)(is,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("timeline"===s.value)})},null,8,["sports","user","class"])])]),al])):((0,a.wg)(),(0,a.iD)("div",ol,[(0,a.Wm)(l)]))}}});const il=(0,P.Z)(sl,[["__scopeId","data-v-4c0893c1"]]);var ll=il,cl=n(8273);const ul={class:"not-found view"};var dl=(0,a.aZ)({__name:"NotFoundView",setup(e){return(e,t)=>((0,a.wg)(),(0,a.iD)("div",ul,[(0,a.Wm)(cl.Z)]))}});const ml=dl;var _l=ml,El=n(2411);const Sl={id:"loginOrRegister",class:"view"},Tl={class:"container"},pl={class:"container-sub"},Al={class:"container-sub"};var Ol=(0,a.aZ)({__name:"LoginOrRegister",props:{action:null},setup(e){const t=e,{action:n}=(0,i.BK)(t);return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Sl,[(0,a._)("div",Tl,[(0,a._)("div",pl,[(0,a.Wm)(Oo)]),(0,a._)("div",Al,[(0,a.Wm)(El.Z,{action:(0,i.SU)(n)},null,8,["action"])])])]))}});const Rl=(0,P.Z)(Ol,[["__scopeId","data-v-6a38125b"]]);var Il=Rl;const Ul=e=>{const t=/(\/profile)(\/edit)*(\/*)/,n=e.replace(t,"").toUpperCase();return""===n?"PROFILE":n.toUpperCase()},gl=[{path:"/",name:"Dashboard",component:ll},{path:"/login",name:"Login",component:Il,props:{action:"login"}},{path:"/register",name:"Register",component:Il,props:{action:"register"}},{path:"/account-confirmation",name:"AccountConfirmation",component:()=>n.e(845).then(n.bind(n,4264))},{path:"/account-confirmation/resend",name:"AccountConfirmationResend",component:()=>n.e(24).then(n.bind(n,5639)),props:{action:"account-confirmation-resend"}},{path:"/account-confirmation/email-sent",name:"AccountConfirmationEmailSend",component:()=>n.e(24).then(n.bind(n,5639)),props:{action:"email-sent"}},{path:"/password-reset/sent",name:"PasswordEmailSent",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"request-sent"}},{path:"/password-reset/request",name:"PasswordResetRequest",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"reset-request"}},{path:"/password-reset/password-updated",name:"PasswordUpdated",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"password-updated"}},{path:"/password-reset",name:"PasswordReset",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"reset"}},{path:"/email-update",name:"EmailUpdate",component:()=>n.e(845).then(n.bind(n,8160))},{path:"/profile",name:"Profile",component:()=>n.e(845).then(n.bind(n,6266)),children:[{path:"",name:"UserProfile",component:Nt,props:e=>({tab:Ul(e.path)}),children:[{path:"",name:"UserInfos",component:ht.Z},{path:"preferences",name:"UserPreferences",component:Dt},{path:"sports",name:"UserSportPreferences",component:ja,props:{isEdition:!1}},{path:"apps",name:"UserApps",component:Xr,children:[{path:"",name:"UserAppsList",component:Ra},{path:":id",name:"UserApp",component:da},{path:":id/created",name:"CreatedUserApp",component:da,props:{afterCreation:!0}},{path:"new",name:"AddUserApp",component:Mr},{path:"authorize",name:"AuthorizeUserApp",component:Hr}]}]},{path:"edit",name:"UserProfileEdition",component:Mt,props:e=>({tab:Ul(e.path)}),children:[{path:"",name:"UserInfosEdition",component:Sn},{path:"account",name:"UserAccountEdition",component:Vt},{path:"picture",name:"UserPictureEdition",component:wn},{path:"preferences",name:"UserPreferencesEdition",component:ur},{path:"sports",name:"UserSportPreferencesEdition",component:ja,props:{isEdition:!0}}]}]},{path:"/statistics",name:"Statistics",component:()=>n.e(193).then(n.bind(n,7885))},{path:"/users/:username",name:"User",component:()=>n.e(845).then(n.bind(n,9453))},{path:"/workouts",name:"Workouts",component:()=>n.e(401).then(n.bind(n,5651))},{path:"/workouts/:workoutId",name:"Workout",component:()=>n.e(401).then(n.bind(n,4915)),props:{displaySegment:!1}},{path:"/workouts/:workoutId/edit",name:"EditWorkout",component:()=>n.e(401).then(n.bind(n,8237))},{path:"/workouts/:workoutId/segment/:segmentId",name:"WorkoutSegment",component:()=>n.e(401).then(n.bind(n,4915)),props:{displaySegment:!0}},{path:"/workouts/add",name:"AddWorkout",component:()=>n.e(401).then(n.bind(n,4189))},{path:"/admin",name:"Administration",component:()=>n.e(328).then(n.bind(n,6e3)),children:[{path:"",name:"AdministrationMenu",component:se},{path:"application",name:"ApplicationAdministration",component:M},{path:"application/edit",name:"ApplicationAdministrationEdition",component:M,props:{edition:!0}},{path:"sports",name:"SportsAdministration",component:De},{path:"users/:username",name:"UserFromAdmin",component:()=>n.e(845).then(n.bind(n,9453)),props:{fromAdmin:!0}},{path:"users",name:"UsersAdministration",component:mt}]},{path:"/about",name:"About",component:zo},{path:"/:pathMatch(.*)*",name:"not-found",component:_l}],Nl=(0,r.p7)({history:(0,r.PO)("/"),routes:gl}),hl=["/login","/password-reset","/password-reset/password-updated","/password-reset/request","/password-reset/sent","/register","/account-confirmation","/account-confirmation/resend","/account-confirmation/email-sent"],zl=["/email-update","/about"];Nl.beforeEach(((e,t,n)=>{Xa.Z.dispatch(l.YN.ACTIONS.CHECK_AUTH_USER).then((()=>{if(zl.includes(e.path))return n();if(Xa.Z.getters[l.YN.GETTERS.IS_AUTHENTICATED]&&hl.includes(e.path))return n("/");if(Xa.Z.getters[l.YN.GETTERS.IS_AUTHENTICATED]||hl.includes(e.path))n();else{const t="/"===e.path?{path:"/login"}:{path:"/login",query:{from:e.fullPath}};n(t)}})).catch((e=>{console.error(e),n()}))}));var wl=Nl},5801:function(e,t,n){"use strict";var r,a,o,s,i,l,c,u,d,m,_,E,S,T,p,A,O,R;n.d(t,{YN:function(){return h},Km:function(){return z},SY:function(){return U},O8:function(){return g},gu:function(){return N},RT:function(){return w},aX:function(){return f}}),function(e){e["CHECK_AUTH_USER"]="CHECK_AUTH_USER",e["CONFIRM_ACCOUNT"]="CONFIRM_ACCOUNT",e["CONFIRM_EMAIL"]="CONFIRM_EMAIL",e["DELETE_ACCOUNT"]="DELETE_ACCOUNT",e["DELETE_PICTURE"]="DELETE_PICTURE",e["GET_USER_PROFILE"]="GET_USER_PROFILE",e["LOGIN_OR_REGISTER"]="LOGIN_OR_REGISTER",e["LOGOUT"]="LOGOUT",e["SEND_PASSWORD_RESET_REQUEST"]="SEND_PASSWORD_RESET_REQUEST",e["RESEND_ACCOUNT_CONFIRMATION_EMAIL"]="RESEND_ACCOUNT_CONFIRMATION_EMAIL",e["RESET_USER_PASSWORD"]="RESET_USER_PASSWORD",e["RESET_USER_SPORT_PREFERENCES"]="RESET_USER_SPORT_PREFERENCES",e["UPDATE_USER_ACCOUNT"]="UPDATE_USER_ACCOUNT",e["UPDATE_USER_PICTURE"]="UPDATE_USER_PICTURE",e["UPDATE_USER_PROFILE"]="UPDATE_USER_PROFILE",e["UPDATE_USER_PREFERENCES"]="UPDATE_USER_PREFERENCES",e["UPDATE_USER_SPORT_PREFERENCES"]="UPDATE_USER_SPORT_PREFERENCES"}(r||(r={})),function(e){e["AUTH_TOKEN"]="AUTH_TOKEN",e["AUTH_USER_PROFILE"]="AUTH_USER_PROFILE",e["IS_ADMIN"]="IS_ADMIN",e["IS_AUTHENTICATED"]="IS_AUTHENTICATED",e["IS_SUCCESS"]="IS_SUCCESS",e["IS_REGISTRATION_SUCCESS"]="IS_REGISTRATION_SUCCESS",e["USER_LOADING"]="USER_LOADING"}(a||(a={})),function(e){e["CLEAR_AUTH_USER_TOKEN"]="CLEAR_AUTH_USER_TOKEN",e["UPDATE_AUTH_TOKEN"]="UPDATE_AUTH_TOKEN",e["UPDATE_AUTH_USER_PROFILE"]="UPDATE_AUTH_USER_PROFILE",e["UPDATE_IS_SUCCESS"]="UPDATE_USER_IS_SUCCESS",e["UPDATE_IS_REGISTRATION_SUCCESS"]="UPDATE_IS_REGISTRATION_SUCCESS",e["UPDATE_USER_LOADING"]="UPDATE_USER_LOADING"}(o||(o={})),function(e){e["AUTHORIZE_CLIENT"]="AUTHORIZE_CLIENT",e["CREATE_CLIENT"]="CREATE_CLIENT",e["DELETE_CLIENT"]="DELETE_CLIENT",e["GET_CLIENTS"]="GET_CLIENTS",e["GET_CLIENT_BY_CLIENT_ID"]="GET_CLIENT_BY_CLIENT_ID",e["GET_CLIENT_BY_ID"]="GET_CLIENT_BY_ID",e["REVOKE_ALL_TOKENS"]="REVOKE_ALL_TOKENS"}(s||(s={})),function(e){e["CLIENT"]="CLIENT",e["CLIENTS"]="CLIENTS",e["CLIENTS_PAGINATION"]="CLIENTS_PAGINATION",e["REVOCATION_SUCCESSFUL"]="REVOCATION_SUCCESSFUL"}(i||(i={})),function(e){e["EMPTY_CLIENT"]="EMPTY_CLIENT",e["SET_CLIENT"]="SET_CLIENT",e["SET_CLIENTS"]="SET_CLIENTS",e["SET_CLIENTS_PAGINATION"]="SET_CLIENTS_PAGINATION",e["SET_REVOCATION_SUCCESSFUL"]="SET_REVOCATION_SUCCESSFUL"}(l||(l={})),function(e){e["GET_APPLICATION_CONFIG"]="GET_APPLICATION_CONFIG",e["GET_APPLICATION_STATS"]="GET_APPLICATION_STATS",e["UPDATE_APPLICATION_CONFIG"]="UPDATE_APPLICATION_CONFIG",e["UPDATE_APPLICATION_LANGUAGE"]="UPDATE_APPLICATION_LANGUAGE"}(c||(c={})),function(e){e["APP_CONFIG"]="APP_CONFIG",e["APP_LOADING"]="APP_LOADING",e["APP_STATS"]="APP_STATS",e["ERROR_MESSAGES"]="ERROR_MESSAGES",e["LANGUAGE"]="LANGUAGE",e["LOCALE"]="LOCALE"}(u||(u={})),function(e){e["EMPTY_ERROR_MESSAGES"]="EMPTY_ERROR_MESSAGES",e["SET_ERROR_MESSAGES"]="SET_ERROR_MESSAGES",e["UPDATE_APPLICATION_CONFIG"]="UPDATE_APPLICATION_CONFIG",e["UPDATE_APPLICATION_LOADING"]="UPDATE_APPLICATION_LOADING",e["UPDATE_APPLICATION_STATS"]="UPDATE_APPLICATION_STATS",e["UPDATE_LANG"]="UPDATE_LANG"}(d||(d={})),function(e){e["GET_SPORTS"]="GET_SPORTS",e["UPDATE_SPORTS"]="UPDATE_SPORTS"}(m||(m={})),function(e){e["SPORTS"]="SPORTS"}(_||(_={})),function(e){e["SET_SPORTS"]="SET_SPORTS"}(E||(E={})),function(e){e["GET_USER_STATS"]="GET_USER_STATS"}(S||(S={})),function(e){e["USER_STATS"]="USER_STATS"}(T||(T={})),function(e){e["EMPTY_USER_STATS"]="EMPTY_USER_STATS",e["UPDATE_USER_STATS"]="UPDATE_USER_STATS"}(p||(p={})),function(e){e["EMPTY_USER"]="EMPTY_USER",e["EMPTY_USERS"]="EMPTY_USERS",e["GET_USER"]="GET_USER",e["GET_USERS"]="GET_USERS",e["UPDATE_USER"]="UPDATE_USER",e["DELETE_USER_ACCOUNT"]="DELETE_USER_ACCOUNT"}(A||(A={})),function(e){e["USER"]="USER",e["USERS"]="USERS",e["USERS_IS_SUCCESS"]="USERS_IS_SUCCESS",e["USERS_LOADING"]="USERS_LOADING",e["USERS_PAGINATION"]="USERS_PAGINATION"}(O||(O={})),function(e){e["UPDATE_USER"]="UPDATE_USER",e["UPDATE_USER_IN_USERS"]="UPDATE_USER_IN_USERS",e["UPDATE_USERS"]="UPDATE_USERS",e["UPDATE_USERS_LOADING"]="UPDATE_USERS_LOADING",e["UPDATE_USERS_PAGINATION"]="UPDATE_USERS_PAGINATION",e["UPDATE_IS_SUCCESS"]="UPDATE_IS_SUCCESS"}(R||(R={}));var I=n(52);const U={ACTIONS:c,GETTERS:u,MUTATIONS:d},g={ACTIONS:m,GETTERS:_,MUTATIONS:E},N={ACTIONS:S,GETTERS:T,MUTATIONS:p},h={ACTIONS:r,GETTERS:a,MUTATIONS:o},z={ACTIONS:s,GETTERS:i,MUTATIONS:l},w={ACTIONS:A,GETTERS:O,MUTATIONS:R},f={ACTIONS:I.tW,GETTERS:I.JP,MUTATIONS:I.CW}},2894:function(e,t,n){"use strict";n.d(t,{Z:function(){return me}});var r=n(3907),a=(n(7658),n(5167)),o=n(9669),s=n.n(o),i=n(8566),l=n(2024);const c=s().create({baseURL:(0,l.k)()});c.interceptors.request.use((e=>{const t=new AbortController;e.signal=t.signal;const n=(0,i.a)(e);return i.j.set(n,t),e}),(e=>Promise.reject(e))),c.interceptors.response.use((e=>((0,i.a)(e.config),e)),(e=>("canceled"!==e.message&&(0,i.a)(e.response.config),Promise.reject(e))));var u=c,d=n(5073),m=n(5801);const _=(e,t)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z["delete"](`users/${t.username}`).then((n=>{204===n.status?t.fromAdmin?d.Z.push("/admin/users"):e.dispatch(m.YN.ACTIONS.LOGOUT).then((()=>d.Z.push("/"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},E={[m.RT.ACTIONS.EMPTY_USER](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USER,{})},[m.RT.ACTIONS.EMPTY_USERS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS,[]),e.commit(m.RT.MUTATIONS.UPDATE_USERS_PAGINATION,{})},[m.RT.ACTIONS.GET_USER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!0),a.Z.get(`users/${t}`).then((t=>{"success"===t.data.status?e.commit(m.RT.MUTATIONS.UPDATE_USER,t.data.data.users[0]):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.GET_USERS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!0),a.Z.get("users",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.RT.MUTATIONS.UPDATE_USERS,t.data.data.users),e.commit(m.RT.MUTATIONS.UPDATE_USERS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.UPDATE_USER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1);const n={};void 0!==t.admin&&(n.admin=t.admin),t.resetPassword&&(n.reset_password=t.resetPassword),t.activate&&(n.activate=t.activate),void 0!==t.new_email&&(n.new_email=t.new_email),a.Z.patch(`users/${t.username}`,n).then((n=>{"success"===n.data.status?(e.commit(m.RT.MUTATIONS.UPDATE_USER_IN_USERS,n.data.data.users[0]),(t.resetPassword||t.new_email)&&e.commit(m.RT.MUTATIONS.UPDATE_IS_SUCCESS,!0),(t.activate||t.new_email)&&e.commit(m.RT.MUTATIONS.UPDATE_USER,n.data.data.users[0])):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.DELETE_USER_ACCOUNT](e,t){_(e,{username:t.username,fromAdmin:!0})}},S=e=>{localStorage.removeItem("authToken"),e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.gu.MUTATIONS.EMPTY_USER_STATS),e.commit(m.YN.MUTATIONS.CLEAR_AUTH_USER_TOKEN),e.commit(m.RT.MUTATIONS.UPDATE_USERS,[]),e.commit(m.aX.MUTATIONS.EMPTY_WORKOUTS),e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),d.Z.push("/login")},T={[m.YN.ACTIONS.CHECK_AUTH_USER](e){window.localStorage.authToken&&!e.getters[m.YN.GETTERS.IS_AUTHENTICATED]&&(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,window.localStorage.authToken),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE)),!window.localStorage.authToken&&e.getters[m.YN.GETTERS.IS_AUTHENTICATED]&&S(e)},[m.YN.ACTIONS.CONFIRM_ACCOUNT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/account/confirm",{token:t.token}).then((t=>{if("success"===t.data.status){const n=t.data.auth_token;window.localStorage.setItem("authToken",n),e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,n),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/")))}else(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t)}))},[m.YN.ACTIONS.CONFIRM_EMAIL](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),u.post("/auth/email/update",{token:t.token}).then((n=>{"success"===n.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!0),t.refreshUser&&e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile/edit/account"))),d.Z.push("/profile/edit/account")):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t)}))},[m.YN.ACTIONS.GET_USER_PROFILE](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("auth/profile").then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),t.data.data.language&&e.dispatch(m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,t.data.data.language),e.dispatch(m.O8.ACTIONS.GET_SPORTS)):((0,l.S)(e,null),S(e))})).catch((t=>{"canceled"!==t.message&&((0,l.S)(e,t),S(e))}))},[m.YN.ACTIONS.LOGIN_OR_REGISTER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!1),u.post(`/auth/${t.actionType}`,t.formData).then((n=>{if("success"===n.data.status)if("login"===t.actionType){const r=n.data.auth_token;window.localStorage.setItem("authToken",r),e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,r),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("string"===typeof t.redirectUrl?t.redirectUrl:"/")))}else d.Z.push("/login").then((()=>e.commit(m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!0)));else(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.LOGOUT](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.post("auth/logout").then((t=>{"success"===t.data.status?S(e):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.UPDATE_USER_PROFILE](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),d.Z.push("/profile")):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.UPDATE_USER_ACCOUNT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),a.Z.patch("auth/profile/edit/account",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!0)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.UPDATE_USER_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit/preferences",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),e.dispatch(m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,t.data.data.language).then((()=>d.Z.push("/profile/preferences")))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.RESET_USER_SPORT_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z["delete"](`auth/profile/reset/sports/${t}`).then((t=>{204===t.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)}))},[m.YN.ACTIONS.UPDATE_USER_SPORT_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit/sports",t).then((t=>{"success"===t.data.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)}))},[m.YN.ACTIONS.UPDATE_USER_PICTURE](e,t){if(e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),!t.picture)throw new Error("No file part");const n=new FormData;n.append("file",t.picture),a.Z.post("auth/picture",n,{headers:{"content-type":"multipart/form-data"}}).then((t=>{"success"===t.data.status?e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.DELETE_ACCOUNT](e,t){_(e,t)},[m.YN.ACTIONS.DELETE_PICTURE](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z["delete"]("auth/picture").then((t=>{204===t.status?e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.SEND_PASSWORD_RESET_REQUEST](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/password/reset-request",t).then((t=>{"success"===t.data.status?d.Z.push("/password-reset/sent"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/account/resend-confirmation",t).then((t=>{"success"===t.data.status?d.Z.push("/account-confirmation/email-sent"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.RESET_USER_PASSWORD](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/password/update",t).then((t=>{"success"===t.data.status?d.Z.push("/password-reset/password-updated"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},p={[m.YN.GETTERS.AUTH_TOKEN]:e=>e.authToken,[m.YN.GETTERS.AUTH_USER_PROFILE]:e=>e.authUserProfile,[m.YN.GETTERS.IS_AUTHENTICATED]:e=>null!==e.authToken,[m.YN.GETTERS.IS_ADMIN]:e=>e.authUserProfile&&e.authUserProfile.admin,[m.YN.GETTERS.IS_REGISTRATION_SUCCESS]:e=>e.isRegistrationSuccess,[m.YN.GETTERS.IS_SUCCESS]:e=>e.isSuccess,[m.YN.GETTERS.USER_LOADING]:e=>e.loading},A={[m.YN.MUTATIONS.CLEAR_AUTH_USER_TOKEN](e){e.authToken=null,e.authUserProfile={}},[m.YN.MUTATIONS.UPDATE_AUTH_TOKEN](e,t){e.authToken=t},[m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE](e,t){e.authUserProfile=t},[m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS](e,t){e.isRegistrationSuccess=t},[m.YN.MUTATIONS.UPDATE_IS_SUCCESS](e,t){e.isSuccess=t},[m.YN.MUTATIONS.UPDATE_USER_LOADING](e,t){e.loading=t}},O={authToken:null,authUserProfile:{},isSuccess:!1,isRegistrationSuccess:!1,loading:!1},R={state:O,actions:T,getters:p,mutations:A};var I=R;const U=(e,t)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get(t).then((t=>{"success"===t.data.status?e.commit(m.Km.MUTATIONS.SET_CLIENT,t.data.data.client):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},g={[m.Km.ACTIONS.AUTHORIZE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES);const n=new FormData;n.set("client_id",t.client_id),n.set("response_type",t.response_type),n.set("scope",t.scope),n.set("confirm","true"),t.state&&n.set("state",t.state),t.code_challenge&&n.set("code_challenge",t.code_challenge),t.code_challenge_method&&n.set("code_challenge_method",t.code_challenge_method),a.Z.post("oauth/authorize",n,{headers:{"Content-Type":"multipart/form-data"}}).then((t=>{200==t.status&&t.data.redirect_url?window.location.href=t.data.redirect_url:(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.CREATE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.post("oauth/apps",t).then((t=>{"created"===t.data.status?(e.commit(m.Km.MUTATIONS.SET_CLIENT,t.data.data.client),d.Z.push(`/profile/apps/${t.data.data.client.id}/created`)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.DELETE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z["delete"](`oauth/apps/${t}`).then((t=>{204===t.status?e.dispatch(m.Km.ACTIONS.GET_CLIENTS).then((()=>d.Z.push("/profile/apps"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.GET_CLIENT_BY_CLIENT_ID](e,t){U(e,`oauth/apps/${t}`)},[m.Km.ACTIONS.GET_CLIENT_BY_ID](e,t){U(e,`oauth/apps/${t}/by_id`)},[m.Km.ACTIONS.GET_CLIENTS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("oauth/apps",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.Km.MUTATIONS.SET_CLIENTS,t.data.data.clients),e.commit(m.Km.MUTATIONS.SET_CLIENTS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.REVOKE_ALL_TOKENS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!1),a.Z.post(`oauth/apps/${t}/revoke`).then((t=>{"success"===t.data.status?e.commit(m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!0):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},N={[m.Km.GETTERS.CLIENT]:e=>e.client,[m.Km.GETTERS.CLIENTS]:e=>e.clients,[m.Km.GETTERS.CLIENTS_PAGINATION]:e=>e.pagination,[m.Km.GETTERS.REVOCATION_SUCCESSFUL]:e=>e.revocationSuccessful},h={[m.Km.MUTATIONS.SET_CLIENT](e,t){e.client=t},[m.Km.MUTATIONS.EMPTY_CLIENT](e){e.client={}},[m.Km.MUTATIONS.SET_CLIENTS](e,t){e.clients=t},[m.Km.MUTATIONS.SET_CLIENTS_PAGINATION](e,t){e.pagination=t},[m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL](e,t){e.revocationSuccessful=t}},z={client:{},clients:[],pagination:{},revocationSuccessful:!1},w={state:z,actions:g,getters:N,mutations:h};var f=w,v=n(2540);const{locale:C}=v.Z.global,D={[m.SY.ACTIONS.GET_APPLICATION_CONFIG](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING,!0),a.Z.get("config").then((t=>{"success"===t.data.status?e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG,t.data.data):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING,!1)))},[m.SY.ACTIONS.GET_APPLICATION_STATS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("stats/all").then((t=>{"success"===t.data.status?e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_STATS,t.data.data):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.SY.ACTIONS.UPDATE_APPLICATION_CONFIG](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.patch("config",t).then((t=>{"success"===t.data.status?(e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG,t.data.data),d.Z.push("/admin/application")):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE](e,t){document.querySelector("html")?.setAttribute("lang",t),e.commit(m.SY.MUTATIONS.UPDATE_LANG,t),C.value=t}},k={[m.SY.GETTERS.APP_CONFIG]:e=>e.application.config,[m.SY.GETTERS.APP_LOADING]:e=>e.appLoading,[m.SY.GETTERS.APP_STATS]:e=>e.application.statistics,[m.SY.GETTERS.ERROR_MESSAGES]:e=>e.errorMessages,[m.SY.GETTERS.LANGUAGE]:e=>e.language,[m.SY.GETTERS.LOCALE]:e=>e.locale};var P=n(6287);const L={[m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES](e){e.errorMessages=null},[m.SY.MUTATIONS.SET_ERROR_MESSAGES](e,t){e.errorMessages=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG](e,t){e.application.config=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING](e,t){e.appLoading=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_STATS](e,t){e.application.statistics=t},[m.SY.MUTATIONS.UPDATE_LANG](e,t){e.language=t,e.locale=P.v1[t]}};var M=n(5826);const b={root:!0,language:"en",locale:M.Z,errorMessages:null,application:{statistics:{sports:0,uploads_dir_size:0,users:0,workouts:0}},appLoading:!1},y={[m.O8.ACTIONS.GET_SPORTS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("sports").then((t=>{"success"===t.data.status?(e.commit(m.O8.MUTATIONS.SET_SPORTS,t.data.data.sports),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.O8.ACTIONS.UPDATE_SPORTS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.patch(`sports/${t.id}`,{is_active:t.isActive}).then((t=>{"success"===t.data.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},G={[m.O8.GETTERS.SPORTS]:e=>e.sports},F={[m.O8.MUTATIONS.SET_SPORTS](e,t){e.sports=t}},W={sports:[]},K={state:W,actions:y,getters:G,mutations:F};var Y=K;const x={[m.gu.ACTIONS.GET_USER_STATS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get(`stats/${t.username}/${t.filterType}`,{params:t.params}).then((t=>{"success"===t.data.status?e.commit(m.gu.MUTATIONS.UPDATE_USER_STATS,t.data.data.statistics):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},$={[m.gu.GETTERS.USER_STATS]:e=>e.statistics},B={[m.gu.MUTATIONS.UPDATE_USER_STATS](e,t){e.statistics=t},[m.gu.MUTATIONS.EMPTY_USER_STATS](e){e.statistics={}}},Z={statistics:{}},H={state:Z,actions:x,getters:$,mutations:B};var q=H;const V={[m.RT.GETTERS.USER]:e=>e.user,[m.RT.GETTERS.USERS]:e=>e.users,[m.RT.GETTERS.USERS_IS_SUCCESS]:e=>e.isSuccess,[m.RT.GETTERS.USERS_LOADING]:e=>e.loading,[m.RT.GETTERS.USERS_PAGINATION]:e=>e.pagination},j={[m.RT.MUTATIONS.UPDATE_USER](e,t){e.user=t},[m.RT.MUTATIONS.UPDATE_USER_IN_USERS](e,t){e.users=e.users.map((e=>e.username===t.username?t:e))},[m.RT.MUTATIONS.UPDATE_USERS](e,t){e.users=t},[m.RT.MUTATIONS.UPDATE_USERS_LOADING](e,t){e.loading=t},[m.RT.MUTATIONS.UPDATE_USERS_PAGINATION](e,t){e.pagination=t},[m.RT.MUTATIONS.UPDATE_IS_SUCCESS](e,t){e.isSuccess=t}},X={user:{},users:[],loading:!1,isSuccess:!1,pagination:{}},J={state:X,actions:E,getters:V,mutations:j};var Q=J,ee=n(52);const te=(e,t,n)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("workouts",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.aX.MUTATIONS[n],t.data.data.workouts),n===ee.CW.SET_USER_WORKOUTS&&e.commit(m.aX.MUTATIONS.SET_WORKOUTS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},ne={[m.aX.ACTIONS.GET_CALENDAR_WORKOUTS](e,t){e.commit(m.aX.MUTATIONS.EMPTY_CALENDAR_WORKOUTS),te(e,t,ee.CW.SET_CALENDAR_WORKOUTS)},[m.aX.ACTIONS.GET_USER_WORKOUTS](e,t){te(e,t,ee.CW.SET_USER_WORKOUTS)},[m.aX.ACTIONS.GET_TIMELINE_WORKOUTS](e,t){te(e,t,ee.CW.SET_TIMELINE_WORKOUTS)},[m.aX.ACTIONS.GET_MORE_TIMELINE_WORKOUTS](e,t){te(e,t,ee.CW.ADD_TIMELINE_WORKOUTS)},[m.aX.ACTIONS.GET_WORKOUT_DATA](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0);const n=t.segmentId?`/segment/${t.segmentId}`:"";a.Z.get(`workouts/${t.workoutId}`).then((r=>{const o=r.data.data.workouts[0];if("success"===r.data.status){if(t.segmentId&&(0===o.segments.length||!o.segments[+t.segmentId-1]))throw new Error("WORKOUT_NOT_FOUND");e.commit(m.aX.MUTATIONS.SET_WORKOUT,r.data.data.workouts[0]),r.data.data.workouts[0].with_gpx&&(a.Z.get(`workouts/${t.workoutId}/chart_data${n}`).then((t=>{"success"===t.data.status&&e.commit(m.aX.MUTATIONS.SET_WORKOUT_CHART_DATA,t.data.data.chart_data)})),a.Z.get(`workouts/${t.workoutId}/gpx${n}`).then((t=>{"success"===t.data.status&&e.commit(m.aX.MUTATIONS.SET_WORKOUT_GPX,t.data.data.gpx)})))}else e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),(0,l.S)(e,null)})).catch((t=>{e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.DELETE_WORKOUT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z["delete"](`workouts/${t.workoutId}`).then((()=>{e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE),d.Z.push("/")})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.EDIT_WORKOUT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z.patch(`workouts/${t.workoutId}`,t.data).then((()=>{e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE),e.dispatch(m.aX.ACTIONS.GET_WORKOUT_DATA,{workoutId:t.workoutId}).then((()=>{d.Z.push({name:"Workout",params:{workoutId:t.workoutId}})}))})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.ADD_WORKOUT](e,t){if(e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),!t.file)throw new Error("No file part");const n=new FormData;n.append("file",t.file),n.append("data",`{"sport_id": ${t.sport_id}, "notes": "${t.notes}"}`),a.Z.post("workouts",n,{headers:{"content-type":"multipart/form-data"}}).then((t=>{if("created"===t.data.status){e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE);const n=t.data.data.workouts[0];d.Z.push(1===t.data.data.workouts.length?`/workouts/${n.id}`:"/")}})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.ADD_WORKOUT_WITHOUT_GPX](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z.post("workouts/no_gpx",t).then((t=>{if("created"===t.data.status){e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE);const n=t.data.data.workouts[0];d.Z.push(`/workouts/${n.id}`)}})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))}},re={[m.aX.GETTERS.CALENDAR_WORKOUTS]:e=>e.calendar_workouts,[m.aX.GETTERS.TIMELINE_WORKOUTS]:e=>e.timeline_workouts,[m.aX.GETTERS.USER_WORKOUTS]:e=>e.user_workouts,[m.aX.GETTERS.WORKOUT_DATA]:e=>e.workoutData,[m.aX.GETTERS.WORKOUTS_PAGINATION]:e=>e.pagination},ae={[m.aX.MUTATIONS.ADD_TIMELINE_WORKOUTS](e,t){e.timeline_workouts=e.timeline_workouts.concat(t)},[m.aX.MUTATIONS.SET_CALENDAR_WORKOUTS](e,t){e.calendar_workouts=t},[m.aX.MUTATIONS.SET_TIMELINE_WORKOUTS](e,t){e.timeline_workouts=t},[m.aX.MUTATIONS.SET_USER_WORKOUTS](e,t){e.user_workouts=t},[m.aX.MUTATIONS.SET_WORKOUTS_PAGINATION](e,t){e.pagination=t},[m.aX.MUTATIONS.SET_WORKOUT](e,t){e.workoutData.workout=t},[m.aX.MUTATIONS.SET_WORKOUT_CHART_DATA](e,t){e.workoutData.chartData=t},[m.aX.MUTATIONS.SET_WORKOUT_GPX](e,t){e.workoutData.gpx=t},[m.aX.MUTATIONS.SET_WORKOUT_LOADING](e,t){e.workoutData.loading=t},[m.aX.MUTATIONS.EMPTY_CALENDAR_WORKOUTS](e){e.calendar_workouts=[]},[m.aX.MUTATIONS.EMPTY_WORKOUTS](e){e.calendar_workouts=[],e.user_workouts=[],e.timeline_workouts=[]},[m.aX.MUTATIONS.EMPTY_WORKOUT](e){e.workoutData={gpx:"",loading:!1,workout:{},chartData:[]}}},oe={calendar_workouts:[],timeline_workouts:[],pagination:{},user_workouts:[],workoutData:{gpx:"",loading:!1,workout:{},chartData:[]}},se={state:oe,actions:ne,getters:re,mutations:ae};var ie=se;const le={authUserModule:I,oAuthModule:f,sportsModule:Y,statsModule:q,usersModule:Q,workoutsModule:ie},ce={state:b,actions:D,getters:k,mutations:L,modules:le};var ue=ce;const de=(0,r.MT)(ue);var me=de},52:function(e,t,n){"use strict";var r,a,o;n.d(t,{CW:function(){return o},JP:function(){return a},tW:function(){return r}}),function(e){e["ADD_WORKOUT"]="ADD_WORKOUT",e["ADD_WORKOUT_WITHOUT_GPX"]="ADD_WORKOUT_WITHOUT_GPX",e["DELETE_WORKOUT"]="DELETE_WORKOUT",e["EDIT_WORKOUT"]="EDIT_WORKOUT",e["GET_CALENDAR_WORKOUTS"]="GET_CALENDAR_WORKOUTS",e["GET_USER_WORKOUTS"]="GET_USER_WORKOUTS",e["GET_TIMELINE_WORKOUTS"]="GET_TIMELINE_WORKOUTS",e["GET_MORE_TIMELINE_WORKOUTS"]="GET_MORE_TIMELINE_WORKOUTS",e["GET_WORKOUT_DATA"]="GET_WORKOUT_DATA"}(r||(r={})),function(e){e["CALENDAR_WORKOUTS"]="CALENDAR_WORKOUTS",e["TIMELINE_WORKOUTS"]="TIMELINE_WORKOUTS",e["USER_WORKOUTS"]="USER_WORKOUTS",e["WORKOUT_DATA"]="WORKOUT_DATA",e["WORKOUTS_PAGINATION"]="WORKOUTS_PAGINATION"}(a||(a={})),function(e){e["ADD_TIMELINE_WORKOUTS"]="ADD_TIMELINE_WORKOUTS",e["EMPTY_WORKOUTS"]="EMPTY_WORKOUTS",e["EMPTY_CALENDAR_WORKOUTS"]="EMPTY_CALENDAR_WORKOUTS",e["EMPTY_WORKOUT"]="EMPTY_WORKOUT",e["SET_CALENDAR_WORKOUTS"]="SET_CALENDAR_WORKOUTS",e["SET_TIMELINE_WORKOUTS"]="SET_TIMELINE_WORKOUTS",e["SET_USER_WORKOUTS"]="SET_USER_WORKOUTS",e["SET_WORKOUT"]="SET_WORKOUT",e["SET_WORKOUT_GPX"]="SET_WORKOUT_GPX",e["SET_WORKOUT_CHART_DATA"]="SET_WORKOUT_CHART_DATA",e["SET_WORKOUT_LOADING"]="SET_WORKOUT_LOADING",e["SET_WORKOUTS_PAGINATION"]="SET_WORKOUTS_PAGINATION"}(o||(o={}))},9917:function(e,t,n){"use strict";n.d(t,{o:function(){return a}});var r=n(3907);function a(){return(0,r.oR)()}},2766:function(e,t,n){"use strict";n.d(t,{Hf:function(){return a},Ne:function(){return c},fS:function(){return r},lM:function(){return d},pm:function(){return l},z_:function(){return s}});const r=["asc","desc"],a=1,o=10,s=(e,t)=>e&&"string"===typeof e&&+e>0?+e:t,i=(e,t,n)=>e&&"string"===typeof e&&t.includes(e)?e:n,l=(e,t,n,l)=>{const c=l||{},u=c.defaultSort||"asc",d={};return d.page=s(e.page,a),d.per_page=s(e.per_page,o),d.order=i(e.order,r,u),d.order_by=i(e.order_by,t,n),"string"===typeof e.q?d.q=e.q:delete d.q,d},c=["from","to","ave_speed_from","ave_speed_to","max_speed_from","max_speed_to","distance_from","distance_to","duration_from","duration_to","sport_id"],u=(e,t=1)=>Array.from({length:e-t+1},((e,n)=>t+n)),d=(e,t)=>{if(e<0)return[];if(e<9)return u(e);let n=[1,2];return t<4?n=n.concat([3,4,5]):t<6?n=n.concat(u(t+2,3)):(n=n.concat(["..."]),t=e-2&&n[n.length-1]{switch(e){case"week":return(0,r.Z)(t,{weekStartsOn:n?1:0});case"year":return(0,a.Z)(t);case"month":return(0,o.Z)(t);default:throw new Error(`Invalid duration, expected: "week", "month", "year", got: "${e}"`)}},p=(e,t)=>{switch(e){case"week":return(0,s.Z)(t,7);case"year":return(0,i.Z)(t,1);case"month":return(0,l.Z)(t,1);default:throw new Error(`Invalid duration, expected: "week", "month", "year", got: "${e}"`)}},A=(e,t)=>(0,m.utcToZonedTime)(new Date(e),t),O=(e,t)=>{const n=(0,o.Z)(e),a=(0,c.Z)(e),s=t?1:0;return{start:(0,r.Z)(n,{weekStartsOn:s}),end:(0,u.Z)(a,{weekStartsOn:s})}},R=(e,t=null,n=null)=>(t||(t="yyyy/MM/dd"),t=g(t,S.value),n||(n="HH:mm"),{workout_date:(0,d.Z)(e,t,{locale:E.v1[S.value]}),workout_time:(0,d.Z)(e,n)}),I=["MM/dd/yyyy","dd/MM/yyyy","yyyy-MM-dd","date_string"],U={de:"do MMM yyyy",en:"MMM. do, yyyy",fr:"d MMM yyyy"},g=(e,t)=>"date_string"===e?U[t]:e,N=(e,t,n,r=!0,a=null)=>(a||(a=S.value),(0,d.Z)(A(e,t),`${g(n,a)}${r?" HH:mm":""}`,{locale:E.v1[a]})),h=(e,t,n=null)=>{const r=n||S.value,a=[];return I.map((n=>{const o=g(n,r);a.push({label:`${o} - ${N(e,t,o,!1,r)}`,value:n})})),a}},8966:function(e,t,n){"use strict";n.d(t,{Z:function(){return a},j:function(){return o}});const r=["bytes","KB","MB","GB","TB"],a=(e,t=!0)=>{const n=Math.floor(Math.log(e)/Math.log(1024));if(!e)return t?"0 bytes":{size:"0",suffix:"bytes"};const a=(e/Math.pow(1024,n)).toFixed(1),o=r[n];return t?`${a}${o}`:{size:a,suffix:o}},o=e=>{const t=e/1048576;return+t.toFixed(2)}},2024:function(e,t,n){"use strict";n.d(t,{S:function(){return o},k:function(){return a}});var r=n(5801);const a=()=>"/api/",o=(e,t,n="UNKNOWN")=>{if(t&&"canceled"===t.message)return;if(401===t?.response?.status&&"invalid_token"===t.response.data.error)return localStorage.removeItem("authToken"),void e.dispatch(r.YN.ACTIONS.CHECK_AUTH_USER);const a=t?t.response?413===t.response.status?"file size is greater than the allowed size":t.response.data.message?t.response.data.message:n:t.message?t.message:n:n;e.commit(r.SY.MUTATIONS.SET_ERROR_MESSAGES,a.includes("\n")?a.split("\n").filter((e=>""!==e)).map((e=>`api.ERROR.${e}`)):`api.ERROR.${a}`)}},6287:function(e,t,n){"use strict";n.d(t,{mT:function(){return u},v1:function(){return i},zK:function(){return l}});var r=n(879),a=n(5826),o=n(5830),s=n(2540);const i={de:r.Z,en:a.Z,fr:o.Z},l={de:"Deutsch",en:"English",fr:"Français"},{availableLocales:c}=s.Z.global,u=c.map((e=>({label:l[e],value:e})))},631:function(e,t,n){"use strict";n.d(t,{CM:function(){return l},PA:function(){return i},Yx:function(){return a},Zo:function(){return r},xH:function(){return s}});const r={"Cycling (Sport)":"#4c9792","Cycling (Transport)":"#88af98","Cycling (Virtual)":"#64a360",Hiking:"#bb757c","Mountain Biking":"#d4b371","Mountain Biking (Electric)":"#fc9d6f",Rowing:"#fcce72",Running:"#835b83","Skiing (Alpine)":"#67a4bd","Skiing (Cross Country)":"#9498d0",Snowshoes:"#5780a8",Trail:"#09a98a",Walking:"#838383"},a=e=>{const t={};return e.map((e=>t[e.id]=e.color?e.color:r[e.label])),t},o=(e,t)=>{const n=e.translatedLabel.toLowerCase(),r=t.translatedLabel.toLowerCase();return n>r?1:ne.filter((e=>"all"===n||(r.includes(e.id)||e[n]))).map((e=>({...e,translatedLabel:t(`sports.${e.label}.LABEL`)}))).sort(o),i=(e,t)=>t.filter((t=>t.id===e.sport_id)).map((e=>e.label))[0],l=(e,t)=>t.filter((t=>t.id===e.sport_id)).map((e=>e.color))[0]},9318:function(e,t,n){"use strict";n.d(t,{FN:function(){return C},aZ:function(){return v},v1:function(){return f}});n(7658);var r=n(4850),a=n(8148),o=n(9319),s=n(584),i=n(4559),l=n(3703),c=n(876),u=n(7090),d=n(4135),m=n(1593),_=n(7982),E=n(3500),S=n(1640),T=n(2540),p=n(6558),A=n(6287),O=n(631),R=n(3649);const{locale:I}=T.Z.global,U={week:{api:"yyyy-MM-dd",chart:"MM/dd/yyyy"},month:{api:"yyyy-MM",chart:"MM/yyyy"},year:{api:"yyyy",chart:"yyyy"}},g=["average_speed","nb_workouts","total_duration","total_distance","total_ascent","total_descent"],N=(e,t)=>{const n=[];for(let r=(0,p.Nh)(e.duration,e.start,t);r<=e.end;r=(0,p.xA)(e.duration,r))n.push(r);return n},h=(e,t,n=!1)=>{const r={label:e,backgroundColor:[t],data:[]};return n&&(r.type="line",r.borderColor=[t],r.spanGaps=!0),r},z=e=>{const t={average_speed:[],nb_workouts:[],total_distance:[],total_duration:[],total_ascent:[],total_descent:[]};return e.map((e=>{const n=e.color?e.color:O.Zo[e.label];t.average_speed.push(h(e.label,n,!0)),t.nb_workouts.push(h(e.label,n)),t.total_distance.push(h(e.label,n)),t.total_duration.push(h(e.label,n)),t.total_ascent.push(h(e.label,n)),t.total_descent.push(h(e.label,n))})),t},w=(e,t,n)=>{switch(e){case"average_speed":case"total_distance":case"total_ascent":case"total_descent":return(0,R.f3)(["average_speed","total_distance"].includes(e)?"km":"m",t,n);default:case"nb_workouts":case"total_duration":return t}},f=(e,t,n,a,o,s,i)=>{const l=N(e,t),c=U[e.duration],u=n.filter((e=>a.includes(e.id))),d=[],m=z(u),_={};return u.map((e=>_[e.label]=e.id)),l.map((t=>{const n=(0,r.Z)(t,c.api),a=(0,r.Z)(t,"week"===e.duration?(0,p.mh)(i,I.value):c.chart,{locale:A.v1[I.value]});d.push(a),g.map((e=>{m[e].map((t=>{t.data.push(n in o&&_[t.label]in o[n]?w(e,o[n][_[t.label]][e],s):"average_speed"===e?null:0)}))}))})),{labels:d,datasets:m}},v=(e,t,n)=>{const r=n?1:0,m="year"===t?(0,a.Z)((0,o.Z)(e,9)):"week"===t?(0,s.Z)((0,i.Z)(e,2),{weekStartsOn:r}):(0,l.Z)((0,i.Z)(e,11)),_="year"===t?(0,c.Z)(e):"week"===t?(0,u.Z)(e,{weekStartsOn:r}):(0,d.Z)(e);return{duration:t,end:_,start:m}},C=(e,t,n)=>{const{duration:r,start:T,end:p}=e,A=n?1:0;return{duration:r,end:"year"===r?(0,c.Z)(t?(0,o.Z)(p,1):(0,m.Z)(p,1)):"week"===r?(0,u.Z)(t?(0,_.Z)(p,1):(0,E.Z)(p,1),{weekStartsOn:A}):(0,d.Z)(t?(0,i.Z)(p,1):(0,S.Z)(p,1)),start:"year"===r?(0,a.Z)(t?(0,o.Z)(T,1):(0,m.Z)(T,1)):"week"===r?(0,s.Z)(t?(0,_.Z)(T,1):(0,E.Z)(T,1),{weekStartsOn:A}):(0,l.Z)(t?(0,i.Z)(T,1):(0,S.Z)(T,1))}}},3649:function(e,t,n){"use strict";n.d(t,{Dl:function(){return r},f3:function(){return s},sC:function(){return o}});const r={ft:{unit:"ft",system:"imperial",multiplier:1,defaultTarget:"m"},mi:{unit:"mi",system:"imperial",multiplier:5280,defaultTarget:"km"},m:{unit:"m",system:"metric",multiplier:1,defaultTarget:"ft"},km:{unit:"m",system:"metric",multiplier:1e3,defaultTarget:"mi"}},a={metric:{imperial:3.280839895,metric:1},imperial:{metric:1/3.280839895,imperial:1}},o=(e,t,n,o=3)=>{const s=r[t],i=r[n],l=e*s.multiplier*a[s.system][i.system]/i.multiplier;return null!==o?parseFloat(l.toFixed(o)):l},s=(e,t,n)=>{const a=n?r[e].defaultTarget:e;return n?o(t,e,a,2):t}},3768:function(e,t,n){"use strict";n.d(t,{BN:function(){return o},EX:function(){return a},eR:function(){return s}});n(7658);var r=n(3649);const a=(e,t,n)=>{const a={speed:{label:t("workouts.SPEED"),backgroundColor:["#FFFFFF"],borderColor:["#8884d8"],borderWidth:2,data:[],yAxisID:"ySpeed"},elevation:{label:t("workouts.ELEVATION"),backgroundColor:["#e5e5e5"],borderColor:["#cccccc"],borderWidth:1,fill:!0,data:[],yAxisID:"yElevation"}},o=[],s=[],i=[];return e.map((e=>{o.push(e.distance),s.push(e.duration),a.speed.data.push((0,r.f3)("km",e.speed,n)),a.elevation.data.push((0,r.f3)("m",e.elevation,n)),i.push({latitude:e.latitude,longitude:e.longitude})})),{distance_labels:o,duration_labels:s,datasets:a,coordinates:i}},o=e=>{const t=e.length;if(0===t)return{};const n={};return e.map((e=>{n[e.sport_id]||(n[e.sport_id]={count:0,percentage:0}),n[e.sport_id].count+=1,n[e.sport_id].percentage=n[e.sport_id].count/t})),n},s={order:"desc",order_by:"workout_date"}},2531:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(6252);const a={class:"card"},o={class:"card-title"},s={class:"card-content"};function i(e,t){return(0,r.wg)(),(0,r.iD)("div",a,[(0,r._)("div",o,[(0,r.WI)(e.$slots,"title")]),(0,r._)("div",s,[(0,r.WI)(e.$slots,"content")])])}var l=n(3744);const c={},u=(0,l.Z)(c,[["render",i]]);var d=u},8626:function(e,t,n){"use strict";n.d(t,{Z:function(){return T}});var r=n(6252),a=n(3577),o=n(2262);const s={class:"table-selects"},i=["value"],l=["value"],c=["value"],u=["value"],d=["value"],m=["value"];var _=(0,r.aZ)({__name:"FilterSelects",props:{order_by:null,query:null,sort:null,message:null},emits:["updateSelect"],setup(e,{emit:t}){const n=e,{order_by:_,query:E,sort:S,message:T}=(0,o.BK)(n),p=[10,25,50,100];function A(e){t("updateSelect",e.target.id,e.target.value)}return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.ORDER_BY.LABEL"))+": ",1),(0,r._)("select",{name:"order_by",id:"order_by",value:(0,o.SU)(E).order_by,onChange:A},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(_),(t=>((0,r.wg)(),(0,r.iD)("option",{value:t,key:t},(0,a.zw)(e.$t(`${(0,o.SU)(T)}.${t.toUpperCase()}`)),9,l)))),128))],40,i)]),(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.ORDER.LABEL"))+": ",1),(0,r._)("select",{name:"order",id:"order",value:(0,o.SU)(E).order,onChange:A},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(S),(t=>((0,r.wg)(),(0,r.iD)("option",{value:t,key:t},(0,a.zw)(e.$t(`common.SELECTS.ORDER.${t.toUpperCase()}`)),9,u)))),128))],40,c)]),(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.PER_PAGE.LABEL"))+": ",1),(0,r._)("select",{name:"per_page",id:"per_page",value:(0,o.SU)(E).per_page,onChange:A},[((0,r.wg)(),(0,r.iD)(r.HY,null,(0,r.Ko)(p,(e=>(0,r._)("option",{value:e,key:e},(0,a.zw)(e),9,m))),64))],40,d)])]))}}),E=n(3744);const S=(0,E.Z)(_,[["__scopeId","data-v-72463173"]]);var T=S},7167:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(6252);const a={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 -51 512 512"},o=(0,r.uE)('',1),s=[o];function i(e,t,n,o,i,l){return(0,r.wg)(),(0,r.iD)("svg",a,s)}var l={name:"ErrorImg"},c=n(3744);const u=(0,c.Z)(l,[["render",i]]);var d=u},8273:function(e,t,n){"use strict";n.d(t,{Z:function(){return E}});var r=n(6252),a=n(2262),o=(n(7658),n(3577));const s={id:"error"},i={class:"error-content"};var l=(0,r.aZ)({__name:"Error",props:{title:null,message:null,buttonText:null,path:{default:"/"}},setup(e){const t=e,{buttonText:n,title:l,message:c,path:u}=(0,a.BK)(t);return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[(0,r._)("div",i,[(0,r._)("h1",null,(0,o.zw)((0,a.SU)(l)),1),(0,r._)("p",null,(0,o.zw)((0,a.SU)(c)),1),(0,a.SU)(n)?((0,r.wg)(),(0,r.iD)("button",{key:0,onClick:t[0]||(t[0]=t=>e.$router.push((0,a.SU)(u))),class:"upper"},(0,o.zw)((0,a.SU)(n)),1)):(0,r.kq)("",!0)])]))}}),c=n(3744);const u=(0,c.Z)(l,[["__scopeId","data-v-b60bfa80"]]);var d=u,m=(0,r.aZ)({__name:"NotFound",props:{target:{default:"PAGE"}},setup(e){const t=e,{target:n}=(0,a.BK)(t),o=(0,a.iH)(),s=(0,a.iH)(!1);function i(){o.value=setTimeout((()=>{s.value=!0}),500)}return(0,r.bv)((()=>i())),(0,r.Ah)((()=>{o.value&&clearTimeout(o.value)})),(e,t)=>s.value?((0,r.wg)(),(0,r.j4)(d,{key:0,title:"404",message:e.$t(`error.NOT_FOUND.${(0,a.SU)(n)}`),"button-text":e.$t("common.HOME")},null,8,["message","button-text"])):(0,r.kq)("",!0)}});const _=m;var E=_},5020:function(e,t,n){"use strict";n.d(t,{Z:function(){return T}});var r=n(6252),a=n(3577),o=n(2262),s=n(2766);const i=e=>((0,r.dD)("data-v-3a9a4a65"),e=e(),(0,r.Cn)(),e),l={class:"pagination-center","aria-label":"navigation"},c={class:"pagination"},u=i((()=>(0,r._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1))),d={key:0},m=i((()=>(0,r._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1)));var _=(0,r.aZ)({__name:"Pagination",props:{pagination:null,path:null,query:null},setup(e){const t=e,{pagination:n,path:i,query:_}=(0,o.BK)(t);function E(e,t){const n=Object.assign({},_.value);return n.page=t?e+t:e,n}return(e,t)=>{const _=(0,r.up)("router-link");return(0,r.wg)(),(0,r.iD)("nav",l,[(0,r._)("ul",c,[(0,r._)("li",{class:(0,a.C_)(["page-prev",{disabled:!(0,o.SU)(n).has_prev}])},[(0,r.Wm)(_,{class:"page-link",to:{path:(0,o.SU)(i),query:E((0,o.SU)(n).page,-1)},disabled:!(0,o.SU)(n).has_prev},{default:(0,r.w5)((({navigate:t})=>[(0,r.WI)(e.$slots,"default",{onClick:e=>(0,o.SU)(n).has_next?t:null},(()=>[(0,r.Uk)((0,a.zw)(e.$t("api.PAGINATION.PREVIOUS"))+" ",1),u]))])),_:3},8,["to","disabled"])],2),((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(s.lM)((0,o.SU)(n).pages,(0,o.SU)(n).page),(e=>((0,r.wg)(),(0,r.iD)("li",{key:e,class:(0,a.C_)(["page",{active:e===(0,o.SU)(n).page}])},["..."===e?((0,r.wg)(),(0,r.iD)("span",d," ... ")):((0,r.wg)(),(0,r.j4)(_,{key:1,class:"page-link",to:{path:(0,o.SU)(i),query:E(+e)}},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e),1)])),_:2},1032,["to"]))],2)))),128)),(0,r._)("li",{class:(0,a.C_)(["page-next",{disabled:!(0,o.SU)(n).has_next}])},[(0,r.Wm)(_,{class:"page-link",to:{path:(0,o.SU)(i),query:E((0,o.SU)(n).page,1)},disabled:!(0,o.SU)(n).has_next},{default:(0,r.w5)((({navigate:t})=>[(0,r.WI)(e.$slots,"default",{onClick:e=>(0,o.SU)(n).has_next?t:null},(()=>[(0,r.Uk)((0,a.zw)(e.$t("api.PAGINATION.NEXT"))+" ",1),m]))])),_:3},8,["to","disabled"])],2)])])}}}),E=n(3744);const S=(0,E.Z)(_,[["__scopeId","data-v-3a9a4a65"]]);var T=S},8403:function(e,t,n){"use strict";n.d(t,{Z:function(){return v}});var r=n(6252),a=n(2262),o=n(9963),s=n(3577),i=n(4366),l=n(5801),c=n(9917);const u=async e=>{const t=await n.e(881).then(n.bind(n,410)),r=await n.e(881).then(n.bind(n,8288)),a=await n.e(881).then(n.bind(n,6947)),o=await n.e(881).then(n.bind(n,8056)),s={de:o,en:r,fr:a,nb:r},l=s[e],c={graphs:t.default.adjacencyGraphs,dictionary:{...t.default.dictionary,...l.default.dictionary}};i.Mu.setOptions(c)},d=e=>{switch(e){case 2:return"AVERAGE";case 3:return"GOOD";case 4:return"STRONG";default:return"WEAK"}},m={class:"password-strength"},_=["value"],E={key:0,class:"password-strength-details"},S={class:"password-strength-value"},T={key:0,class:"info-box"},p={class:"password-feedback"};var A=(0,r.aZ)({__name:"PasswordStength",props:{password:null},setup(e){const t=e,{password:n}=(0,a.BK)(t),o=(0,c.o)(),A=(0,r.Fl)((()=>o.getters[l.SY.GETTERS.LANGUAGE])),O=(0,r.Fl)((()=>o.getters[l.YN.GETTERS.IS_SUCCESS])),R=(0,a.iH)(0),I=(0,a.iH)(""),U=(0,a.iH)([]),g=(0,a.iH)("0% 100%");function N(e){const t=(0,i.tu)(e);R.value=t.score,I.value=d(R.value),U.value=t.feedback.suggestions,g.value=100*R.value/4+"% 100%"}return(0,r.wF)((async()=>await u(A.value))),(0,r.YP)((()=>A.value),(async e=>{await u(e)})),(0,r.YP)((()=>n.value),(async e=>{O.value?I.value="":N(e)})),(e,t)=>((0,r.wg)(),(0,r.iD)("div",m,[(0,r._)("input",{class:(0,s.C_)(["password-slider",`strength-${R.value}`]),style:(0,s.j5)({backgroundSize:g.value}),type:"range",value:R.value,min:"0",max:"4",step:"1"},null,14,_),I.value?((0,r.wg)(),(0,r.iD)("div",E,[(0,r._)("span",S,(0,s.zw)(e.$t("user.PASSWORD_STRENGTH.LABEL"))+": "+(0,s.zw)(e.$t(`user.PASSWORD_STRENGTH.${I.value}`)),1),U.value.length>0?((0,r.wg)(),(0,r.iD)("div",T,[(0,r._)("ul",p,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)(U.value,(t=>((0,r.wg)(),(0,r.iD)("li",{key:t},(0,s.zw)(e.$t(`user.PASSWORD_STRENGTH.SUGGESTIONS.${t}`)),1)))),128))])])):(0,r.kq)("",!0)])):(0,r.kq)("",!0)]))}}),O=n(3744);const R=(0,O.Z)(A,[["__scopeId","data-v-74e71df5"]]);var I=R;const U=e=>((0,r.dD)("data-v-5a126514"),e=e(),(0,r.Cn)(),e),g={class:"password-input"},N=["id","disabled","placeholder","required","type"],h={key:0,class:"form-info"},z=U((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1)));var w=(0,r.aZ)({__name:"PasswordInput",props:{checkStrength:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},id:{default:"password"},password:{default:""},placeholder:null,required:{type:Boolean,default:!1}},emits:["updatePassword","passwordError"],setup(e,{emit:t}){const n=e,{checkStrength:i,disabled:l,id:c,password:u,placeholder:d,required:m}=(0,a.BK)(n),_=(0,a.iH)(!1),E=(0,a.iH)("");function S(){_.value=!_.value}function T(e){t("updatePassword",e.target.value)}function p(){t("passwordError")}return(0,r.YP)((()=>u.value),(e=>{""===e&&(E.value="")})),(e,t)=>((0,r.wg)(),(0,r.iD)("div",g,[(0,r.wy)((0,r._)("input",{id:(0,a.SU)(c),disabled:(0,a.SU)(l),placeholder:(0,a.SU)(d),required:(0,a.SU)(m),type:_.value?"text":"password","onUpdate:modelValue":t[0]||(t[0]=e=>E.value=e),minlength:"8",onInput:T,onInvalid:p},null,40,N),[[o.YZ,E.value]]),(0,r._)("div",{class:"show-password",onClick:S},[(0,r.Uk)((0,s.zw)(e.$t(`user.${_.value?"HIDE":"SHOW"}_PASSWORD`))+" ",1),(0,r._)("i",{class:(0,s.C_)(["fa","fa-eye"+(_.value?"-slash":"")]),"aria-hidden":"true"},null,2)]),(0,a.SU)(i)?((0,r.wg)(),(0,r.iD)("div",h,[z,(0,r.Uk)(" "+(0,s.zw)(e.$t("user.PASSWORD_INFO")),1)])):(0,r.kq)("",!0),(0,a.SU)(i)?((0,r.wg)(),(0,r.j4)(I,{key:1,password:E.value},null,8,["password"])):(0,r.kq)("",!0)]))}});const f=(0,O.Z)(w,[["__scopeId","data-v-5a126514"]]);var v=f},2056:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(6252),a=n(3577),o=n(2262),s=n(2024);const i=(0,r._)("div",{class:"map-attribution"},[(0,r._)("span",{class:"map-attribution-text"},"©"),(0,r._)("a",{class:"map-attribution-text",href:"https://www.openstreetmap.org/copyright",target:"_blank",rel:"noopener noreferrer"}," OpenStreetMap ")],-1);var l=(0,r.aZ)({__name:"StaticMap",props:{workout:null,displayHover:{type:Boolean,default:!1}},setup(e){const t=e,{displayHover:n}=(0,o.BK)(t),l=`${(0,s.k)()}workouts/map/${t.workout.map}`;return(e,t)=>((0,r.wg)(),(0,r.iD)("div",{class:(0,a.C_)(["static-map",{"display-hover":(0,o.SU)(n)}])},[(0,o.SU)(n)?((0,r.wg)(),(0,r.iD)("img",{key:0,src:l,alt:""})):((0,r.wg)(),(0,r.iD)("div",{key:1,class:"bg-map-image",style:(0,a.j5)({backgroundImage:`url(${l})`})},null,4)),i],2))}});const c=l;var u=c},3170:function(e,t,n){"use strict";n.d(t,{Z:function(){return y}});var r=n(6252),a=n(3577);const o={class:"start-chart"},s={key:0},i={key:1},l={class:"chart-radio"},c=["checked"],u=["checked"],d=["checked"],m={key:0},_=["checked"],E={key:1},S=["checked"],T={key:2},p=["checked"];function A(e,t,n,A,O,R){const I=(0,r.up)("Chart");return(0,r.wg)(),(0,r.iD)("div",o,[e.hideChartIfNoData&&e.emptyStats?((0,r.wg)(),(0,r.iD)("div",s,(0,a.zw)(e.$t("workouts.NO_WORKOUTS")),1)):((0,r.wg)(),(0,r.iD)("div",i,[(0,r._)("div",l,[(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"total_distance",checked:"total_distance"===e.displayedData,onClick:t[0]||(t[0]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,c),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DISTANCE")),1)]),(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"total_duration",checked:"total_duration"===e.displayedData,onClick:t[1]||(t[1]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,u),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DURATION")),1)]),(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"nb_workouts",checked:"nb_workouts"===e.displayedData,onClick:t[2]||(t[2]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,d),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.WORKOUT",2)),1)]),e.fullStats?((0,r.wg)(),(0,r.iD)("label",m,[(0,r._)("input",{type:"radio",name:"average_speed",checked:"average_speed"===e.displayedData,onClick:t[3]||(t[3]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,_),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.AVERAGE_SPEED")),1)])):(0,r.kq)("",!0),e.fullStats?((0,r.wg)(),(0,r.iD)("label",E,[(0,r._)("input",{type:"radio",name:"total_ascent",checked:"total_ascent"===e.displayedData,onClick:t[4]||(t[4]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,S),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.ASCENT")),1)])):(0,r.kq)("",!0),e.fullStats?((0,r.wg)(),(0,r.iD)("label",T,[(0,r._)("input",{type:"radio",name:"total_descent",checked:"total_descent"===e.displayedData,onClick:t[5]||(t[5]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,p),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DESCENT")),1)])):(0,r.kq)("",!0)]),e.labels.length>0?((0,r.wg)(),(0,r.j4)(I,{key:0,datasets:e.datasets,labels:e.labels,displayedData:e.displayedData,displayedSportIds:e.displayedSportIds,fullStats:e.fullStats,useImperialUnits:e.user.imperial_units},null,8,["datasets","labels","displayedData","displayedSportIds","fullStats","useImperialUnits"])):(0,r.kq)("",!0)]))])}var O=n(4850),R=n(2262);const I={class:"chart"};function U(e,t,n,a,o,s){const i=(0,r.up)("BarChart");return(0,r.wg)(),(0,r.iD)("div",I,[(0,r.Wm)(i,(0,r.dG)(e.barChartProps,{class:"bar-chart"}),null,16)])}var g=n(6518),N=n(9150);const h=(e,t=!1)=>{let n="0";t&&(n=String(Math.floor(e/86400)),e%=86400);const r=String(Math.floor(e/3600)).padStart(2,"0");e%=3600;const a=String(Math.floor(e/60)).padStart(2,"0"),o=String(e%60).padStart(2,"0");return t?`${"0"===n?"":`${n}d `}${"00"===r?"":`${r}h `}${a}m ${o}s`:`${"00"===r?"":`${r}:`}${a}:${o}`};var z=n(3649);const w=(e,t,n,r=!0,a="km")=>{const o=n?z.Dl[a].defaultTarget:a;switch(e){case"average_speed":return`${t.toFixed(2)} ${o}/h`;case"total_duration":return h(t,r);case"total_distance":case"total_ascent":case"total_descent":return`${t.toFixed(2)} ${o}`;default:return t.toString()}};var f=(0,r.aZ)({name:"Chart",components:{BarChart:g.vz},props:{datasets:{type:Object,required:!0},labels:{type:Object,required:!0},displayedData:{type:String,required:!0},displayedSportIds:{type:Array,required:!0},fullStats:{type:Boolean,required:!0},useImperialUnits:{type:Boolean,required:!0}},setup(e){const{t:t}=(0,N.QT)();function n(e){return isNaN(e)?0:+e}function a(e,t){return n(e)+n(t)}function o(e){return["total_ascent","total_descent"].includes(e)?"m":"km"}const s=(0,r.Fl)((()=>({labels:e.labels,datasets:JSON.parse(JSON.stringify(e.datasets))}))),i=(0,r.Fl)((()=>({responsive:!0,maintainAspectRatio:!0,animation:!1,layout:{padding:{top:e.fullStats?40:22}},scales:{x:{stacked:!0,grid:{drawOnChartArea:!1}},y:{stacked:"average_speed"!==e.displayedData,grid:{drawOnChartArea:!1},ticks:{maxTicksLimit:6,callback:function(t){return w(e.displayedData,+t,e.useImperialUnits,!1,o(e.displayedData))}},afterFit:function(t){t.width=e.fullStats?90:60}}},plugins:{datalabels:{anchor:"end",align:"end",color:function(t){return"average_speed"===e.displayedData&&t.dataset.backgroundColor?t.dataset.backgroundColor[0]:"#666666"},rotation:function(t){return e.fullStats&&t.chart.chartArea.width<580?310:0},display:function(t){return!(e.fullStats&&t.chart.chartArea.width<300)&&("average_speed"!==e.displayedData||1==e.displayedSportIds.length&&"auto")},formatter:function(t,n){if("average_speed"===e.displayedData)return w(e.displayedData,t,e.useImperialUnits,!1);{const t=n.chart.data.datasets.map((e=>e.data[n.dataIndex])).reduce(((e,t)=>a(e,t)),0);return n.datasetIndex===e.displayedSportIds.length-1&&t>0?w(e.displayedData,t,e.useImperialUnits,!1,o(e.displayedData)):null}}},legend:{display:!1},tooltip:{interaction:{intersect:!0,mode:"index",position:"average_speed"===e.displayedData?"nearest":"average"},filter:function(e){return"0"!==e.formattedValue},callbacks:{label:function(n){let r=t(`sports.${n.dataset.label}.LABEL`)||"";return r&&(r+=": "),null!==n.parsed.y&&(r+=w(e.displayedData,n.parsed.y,e.useImperialUnits,!0,o(e.displayedData))),r},footer:function(n){if("average_speed"===e.displayedData)return"";let r=0;return n.map((e=>{r+=e.parsed.y})),`${t("common.TOTAL")}: `+w(e.displayedData,r,e.useImperialUnits,!0,o(e.displayedData))}}}}}))),{barChartProps:l}=(0,g.xZ)({chartData:s,options:i});return{barChartProps:l}}}),v=n(3744);const C=(0,v.Z)(f,[["render",U]]);var D=C,k=n(5801),P=n(9917),L=n(9318),M=(0,r.aZ)({name:"UserMonthStats",components:{Chart:D},props:{sports:{type:Object,required:!0},user:{type:Object,required:!0},chartParams:{type:Object,required:!0},displayedSportIds:{type:Array,default:()=>[]},fullStats:{type:Boolean,default:!1},hideChartIfNoData:{type:Boolean,default:!1}},setup(e){const t=(0,P.o)(),n=(0,R.iH)("total_distance"),a=(0,r.Fl)((()=>t.getters[k.gu.GETTERS.USER_STATS])),o=(0,r.Fl)((()=>(0,L.v1)(e.chartParams,e.user.weekm,e.sports,e.displayedSportIds,a.value,e.user.imperial_units,e.user.date_format)));function s(n){t.dispatch(k.gu.ACTIONS.GET_USER_STATS,{username:e.user.username,filterType:"by_time",params:n})}function i(e){n.value=e.target.name}function l(e,t){return{from:(0,O.Z)(e.start,"yyyy-MM-dd"),to:(0,O.Z)(e.end,"yyyy-MM-dd"),time:"week"===e.duration?"week"+(t.weekm?"m":""):e.duration}}return(0,r.wF)((()=>s(l(e.chartParams,e.user)))),(0,r.YP)((()=>e.chartParams),(async t=>{s(l(t,e.user))})),{datasets:(0,r.Fl)((()=>o.value.datasets[n.value])),labels:(0,r.Fl)((()=>o.value.labels)),emptyStats:(0,r.Fl)((()=>0===Object.keys(a.value).length)),displayedData:n,updateDisplayData:i}}});const b=(0,v.Z)(M,[["render",A],["__scopeId","data-v-d5e9b348"]]);var y=b},2179:function(e,t,n){"use strict";n.d(t,{Z:function(){return N}});var r=n(6252),a=n(2262),o=n(3577),s=n(6595),i=n(5801),l=n(9917);const c={class:"box user-header"},u={class:"user-details"},d={class:"user-name"},m={class:"user-stats"},_={class:"user-stat"},E={class:"stat-number"},S={class:"stat-label"},T={class:"user-stat"},p={class:"stat-label"},A={class:"user-stat hide-small"},O={class:"stat-number"},R={class:"stat-label"};var I=(0,r.aZ)({__name:"UserHeader",props:{user:null},setup(e){const t=e,{user:n}=(0,a.BK)(t),I=(0,l.o)(),U=(0,r.Fl)((()=>I.getters[i.YN.GETTERS.AUTH_USER_PROFILE]));return(e,t)=>{const i=(0,r.up)("Distance");return(0,r.wg)(),(0,r.iD)("div",c,[(0,r.Wm)(s.Z,{user:(0,a.SU)(n)},null,8,["user"]),(0,r._)("div",u,[(0,r._)("div",d,(0,o.zw)((0,a.SU)(n).username),1),(0,r._)("div",m,[(0,r._)("div",_,[(0,r._)("span",E,(0,o.zw)((0,a.SU)(n).nb_workouts),1),(0,r._)("span",S,(0,o.zw)(e.$t("workouts.WORKOUT",(0,a.SU)(n).nb_workouts)),1)]),(0,r._)("div",T,[(0,r.Wm)(i,{distance:(0,a.SU)(n).total_distance,unitFrom:"km",digits:0,displayUnit:!1,useImperialUnits:(0,a.SU)(U).imperial_units},null,8,["distance","useImperialUnits"]),(0,r._)("span",p,(0,o.zw)((0,a.SU)(U).imperial_units?"miles":"km"),1)]),(0,r._)("div",A,[(0,r._)("span",O,(0,o.zw)((0,a.SU)(n).nb_sports),1),(0,r._)("span",R,(0,o.zw)(e.$t("workouts.SPORT",(0,a.SU)(n).nb_sports)),1)])])])])}}}),U=n(3744);const g=(0,U.Z)(I,[["__scopeId","data-v-20291951"]]);var N=g},1585:function(e,t,n){"use strict";n.d(t,{Z:function(){return f}});n(7658);var r=n(6252),a=n(2262),o=n(3577),s=n(9963),i=n(4850),l=n(5801),c=n(9917),u=n(6558),d=n(6287);const m={id:"user-infos",class:"description-list"},_={key:1,class:"info-box success-message"},E={key:4,class:"email-form form-box"},S={class:"form-items",for:"email"},T={class:"form-items",for:"email"},p={class:"form-buttons"},A={class:"confirm",type:"submit"},O=["onClick"],R={key:5},I={class:"user-bio"},U={key:0,class:"profile-buttons"},g=["onClick"],N={key:1,class:"profile-buttons"};var h=(0,r.aZ)({__name:"UserInfos",props:{user:null,fromAdmin:{type:Boolean,default:!1}},setup(e){const t=e,n=(0,c.o)(),{user:h,fromAdmin:z}=(0,a.BK)(t),w=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.LANGUAGE])),f=(0,r.Fl)((()=>n.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),v=(0,r.Fl)((()=>t.user.created_at?(0,u.p6)(t.user.created_at,f.value.timezone,f.value.date_format):"")),C=(0,r.Fl)((()=>t.user.birth_date?(0,i.Z)(new Date(t.user.birth_date),`${(0,u.mh)(f.value.date_format,w.value)}`,{locale:d.v1[w.value]}):"")),D=(0,r.Fl)((()=>n.getters[l.RT.GETTERS.USERS_IS_SUCCESS])),k=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),P=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.APP_CONFIG])),L=(0,a.iH)(""),M=(0,a.iH)(!1),b=(0,a.iH)(!1),y=(0,a.iH)(""),G=(0,a.iH)("");function F(e){L.value=e,""!==e&&n.commit(l.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1)}function W(e){n.dispatch(l.RT.ACTIONS.DELETE_USER_ACCOUNT,{username:e})}function K(e){G.value="password-reset",n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,resetPassword:!0})}function Y(e){n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,activate:!0})}function x(){Z(),y.value=h.value.email_to_confirm?h.value.email_to_confirm:"",b.value=!0,G.value="email-update"}function $(){y.value="",b.value=!1}function B(e){n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,new_email:y.value})}function Z(){n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),n.commit(l.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1),G.value=""}return(0,r.Ah)((()=>Z())),(0,r.YP)((()=>D.value),(e=>{e&&(F(""),$())})),(e,t)=>{const n=(0,r.up)("Modal"),i=(0,r.up)("AlertMessage"),l=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",m,[L.value?((0,r.wg)(),(0,r.j4)(n,{key:0,title:e.$t("common.CONFIRMATION"),message:"delete"===L.value?"admin.CONFIRM_USER_ACCOUNT_DELETION":"admin.CONFIRM_USER_PASSWORD_RESET",strongMessage:(0,a.SU)(h).username,onConfirmAction:t[0]||(t[0]=e=>"delete"===L.value?W((0,a.SU)(h).username):K((0,a.SU)(h).username)),onCancelAction:t[1]||(t[1]=e=>F(""))},null,8,["title","message","strongMessage"])):(0,r.kq)("",!0),(0,a.SU)(D)?((0,r.wg)(),(0,r.iD)("div",_,(0,o.zw)(e.$t(`admin.${"password-reset"===G.value?"PASSWORD_RESET":"USER_EMAIL_UPDATE"}_SUCCESSFUL`)),1)):(0,r.kq)("",!0),(0,a.SU)(h).is_active?(0,r.kq)("",!0):((0,r.wg)(),(0,r.j4)(i,{key:2,message:"user.THIS_USER_ACCOUNT_IS_INACTIVE"})),(0,a.SU)(k)?((0,r.wg)(),(0,r.j4)(l,{key:3,message:(0,a.SU)(k)},null,8,["message"])):(0,r.kq)("",!0),b.value?((0,r.wg)(),(0,r.iD)("div",E,[(0,r._)("form",{class:(0,o.C_)({errors:M.value}),onSubmit:t[4]||(t[4]=(0,s.iM)((e=>B((0,a.SU)(h).username)),["prevent"]))},[(0,r._)("label",S,[(0,r.Uk)((0,o.zw)(e.$t("admin.CURRENT_EMAIL"))+" ",1),(0,r.wy)((0,r._)("input",{id:"email",type:"email","onUpdate:modelValue":t[2]||(t[2]=e=>(0,a.SU)(h).email=e),disabled:""},null,512),[[s.nr,(0,a.SU)(h).email]])]),(0,r._)("label",T,[(0,r.Uk)((0,o.zw)(e.$t("admin.NEW_EMAIL"))+"* ",1),(0,r.wy)((0,r._)("input",{id:"new-email",type:"email",required:"","onUpdate:modelValue":t[3]||(t[3]=e=>y.value=e)},null,512),[[s.nr,y.value]])]),(0,r._)("div",p,[(0,r._)("button",A,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,r._)("button",{class:"cancel",onClick:(0,s.iM)($,["prevent"])},(0,o.zw)(e.$t("buttons.CANCEL")),9,O)])],34)])):((0,r.wg)(),(0,r.iD)("div",R,[(0,r._)("dl",null,[(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(v)),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.FIRST_NAME"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(h).first_name),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.LAST_NAME"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(h).last_name),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.BIRTH_DATE"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(C)),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.LOCATION"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(h).location),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.BIO"))+":",1),(0,r._)("dd",I,(0,o.zw)((0,a.SU)(h).bio),1)]),(0,a.SU)(z)?((0,r.wg)(),(0,r.iD)("div",U,[(0,a.SU)(f).username!==(0,a.SU)(h).username?((0,r.wg)(),(0,r.iD)("button",{key:0,class:"danger",onClick:t[5]||(t[5]=(0,s.iM)((e=>F("delete")),["prevent"]))},(0,o.zw)(e.$t("admin.DELETE_USER")),1)):(0,r.kq)("",!0),(0,a.SU)(h).is_active?(0,r.kq)("",!0):((0,r.wg)(),(0,r.iD)("button",{key:1,onClick:t[6]||(t[6]=(0,s.iM)((e=>Y((0,a.SU)(h).username)),["prevent"]))},(0,o.zw)(e.$t("admin.ACTIVATE_USER_ACCOUNT")),1)),(0,a.SU)(f).username!==(0,a.SU)(h).username?((0,r.wg)(),(0,r.iD)("button",{key:2,onClick:(0,s.iM)(x,["prevent"])},(0,o.zw)(e.$t("admin.UPDATE_USER_EMAIL")),9,g)):(0,r.kq)("",!0),(0,a.SU)(f).username!==(0,a.SU)(h).username&&(0,a.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("button",{key:3,onClick:t[7]||(t[7]=(0,s.iM)((e=>F("reset")),["prevent"]))},(0,o.zw)(e.$t("admin.RESET_USER_PASSWORD")),1)):(0,r.kq)("",!0),(0,r._)("button",{onClick:t[8]||(t[8]=t=>e.$router.go(-1))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,r.wg)(),(0,r.iD)("div",N,[(0,r._)("button",{onClick:t[9]||(t[9]=t=>e.$router.push("/profile/edit"))},(0,o.zw)(e.$t("user.PROFILE.EDIT")),1),(0,r._)("button",{onClick:t[10]||(t[10]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))]))])}}}),z=n(3744);const w=(0,z.Z)(h,[["__scopeId","data-v-217519af"]]);var f=w},2411:function(e,t,n){"use strict";n.d(t,{Z:function(){return C}});var r=n(6252),a=n(3577),o=n(2262),s=n(9963),i=n(2201),l=n(8403),c=n(5801),u=n(9917);const d=e=>((0,r.dD)("data-v-b3c885de"),e=e(),(0,r.Cn)(),e),m={id:"user-form"},_={key:2,class:"info-box success-message"},E={class:"form-items"},S=["disabled","placeholder"],T={key:1,class:"form-info"},p=d((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),A=["disabled","placeholder"],O={key:3,class:"form-info"},R=d((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),I=["disabled"],U={key:3},g={key:0},N={key:4},h={class:"account"},z={key:5};var w=(0,r.aZ)({__name:"UserAuthForm",props:{action:null,token:{default:""}},setup(e){const t=e,n=(0,i.yj)(),d=(0,u.o)(),{action:w}=(0,o.BK)(t),f=(0,o.qj)({username:"",email:"",password:""}),v=(0,r.Fl)((()=>G(t.action))),C=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.ERROR_MESSAGES])),D=(0,r.Fl)((()=>d.getters[c.YN.GETTERS.IS_REGISTRATION_SUCCESS])),k=(0,r.Fl)((()=>d.getters[c.YN.GETTERS.IS_SUCCESS])),P=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.APP_CONFIG])),L=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.LANGUAGE])),M=(0,r.Fl)((()=>"register"===t.action&&!P.value.is_registration_enabled)),b=(0,r.Fl)((()=>["reset-request","account-confirmation-resend"].includes(t.action)&&!P.value.is_email_sending_enabled)),y=(0,o.iH)(!1);function G(e){switch(e){case"reset-request":case"reset":return"buttons.SUBMIT";default:return`buttons.${t.action.toUpperCase()}`}}function F(){y.value=!0}function W(e){f.password=e}function K(e){switch(e){case"reset":return t.token?d.dispatch(c.YN.ACTIONS.RESET_USER_PASSWORD,{password:f.password,token:t.token}):d.commit(c.SY.MUTATIONS.SET_ERROR_MESSAGES,"user.INVALID_TOKEN");case"reset-request":return d.dispatch(c.YN.ACTIONS.SEND_PASSWORD_RESET_REQUEST,{email:f.email});case"account-confirmation-resend":return d.dispatch(c.YN.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL,{email:f.email});default:f["language"]=L.value,d.dispatch(c.YN.ACTIONS.LOGIN_OR_REGISTER,{actionType:e,formData:f,redirectUrl:n.query.from})}}function Y(){f.username="",f.email="",f.password=""}return(0,r.Ah)((()=>d.commit(c.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(0,r.YP)((()=>n.path),(async()=>{d.commit(c.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),d.commit(c.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),d.commit(c.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!1),y.value=!1,Y()})),(e,t)=>{const n=(0,r.up)("AlertMessage"),i=(0,r.up)("router-link"),c=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",{id:"user-auth-form",class:(0,a.C_)(`${["reset","reset-request"].includes((0,o.SU)(w))?(0,o.SU)(w):"user-form"}`)},[(0,r._)("div",m,[(0,r._)("div",{class:(0,a.C_)(["form-box",{disabled:(0,o.SU)(M)}])},[(0,o.SU)(M)?((0,r.wg)(),(0,r.j4)(n,{key:0,message:"user.REGISTER_DISABLED"})):(0,r.kq)("",!0),(0,o.SU)(b)?((0,r.wg)(),(0,r.j4)(n,{key:1,message:"admin.EMAIL_SENDING_DISABLED"})):(0,r.kq)("",!0),(0,o.SU)(k)||(0,o.SU)(D)?((0,r.wg)(),(0,r.iD)("div",_,(0,a.zw)(e.$t("user.PROFILE.SUCCESSFUL_"+((0,o.SU)(D)?"REGISTRATION"+((0,o.SU)(P).is_email_sending_enabled?"_WITH_EMAIL":""):"UPDATE"))),1)):(0,r.kq)("",!0),(0,r._)("form",{class:(0,a.C_)({errors:y.value}),onSubmit:t[2]||(t[2]=(0,s.iM)((e=>K((0,o.SU)(w))),["prevent"]))},[(0,r._)("div",E,["register"===(0,o.SU)(w)?(0,r.wy)(((0,r.wg)(),(0,r.iD)("input",{key:0,id:"username",disabled:(0,o.SU)(M),required:"",pattern:"[a-zA-Z0-9_]+",minlength:"3",maxlength:"30",onInvalid:F,"onUpdate:modelValue":t[0]||(t[0]=e=>f.username=e),placeholder:e.$t("user.USERNAME")},null,40,S)),[[s.nr,f.username]]):(0,r.kq)("",!0),"register"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",T,[p,(0,r.Uk)(" "+(0,a.zw)(e.$t("user.USERNAME_INFO")),1)])):(0,r.kq)("",!0),"reset"!==(0,o.SU)(w)?(0,r.wy)(((0,r.wg)(),(0,r.iD)("input",{key:2,id:"email",disabled:(0,o.SU)(M)||(0,o.SU)(b),required:"",onInvalid:F,type:"email","onUpdate:modelValue":t[1]||(t[1]=e=>f.email=e),placeholder:e.$t("user.EMAIL")},null,40,A)),[[s.nr,f.email]]):(0,r.kq)("",!0),["reset-request","register","account-confirmation-resend"].includes((0,o.SU)(w))?((0,r.wg)(),(0,r.iD)("div",O,[R,(0,r.Uk)(" "+(0,a.zw)(e.$t("user.EMAIL_INFO")),1)])):(0,r.kq)("",!0),["account-confirmation-resend","reset-request"].includes((0,o.SU)(w))?(0,r.kq)("",!0):((0,r.wg)(),(0,r.j4)(l.Z,{key:4,disabled:(0,o.SU)(M),required:!0,placeholder:"reset"===(0,o.SU)(w)?e.$t("user.ENTER_PASSWORD"):e.$t("user.PASSWORD"),password:f.password,checkStrength:["reset","register"].includes((0,o.SU)(w)),onUpdatePassword:W,onPasswordError:F},null,8,["disabled","placeholder","password","checkStrength"]))]),(0,r._)("button",{type:"submit",disabled:(0,o.SU)(M)||(0,o.SU)(b)},(0,a.zw)(e.$t((0,o.SU)(v))),9,I)],34),"login"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",U,[(0,r.Wm)(i,{class:"links",to:"/register"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.REGISTER")),1)])),_:1}),(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("span",g,"-")):(0,r.kq)("",!0),(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.j4)(i,{key:1,class:"links",to:"/password-reset/request"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.PASSWORD_FORGOTTEN")),1)])),_:1})):(0,r.kq)("",!0)])):(0,r.kq)("",!0),"register"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",N,[(0,r._)("span",h,(0,a.zw)(e.$t("user.ALREADY_HAVE_ACCOUNT")),1),(0,r.Wm)(i,{class:"links",to:"/login"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.LOGIN")),1)])),_:1})])):(0,r.kq)("",!0),["login","register"].includes((0,o.SU)(w))&&(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("div",z,[(0,r.Wm)(i,{class:"links",to:"/account-confirmation/resend"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.ACCOUNT_CONFIRMATION_NOT_RECEIVED")),1)])),_:1})])):(0,r.kq)("",!0),(0,o.SU)(C)?((0,r.wg)(),(0,r.j4)(c,{key:6,message:(0,o.SU)(C)},null,8,["message"])):(0,r.kq)("",!0)],2)])],2)}}}),f=n(3744);const v=(0,f.Z)(w,[["__scopeId","data-v-b3c885de"]]);var C=v},6595:function(e,t,n){"use strict";n.d(t,{Z:function(){return _}});var r=n(6252),a=n(2262),o=n(2024);const s={class:"user-picture"},i=["alt","src"],l={key:1,class:"no-picture"},c=(0,r._)("i",{class:"fa fa-user-circle-o","aria-hidden":"true"},null,-1),u=[c];var d=(0,r.aZ)({__name:"UserPicture",props:{user:null},setup(e){const t=e,n=(0,r.Fl)((()=>t.user.picture?`${(0,o.k)()}users/${t.user.username}/picture?${Date.now()}`:""));return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[""!==(0,a.SU)(n)?((0,r.wg)(),(0,r.iD)("img",{key:0,class:"profile-user-img",alt:e.$t("user.USER_PICTURE"),src:(0,a.SU)(n)},null,8,i)):((0,r.wg)(),(0,r.iD)("div",l,u))]))}});const m=d;var _=m},5630:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(6252),a=n(3577);const o={class:"no-workouts box"};function s(e,t){const n=(0,r.up)("router-link");return(0,r.wg)(),(0,r.iD)("div",o,[(0,r._)("div",null,[(0,r.Uk)((0,a.zw)(e.$t("workouts.NO_WORKOUTS"))+" ",1),(0,r.Wm)(n,{to:"/workouts/add"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("workouts.UPLOAD_FIRST_WORKOUT")),1)])),_:1})])])}var i=n(3744);const l={},c=(0,i.Z)(l,[["render",s],["__scopeId","data-v-4b4d15fb"]]);var u=c},4612:function(e,t,n){var r={"./de/de.ts":9923,"./en/en.ts":8757,"./fr/fr.ts":6625,"./nb/nb.ts":8891};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=4612}},t={};function n(r){var a=t[r];if(void 0!==a)return a.exports;var o=t[r]={exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.m=e,function(){var e=[];n.O=function(t,r,a,o){if(!r){var s=1/0;for(u=0;u=o)&&Object.keys(n.O).every((function(e){return n.O[e](r[l])}))?r.splice(l--,1):(i=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]}}(),function(){n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,{a:t}),t}}(),function(){var e,t=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__};n.t=function(r,a){if(1&a&&(r=this(r)),8&a)return r;if("object"===typeof r&&r){if(4&a&&r.__esModule)return r;if(16&a&&"function"===typeof r.then)return r}var o=Object.create(null);n.r(o);var s={};e=e||[null,t({}),t([]),t(t)];for(var i=2&a&&r;"object"==typeof i&&!~e.indexOf(i);i=t(i))Object.getOwnPropertyNames(i).forEach((function(e){s[e]=function(){return r[e]}}));return s["default"]=function(){return r},n.d(o,s),o}}(),function(){n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}}(),function(){n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce((function(t,r){return n.f[r](e,t),t}),[]))}}(),function(){n.u=function(e){return"static/js/"+({24:"reset",193:"statistics",328:"admin",401:"workouts",845:"profile",881:"password"}[e]||e)+"."+{24:"f6540a23",93:"02cf293c",193:"faaccb1e",243:"e551248f",328:"c8949458",401:"f1d6cc45",431:"e5102e07",633:"81a8ddc8",845:"ff8ee2f9",858:"3f2a93f2",881:"43430dfc"}[e]+".js"}}(),function(){n.miniCssF=function(e){return"static/css/"+{24:"reset",193:"statistics",328:"admin",401:"workouts",845:"profile"}[e]+"."+{24:"e2527ec6",193:"40e24e75",328:"73df498d",401:"41709693",845:"203e78e2"}[e]+".css"}}(),function(){n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){var e={},t="fittrackee_client:";n.l=function(r,a,o,s){if(e[r])e[r].push(a);else{var i,l;if(void 0!==o)for(var c=document.getElementsByTagName("script"),u=0;u{const t=new AbortController;e.signal=t.signal;const n=(0,o.a)(e);o.j.set(n,t);const r=s.Z.getters[i.YN.GETTERS.AUTH_TOKEN];if(r){const t=`Bearer ${r}`;e.headers&&e.headers.Authorization!==t&&(e.headers.Authorization=`Bearer ${r}`)}return e}),(e=>Promise.reject(e))),c.interceptors.response.use((e=>((0,o.a)(e.config),e)),(e=>("canceled"!==e.message&&(0,o.a)(e.response.config),Promise.reject(e)))),t["Z"]=c},8566:function(e,t,n){"use strict";n.d(t,{a:function(){return o},j:function(){return r}});const r=new Map,a=e=>{const{method:t,url:n,params:r={},data:a={}}=e;return[t,n,JSON.stringify(r),JSON.stringify(a)].join("")},o=e=>{const t=a(e);if(r.has(t)){const e=r.get(t)||{};e?.abort(),r.delete(t)}return t}},2540:function(e,t,n){"use strict";var r=n(9150);const a=["nb"];function o(){const e=n(4612),t={};return e.keys().forEach((n=>{const r=n.match(/([A-Za-z0-9-_]+)\./i);if(r&&r.length>1&&!a.includes(r[1])){const a=r[1];t[a]=e(n).default}})),t}t["Z"]=(0,r.o)({legacy:!1,locale:"en",fallbackLocale:"en",globalInjection:!0,messages:o()})},9923:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Kontaktiere den Administrator"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee ist ein selbst-gehosteter Outdoor-Aktivitäts-Tracker."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["unter ",n(r(0))," Lizenz "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Quellkode"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Aktion"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Aktiviere Konto"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Aktiv"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Hinzufügen/Entfernen von Administratorrechten, Lösche Nutzerkonto."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Anwendung"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Kontakt-E-Mail des Administrators"])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Max. Anzahl aktiver Nutzer"])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["Wenn 0, gibt es keine Registrierungslimitierung.."])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Max. Dateianzahl im zip Archiv"])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["keine Kontakt-E-Mail"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. Größe der hochgeladenen Dateien (in Mb)"])},TITLE:e=>{const{normalize:t}=e;return t(["Anwendungskonfiguration"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. Größe des zip Archives (in Mb)"])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Zurück zu Admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Möchtest du wirklich das ",n(r(0))," Konto löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Möchtest du wirklich das ",n(r(0))," Passwort zurücksetzen?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Aktuelle E-Mail"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Lösche Nutzer"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["E-Mail-Versand ist deaktiviert."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Aktivieren/Deaktivieren von Sportarten."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["Neue E-Mail"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Das wasswort wurde zurückgesetzt."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Registrierung ist derzeit deaktiviert."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Registrierung ist derzeit aktiviert."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Aktiv"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["Trainings existieren"])},IMAGE:e=>{const{normalize:t}=e;return t(["Bild"])},LABEL:e=>{const{normalize:t}=e;return t(["Titel"])}},TITLE:e=>{const{normalize:t}=e;return t(["Sportarten Administration"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Aktualisiere Anwemdungskonfiguration (maximale Anzahl an registrierten Nutzern, maximale Dateigröße)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Aktualisiere E-Mail"])},USER:e=>{const{normalize:t}=e;return t(["Nutzer"])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Die E-Mail Adresse wurde aktualisiert."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Administratorrechte hinzufügen"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Administratorrechte entfernen"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["Adminstatus"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["Registrierungsdatum"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["Accountstatus"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nutzername"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["Trainingsanzahl"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["E-Mail: Eine gültige E-Mail muss angegeben werden."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Fehler bei der GPX-Verarbeitung."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Fehler beim Einlesen der GPX-Datei"])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Fehler beim Abrufen der Konfiguration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Fehler beim Aktualisieren der Konfiguration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Fehler. Die Registrierung ist deaktiviert."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["Dateierweiterung ist nicht erlaubt."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["Die Datei ist größer als erlaubt."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Ungültige Anmeldedaten."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Die bereitgestellten Daten sind ungültig."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte erneut anmelden."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte erneut anmelden."])},"Network Error":e=>{const{normalize:t}=e;return t(["Netzwerkfehler."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["Die neue E-Mail muss sich von der aktuellen E-Mail unterscheiden"])},"no file part":e=>{const{normalize:t}=e;return t(["Keine Datei angegeben."])},"no selected file":e=>{const{normalize:t}=e;return t(["Keine Datei ausgewählt."])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Passwort: Passwort und Passwortbestätigung stimmen nicht überein."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Gebe ein gültiges Authentifizierungstoken an."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Es tut mir leid, der Benutzername ist schon vergeben."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Sportart existiert nicht."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Die Signatur ist abgelaufen. Bitte melde dich erneut an."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Registrierung erfolgreich."])},"user does not exist":e=>{const{normalize:t}=e;return t(["Der Nutzer existiert nicht."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["Um den Administrator zu kontaktieren, muss eine gültige E-Mail-Adresse angegeben werden"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["Du kannst Dein Konto nicht löschen, da kein anderer Nutzer hat Administratorrechte besitzt."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["Du hast keine Berechtigung."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["Vorhergehende"])},NEXT:e=>{const{normalize:t}=e;return t(["Nächste"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Bestätigungs-E-Mail erneut senden"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Autorisieren"])},BACK:e=>{const{normalize:t}=e;return t(["Zurück"])},CANCEL:e=>{const{normalize:t}=e;return t(["Abbrechen"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Filter löschen"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Mein Konto löschen"])},DISABLE:e=>{const{normalize:t}=e;return t(["Deaktivieren"])},EDIT:e=>{const{normalize:t}=e;return t(["Bearbeiten"])},ENABLE:e=>{const{normalize:t}=e;return t(["Aktivieren"])},FILTER:e=>{const{normalize:t}=e;return t(["Filter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Anmelden"])},NO:e=>{const{normalize:t}=e;return t(["Nein"])},REGISTER:e=>{const{normalize:t}=e;return t(["Registrieren"])},RESET:e=>{const{normalize:t}=e;return t(["Zurücksetzen"])},SUBMIT:e=>{const{normalize:t}=e;return t(["Speichern"])},YES:e=>{const{normalize:t}=e;return t(["Ja"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["Über"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bestätigung"])},CONTACT:e=>{const{normalize:t}=e;return t(["Kontakt"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["Tag"]),t(["Tage"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Angezeigt"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["Dokumentation (en)"])},HERE:e=>{const{normalize:t}=e;return t(["hier"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Versteckt"])},HOME:e=>{const{normalize:t}=e;return t(["Startseite"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["sortiert nach"])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["sortieren"])},ASC:e=>{const{normalize:t}=e;return t(["aufsteigend"])},DESC:e=>{const{normalize:t}=e;return t(["absteigend"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["pro Seite"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Insgesamt"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Dashboard"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["Dieser Monat"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Fehler. Bitte versuche es erneut oder kontaktiere den Administrator."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["Bei der Anwendung scheinen einige Probleme aufgetreten zu sein.
                                                                              Bitte versuche es später noch einmal oder kontaktiere den Administrator."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Seite nicht gefunden"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Training nicht gefunden"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Etwas lief schief"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Eine neue OAuth2-Anwendung hinzufügen"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["ID"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Geheimnis"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Anwendungsbeschreibung"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Erstellt am"])},NAME:e=>{const{normalize:t}=e;return t(["Anwendungsname"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["Weiterleitungs-URL"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Geltungsbereich"])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf auth-Endpunkte"])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf auth-Endpunkte"])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf users-Endpunkte"])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf users-Endpunkte"])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Lesezugriff auf workouts-Endpunkte"])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf workouts-Endpunkte"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["erlaubt Schreibzugriff auf die Anwendungskonfiguration"])}},URL:e=>{const{normalize:t}=e;return t(["Anwendungs-URL"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Anwendung erfolgreich erstellt. Stelle sicher, dass du das Geheimnis kopierst, du kannst es nicht erneut anzeigen."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist sicher, dass du diese App löschen willst?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Die Anwendung ",n(r(0))," fragt an:"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["OAuth2-Anwendungen"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t([n(r(0))," den Zugriff auf deinen Account erlauben?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["in Zwischenablage kopieren"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Anwendung löschen"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Anwendung hinzufügen"])},NO_APP:e=>{const{normalize:t}=e;return t(["Anwendung wurde nicht gefunden!"])},NO_APPS:e=>{const{normalize:t}=e;return t(["keine Anwendungen"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["keine Beschreibung"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Alle Tokens zurückrufen"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist du sicher, dass du alle Tokens zurückrufen möchtest?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["Alle vorhandenen und vergebenen Tokens wurde zurückgerufen."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Pendeln)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Radfahren (Virtuell)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Wandern"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["Mountainbiken"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["Mountainbiken (elektrisch)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Rudern"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Laufen"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Skifahren (Alpin)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Skifahren (Langlauf)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Schneeschuhe"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Gehen"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistik"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["Woche"])},month:e=>{const{normalize:t}=e;return t(["Monat"])},year:e=>{const{normalize:t}=e;return t(["Jahr"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Hast du keine Anweisungen erhalten?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Prüfe deine E-Mail. Eine neue Bestätigungs-E-Mail wurde an die angegebene Adresse geschickt."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Hast du bereits ein Konto?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Möchtest du dein Konto wirklich löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Aktuelles Passwort"])},EMAIL:e=>{const{normalize:t}=e;return t(["E-Mail"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Gebe eine gültige E-Mail-Adresse an."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Gebe ein Passwort ein"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Nach Benutzernamen filtern"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort verbergen"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Ungültiges Token, bitte fordere ein neues Passworts an."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Sprache"])},LOG_IN:e=>{const{normalize:t}=e;return t(["Anmelden"])},LOGIN:e=>{const{normalize:t}=e;return t(["Anmeldung"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Abmelden"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["Neues Passwort"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["Keine Nutzer gefunden."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["Mindestens 8 Zeichen sind erforderlich."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Passwort vergessen?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Prüfe Deine E-Mail. Wenn Deine Adresse in der Datenbank enthalten ist, wirst du eine E-Mail mit einem Link erhalten um Dein Passwort zurückzusetzen."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["schwach"])},AVERAGE:e=>{const{normalize:t}=e;return t(["mittel"])},GOOD:e=>{const{normalize:t}=e;return t(["gut"])},STRONG:e=>{const{normalize:t}=e;return t(["start"])},LABEL:e=>{const{normalize:t}=e;return t(["Passwortstärke"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Vermeide vorhersehbare Buchstabenersetzungen wie ","@"," für a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Vermeide umgekehrte Schreibweisen gebräuchlicher Wörter."])},allUppercase:e=>{const{normalize:t}=e;return t(["Schreibe einige, aber nicht alle Buchstaben groß."])},capitalization:e=>{const{normalize:t}=e;return t(["Schreibe mehr als nur den ersten Buchstaben groß."])},dates:e=>{const{normalize:t}=e;return t(["Vermeide Daten und Jahreszahlen, die mit Dir in Verbindung gebracht werden."])},recentYears:e=>{const{normalize:t}=e;return t(["Vermeide Angabe von letzten Jahreszahlen."])},associatedYears:e=>{const{normalize:t}=e;return t(["Vermeide Jahreszahlen, die mit Dir in Verbindung gebracht werden."])},sequences:e=>{const{normalize:t}=e;return t(["Vermeide gebräuchliche Zeichenfolgen."])},repeated:e=>{const{normalize:t}=e;return t(["Vermeide wiederholungen von Wörtern und Zeichen."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Verwende längere Tastaturmuster und ändere mehrmals die Schreibrichtung."])},anotherWord:e=>{const{normalize:t}=e;return t(["Füge weitere weniger gebräuchliche Wörter hinzu."])},useWords:e=>{const{normalize:t}=e;return t(["Verwenden Sie mehrere Wörter, aber vermeide gebräuchliche Ausdrücke."])},noNeed:e=>{const{normalize:t}=e;return t(["Du kannst sichere Passwörter erstellen, ohne Symbole, Zahlen oder Großbuchstaben zu verwenden."])},pwned:e=>{const{normalize:t}=e;return t(["Wenn Sie dieses Passwort auch anderweitig verwenden, sollten Sie es ändern."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Dein Passwort wurde aktualisiert. Klicke ",n(r(0))," um dich anzumelden."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Kontoausgabe"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Anstiegs-bezogene Daten (Aufnahmen, gesamt)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Zurück zum Profil"])},BIO:e=>{const{normalize:t}=e;return t(["Biographie"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Geburtsdatum"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Datumsanzeigeformat"])},EDIT:e=>{const{normalize:t}=e;return t(["Profil bearbeiten"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen ändern"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen für Sportarten ändern"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Bitte ",n(r(0))," um Deine E-Mail Adresse nochmals zu ändern oder kontaktiere den Administrator"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["Vorname"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["Erster Tag der Woche"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Sprache"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Nachname"])},LOCATION:e=>{const{normalize:t}=e;return t(["Ort"])},MONDAY:e=>{const{normalize:t}=e;return t(["Montag"])},PICTURE:e=>{const{normalize:t}=e;return t(["Bild"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Bildausgabe"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Bild aktualisieren"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Bild entfernen"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Einstellungsausgabe"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Profil-Ausgabe"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Regirierungsdatum"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Sportarten-Einstellungsausgabe"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Sontag"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["Konto"])},APPS:e=>{const{normalize:t}=e;return t(["Anwendungen"])},PICTURE:e=>{const{normalize:t}=e;return t(["Bild"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["Einstellungen"])},PROFILE:e=>{const{normalize:t}=e;return t(["Profil"])},SPORTS:e=>{const{normalize:t}=e;return t(["Sportarten"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["Aktion"])},COLOR:e=>{const{normalize:t}=e;return t(["Farbe"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["vom Admin deaktiviert"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["aktiv"])},LABEL:e=>{const{normalize:t}=e;return t(["Titel"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["Geschwindigkeitsschwellenwert für Stopp"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich aktualisiert. Bitte prüfe Deine E-Mail um die neue E-Mail Adresse zu bestätigen."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich erstellt."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["Ein Aktivierungslink für Dein Konto wurde an die angegebene E-Mail Adresse geschickt."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Dein Konto wurde erfolgreich aktualisiert."])},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Einheiten für die Distanz"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Imperiales System (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Metrisches System (m, km)"])}},TIMEZONE:e=>{const{normalize:t}=e;return t(["Zeitzone"])}},REGISTER:e=>{const{normalize:t}=e;return t(["Registrieren"])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["E-Mail zur Kontobestätigung erneut senden"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Entschuldigung, die Registrierung ist deaktiviert."])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort zurücksetzen"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["Passwort anzeigen"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["Dieser Account ist inaktiv."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["Benutzerbild"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nutzername"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(["3 bis 30 Zeichen sind erforderlich, nur alphanumerische Zeichen und der Unterstrich _ sind erlaubt."])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Training hinzufügen"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["Analyse"])},ASCENT:e=>{const{normalize:t}=e;return t(["Aufstieg"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["Durchschn. Geschwindigkeit"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["Durchschnittsgeschwindigkeit"])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["zurück zum Training"])},DATE:e=>{const{normalize:t}=e;return t(["Datum"])},DESCENT:e=>{const{normalize:t}=e;return t(["Abstieg"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["zeige Filter"])},DISTANCE:e=>{const{normalize:t}=e;return t(["Entfernung"])},DURATION:e=>{const{normalize:t}=e;return t(["Dauer"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Training bearbeiten"])},ELEVATION:e=>{const{normalize:t}=e;return t(["Höhe"])},END:e=>{const{normalize:t}=e;return t(["Ende"])},FROM:e=>{const{normalize:t}=e;return t(["Von"])},GPX_FILE:e=>{const{normalize:t}=e;return t([".gpx Datei"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["verberge Filter"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Letzte Trainings"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Lade mehr Trainings"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["maximale Höhe"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["Maximale Dateianzahl"])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["Maximalgröße"])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["Max. Geschwindigkeit"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["minimale Höhe"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Nächstes Segment"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Nächstes Training"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["Daten aus gpx, ohne Bereinigung"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["Keine Datei angegeben"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["enthält keinen Ordner"])},NO_MAP:e=>{const{normalize:t}=e;return t(["Keine Karte"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Kein nächstes Segment"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Kein nächstes Training"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["Keine Anmerkungen"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Kein vorheriges Segment"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Kein vorheriges Training"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["Keine Aufzeichnungen."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["Keine Trainings."])},NOTES:e=>{const{normalize:t}=e;return t(["Anmerkungen"])},PAUSES:e=>{const{normalize:t}=e;return t(["Pausen"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Vorheriges Segment"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Vorheriges Training"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["Aufzeichnung"]),t(["Aufzeichnungen"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Durchschn. Geschwindigkeit"])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Weiteste Entfernung"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Höchster Anstieg"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Längste Dauer"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Max. Geschwindigkeit"])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["verbleibende Zeichen"])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["Segment"]),t(["Segmente"])])},SPEED:e=>{const{normalize:t}=e;return t(["Geschwindigkeit"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["Sportart"]),t(["Sportarten"])])},START:e=>{const{normalize:t}=e;return t(["Start"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Start und Ziel"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["Höhenachse bei Null starten"])},TITLE:e=>{const{normalize:t}=e;return t(["Titel"])},TO:e=>{const{normalize:t}=e;return t(["bis"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["Gesamtdauer"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Füge erstes Training hinzu!"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["Luftfeuchtigkeit"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["Temperatur"])},WIND:e=>{const{normalize:t}=e;return t(["Wind"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNO"])},NE:e=>{const{normalize:t}=e;return t(["NO"])},ENE:e=>{const{normalize:t}=e;return t(["ONO"])},E:e=>{const{normalize:t}=e;return t(["O"])},ESE:e=>{const{normalize:t}=e;return t(["OSO"])},SE:e=>{const{normalize:t}=e;return t(["SO"])},SSE:e=>{const{normalize:t}=e;return t(["SSO"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSW"])},SW:e=>{const{normalize:t}=e;return t(["SW"])},WSW:e=>{const{normalize:t}=e;return t(["WSW"])},W:e=>{const{normalize:t}=e;return t(["W"])},WNW:e=>{const{normalize:t}=e;return t(["WNW"])},NW:e=>{const{normalize:t}=e;return t(["NW"])},NNW:e=>{const{normalize:t}=e;return t(["NNW"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["klarer Tag"])},"clear-night":e=>{const{normalize:t}=e;return t(["klare Nacht"])},cloudy:e=>{const{normalize:t}=e;return t(["wolkig"])},fog:e=>{const{normalize:t}=e;return t(["Nebel"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["teilweise bewölkter Tag"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["teilweise bewölkte Nacht"])},rain:e=>{const{normalize:t}=e;return t(["Regen"])},sleet:e=>{const{normalize:t}=e;return t(["Schneeregen"])},snow:e=>{const{normalize:t}=e;return t(["Schnee"])},wind:e=>{const{normalize:t}=e;return t(["Wind"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["mit .gpx Datei"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["ohne .gpx Datei"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["Training"]),t(["Trainings"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["Trainingsdatum"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Bist du sicher, dass du dieses Training löschen möchtest?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t([".zip Datei"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["oder .zip Datei mit .gpx Dateien"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},8757:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Contact the administrator"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee is a self-hosted outdoor activity tracker."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["under ",n(r(0))," license "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Source code"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Action"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Activate account"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Active"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Add/remove admin rights, delete user account."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Application"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Administrator email for contact"])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Max. number of active users"])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["If 0, no limitation on registration."])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Max. files of zip archive"])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["no contact email"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. size of uploaded files (in Mb)"])},TITLE:e=>{const{normalize:t}=e;return t(["Application configuration"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Max. size of zip archive (in Mb)"])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Back to admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Are you sure you want to delete ",n(r(0))," account? All data will be deleted, this cannot be undone."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Are you sure you want to reset ",n(r(0))," password?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Current email"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Delete user"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["Email sending is disabled."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Enable/disable sports."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["New email"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["The password has been reset."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Registration is currently disabled."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Registration is currently enabled."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Reset password"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Active"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["workouts exist"])},IMAGE:e=>{const{normalize:t}=e;return t(["Image"])},LABEL:e=>{const{normalize:t}=e;return t(["Label"])}},TITLE:e=>{const{normalize:t}=e;return t(["Sports administration"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Update application configuration (maximum number of registered users, maximum files size)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Update email"])},USER:e=>{const{normalize:t,plural:n}=e;return n([t(["user"]),t(["users"])])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["The email address has been updated."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Add admin rights"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Remove admin rights"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["admin status"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["registration date"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["account status"])},USERNAME:e=>{const{normalize:t}=e;return t(["username"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["workout count"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Error. Please try again or contact the administrator."])},"at least one file in zip archive exceeds size limit, please check the archive":e=>{const{normalize:t}=e;return t(["At least one file in zip archive exceeds size limit, please check the archive."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["Email: valid email must be provided."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Error during gpx processing."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Error during gpx file parsing."])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Error on getting configuration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Error when updating configuration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Error, please try again or contact the administrator."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Error, registration is disabled."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["File extension not allowed."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["File size is greater than the allowed size."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Invalid credentials."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Provided data are invalid."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Invalid token, please log in again."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Invalid token, please log in again."])},"Network Error":e=>{const{normalize:t}=e;return t(["Network Error."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["The new email must be different than curent email"])},"no file part":e=>{const{normalize:t}=e;return t(["No file provided."])},"no selected file":e=>{const{normalize:t}=e;return t(["No selected file."])},"the number of files in the archive exceeds the limit":e=>{const{normalize:t}=e;return t(["The number of files in the archive exceeds the limit."])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Password: password and password confirmation don't match."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Provide a valid auth token."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Sorry, that username is already taken."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Sport does not exist."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Signature expired. Please log in again."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Successfully registered."])},"user does not exist":e=>{const{normalize:t}=e;return t(["User does not exist."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["A valid email must be provided for administrator contact"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["You can not delete your account, no other user has admin rights."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["You do not have permissions."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["previous"])},NEXT:e=>{const{normalize:t}=e;return t(["next"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Resend confirmation email"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Authorize"])},BACK:e=>{const{normalize:t}=e;return t(["Back"])},CANCEL:e=>{const{normalize:t}=e;return t(["Cancel"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Clear filters"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Delete my account"])},DISABLE:e=>{const{normalize:t}=e;return t(["Disable"])},EDIT:e=>{const{normalize:t}=e;return t(["Edit"])},ENABLE:e=>{const{normalize:t}=e;return t(["Enable"])},FILTER:e=>{const{normalize:t}=e;return t(["Filter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Log in"])},NO:e=>{const{normalize:t}=e;return t(["No"])},REGISTER:e=>{const{normalize:t}=e;return t(["Register"])},RESET:e=>{const{normalize:t}=e;return t(["Reset"])},SUBMIT:e=>{const{normalize:t}=e;return t(["Submit"])},YES:e=>{const{normalize:t}=e;return t(["Yes"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["about"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Confirmation"])},CONTACT:e=>{const{normalize:t}=e;return t(["contact"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["day"]),t(["days"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Displayed"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["documentation"])},HERE:e=>{const{normalize:t}=e;return t(["here"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Hidden"])},HOME:e=>{const{normalize:t}=e;return t(["Home"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["order by"])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["sort"])},ASC:e=>{const{normalize:t}=e;return t(["ascending"])},DESC:e=>{const{normalize:t}=e;return t(["descending"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["par page"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Total"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Dashboard"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["This month"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Error. Please try again or contact the administrator."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["The application seems to have encountered some issues.
                                                                              Please try again later or contact the administrator."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Page not found"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Workout not found"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Something went wrong"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Add a new OAuth2 application"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["Id"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Secret"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Application description"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Issue at"])},NAME:e=>{const{normalize:t}=e;return t(["Application name"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["Redirect URL"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Scope"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to application configuration."])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to auth endpoints."])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to auth endpoints."])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to users endpoints."])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to users endpoints."])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants read access to workouts endpoints."])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["grants write access to workouts endpoints."])}},URL:e=>{const{normalize:t}=e;return t(["Application URL"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Application created successfully. Make sure to copy the secret now, it won't show up again."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete this app?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["The application ",n(r(0))," is requesting:"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["OAuth2 applications"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Authorize ",n(r(0))," to use your account?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["copy to the clipboard"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Delete application"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Add an application"])},NO_APP:e=>{const{normalize:t}=e;return t(["Application not found!"])},NO_APPS:e=>{const{normalize:t}=e;return t(["no applications"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["no description"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Revoke all tokens"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to revoke all tokens?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["All existing associated tokens have been revoked."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Transport)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Cycling (Virtual)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Hiking"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["Mountain Biking"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["Mountain Biking (Electric)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Rowing"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Running"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Skiing (Alpine)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Skiing (Cross Country)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Snowshoes"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Walking"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistics"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["week"])},month:e=>{const{normalize:t}=e;return t(["month"])},year:e=>{const{normalize:t}=e;return t(["year"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Didn't received instructions?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Check your email. A new confirmation email has been sent to the address provided."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Already have an account?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete your account? All data will be deleted, this cannot be undone"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Current password"])},EMAIL:e=>{const{normalize:t}=e;return t(["Email"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Enter a valid email address."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Enter a password"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Filter on username"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["hide password"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Invalid token, please request a new password reset."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Language"])},LOG_IN:e=>{const{normalize:t}=e;return t(["log in"])},LOGIN:e=>{const{normalize:t}=e;return t(["Login"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Logout"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["New password"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["No users found."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Password"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["At least 8 characters required."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Forgot password?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Password reset"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Check your email. If your address is in our database, you'll received an email with a link to reset your password."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["weak"])},AVERAGE:e=>{const{normalize:t}=e;return t(["average"])},GOOD:e=>{const{normalize:t}=e;return t(["good"])},STRONG:e=>{const{normalize:t}=e;return t(["strong"])},LABEL:e=>{const{normalize:t}=e;return t(["password strength"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Avoid predictable letter substitutions like ","@"," for a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Avoid reversed spellings of common words."])},allUppercase:e=>{const{normalize:t}=e;return t(["Capitalize some, but not all letters."])},capitalization:e=>{const{normalize:t}=e;return t(["Capitalize more than the first letter."])},dates:e=>{const{normalize:t}=e;return t(["Avoid dates and years that are associated with you."])},recentYears:e=>{const{normalize:t}=e;return t(["Avoid recent years."])},associatedYears:e=>{const{normalize:t}=e;return t(["Avoid years that are associated with you."])},sequences:e=>{const{normalize:t}=e;return t(["Avoid common character sequences."])},repeated:e=>{const{normalize:t}=e;return t(["Avoid repeated words and characters."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Use longer keyboard patterns and change typing direction multiple times."])},anotherWord:e=>{const{normalize:t}=e;return t(["Add more words that are less common."])},useWords:e=>{const{normalize:t}=e;return t(["Use multiple words, but avoid common phrases."])},noNeed:e=>{const{normalize:t}=e;return t(["You can create strong passwords without using symbols, numbers, or uppercase letters."])},pwned:e=>{const{normalize:t}=e;return t(["If you use this password elsewhere, you should change it."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Your password have been updated. Click ",n(r(0))," to log in."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Account edition"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Ascent-related data (records, total)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Back to profile"])},BIO:e=>{const{normalize:t}=e;return t(["Bio"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Birth date"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Date display format"])},EDIT:e=>{const{normalize:t}=e;return t(["Edit profile"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Edit preferences"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Edit sports preferences"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Please ",n(r(0))," to change your email address again or contact the administrator"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["First name"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["First day of week"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Language"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Last name"])},LOCATION:e=>{const{normalize:t}=e;return t(["Location"])},MONDAY:e=>{const{normalize:t}=e;return t(["Monday"])},PICTURE:e=>{const{normalize:t}=e;return t(["Picture"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Picture edition"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Update picture"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Remove picture"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Preferences edition"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Profile edition"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Registration date"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Sports preferences edition"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Sunday"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["account"])},APPS:e=>{const{normalize:t}=e;return t(["apps"])},PICTURE:e=>{const{normalize:t}=e;return t(["picture"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["preferences"])},PROFILE:e=>{const{normalize:t}=e;return t(["profile"])},SPORTS:e=>{const{normalize:t}=e;return t(["sports"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["action"])},COLOR:e=>{const{normalize:t}=e;return t(["color"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["disabled by admin"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["active"])},LABEL:e=>{const{normalize:t}=e;return t(["label"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["stopped speed threshold"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Your account has been updated successfully. Please check your email to confirm your new email address."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Your account has been created successfully."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["A link to activate your account has been emailed to the address provided."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Your account has been updated successfully."])},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Units for distance"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Imperial system (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Metric system (m, km)"])}},TIMEZONE:e=>{const{normalize:t}=e;return t(["Timezone"])}},REGISTER:e=>{const{normalize:t}=e;return t(["Register"])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Resend account confirmation email"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Sorry, registration is disabled."])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Reset your password"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["show password"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["This user account is inactive."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["user picture"])},USERNAME:e=>{const{normalize:t}=e;return t(["Username"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(['3 to 30 characters required, only alphanumeric characters and the underscore character "_" allowed.'])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Add a workout"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["analysis"])},ASCENT:e=>{const{normalize:t}=e;return t(["ascent"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["ave. speed"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["average speed"])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["back to workout"])},DATE:e=>{const{normalize:t}=e;return t(["date"])},DESCENT:e=>{const{normalize:t}=e;return t(["descent"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["display filters"])},DISTANCE:e=>{const{normalize:t}=e;return t(["distance"])},DURATION:e=>{const{normalize:t}=e;return t(["duration"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Edit the workout"])},ELEVATION:e=>{const{normalize:t}=e;return t(["elevation"])},END:e=>{const{normalize:t}=e;return t(["end"])},FROM:e=>{const{normalize:t}=e;return t(["from"])},GPX_FILE:e=>{const{normalize:t}=e;return t([".gpx file"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["hide filters"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Latest workouts"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Load more workouts"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["max. altitude"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["max files"])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["max size"])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["max. speed"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["min. altitude"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["No next segment"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Next workout"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["data from gpx, without any cleaning"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["No file provided"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["no folder inside"])},NO_MAP:e=>{const{normalize:t}=e;return t(["No map"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["No next segment"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["No next workout"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["No notes"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["No previous segment"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["No previous workout"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["No records."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["No workouts."])},NOTES:e=>{const{normalize:t}=e;return t(["notes"])},PAUSES:e=>{const{normalize:t}=e;return t(["pauses"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Previous segment"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Previous workout"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["record"]),t(["records"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Ave. speed"])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Farthest distance"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Highest ascent"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Longest duration"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Max. speed"])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["remaining characters"])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["segment"]),t(["segments"])])},SPEED:e=>{const{normalize:t}=e;return t(["speed"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["sport"]),t(["sports"])])},START:e=>{const{normalize:t}=e;return t(["start"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Start and finish"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["start elevation axis at zero"])},TITLE:e=>{const{normalize:t}=e;return t(["title"])},TO:e=>{const{normalize:t}=e;return t(["to"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["total duration"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Upload one!"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["humidity"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["temperature"])},WIND:e=>{const{normalize:t}=e;return t(["wind"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNE"])},NE:e=>{const{normalize:t}=e;return t(["NE"])},ENE:e=>{const{normalize:t}=e;return t(["ENE"])},E:e=>{const{normalize:t}=e;return t(["E"])},ESE:e=>{const{normalize:t}=e;return t(["ESE"])},SE:e=>{const{normalize:t}=e;return t(["SE"])},SSE:e=>{const{normalize:t}=e;return t(["SSE"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSW"])},SW:e=>{const{normalize:t}=e;return t(["SW"])},WSW:e=>{const{normalize:t}=e;return t(["WSW"])},W:e=>{const{normalize:t}=e;return t(["W"])},WNW:e=>{const{normalize:t}=e;return t(["WNW"])},NW:e=>{const{normalize:t}=e;return t(["NW"])},NNW:e=>{const{normalize:t}=e;return t(["NNW"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["clear day"])},"clear-night":e=>{const{normalize:t}=e;return t(["clear night"])},cloudy:e=>{const{normalize:t}=e;return t(["cloudy"])},fog:e=>{const{normalize:t}=e;return t(["fog"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["partly cloudy day"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["partly cloudy night"])},rain:e=>{const{normalize:t}=e;return t(["rain"])},sleet:e=>{const{normalize:t}=e;return t(["sleet"])},snow:e=>{const{normalize:t}=e;return t(["snow"])},wind:e=>{const{normalize:t}=e;return t(["wind"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["with .gpx file"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["without .gpx file"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["workout"]),t(["workouts"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["workout date"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Are you sure you want to delete this workout?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t([".zip file"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["or .zip file containing .gpx files"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},6625:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={CONTACT_ADMIN:e=>{const{normalize:t}=e;return t(["Contacter l'administrateur"])},FITTRACKEE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["FitTrackee est un tracker d'activités sportives (en extérieur)."])},FITTRACKEE_LICENSE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["sous licence ",n(r(0))," (en) "])},SOURCE_CODE:e=>{const{normalize:t}=e;return t(["Code source (en)"])}},a={ACTION:e=>{const{normalize:t}=e;return t(["Action"])},ACTIVATE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Activer le compte"])},ACTIVE:e=>{const{normalize:t}=e;return t(["Actif"])},ADMIN_RIGHTS_DELETE_USER_ACCOUNT:e=>{const{normalize:t}=e;return t(["Ajouter/retirer des droits d'administration, supprimer des comptes utilisateurs."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ADMINISTRATION:e=>{const{normalize:t}=e;return t(["Administration"])},APPLICATION:e=>{const{normalize:t}=e;return t(["Application"])},APP_CONFIG:{ADMIN_CONTACT:e=>{const{normalize:t}=e;return t(["Email de l'administrateur pour contact "])},MAX_USERS_LABEL:e=>{const{normalize:t}=e;return t(["Nombre maximum d'utilisateurs actifs "])},MAX_USERS_HELP:e=>{const{normalize:t}=e;return t(["Si égal à 0, pas limite d'inscription"])},MAX_FILES_IN_ZIP_LABEL:e=>{const{normalize:t}=e;return t(["Nombre max. de fichiers dans une archive zip "])},NO_CONTACT_EMAIL:e=>{const{normalize:t}=e;return t(["non renseigné"])},SINGLE_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Taille max. des fichiers (en Mo) "])},TITLE:e=>{const{normalize:t}=e;return t(["Configuration de l'application"])},ZIP_UPLOAD_MAX_SIZE_LABEL:e=>{const{normalize:t}=e;return t(["Taille max. des archives zip (en Mo) "])}},BACK_TO_ADMIN:e=>{const{normalize:t}=e;return t(["Revenir à l'admin"])},CONFIRM_USER_ACCOUNT_DELETION:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Êtes-vous sûr de vouloir supprimer le compte de l'utilisateur ",n(r(0))," ? Toutes les données seront définitivement."])},CONFIRM_USER_PASSWORD_RESET:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Êtes-vous sûr de vouloir réinitialiser le mot de passe de l'utilisateur ",n(r(0))," ?"])},CURRENT_EMAIL:e=>{const{normalize:t}=e;return t(["Adresse email actuelle"])},DELETE_USER:e=>{const{normalize:t}=e;return t(["Supprimer l'utilisateur"])},EMAIL_SENDING_DISABLED:e=>{const{normalize:t}=e;return t(["L'envoi d'emails est désactivé."])},ENABLE_DISABLE_SPORTS:e=>{const{normalize:t}=e;return t(["Activer/désactiver des sports."])},NEW_EMAIL:e=>{const{normalize:t}=e;return t(["Nouvelle adresse email"])},PASSWORD_RESET_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["Le mot de passe a été réinitialisé."])},REGISTRATION_DISABLED:e=>{const{normalize:t}=e;return t(["Les inscriptions sont actuellement désactivées."])},REGISTRATION_ENABLED:e=>{const{normalize:t}=e;return t(["Les inscriptions sont actuellement activées."])},RESET_USER_PASSWORD:e=>{const{normalize:t}=e;return t(["Réinit. le mot de passe"])},SPORTS:{TABLE:{ACTIVE:e=>{const{normalize:t}=e;return t(["Actif"])},HAS_WORKOUTS:e=>{const{normalize:t}=e;return t(["des séances existent"])},IMAGE:e=>{const{normalize:t}=e;return t(["Image"])},LABEL:e=>{const{normalize:t}=e;return t(["Label"])}},TITLE:e=>{const{normalize:t}=e;return t(["Administration - Sports"])}},UPDATE_APPLICATION_DESCRIPTION:e=>{const{normalize:t}=e;return t(["Configurer l'application (nombre maximum d'utilisateurs inscrits, taille maximale des fichers)."])},UPDATE_USER_EMAIL:e=>{const{normalize:t}=e;return t(["Changer l'email"])},USER:e=>{const{normalize:t,plural:n}=e;return n([t(["utilisateur"]),t(["utilisateurs"])])},USER_EMAIL_UPDATE_SUCCESSFUL:e=>{const{normalize:t}=e;return t(["L'adresse email a été mise à jour."])},USERS:{TABLE:{ADD_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Ajouter les droits d'admin"])},REMOVE_ADMIN_RIGHTS:e=>{const{normalize:t}=e;return t(["Retirer les droits d'admin"])}},SELECTS:{ORDER_BY:{ADMIN:e=>{const{normalize:t}=e;return t(["status administrateur"])},CREATED_AT:e=>{const{normalize:t}=e;return t(["date d'inscription"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["statut du compte"])},USERNAME:e=>{const{normalize:t}=e;return t(["nom d'utilisateur"])},WORKOUTS_COUNT:e=>{const{normalize:t}=e;return t(["nombre de séances"])}}}}},o={ERROR:{UNKNOWN:e=>{const{normalize:t}=e;return t(["Erreur. Veuillez réessayer ou contacter l'administrateur."])},"at least one file in zip archive exceeds size limit, please check the archive":e=>{const{normalize:t}=e;return t(["Au moins un fichier de l'archive zip dépasse la taille maximale, veuillez vérifier l'archive."])},"email: valid email must be provided":e=>{const{normalize:t}=e;return t(["Courriel : une adresse électronique valide doit être fournie."])},"error during gpx processing":e=>{const{normalize:t}=e;return t(["Erreur lors du traitement du fichier gpx."])},"error during gpx file parsing":e=>{const{normalize:t}=e;return t(["Erreur lors de l'analyse du fichier."])},"error on getting configuration":e=>{const{normalize:t}=e;return t(["Erreur lors de la récupération de la configuration."])},"error when updating configuration":e=>{const{normalize:t}=e;return t(["Erreur lors de la mise à jour de la configuration"])},"error, please try again or contact the administrator":e=>{const{normalize:t}=e;return t(["Erreur, veuillez réessayer ou contacter l'administrateur."])},"error, registration is disabled":e=>{const{normalize:t}=e;return t(["Erreur, les inscriptions sont désactivées."])},"file extension not allowed":e=>{const{normalize:t}=e;return t(["Extension de fichier non autorisée."])},"file size is greater than the allowed size":e=>{const{normalize:t}=e;return t(["La taille du fichier est supérieure à la limite autorisée."])},"invalid credentials":e=>{const{normalize:t}=e;return t(["Identifiants invalides."])},"invalid payload":e=>{const{normalize:t}=e;return t(["Données fournies incorrectes."])},"invalid token, please log in again":e=>{const{normalize:t}=e;return t(["Jeton de connexion invalide, merci de vous reconnecter."])},"invalid token, please request a new token":e=>{const{normalize:t}=e;return t(["Jeton de connexion, merci de vous reconnecter."])},"no file part":e=>{const{normalize:t}=e;return t(["Pas de fichier fourni."])},"no selected file":e=>{const{normalize:t}=e;return t(["Pas de fichier sélectionné."])},"Network Error":e=>{const{normalize:t}=e;return t(["Erreur réseau."])},"new email must be different than curent email":e=>{const{normalize:t}=e;return t(["La nouvelle addresse électronique doit être differente de l'adresse actuelle"])},"password: password and password confirmation do not match":e=>{const{normalize:t}=e;return t(["Mot de passe : les mots de passe saisis sont différents."])},"provide a valid auth token":e=>{const{normalize:t}=e;return t(["Merci de fournir un jeton de connexion valide."])},"sport does not exist":e=>{const{normalize:t}=e;return t(["Ce sport n'existe pas."])},"signature expired, please log in again":e=>{const{normalize:t}=e;return t(["Signature expirée. Merci de vous reconnecter."])},"sorry, that username is already taken":e=>{const{normalize:t}=e;return t(["Désolé, ce nom d'utilisateur est déjà utilisé."])},"successfully registered":e=>{const{normalize:t}=e;return t(["Inscription validée."])},"the number of files in the archive exceeds the limit":e=>{const{normalize:t}=e;return t(["Le nombre de fichiers de l'archive dépasse la limite."])},"user does not exist":e=>{const{normalize:t}=e;return t(["L'utilisateur n'existe pas."])},"valid email must be provided for admin contact":e=>{const{normalize:t}=e;return t(["Une adresse électronique doit être fournie pour le contact de l'administrateur"])},"you can not delete your account, no other user has admin rights":e=>{const{normalize:t}=e;return t(["Vous ne pouvez pas supprimer votre compte, aucun autre utilisateur n'a des droits d'administration."])},"you do not have permissions":e=>{const{normalize:t}=e;return t(["Vous n'avez pas les permissions nécessaires."])}},PAGINATION:{PREVIOUS:e=>{const{normalize:t}=e;return t(["précédent"])},NEXT:e=>{const{normalize:t}=e;return t(["suivant"])}}},s={"ACCOUNT-CONFIRMATION-RESEND":e=>{const{normalize:t}=e;return t(["Renvoyer le message de confirmation"])},AUTHORIZE:e=>{const{normalize:t}=e;return t(["Autoriser"])},BACK:e=>{const{normalize:t}=e;return t(["Retour"])},CANCEL:e=>{const{normalize:t}=e;return t(["Annuler"])},CLEAR_FILTER:e=>{const{normalize:t}=e;return t(["Réinitialiser"])},DELETE_MY_ACCOUNT:e=>{const{normalize:t}=e;return t(["Supprimer mon compte"])},DISABLE:e=>{const{normalize:t}=e;return t(["Désactiver"])},EDIT:e=>{const{normalize:t}=e;return t(["Modifier"])},ENABLE:e=>{const{normalize:t}=e;return t(["Activer"])},FILTER:e=>{const{normalize:t}=e;return t(["Filtrer"])},LOGIN:e=>{const{normalize:t}=e;return t(["Se connecter"])},NO:e=>{const{normalize:t}=e;return t(["Non"])},REGISTER:e=>{const{normalize:t}=e;return t(["S'inscrire"])},RESET:e=>{const{normalize:t}=e;return t(["Réinit."])},SUBMIT:e=>{const{normalize:t}=e;return t(["Valider"])},YES:e=>{const{normalize:t}=e;return t(["Oui"])}},i={ABOUT:e=>{const{normalize:t}=e;return t(["à propos"])},CONFIRMATION:e=>{const{normalize:t}=e;return t(["Confirmation"])},CONTACT:e=>{const{normalize:t}=e;return t(["contact"])},DAY:e=>{const{normalize:t,plural:n}=e;return n([t(["jour"]),t(["jours"])])},DISPLAYED:e=>{const{normalize:t}=e;return t(["Affiché"])},DOCUMENTATION:e=>{const{normalize:t}=e;return t(["documentation (en)"])},HERE:e=>{const{normalize:t}=e;return t(["ici"])},HIDDEN:e=>{const{normalize:t}=e;return t(["Masqué"])},HOME:e=>{const{normalize:t}=e;return t(["Accueil"])},SELECTS:{ORDER_BY:{LABEL:e=>{const{normalize:t}=e;return t(["trier par "])}},ORDER:{LABEL:e=>{const{normalize:t}=e;return t(["tri"])},ASC:e=>{const{normalize:t}=e;return t(["ascendant"])},DESC:e=>{const{normalize:t}=e;return t(["descendant"])}},PER_PAGE:{LABEL:e=>{const{normalize:t}=e;return t(["par page"])}}},TOTAL:e=>{const{normalize:t}=e;return t(["Total"])}},l={DASHBOARD:e=>{const{normalize:t}=e;return t(["Tableau de bord"])},THIS_MONTH:e=>{const{normalize:t}=e;return t(["Ce mois-ci"])}},c={UNKNOWN:e=>{const{normalize:t}=e;return t(["Erreur. Veuillez réessayer ou contacter l'administrateur."])},APP_ERROR:e=>{const{normalize:t}=e;return t(["L'application semble rencontrer quelques problèmes.
                                                                              Veuillez réessayer plus tard ou contacter l'administrateur."])},NOT_FOUND:{PAGE:e=>{const{normalize:t}=e;return t(["Page introuvable"])},WORKOUT:e=>{const{normalize:t}=e;return t(["Séance introuvable"])}},SOMETHING_WRONG:e=>{const{normalize:t}=e;return t(["Une erreur s'est produite"])}},u={ADD_A_NEW_APP:e=>{const{normalize:t}=e;return t(["Ajouter une nouvelle application OAuth2"])},APP:{CLIENT_ID:e=>{const{normalize:t}=e;return t(["Identifiant"])},CLIENT_SECRET:e=>{const{normalize:t}=e;return t(["Secret"])},DESCRIPTION:e=>{const{normalize:t}=e;return t(["Description de l'application"])},ISSUE_AT:e=>{const{normalize:t}=e;return t(["Créée le"])},NAME:e=>{const{normalize:t}=e;return t(["Nom de l'application"])},REDIRECT_URL:e=>{const{normalize:t}=e;return t(["URL de redirection"])},SCOPE:{LABEL:e=>{const{normalize:t}=e;return t(["Scope"])},"application:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture à la configuration de l'application."])},"profile:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes auth."])},"profile:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes auth."])},"users:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes users."])},"users:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes users."])},"workouts:read_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en lecture aux routes workouts."])},"workouts:write_DESCRIPTION":e=>{const{normalize:t}=e;return t(["donne les droits en écriture aux routes workouts."])}},URL:e=>{const{normalize:t}=e;return t(["URL de l'application"])}},APP_CREATED_SUCCESSFULLY:e=>{const{normalize:t}=e;return t(["Application créée avec succès. Assurez-vous de copier le secret maintenant, il ne s'affichera plus."])},APP_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr de vouloir supprimer cette application ?"])},APP_REQUESTING_ACCESS:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["L'application ",n(r(0))," demande les accès suivants :"])},APPS_LIST:e=>{const{normalize:t}=e;return t(["Applications OAuth2"])},AUTHORIZE_APP:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Autoriser ",n(r(0))," à utiliser votre compte ?"])},COPY_TO_CLIPBOARD:e=>{const{normalize:t}=e;return t(["copier dans le presse papier"])},DELETE_APP:e=>{const{normalize:t}=e;return t(["Supprimer l'application"])},NEW_APP:e=>{const{normalize:t}=e;return t(["Ajouter une application"])},NO_APP:e=>{const{normalize:t}=e;return t(["Application introuvable !"])},NO_APPS:e=>{const{normalize:t}=e;return t(["pas de applications"])},NO_DESCRIPTION:e=>{const{normalize:t}=e;return t(["pas de description"])},REVOKE_ALL_TOKENS:e=>{const{normalize:t}=e;return t(["Révoquer tous les jetons"])},TOKENS_REVOCATION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr de vouloir révoquer tous les jetons ?"])},TOKENS_REVOKED:e=>{const{normalize:t}=e;return t(["Tous les jetons associés existants ont été révoqués."])}},d={"Cycling (Sport)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Sport)"])}},"Cycling (Transport)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Transport)"])}},"Cycling (Virtual)":{LABEL:e=>{const{normalize:t}=e;return t(["Vélo (Virtuel)"])}},Hiking:{LABEL:e=>{const{normalize:t}=e;return t(["Randonnée"])}},"Mountain Biking":{LABEL:e=>{const{normalize:t}=e;return t(["VTT"])}},"Mountain Biking (Electric)":{LABEL:e=>{const{normalize:t}=e;return t(["VTT (Électrique)"])}},Rowing:{LABEL:e=>{const{normalize:t}=e;return t(["Aviron"])}},Running:{LABEL:e=>{const{normalize:t}=e;return t(["Course"])}},"Skiing (Alpine)":{LABEL:e=>{const{normalize:t}=e;return t(["Ski (Alpin)"])}},"Skiing (Cross Country)":{LABEL:e=>{const{normalize:t}=e;return t(["Ski (Randonnée)"])}},Snowshoes:{LABEL:e=>{const{normalize:t}=e;return t(["Raquettes"])}},Trail:{LABEL:e=>{const{normalize:t}=e;return t(["Trail"])}},Walking:{LABEL:e=>{const{normalize:t}=e;return t(["Marche"])}}},m={STATISTICS:e=>{const{normalize:t}=e;return t(["Statistiques"])},TIME_FRAMES:{week:e=>{const{normalize:t}=e;return t(["semaine"])},month:e=>{const{normalize:t}=e;return t(["mois"])},year:e=>{const{normalize:t}=e;return t(["année"])}}},_={ACCOUNT_CONFIRMATION_NOT_RECEIVED:e=>{const{normalize:t}=e;return t(["Vous n'avez pas reçu les instructions ?"])},ACCOUNT_CONFIRMATION_SENT:e=>{const{normalize:t}=e;return t(["Vérifiez vos courriels. Un nouveau courriel de confirmation a été envoyé à l'adresse électronique fournie."])},ADMIN:e=>{const{normalize:t}=e;return t(["Admin"])},ALREADY_HAVE_ACCOUNT:e=>{const{normalize:t}=e;return t(["Vous avez déjà un compte ?"])},CONFIRM_ACCOUNT_DELETION:e=>{const{normalize:t}=e;return t(["Êtes-vous sûr·e de vouloir supprimer votre compte ? Toutes les données seront définitivement effacés"])},CURRENT_PASSWORD:e=>{const{normalize:t}=e;return t(["Mot de passe actuel"])},EMAIL:e=>{const{normalize:t}=e;return t(["Courriel"])},EMAIL_INFO:e=>{const{normalize:t}=e;return t(["Saisissez une adresse électronique valide."])},ENTER_PASSWORD:e=>{const{normalize:t}=e;return t(["Saisissez un mot de passe"])},FILTER_ON_USERNAME:e=>{const{normalize:t}=e;return t(["Filtrer sur le nom d'utilisateur"])},HIDE_PASSWORD:e=>{const{normalize:t}=e;return t(["masquer le mot de passe"])},INVALID_TOKEN:e=>{const{normalize:t}=e;return t(["Jeton invalide, veuillez demander une nouvelle réinitialisation de mot de passe."])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Langue"])},LOG_IN:e=>{const{normalize:t}=e;return t(["connecter"])},LOGIN:e=>{const{normalize:t}=e;return t(["Se connecter"])},LOGOUT:e=>{const{normalize:t}=e;return t(["Se déconnecter"])},NEW_PASSWORD:e=>{const{normalize:t}=e;return t(["Nouveau mot de passe"])},NO_USERS_FOUND:e=>{const{normalize:t}=e;return t(["Aucun utilisateur trouvé."])},PASSWORD:e=>{const{normalize:t}=e;return t(["Mot de passe"])},PASSWORD_INFO:e=>{const{normalize:t}=e;return t(["8 caractères minimum."])},PASSWORD_FORGOTTEN:e=>{const{normalize:t}=e;return t(["Mot de passe oublié ?"])},PASSWORD_RESET:e=>{const{normalize:t}=e;return t(["Réinitialisation du mot de passe"])},PASSWORD_SENT_EMAIL_TEXT:e=>{const{normalize:t}=e;return t(["Vérifiez vos courriels. Si vote adresse est dans notre base de données, vous recevrez un courriel avec un lien pour réinitialiser votre mot de passe."])},PASSWORD_STRENGTH:{WEAK:e=>{const{normalize:t}=e;return t(["faible"])},AVERAGE:e=>{const{normalize:t}=e;return t(["moyenne"])},GOOD:e=>{const{normalize:t}=e;return t(["bonne"])},STRONG:e=>{const{normalize:t}=e;return t(["forte"])},LABEL:e=>{const{normalize:t}=e;return t(["robustesse du mot de passe"])},SUGGESTIONS:{l33t:e=>{const{normalize:t}=e;return t(["Évitez les substitutions de lettres prévisibles comme ","@"," pour a."])},reverseWords:e=>{const{normalize:t}=e;return t(["Évitez les orthographes inversées des mots courants."])},allUppercase:e=>{const{normalize:t}=e;return t(["Mettez quelques lettres en majuscules, mais pas toutes."])},capitalization:e=>{const{normalize:t}=e;return t(["Capitalisez mais pas seulement la première lettre."])},dates:e=>{const{normalize:t}=e;return t(["Évitez les dates et les années qui vous sont associées. (ex : date ou année de naissance)."])},recentYears:e=>{const{normalize:t}=e;return t(["Évitez les dernières années."])},associatedYears:e=>{const{normalize:t}=e;return t(["Évitez les années qui vous sont associées. (ex : date de naissance)."])},sequences:e=>{const{normalize:t}=e;return t(["Évitez les séquences de caractères courantes."])},repeated:e=>{const{normalize:t}=e;return t(["Évitez les mots et les caractères répétés."])},longerKeyboardPattern:e=>{const{normalize:t}=e;return t(["Utilisez des motifs de clavier plus longs et changez de sens de frappe plusieurs fois."])},anotherWord:e=>{const{normalize:t}=e;return t(["Ajoutez des mots moins courants."])},useWords:e=>{const{normalize:t}=e;return t(["Utilisez plusieurs mots, mais évitez les phrases courantes."])},noNeed:e=>{const{normalize:t}=e;return t(["Vous pouvez créer des mots de passe forts sans utiliser de symboles, de chiffres ou de lettres majuscules."])},pwned:e=>{const{normalize:t}=e;return t(["Si vous utilisez ce mot de passe ailleurs, vous devriez le modifier."])}}},PASSWORD_UPDATED:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Votre mot de passe a été mis à jour. Cliquez ",n(r(0))," pour vous connecter."])},PROFILE:{ACCOUNT_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour du compte"])},ASCENT_DATA:e=>{const{normalize:t}=e;return t(["Données relatives au dénivelé positif (records, total)"])},BACK_TO_PROFILE:e=>{const{normalize:t}=e;return t(["Revenir au profil"])},BIO:e=>{const{normalize:t}=e;return t(["Bio"])},BIRTH_DATE:e=>{const{normalize:t}=e;return t(["Date de naissance"])},DATE_FORMAT:e=>{const{normalize:t}=e;return t(["Format d'affichage de la date"])},EDIT:e=>{const{normalize:t}=e;return t(["Modifier le profil"])},EDIT_PREFERENCES:e=>{const{normalize:t}=e;return t(["Modifier les préférences"])},EDIT_SPORTS_PREFERENCES:e=>{const{normalize:t}=e;return t(["Modifier les préférences des sports"])},ERRORED_EMAIL_UPDATE:e=>{const{normalize:t,interpolate:n,list:r}=e;return t(["Veuillez vous ",n(r(0))," pour changer de nouveau votre adresse électronique ou contacter l'administrateur"])},FIRST_DAY_OF_WEEK:e=>{const{normalize:t}=e;return t(["Premier jour de la semaine"])},FIRST_NAME:e=>{const{normalize:t}=e;return t(["Prénom"])},LANGUAGE:e=>{const{normalize:t}=e;return t(["Langue"])},LAST_NAME:e=>{const{normalize:t}=e;return t(["Nom"])},LOCATION:e=>{const{normalize:t}=e;return t(["Lieu"])},MONDAY:e=>{const{normalize:t}=e;return t(["Lundi"])},PICTURE:e=>{const{normalize:t}=e;return t(["Image de profil"])},PICTURE_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour de l'image de profil"])},PICTURE_UPDATE:e=>{const{normalize:t}=e;return t(["Mettre à jour l'image"])},PICTURE_REMOVE:e=>{const{normalize:t}=e;return t(["Supprimer"])},PREFERENCES_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour des préférences"])},PROFILE_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour du profil"])},REGISTRATION_DATE:e=>{const{normalize:t}=e;return t(["Date d'inscription"])},SPORTS_EDITION:e=>{const{normalize:t}=e;return t(["Mise à jour des préférences des sports"])},SUNDAY:e=>{const{normalize:t}=e;return t(["Dimanche"])},TABS:{ACCOUNT:e=>{const{normalize:t}=e;return t(["compte"])},APPS:e=>{const{normalize:t}=e;return t(["apps"])},PICTURE:e=>{const{normalize:t}=e;return t(["image"])},PREFERENCES:e=>{const{normalize:t}=e;return t(["préférences"])},PROFILE:e=>{const{normalize:t}=e;return t(["profil"])},SPORTS:e=>{const{normalize:t}=e;return t(["sports"])}},UNITS:{LABEL:e=>{const{normalize:t}=e;return t(["Unités pour les distances"])},IMPERIAL:e=>{const{normalize:t}=e;return t(["Système impérial (ft, mi)"])},METRIC:e=>{const{normalize:t}=e;return t(["Système métrique (m, km)"])}},SPORT:{ACTION:e=>{const{normalize:t}=e;return t(["action"])},COLOR:e=>{const{normalize:t}=e;return t(["couleur"])},DISABLED_BY_ADMIN:e=>{const{normalize:t}=e;return t(["désactivé par l'administrateur"])},IS_ACTIVE:e=>{const{normalize:t}=e;return t(["actif"])},LABEL:e=>{const{normalize:t}=e;return t(["label"])},STOPPED_SPEED_THRESHOLD:e=>{const{normalize:t}=e;return t(["seuil de vitesse arrêtée"])}},SUCCESSFUL_EMAIL_UPDATE:e=>{const{normalize:t}=e;return t(["Votre compte a été modifié avec succès. Veuillez vérifier votre boîte de réception pour valider votre nouvelle adresse électronique."])},SUCCESSFUL_REGISTRATION:e=>{const{normalize:t}=e;return t(["Votre compte a été créé avec succès."])},SUCCESSFUL_REGISTRATION_WITH_EMAIL:e=>{const{normalize:t}=e;return t(["Un lien pour activer votre compte a été envoyé à l'adresse électronique fournie."])},SUCCESSFUL_UPDATE:e=>{const{normalize:t}=e;return t(["Votre compte a été modifié avec succès."])},TIMEZONE:e=>{const{normalize:t}=e;return t(["Fuseau horaire"])}},REGISTER:e=>{const{normalize:t}=e;return t(["S'inscrire"])},REGISTER_DISABLED:e=>{const{normalize:t}=e;return t(["Désolé, les inscriptions sont désactivées."])},RESENT_ACCOUNT_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Envoyer à nouveau le courriel de confirmation de compte"])},RESET_PASSWORD:e=>{const{normalize:t}=e;return t(["Réinitialiser votre mot de passe"])},SHOW_PASSWORD:e=>{const{normalize:t}=e;return t(["afficher le mot de passe"])},THIS_USER_ACCOUNT_IS_INACTIVE:e=>{const{normalize:t}=e;return t(["Le compte de cet utilisateur est inactif."])},USER_PICTURE:e=>{const{normalize:t}=e;return t(["photo de l'utilisateur"])},USERNAME:e=>{const{normalize:t}=e;return t(["Nom d'utilisateur"])},USERNAME_INFO:e=>{const{normalize:t}=e;return t(["3 à 30 caractères requis, seuls les caractères alphanumériques et le caractère _ sont autorisés."])}},E={ADD_WORKOUT:e=>{const{normalize:t}=e;return t(["Ajouter une séance"])},ANALYSIS:e=>{const{normalize:t}=e;return t(["analyse"])},ASCENT:e=>{const{normalize:t}=e;return t(["dénivelé positif"])},AVERAGE_SPEED:e=>{const{normalize:t}=e;return t(["vitesse moyenne"])},AVE_SPEED:e=>{const{normalize:t}=e;return t(["vitesse moy."])},BACK_TO_WORKOUT:e=>{const{normalize:t}=e;return t(["revenir à la séance"])},DATE:e=>{const{normalize:t}=e;return t(["date"])},DESCENT:e=>{const{normalize:t}=e;return t(["dénivelé négatif"])},DISPLAY_FILTERS:e=>{const{normalize:t}=e;return t(["afficher les filtres"])},DISTANCE:e=>{const{normalize:t}=e;return t(["distance"])},DURATION:e=>{const{normalize:t}=e;return t(["durée"])},EDIT_WORKOUT:e=>{const{normalize:t}=e;return t(["Modifier la séance"])},ELEVATION:e=>{const{normalize:t}=e;return t(["altitude"])},END:e=>{const{normalize:t}=e;return t(["fin"])},FROM:e=>{const{normalize:t}=e;return t(["à partir de"])},GPX_FILE:e=>{const{normalize:t}=e;return t(["fichier .gpx"])},HIDE_FILTERS:e=>{const{normalize:t}=e;return t(["masquer les filtres"])},LATEST_WORKOUTS:e=>{const{normalize:t}=e;return t(["Séances récentes"])},LOAD_MORE_WORKOUT:e=>{const{normalize:t}=e;return t(["Charger les séances suivantes"])},MAX_ALTITUDE:e=>{const{normalize:t}=e;return t(["altitude max"])},MAX_FILES:e=>{const{normalize:t}=e;return t(["fichiers max. "])},MAX_SIZE:e=>{const{normalize:t}=e;return t(["taille max. "])},MAX_SPEED:e=>{const{normalize:t}=e;return t(["vitesse max"])},MIN_ALTITUDE:e=>{const{normalize:t}=e;return t(["altitude min"])},NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Segment suivant"])},NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Séance suivante"])},NO_DATA_CLEANING:e=>{const{normalize:t}=e;return t(["données issues du fichier gpx, sans correction"])},NO_FILE_PROVIDED:e=>{const{normalize:t}=e;return t(["Pas de fichier fourni"])},NO_FOLDER:e=>{const{normalize:t}=e;return t(["pas de répertoire"])},NO_MAP:e=>{const{normalize:t}=e;return t(["Pas de carte"])},NO_NEXT_SEGMENT:e=>{const{normalize:t}=e;return t(["Pas de segment suivant"])},NO_NEXT_WORKOUT:e=>{const{normalize:t}=e;return t(["Pas de séance suivante"])},NO_NOTES:e=>{const{normalize:t}=e;return t(["Pas de notes"])},NO_PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Pas de segment précédent"])},NO_PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Pas de séance précédente"])},NO_RECORDS:e=>{const{normalize:t}=e;return t(["Pas de records."])},NO_WORKOUTS:e=>{const{normalize:t}=e;return t(["Pas de séances."])},NOTES:e=>{const{normalize:t}=e;return t(["notes"])},PAUSES:e=>{const{normalize:t}=e;return t(["pauses"])},PREVIOUS_SEGMENT:e=>{const{normalize:t}=e;return t(["Segment précédent"])},PREVIOUS_WORKOUT:e=>{const{normalize:t}=e;return t(["Séance précédente"])},RECORD:e=>{const{normalize:t,plural:n}=e;return n([t(["record"]),t(["records"])])},RECORD_AS:e=>{const{normalize:t}=e;return t(["Vitesse moy."])},RECORD_FD:e=>{const{normalize:t}=e;return t(["Distance la + longue"])},RECORD_HA:e=>{const{normalize:t}=e;return t(["Dénivelé positif le + élevé"])},RECORD_LD:e=>{const{normalize:t}=e;return t(["Durée la + longue"])},RECORD_MS:e=>{const{normalize:t}=e;return t(["Vitesse max."])},REMAINING_CHARS:e=>{const{normalize:t}=e;return t(["nombre de caractères restants "])},SEGMENT:e=>{const{normalize:t,plural:n}=e;return n([t(["segment"]),t(["segments"])])},SPEED:e=>{const{normalize:t}=e;return t(["vitesse"])},SPORT:e=>{const{normalize:t,plural:n}=e;return n([t(["sport"]),t(["sports"])])},START:e=>{const{normalize:t}=e;return t(["début"])},START_AND_FINISH:e=>{const{normalize:t}=e;return t(["Départ et arrivée"])},START_ELEVATION_AT_ZERO:e=>{const{normalize:t}=e;return t(["démarrer l'axe de l'altitude à 0"])},TITLE:e=>{const{normalize:t}=e;return t(["titre"])},TO:e=>{const{normalize:t}=e;return t(["jusqu'au"])},TOTAL_DURATION:e=>{const{normalize:t}=e;return t(["durée totale"])},UPLOAD_FIRST_WORKOUT:e=>{const{normalize:t}=e;return t(["Ajoutez votre première séance !"])},WEATHER:{HUMIDITY:e=>{const{normalize:t}=e;return t(["humidité"])},TEMPERATURE:e=>{const{normalize:t}=e;return t(["température"])},WIND:e=>{const{normalize:t}=e;return t(["vent"])},WIND_DIRECTIONS:{N:e=>{const{normalize:t}=e;return t(["N"])},NNE:e=>{const{normalize:t}=e;return t(["NNE"])},NE:e=>{const{normalize:t}=e;return t(["NE"])},ENE:e=>{const{normalize:t}=e;return t(["ENE"])},E:e=>{const{normalize:t}=e;return t(["E"])},ESE:e=>{const{normalize:t}=e;return t(["ESE"])},SE:e=>{const{normalize:t}=e;return t(["SE"])},SSE:e=>{const{normalize:t}=e;return t(["SSE"])},S:e=>{const{normalize:t}=e;return t(["S"])},SSW:e=>{const{normalize:t}=e;return t(["SSO"])},SW:e=>{const{normalize:t}=e;return t(["SO"])},WSW:e=>{const{normalize:t}=e;return t(["OSO"])},W:e=>{const{normalize:t}=e;return t(["O"])},WNW:e=>{const{normalize:t}=e;return t(["ONO"])},NW:e=>{const{normalize:t}=e;return t(["NO"])},NNW:e=>{const{normalize:t}=e;return t(["NNO"])}},DARK_SKY:{"clear-day":e=>{const{normalize:t}=e;return t(["ensoleillé"])},"clear-night":e=>{const{normalize:t}=e;return t(["nuit claire"])},cloudy:e=>{const{normalize:t}=e;return t(["nuageux"])},fog:e=>{const{normalize:t}=e;return t(["brouillard"])},"partly-cloudy-day":e=>{const{normalize:t}=e;return t(["partiellement nuageux"])},"partly-cloudy-night":e=>{const{normalize:t}=e;return t(["nuit partiellement nuageuse"])},rain:e=>{const{normalize:t}=e;return t(["pluie"])},sleet:e=>{const{normalize:t}=e;return t(["neige fondue"])},snow:e=>{const{normalize:t}=e;return t(["neige"])},wind:e=>{const{normalize:t}=e;return t(["venteux"])}}},WITH_GPX:e=>{const{normalize:t}=e;return t(["avec un fichier .gpx"])},WITHOUT_GPX:e=>{const{normalize:t}=e;return t(["sans fichier .gpx"])},WORKOUT:e=>{const{normalize:t,plural:n}=e;return n([t(["séance"]),t(["séances"])])},WORKOUT_DATE:e=>{const{normalize:t}=e;return t(["date de la séance"])},WORKOUT_DELETION_CONFIRMATION:e=>{const{normalize:t}=e;return t(["Etes-vous sûr de vouloir supprimer cette séance ?"])},ZIP_ARCHIVE:e=>{const{normalize:t}=e;return t(["archive .zip"])},ZIP_ARCHIVE_DESCRIPTION:e=>{const{normalize:t}=e;return t(["ou une archive .zip contenant des fichiers .gpx"])}},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},8891:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var r={},a={},o={},s={},i={},l={},c={},u={},d={},m={},_={},E={},S={about:r,admin:a,api:o,buttons:s,common:i,dashboard:l,error:c,oauth2:u,sports:d,statistics:m,user:_,workouts:E}},4970:function(e,t,n){"use strict";var r=n(6775),a=n(6429),o=n(9963),s=n(2343),i=n(5205);(0,i.z)("/service-worker.js",{ready(){console.log("App is being served from cache by a service worker.\nFor more details, visit https://goo.gl/AFskqB")},registered(){console.log("Service worker has been registered.")},cached(){console.log("Content has been cached for offline use.")},updatefound(){console.log("New content is downloading.")},updated(){console.log("New content is available; please refresh.")},offline(){console.log("No internet connection found. App is running in offline mode.")},error(e){console.error("Error during service worker registration:",e)}});var l=n(6252),c=n(2262),u=n(3577);const d=e=>((0,l.dD)("data-v-2c73279e"),e=e(),(0,l.Cn)(),e),m={id:"footer"},_={class:"footer-items"},E={class:"footer-item"},S=d((()=>(0,l._)("strong",null,"FitTrackee",-1))),T=d((()=>(0,l._)("div",{class:"footer-item bullet"},"•",-1))),p={class:"footer-item"},A={key:0,class:"footer-item bullet"},O={key:1,class:"footer-item"},R=["href"],I=d((()=>(0,l._)("div",{class:"footer-item bullet"},"•",-1))),U={class:"footer-item"},g={href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer"};var N=(0,l.aZ)({__name:"Footer",props:{version:null,adminContact:null},setup(e){const t=e,{adminContact:n,version:r}=(0,c.BK)(t);return(e,t)=>{const a=(0,l.up)("router-link");return(0,l.wg)(),(0,l.iD)("div",m,[(0,l._)("div",_,[(0,l._)("div",E,[S,(0,l.Uk)(" v"+(0,u.zw)((0,c.SU)(r)),1)]),T,(0,l._)("div",p,[(0,l.Wm)(a,{to:"/about"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("common.ABOUT")),1)])),_:1})]),(0,c.SU)(n)?((0,l.wg)(),(0,l.iD)("div",A,"•")):(0,l.kq)("",!0),(0,c.SU)(n)?((0,l.wg)(),(0,l.iD)("div",O,[(0,l._)("a",{href:`mailto:${(0,c.SU)(n)}`},(0,u.zw)(e.$t("common.CONTACT")),9,R)])):(0,l.kq)("",!0),I,(0,l._)("div",U,[(0,l._)("a",g,(0,u.zw)(e.$t("common.DOCUMENTATION")),1)])])])}}}),h=n(3744);const z=(0,h.Z)(N,[["__scopeId","data-v-2c73279e"]]);var w=z,f=(n(7658),n(6595)),v=n(5801),C=n(9917),D=n(6287);const k=e=>((0,l.dD)("data-v-95c1cc02"),e=e(),(0,l.Cn)(),e),P={id:"nav"},L={class:"nav-container"},M={class:"nav-app-name"},b={class:"nav-items-close"},y=k((()=>(0,l._)("div",{class:"app-name"},"FitTrackee",-1))),G={key:0,class:"nav-items-group"},F=k((()=>(0,l._)("div",{class:"nav-item nav-separator"},null,-1))),W={class:"nav-items-user-menu"},K={key:0,class:"nav-items-group"},Y={class:"nav-item nav-profile-img"},x={key:1,class:"nav-items-group"},$=k((()=>(0,l._)("i",{class:"fa fa-language"},null,-1)));var B=(0,l.aZ)({__name:"NavBar",emits:["menuInteraction"],setup(e,{emit:t}){const n=(0,C.o)(),r=(0,l.Fl)((()=>n.getters[v.YN.GETTERS.AUTH_USER_PROFILE])),a=(0,l.Fl)((()=>n.getters[v.YN.GETTERS.IS_AUTHENTICATED])),o=(0,l.Fl)((()=>n.getters[v.SY.GETTERS.LANGUAGE])),s=(0,c.iH)(!1);function i(){s.value=!0,t("menuInteraction",!0)}function d(){s.value=!1,t("menuInteraction",!1)}function m(e){n.dispatch(v.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,e.value.toString())}function _(){n.dispatch(v.YN.ACTIONS.LOGOUT)}return(e,t)=>{const n=(0,l.up)("router-link"),E=(0,l.up)("Dropdown");return(0,l.wg)(),(0,l.iD)("div",P,[(0,l._)("div",L,[(0,l._)("div",M,[(0,l._)("div",{class:"nav-item app-name",onClick:t[0]||(t[0]=t=>e.$router.push("/"))}," FitTrackee ")]),(0,l._)("div",{class:(0,u.C_)(["nav-icon-open",{"menu-open":s.value}])},[(0,l._)("i",{class:"fa fa-bars hamburger-icon",onClick:t[1]||(t[1]=e=>i())})],2),(0,l._)("div",{class:(0,u.C_)(["nav-items",{"menu-open":s.value}])},[(0,l._)("div",b,[y,(0,l._)("i",{class:(0,u.C_)(["fa fa-close close-icon nav-item",{"menu-closed":!s.value}]),onClick:t[2]||(t[2]=e=>d())},null,2)]),(0,l._)("div",{class:"nav-items-app-menu",onClick:t[3]||(t[3]=e=>d())},[(0,c.SU)(a)?((0,l.wg)(),(0,l.iD)("div",G,[(0,l.Wm)(n,{class:"nav-item",to:"/"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("dashboard.DASHBOARD")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/workouts"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,u.kC)(e.$t("workouts.WORKOUT",2))),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/statistics"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("statistics.STATISTICS")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/workouts/add"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("workouts.ADD_WORKOUT")),1)])),_:1}),(0,c.SU)(a)&&(0,c.SU)(r).admin?((0,l.wg)(),(0,l.j4)(n,{key:0,class:"nav-item",to:"/admin"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("admin.ADMIN")),1)])),_:1})):(0,l.kq)("",!0),F])):(0,l.kq)("",!0)]),(0,l._)("div",W,[(0,c.SU)(a)?((0,l.wg)(),(0,l.iD)("div",K,[(0,l._)("div",Y,[(0,l.Wm)(f.Z,{user:(0,c.SU)(r)},null,8,["user"])]),(0,l.Wm)(n,{class:"nav-item",to:"/profile",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,c.SU)(r).username),1)])),_:1}),(0,l._)("div",{class:"nav-item nav-link",onClick:_},(0,u.zw)(e.$t("user.LOGOUT")),1)])):((0,l.wg)(),(0,l.iD)("div",x,[(0,l.Wm)(n,{class:"nav-item",to:"/login",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("user.LOGIN")),1)])),_:1}),(0,l.Wm)(n,{class:"nav-item",to:"/register",onClick:d},{default:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)(e.$t("user.REGISTER")),1)])),_:1})])),(0,c.SU)(D.mT)&&(0,c.SU)(o)?((0,l.wg)(),(0,l.j4)(E,{key:2,class:"nav-item",options:(0,c.SU)(D.mT),selected:(0,c.SU)(o),onSelected:m},{default:(0,l.w5)((()=>[$])),_:1},8,["options","selected"])):(0,l.kq)("",!0)])],2)])])}}});const Z=(0,h.Z)(B,[["__scopeId","data-v-95c1cc02"]]);var H=Z,q=n(7167);const V={id:"no-config"},j={class:"error-page"},X={class:"error-img"},J=["innerHTML"];var Q=(0,l.aZ)({__name:"NoConfig",setup(e){return(e,t)=>((0,l.wg)(),(0,l.iD)("div",V,[(0,l._)("div",j,[(0,l._)("div",X,[(0,l.Wm)(q.Z)]),(0,l._)("p",{class:"error-message",innerHTML:e.$t("error.APP_ERROR")},null,8,J)])]))}});const ee=(0,h.Z)(Q,[["__scopeId","data-v-47759238"]]);var te=ee;const ne=(0,l._)("div",{id:"top"},null,-1),re={key:0,class:"app-container"},ae={class:"app-loading"},oe={class:"container scroll"},se=(0,l._)("i",{class:"fa fa-chevron-up","aria-hidden":"true"},null,-1),ie=[se];var le=(0,l.aZ)({__name:"App",setup(e){const t=(0,C.o)(),n=(0,l.Fl)((()=>t.getters[v.SY.GETTERS.APP_CONFIG])),r=(0,l.Fl)((()=>t.getters[v.SY.GETTERS.APP_LOADING])),a=(0,c.iH)(!1),o=(0,c.iH)(!1);function s(e){a.value=e}function i(e){return e.getBoundingClientRect().top=0}function d(){window.onscroll=()=>{const e=document.querySelector("#bottom");o.value=null!==e&&i(e)}}function m(){window.scrollTo({top:0,behavior:"smooth"}),setTimeout((()=>{o.value=!1}),300)}function _(){let e="en";try{const t=navigator.language.split("-")[0];t in D.v1&&(e=t)}catch(n){e="en"}t.dispatch(v.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,e)}return(0,l.wF)((()=>{_(),t.dispatch(v.SY.ACTIONS.GET_APPLICATION_CONFIG)})),(0,l.bv)((()=>d())),(e,t)=>{const i=(0,l.up)("Loader"),d=(0,l.up)("router-view");return(0,l.wg)(),(0,l.iD)(l.HY,null,[ne,(0,l.Wm)(H,{onMenuInteraction:s}),(0,c.SU)(r)?((0,l.wg)(),(0,l.iD)("div",re,[(0,l._)("div",ae,[(0,l.Wm)(i)])])):((0,l.wg)(),(0,l.iD)("div",{key:1,class:(0,u.C_)(["app-container",{"hide-scroll":a.value}])},[(0,c.SU)(n)?((0,l.wg)(),(0,l.j4)(d,{key:0})):((0,l.wg)(),(0,l.j4)(te,{key:1}))],2)),(0,l._)("div",oe,[(0,l._)("div",{class:(0,u.C_)(["scroll-button",{"display-button":o.value}]),onClick:m},ie,2)]),(0,c.SU)(n)?((0,l.wg)(),(0,l.j4)(w,{key:2,version:(0,c.SU)(n)?(0,c.SU)(n).version:"",adminContact:(0,c.SU)(n).admin_contact},null,8,["version","adminContact"])):(0,l.kq)("",!0)],64)}}});const ce=le;var ue=ce,de=n(2540),me=n(5073),_e=n(2894);const Ee={class:"alert-message"},Se=["innerHTML"];var Te=(0,l.aZ)({__name:"AlertMessage",props:{message:null},setup(e){const t=e,{message:n}=(0,c.BK)(t);return(e,t)=>((0,l.wg)(),(0,l.iD)("div",Ee,[(0,l._)("div",{innerHTML:e.$t((0,c.SU)(n))},null,8,Se)]))}});const pe=(0,h.Z)(Te,[["__scopeId","data-v-69d7e4ff"]]);var Ae=pe,Oe=n(2531);const Re={class:"custom-textarea"},Ie=["id","name","maxLenght","disabled"],Ue={class:"remaining-chars"};var ge=(0,l.aZ)({__name:"CustomTextArea",props:{name:null,charLimit:{default:500},disabled:{type:Boolean,default:!1},input:{default:""}},emits:["updateValue"],setup(e,{emit:t}){const n=e,r=(0,c.iH)("");function a(e){t("updateValue",e.target.value)}return(0,l.YP)((()=>n.input),(e=>{r.value=null===e?"":e})),(t,n)=>((0,l.wg)(),(0,l.iD)("div",Re,[(0,l.wy)((0,l._)("textarea",{id:e.name,name:e.name,maxLenght:e.charLimit,disabled:e.disabled,"onUpdate:modelValue":n[0]||(n[0]=e=>r.value=e),onInput:a},null,40,Ie),[[o.nr,r.value]]),(0,l._)("div",Ue,(0,u.zw)(t.$t("workouts.REMAINING_CHARS"))+": "+(0,u.zw)(r.value.length)+"/"+(0,u.zw)(e.charLimit),1)]))}});const Ne=(0,h.Z)(ge,[["__scopeId","data-v-8cf5cc64"]]);var he=Ne,ze=n(3649),we=(0,l.aZ)({__name:"Distance",props:{distance:null,unitFrom:null,useImperialUnits:{type:Boolean},digits:{default:2},displayUnit:{type:Boolean,default:!0},speed:{type:Boolean,default:!1},strong:{type:Boolean,default:!1}},setup(e){const t=e,{digits:n,displayUnit:r,distance:a,speed:o,strong:s,unitFrom:i,useImperialUnits:d}=(0,c.BK)(t),m=(0,l.Fl)((()=>d.value?ze.Dl[i.value].defaultTarget:i.value)),_=(0,l.Fl)((()=>d.value?(0,ze.sC)(a.value,i.value,m.value,n.value):parseFloat(a.value.toFixed(n.value))));return(e,t)=>((0,l.wg)(),(0,l.iD)(l.HY,null,[(0,l._)("span",{class:(0,u.C_)(["distance",{strong:(0,c.SU)(s)}])},(0,u.zw)((0,c.SU)(_)),3),(0,l.Uk)(" "+(0,u.zw)(" ")+" "),(0,c.SU)(r)?((0,l.wg)(),(0,l.iD)("span",{key:0,class:(0,u.C_)(["unit",{strong:(0,c.SU)(s)}])},(0,u.zw)((0,c.SU)(m))+(0,u.zw)((0,c.SU)(o)?"/h":""),3)):(0,l.kq)("",!0)],64))}});const fe=(0,h.Z)(we,[["__scopeId","data-v-f46ff1d6"]]);var ve=fe,Ce=n(2201);const De={class:"dropdown-wrapper"},ke={key:0,class:"dropdown-list"},Pe=["onClick"];var Le=(0,l.aZ)({__name:"Dropdown",props:{options:null,selected:null},emits:{selected:e=>e},setup(e,{emit:t}){const n=e,r=(0,Ce.yj)(),a=(0,c.iH)(!1),o=n.options.map((e=>e));function s(){a.value=!a.value}function i(e){t("selected",e),a.value=!1}return(0,l.YP)((()=>r.path),(()=>a.value=!1)),(t,n)=>((0,l.wg)(),(0,l.iD)("div",De,[(0,l._)("div",{class:"dropdown-selected",onClick:s},[(0,l.WI)(t.$slots,"default")]),a.value?((0,l.wg)(),(0,l.iD)("ul",ke,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)((0,c.SU)(o),((t,n)=>((0,l.wg)(),(0,l.iD)("li",{class:(0,u.C_)(["dropdown-item",{selected:t.value===e.selected}]),key:n,onClick:e=>i(t)},(0,u.zw)(t.label),11,Pe)))),128))])):(0,l.kq)("",!0)]))}});const Me=(0,h.Z)(Le,[["__scopeId","data-v-2d3b4eac"]]);var be=Me;const ye={class:"error-message"},Ge={key:0},Fe={key:1};var We=(0,l.aZ)({__name:"ErrorMessage",props:{message:null},setup(e){const t=e,{message:n}=(0,c.BK)(t);return(e,t)=>((0,l.wg)(),(0,l.iD)("div",ye,[Array.isArray((0,c.SU)(n))?((0,l.wg)(),(0,l.iD)("ul",Ge,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)((0,c.SU)(n),((t,n)=>((0,l.wg)(),(0,l.iD)("li",{key:n},(0,u.zw)(e.$t(t)),1)))),128))])):((0,l.wg)(),(0,l.iD)("div",Fe,(0,u.zw)(e.$t((0,c.SU)(n))),1))]))}});const Ke=(0,h.Z)(We,[["__scopeId","data-v-2659a79a"]]);var Ye=Ke;const xe={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve"},$e=(0,l._)("desc",{id:"cyclingSportDescription"}," silhouette of a person riding a bicycle ",-1),Be=(0,l._)("g",null,[(0,l._)("path",{d:"M321.097,112.359c20.973,12.338,47.985,5.315,60.293-15.652c12.34-20.973,5.35-47.974-15.623-60.304\n\t\tc-21.009-12.332-47.99-5.317-60.314,15.65C293.129,73.036,300.103,100.027,321.097,112.359z"}),(0,l._)("path",{d:"M393.081,264.102c-2.414,0-4.8,0.194-7.169,0.362l-14.431-71.605l4.702-1.757c10.666-3.987,16.093-15.868,12.098-26.54\n\t\tc-3.994-10.681-15.946-16.084-26.531-12.09l-51.823,19.38l-2.321-18.864c6.3-13.193,5.541-29.78-4.767-41.482\n\t\tc-21.224-24.092-47.12-12.508-55.191-5.976l-106.884,86.555l0.016,0.024c-3.319,2.893-6.089,6.485-7.86,10.842\n\t\tc-2.191,5.396-2.596,11.067-1.564,16.384c-8.503,0.669-15.255,7.571-15.255,16.246c0,9.085,7.346,16.44,16.432,16.48l-6.797,15.906\n\t\tc-8.62-2.465-17.674-3.866-27.066-3.866C44.27,264.102,0,308.354,0,362.754c0,54.403,44.27,98.663,98.668,98.663\n\t\tc54.403,0,98.652-44.26,98.652-98.663c0-36.228-19.683-67.867-48.858-85.024l10.957-25.652h17.767l60.281,24.462l-32.201,52.773\n\t\tc-8.297,13.612-3.994,31.382,9.615,39.685c4.691,2.86,9.878,4.229,15,4.229c9.729,0,19.234-4.929,24.677-13.838l29.339-48.095\n\t\tl19.072,11.511c-5.447,12.227-8.54,25.726-8.54,39.95c0,54.403,44.254,98.663,98.652,98.663c54.402,0,98.656-44.26,98.656-98.663\n\t\tC491.737,308.354,447.483,264.102,393.081,264.102z M98.668,436.671c-40.756,0-73.923-33.161-73.923-73.917\n\t\tc0-40.756,33.167-73.909,73.923-73.909c5.944,0,11.649,0.896,17.188,2.224l-20.476,47.893\n\t\tc-11.758,1.619-20.843,11.598-20.843,23.792c0,13.323,10.808,24.132,24.13,24.132c8.767,0,16.367-4.745,20.589-11.76h52.065\n\t\tC165.395,409.988,135.188,436.671,98.668,436.671z M171.322,350.383h-52.065c-0.355-0.588-0.708-1.176-1.112-1.732l20.476-47.901\n\t\tC155.679,311.776,167.793,329.595,171.322,350.383z M296.781,290.175l7.666-12.564c4.416-7.233,5.431-16.038,2.774-24.084\n\t\tc-2.661-8.046-8.718-14.515-16.562-17.704l-52.725-21.395l32.443-26.281l1.804,14.691c0.756,6.267,4.366,11.841,9.761,15.12\n\t\tc3.271,1.981,6.979,2.988,10.698,2.988c2.435,0,4.88-0.435,7.218-1.306l48.15-18.001l13.627,67.691\n\t\tc-18.268,6.162-34.117,17.51-45.848,32.314L296.781,290.175z M375.396,337.633l-38.003-22.94\n\t\tc7.877-9.118,17.787-16.319,29.205-20.734L375.396,337.633z M393.081,436.671c-40.757,0-73.907-33.161-73.907-73.917\n\t\tc0-9.544,1.965-18.597,5.268-26.983l44.541,26.888c0,0.032-0.016,0.064-0.016,0.095c0,13.323,10.808,24.132,24.114,24.132\n\t\tc13.322,0,24.118-10.81,24.118-24.132c0-10.478-6.721-19.307-16.06-22.64l-10.277-51.043c0.756-0.024,1.463-0.226,2.22-0.226\n\t\tc40.757,0,73.911,33.153,73.911,73.909C466.992,403.51,433.838,436.671,393.081,436.671z"})],-1),Ze=[$e,Be];function He(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",xe,Ze)}var qe={name:"CyclingSport"};const Ve=(0,h.Z)(qe,[["render",He]]);var je=Ve;const Xe={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Je=(0,l._)("desc",{id:"cyclingTransportDescription"}," silhouette of a person riding a bicycle (for transportation) ",-1),Qe=(0,l._)("g",{id:"g147"},[(0,l._)("path",{d:"m 189.097,82.359 c 20.97701,12.331184 47.97442,5.308784 60.293,-15.652 12.32942,-20.979222 5.35418,-47.981117 -15.623,-60.304 -21.00482,-12.3391184 -47.99,-5.317 -60.314,15.65 -12.324,20.983 -5.34599,47.967183 15.644,60.306 z",id:"path143"}),(0,l._)("path",{d:"m 393.081,264.102 c -2.414,0 -4.8,0.194 -7.169,0.362 l -14.431,-71.605 4.702,-1.757 c 10.666,-3.987 16.093,-15.868 12.098,-26.54 -3.994,-10.681 -15.946,-16.084 -26.531,-12.09 l -63.05508,-1.53717 C 284.04753,137.09803 248.90259,106.55858 243.33317,101.62481 217.77732,75.090916 186.1698,85.012419 178.0988,91.544419 L 140.764,192.085 l 0.016,0.024 c -3.319,2.893 -6.089,6.485 -7.86,10.842 -2.191,5.396 -2.596,11.067 -1.564,16.384 -8.503,0.669 -15.255,7.571 -15.255,16.246 0,9.085 7.346,16.44 16.432,16.48 l -6.797,15.906 c -8.62,-2.465 -17.674,-3.866 -27.066,-3.866 C 44.27,264.102 0,308.354 0,362.754 c 0,54.403 44.27,98.663 98.668,98.663 54.403,0 98.652,-44.26 98.652,-98.663 0,-36.228 -19.683,-67.867 -48.858,-85.024 l 10.957,-25.652 h 17.767 l 60.281,24.462 -32.201,52.773 c -8.297,13.612 -3.994,31.382 9.615,39.685 4.691,2.86 9.878,4.229 15,4.229 9.729,0 19.234,-4.929 24.677,-13.838 l 29.339,-48.095 19.072,11.511 c -5.447,12.227 -8.54,25.726 -8.54,39.95 0,54.403 44.254,98.663 98.652,98.663 54.402,0 98.656,-44.26 98.656,-98.663 0,-54.401 -44.254,-98.653 -98.656,-98.653 z M 98.668,436.671 c -40.756,0 -73.923,-33.161 -73.923,-73.917 0,-40.756 33.167,-73.909 73.923,-73.909 5.944,0 11.649,0.896 17.188,2.224 L 95.38,338.962 c -11.758,1.619 -20.843,11.598 -20.843,23.792 0,13.323 10.808,24.132 24.13,24.132 8.767,0 16.367,-4.745 20.589,-11.76 h 52.065 c -5.926,34.862 -36.133,61.545 -72.653,61.545 z m 72.654,-86.288 h -52.065 c -0.355,-0.588 -0.708,-1.176 -1.112,-1.732 l 20.476,-47.901 c 17.058,11.026 29.172,28.845 32.701,49.633 z m 125.459,-60.208 7.666,-12.564 c 4.416,-7.233 5.431,-16.038 2.774,-24.084 -2.661,-8.046 -8.718,-14.515 -16.562,-17.704 l -73.83357,-31.7176 16.7558,-45.21274 c 10.36934,4.13303 41.82171,27.90767 45.77423,28.08592 3.271,1.981 8.57725,1.46711 12.29625,1.46711 2.435,0 18.50584,0.70472 20.84384,-0.16628 L 343.32113,188.03378 361.635,269.33 c -18.268,6.162 -34.117,17.51 -45.848,32.314 z m 78.615,47.458 -38.003,-22.94 c 7.877,-9.118 17.787,-16.319 29.205,-20.734 z m 17.685,99.038 c -40.757,0 -73.907,-33.161 -73.907,-73.917 0,-9.544 1.965,-18.597 5.268,-26.983 l 44.541,26.888 c 0,0.032 -0.016,0.064 -0.016,0.095 0,13.323 10.808,24.132 24.114,24.132 13.322,0 24.118,-10.81 24.118,-24.132 0,-10.478 -6.721,-19.307 -16.06,-22.64 l -10.277,-51.043 c 0.756,-0.024 1.463,-0.226 2.22,-0.226 40.757,0 73.911,33.153 73.911,73.909 -10e-4,40.756 -33.155,73.917 -73.912,73.917 z",id:"path145"})],-1),et=[Je,Qe];function tt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Xe,et)}var nt={name:"CyclingTransport"};const rt=(0,h.Z)(nt,[["render",tt]]);var at=rt;const ot={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 491.737 491.737",style:{"enable-background":"new 0 0 491.737 491.737"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},st=(0,l.uE)(' silhouette of a person riding a bicycle with virtual indicator ',4),it=[st];function lt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",ot,it)}var ct={name:"CyclingVirtual"};const ut=(0,h.Z)(ct,[["render",lt]]);var dt=ut;const mt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 463.507 463.507",style:{"enable-background":"new 0 0 463.507 463.507"},"xml:space":"preserve"},_t=(0,l._)("desc",{id:"hikingDescription"},"silhouette of a person hiking",-1),Et=(0,l._)("g",null,[(0,l._)("path",{d:"M246.413,78.492c21.688,0,39.255-17.573,39.255-39.251c0-21.67-17.567-39.24-39.255-39.24\n\t\tc-21.652,0-39.242,17.57-39.242,39.24C207.171,60.919,224.761,78.492,246.413,78.492z"}),(0,l._)("path",{d:"M386.604,202.858c0-11.185-9.066-20.251-20.253-20.251h-68.479l-38.62-54.832l0.127-0.933\n\t\tc1.378-10.474-1.474-21.067-7.911-29.444c-6.441-8.378-15.932-13.852-26.408-15.23c-11.596-1.511-22.592,2.224-30.852,9.225V45.779\n\t\tc0-7.847-6.362-14.217-14.225-14.217H140.59c-7.867,0-14.225,6.37-14.225,14.217v168.953c0,20.68,15.821,37.476,35.979,39.446\n\t\tl-3.043,7.073l-23.859,90.136l-53.73,72.188c-8.006,10.768-5.794,25.987,4.984,34.001c4.348,3.245,9.443,4.811,14.491,4.811\n\t\tc7.422,0,14.729-3.385,19.511-9.795l56.529-75.945c1.851-2.484,3.213-5.299,4.003-8.289l16.266-61.414l44.521,40.877l-6.076,88.603\n\t\tc-0.917,13.393,9.177,24.99,22.58,25.908c0.552,0.04,1.124,0.056,1.691,0.056c12.66,0,23.339-9.819,24.208-22.642l6.882-100.264\n\t\tc0.508-7.364-2.371-14.572-7.815-19.564l-45.994-42.219l13.992-90.613l19.331,27.435c3.801,5.387,9.972,8.592,16.552,8.592h70.882\n\t\tl1.339,232.294c0,4.478,3.626,8.101,8.101,8.101c4.479,0,8.101-3.624,8.101-8.101l-1.339-234.036\n\t\tC381.588,218.245,386.604,211.15,386.604,202.858z"})],-1),St=[_t,Et];function Tt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",mt,St)}var pt={name:"Hiking"};const At=(0,h.Z)(pt,[["render",Tt]]);var Ot=At;const Rt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 503.162 503.162",style:{"enable-background":"new 0 0 503.162 503.162"},"xml:space":"preserve"},It=(0,l._)("desc",{id:"mountainBikingDescription"}," silhouette of a person riding a mountain bike ",-1),Ut=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M149.951,67.997c15.711-7.143,22.739-25.675,15.596-41.416c-7.124-15.701-25.723-22.682-41.453-15.539\n\t\t\tc-15.721,7.134-22.702,25.752-15.578,41.444C115.679,68.216,134.23,75.14,149.951,67.997z"}),(0,l._)("path",{d:"M87.517,89.072l-32.828,87.755c-1.979,5.967-1.683,12.594,1.1,18.733c4.055,8.922,12.604,14.525,21.755,15.271\n\t\t\tl76.873,6.244l29.137,64.184c4.122,9.046,14.832,13.148,23.906,9.017c9.075-4.131,13.072-14.859,8.951-23.944l-36.424-80.201\n\t\t\tc0,0-3.605-13.76-21.343-14.133l-43.873-2.572l21.009-55.166l31.671,20.588c5.584,3.663,10.997,3.682,15.1,1.722l55.051-24.997\n\t\t\tc17.069-7.755,6.952-30.036-10.108-22.29l-47.506,21.707l-53.55-34.846c0,0-11.638-8.013-24.241-2.285\n\t\t\tC102.205,73.858,91.112,77.243,87.517,89.072z"}),(0,l._)("path",{d:"M423.687,182.488l-2.61,15.042c-2.123,12.154-13.35,25.092-25.092,28.888l-3.711,1.195\n\t\t\tc3.041-16.543,1.282-34.148-6.215-50.633c-19.498-42.974-70.094-61.87-112.943-42.419\n\t\t\tc-42.878,19.479-61.936,70.017-42.438,112.981c17.069,37.562,57.881,56.744,96.534,47.966l-0.784,1.415\n\t\t\tc-5.968,10.796-20.817,19.221-33.144,18.8l-17.892-0.622c-12.336-0.411-30.514,5.002-40.603,12.116l-22.376,15.759\n\t\t\tc-10.107,7.104-28.276,12.632-40.612,12.354l-12.001-0.277c12.718-22.845,14.889-51.159,3.242-76.806\n\t\t\tc-19.517-42.955-70.074-61.879-113.019-42.381c-42.792,19.44-61.87,70.007-42.372,112.933\n\t\t\tc16.667,36.711,56.084,55.788,93.914,48.444l-1.32,2.056c-6.675,10.385-22.08,18.398-34.406,17.92l-32.79-1.291\n\t\t\tc-12.326-0.497-24.021,8.97-26.096,21.143l-2.62,15.339c-0.564,3.271-0.354,6.11,0.401,8.501c-0.43,1.778-0.736,3.548-0.736,5.326\n\t\t\tv9.562c0,10.557,8.568,19.125,19.125,19.125h460.932c10.557,0,19.115-8.568,19.106-19.125l-0.125-167.507\n\t\t\tc0-2.782-0.593-5.221-1.616-7.286c1.396-3.806,2.057-7.841,1.598-11.839l-4.677-40.497c-1.415-12.249-9.763-29.146-18.637-37.724\n\t\t\tl-36.127-34.951C434.712,167.418,425.79,170.325,423.687,182.488z"})])],-1),gt=[It,Ut];function Nt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Rt,gt)}var ht={name:"MountainBiking"};const zt=(0,h.Z)(ht,[["render",Nt]]);var wt=zt;const ft={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg",x:"0px",y:"0px",viewBox:"0 0 503.162 503.162",style:{"enable-background":"new 0 0 503.162 503.162"},"xml:space":"preserve"},vt=(0,l.uE)(' silhouette of a person riding an electric mountain bike ',18),Ct=[vt];function Dt(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",ft,Ct)}var kt={name:"MountainBikingElectric"};const Pt=(0,h.Z)(kt,[["render",Dt]]);var Lt=Pt;const Mt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 534.51 534.51",style:{"enable-background":"new 0 0 534.51 534.51"},"xml:space":"preserve"},bt=(0,l._)("desc",{id:"rowingDescription"},"silhouette of a person rowing",-1),yt=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M70.517,393.857h132.622l-67.205,68.631c-3.28,3.385-3.204,8.797,0.172,12.076c1.597,1.568,3.72,2.43,5.958,2.43\n\t\t\tc2.305,0,4.533-0.947,6.12-2.572l78.881-80.555h221.315c12.45,0,30.676-6.006,40.296-13.914\n\t\t\tc8.788-7.229,19.049-16.217,26.345-24.299c10.375-9.811,22.214-23.639-4.255-22.834c-6.98,0.248-206.789,0.02-223.926,0\n\t\t\tl47.144-48.139l22.176-22.032l28.209,9.17c10.414,3.385,22.472-0.803,26.919-9.362c4.446-8.558,0.268-18.407-9.343-21.993\n\t\t\tl-17.404-6.512l54.698-54.774c12.507,6.617,28.362,4.867,38.899-5.671l46.541-46.607c13.11-13.015,13.11-33.957,0-46.923\n\t\t\tc-12.909-13.034-34.042-13.034-46.942,0l-46.512,46.598c-10.892,10.815-12.508,27.139-5.26,39.742l-57.853,59.077L253.744,183.09\n\t\t\tc-1.482-0.851-14.153-5.786-26.833-10.643c-14.898-5.719-30.371,0.583-34.53,13.971l-7.525,24.241l-35.324,118.451\n\t\t\tc-0.468,1.34-0.603,2.562-0.746,3.711H14.136c-12.45,0-17.662,8.836-11.618,19.727l23.237,21.592\n\t\t\tC39.123,385.068,58.066,393.857,70.517,393.857z M272.63,248.727c1.797-5.967,8.099-9.39,14.075-7.64l51.37,14.975l-33.038,33.737\n\t\t\tl-43.453,43.012h-14.2L272.63,248.727z"}),(0,l._)("circle",{cx:"248.953",cy:"109.842",r:"52.326"})])],-1),Gt=[bt,yt];function Ft(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Mt,Gt)}var Wt={name:"Rowing"};const Kt=(0,h.Z)(Wt,[["render",Ft]]);var Yt=Kt;const xt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve"},$t=(0,l._)("desc",{id:"runningDescription"},"silhouette of a running person",-1),Bt=(0,l._)("g",null,[(0,l._)("path",{d:"M282.74,80.771c22.318,0,40.401-18.08,40.401-40.389C323.141,18.084,305.058,0,282.74,0\n\t\tc-22.281,0-40.378,18.084-40.378,40.383C242.362,62.691,260.458,80.771,282.74,80.771z"}),(0,l._)("path",{d:"M400.207,188.547H331.47l-38.766-55.03l0.123-0.944c1.384-10.514-1.475-21.146-7.94-29.556\n\t\tc-6.461-8.409-16.007-13.903-26.52-15.287c-10.926-1.429-22.619,3.12-31.206,8.646c-1.441,0.928-84.97,54.921-84.97,54.921\n\t\tc-5.175,3.358-8.542,8.877-9.165,15.016c-0.634,6.13,1.574,12.222,5.976,16.541l58.982,58l-6.417,48.954l-18.707,65.584l-67.8-19.4\n\t\tc-12.911-3.676-26.44,3.796-30.159,16.747c-3.699,12.951,3.799,26.459,16.758,30.168l91.271,26.109\n\t\tc2.192,0.627,4.444,0.936,6.7,0.936c4.113,0,8.195-1.04,11.848-3.073c5.655-3.146,9.833-8.409,11.611-14.635l21.963-77.057\n\t\tl26.365,36.639l6.684,119.628c0.73,12.991,11.501,23.036,24.349,23.036c0.441,0,0.92-0.016,1.379-0.039\n\t\tc13.453-0.748,23.745-12.262,23-25.713l-7.083-126.736c-0.271-4.643-1.846-9.116-4.56-12.887l-32.24-44.811l11.959-91.279\n\t\tl19.409,27.555c3.794,5.407,10.005,8.624,16.613,8.624h79.28c11.226,0,20.326-9.101,20.326-20.329\n\t\tC420.533,197.647,411.432,188.547,400.207,188.547z M204.606,190.357l-19.026-18.717l23.476-15.206L204.606,190.357z"})],-1),Zt=[$t,Bt];function Ht(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",xt,Zt)}var qt={name:"Running"};const Vt=(0,h.Z)(qt,[["render",Ht]]);var jt=Vt;const Xt={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 522.362 522.362",style:{"enable-background":"new 0 0 522.362 522.362"},"xml:space":"preserve"},Jt=(0,l._)("desc",{id:"alpineSkiingDescription"},"silhouette of a person skiing",-1),Qt=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M14.314,351.859L408.088,461.78c4.484,1.311,9.104,1.97,13.731,1.97l0,0c17.471,0,33.746-9.429,42.467-24.604\n\t\t\tc2.716-4.724,3.137-10.27,1.157-15.214c-1.912-4.762-5.767-8.31-10.576-9.744c-7.373-2.237-15.481,1.109-22.146,9.229\n\t\t\tc-3.548,4.303-9.496,6.244-15.07,4.714l-136.467-38.078c1.396-0.555,2.812-1.195,4.236-2.065l103.266-63.15\n\t\t\tc15.443-9.362,18.493-33.957,7.812-43.883l-64.758-60.233l39.972-21.688l69.682,9.744c5.23,0.736,9.744-2.037,10.079-6.187\n\t\t\tc0.344-4.141-3.624-8.1-8.855-8.826l-48.605-6.828l22.472-12.192c39.895-23.275,5.823-85.192-35.334-63.112l-87.554,61.19\n\t\t\tl-117.503-16.515l2.543-12.087c0.545-2.582-1.109-5.116-3.691-5.661c-2.572-0.593-5.116,1.1-5.661,3.701l-2.678,12.709\n\t\t\tl-18.331-2.582c-5.231-0.727-9.467,2.123-9.467,6.369s4.236,8.281,9.467,9.017l15.176,2.123l-2.544,12.087\n\t\t\tc-0.545,2.582,1.109,5.125,3.691,5.671c0.334,0.076,0.66,0.105,0.994,0.105c2.209,0,4.198-1.54,4.676-3.787l2.678-12.737\n\t\t\tl102.414,14.315l-5.308,3.72c-4.332,3.022-10.155,9.151-11.723,14.201c-3.844,12.45-1.473,26.717,10.452,37.705l68.802,62.175\n\t\t\tc0,0-50.978,31.776-74.998,46.397c-14.219,8.606-13.674,23.858-6.129,33.393L23.705,318.199\n\t\t\tc-10.012-2.792-20.569,2.554-23.113,11.695C-2,339.169,4.159,349.029,14.314,351.859z"}),(0,l._)("path",{d:"M450.842,72.003c-15.291,16.715-14.201,42.667,2.639,58.121c16.706,15.31,42.716,14.086,58.073-2.668\n\t\t\tc15.386-16.677,14.172-42.734-2.544-58.016C492.305,54.064,466.17,55.192,450.842,72.003z"})])],-1),en=[Jt,Qt];function tn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",Xt,en)}var nn={name:"SkiingAlpine"};const rn=(0,h.Z)(nn,[["render",tn]]);var an=rn;const on={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 296 296",style:{"enable-background":"new 0 0 296 296"},"xml:space":"preserve"},sn=(0,l._)("desc",{id:"crossCountrySkiingDescription"}," silhouette of a person skiing (cross country) ",-1),ln=(0,l._)("g",null,[(0,l._)("path",{d:"M241.313,246.906h-39.564l0.456-1.273c5.62-18.374,3.479-37.58-6.027-54.278c-5.653-9.929-13.443-18.018-22.745-23.959\n\t\tl12.886-51.126c3.035-12.05-4.272-24.266-16.322-27.301c-2.634-0.664-5.278-0.826-7.833-0.559\n\t\tc-0.151-0.011-0.299-0.032-0.452-0.038c-26.03-1.077-51.443,8.485-70.33,25.993L41.586,82.855\n\t\tc-4.332-2.741-10.065-1.451-12.806,2.881s-1.451,10.065,2.88,12.806l47.625,30.136c-2.557,6.013-0.962,13.224,4.375,17.531\n\t\tc2.774,2.24,6.104,3.33,9.413,3.33c4.377-0.001,8.717-1.907,11.68-5.579l0.478-0.591c8.686-10.766,20.465-18.479,33.484-22.317\n\t\tl-11.095,44.046c-1.061,4.214-0.854,8.448,0.374,12.305c-12.908,17.917-28.398,33.68-46.198,46.979l-14.649,10.727\n\t\tc-3.938,2.943-6.001,7.798-6.005,11.798H8.25c-4.556,0-8.083,4.131-8.083,8.688v2.063c0,4.556,3.527,8.25,8.083,8.25h55.188\n\t\th161.375H280c9.113,0,16.167-7.387,16.167-16.5v-2.5H241.313z M153.974,192.398c0.741-0.153,1.471-0.231,2.188-0.457\n\t\tc5.742,3.406,10.53,8.313,13.945,14.311c5.378,9.447,6.59,20.402,3.41,30.797l-1.799,5.674c-0.447,1.461-0.656,3.184-0.657,4.184\n\t\th-69.909C121.581,231.906,139.297,213.274,153.974,192.398z M167,57.938c0-15.378,12.466-27.844,27.844-27.844\n\t\ts27.844,12.466,27.844,27.844s-12.466,27.844-27.844,27.844S167,73.315,167,57.938z"})],-1),cn=[sn,ln];function un(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",on,cn)}var dn={name:"SkiingCrossCountry"};const mn=(0,h.Z)(dn,[["render",un]]);var _n=mn;const En={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Sn=(0,l.uE)('silhouette of a person with snowshoes',6),Tn=[Sn];function pn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",En,Tn)}var An={name:"Snowshoes"};const On=(0,h.Z)(An,[["render",pn]]);var Rn=On;const In={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 535.876 535.876",style:{"enable-background":"new 0 0 535.876 535.876"},"xml:space":"preserve"},Un=(0,l._)("desc",{id:"trailDescription"},"silhouette of a person running (trail)",-1),gn=(0,l._)("g",null,[(0,l._)("g",null,[(0,l._)("path",{d:"M505.204,326.949c-5.805-10.892-15.176-10.862-20.923,0.067l-7.114,13.512c-5.757,10.92-20.416,19.775-32.752,19.775\n\t\t\th-16.753c-12.346,0-29.645,6.847-38.643,15.29l-32.35,30.342l-1.233-105.388c0.822-18.446-10.596-24.634-10.596-24.634\n\t\t\tl-56.543-25.972l33.67-67.645l38.527,22.912c0,0,15.472,9.715,26.727-9.324l37.026-63.093c1.625-3.519,2.094-7.564,1.052-11.609\n\t\t\tc-2.381-9.256-11.81-14.86-21.095-12.479c-4.083,1.042-7.459,3.49-9.754,6.713l-30.772,51.962l-62.777-37.102\n\t\t\tc-4.733-2.716-10.519-3.691-16.257-2.209l-78.345,20.12c-5.03,1.291-8.96,4.762-11.017,9.142l-38.097,76.165\n\t\t\tc-2.591,3.854-3.624,8.73-2.371,13.607c2.285,8.941,11.456,14.363,20.435,12.059c5.04-1.291,8.951-4.743,10.997-9.161\n\t\t\tl35.314-70.858l28.936-7.296l-76.203,149.921l-65.981,16.734c-1.759,0.393-3.48,1.023-5.163,1.836\n\t\t\tc-10.596,5.412-14.679,18.179-9.267,28.803c4.733,9.266,15.252,13.636,24.901,10.978l78.067-20.187\n\t\t\tc18.6-4.093,23.313-14.449,23.313-14.449l30.581-58.79l62.28,35.678l0.593,86.216c0.01,1.08,0.259,2.161,0.421,3.241l-11.6-4.188\n\t\t\tc-11.608-4.188-30.57-4.608-42.361-0.956l-26.135,8.128c-11.79,3.663-30.791,3.338-42.447-0.717l-19.221-6.694\n\t\t\tc-11.657-4.054-28.831-0.984-38.374,6.838L109.9,433.954c-9.544,7.822-26.67,10.72-38.25,6.483L40.84,429.135\n\t\t\tc-11.58-4.256-25.608,1.157-31.336,12.097l-7.21,13.789c-5.728,10.93-0.354,19.794,11.982,19.794H500.27\n\t\t\tc12.336,0,24.309-9.802,26.728-21.907l8.004-39.981c2.409-12.097-0.325-30.733-6.14-41.616L505.204,326.949z"}),(0,l._)("path",{d:"M326.395,126.625c17.806-4.562,28.563-22.721,23.983-40.526c-4.581-17.844-22.74-28.554-40.555-23.983\n\t\t\tc-17.796,4.581-28.535,22.711-23.964,40.535C290.439,120.476,308.599,131.205,326.395,126.625z"})])],-1),Nn=[Un,gn];function hn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",In,Nn)}var zn={name:"Trail"};const wn=(0,h.Z)(zn,[["render",hn]]);var fn=wn;const vn={version:"1.1",id:"Capa_1",x:"0px",y:"0px",viewBox:"0 0 494.49 494.49",style:{"enable-background":"new 0 0 494.49 494.49"},"xml:space":"preserve",xmlns:"http://www.w3.org/2000/svg","xmlns:svg":"http://www.w3.org/2000/svg"},Cn=(0,l.uE)('silhouette of a walking person',3),Dn=[Cn];function kn(e,t,n,r,a,o){return(0,l.wg)(),(0,l.iD)("svg",vn,Dn)}var Pn={name:"Walking"};const Ln=(0,h.Z)(Pn,[["render",kn]]);var Mn=Ln;const bn=["title"];var yn=(0,l.aZ)({__name:"index",props:{sportLabel:null,color:null,title:{default:""}},setup(e){const t=e,{color:n,sportLabel:r,title:a}=(0,c.BK)(t),o=(0,l.f3)("sportColors");return(e,t)=>((0,l.wg)(),(0,l.iD)("div",{class:"sport-img",style:(0,u.j5)({fill:(0,c.SU)(n)?(0,c.SU)(n):(0,c.SU)(o)[(0,c.SU)(r)]}),title:(0,c.SU)(a)?(0,c.SU)(a):e.$t(`sports.${(0,c.SU)(r)}.LABEL`)},["Cycling (Sport)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(je,{key:0})):(0,l.kq)("",!0),"Cycling (Transport)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(at,{key:1})):(0,l.kq)("",!0),"Cycling (Virtual)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(dt,{key:2})):(0,l.kq)("",!0),"Hiking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Ot,{key:3})):(0,l.kq)("",!0),"Mountain Biking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(wt,{key:4})):(0,l.kq)("",!0),"Mountain Biking (Electric)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Lt,{key:5})):(0,l.kq)("",!0),"Rowing"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Yt,{key:6})):(0,l.kq)("",!0),"Running"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(jt,{key:7})):(0,l.kq)("",!0),"Skiing (Alpine)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(an,{key:8})):(0,l.kq)("",!0),"Skiing (Cross Country)"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(_n,{key:9})):(0,l.kq)("",!0),"Snowshoes"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Rn,{key:10})):(0,l.kq)("",!0),"Trail"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(fn,{key:11})):(0,l.kq)("",!0),"Walking"===(0,c.SU)(r)?((0,l.wg)(),(0,l.j4)(Mn,{key:12})):(0,l.kq)("",!0)],12,bn))}});const Gn=yn;var Fn=Gn;const Wn={class:"loader"};function Kn(e,t){return(0,l.wg)(),(0,l.iD)("div",Wn)}const Yn={},xn=(0,h.Z)(Yn,[["render",Kn],["__scopeId","data-v-4c9921ee"]]);var $n=xn;const Bn={id:"modal"},Zn={class:"custom-modal"},Hn={key:0,class:"modal-message"},qn={key:1,class:"modal-message"},Vn={class:"modal-buttons"};var jn=(0,l.aZ)({__name:"Modal",props:{title:null,message:null,strongMessage:{default:()=>null}},emits:["cancelAction","confirmAction"],setup(e,{emit:t}){const n=e,r=(0,C.o)(),{title:a,message:o,strongMessage:s}=(0,c.BK)(n),i=(0,l.Fl)((()=>r.getters[v.SY.GETTERS.ERROR_MESSAGES]));return(0,l.Ah)((()=>r.commit(v.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(e,n)=>{const r=(0,l.up)("i18n-t"),d=(0,l.up)("ErrorMessage"),m=(0,l.up)("Card");return(0,l.wg)(),(0,l.iD)("div",Bn,[(0,l._)("div",Zn,[(0,l.Wm)(m,null,{title:(0,l.w5)((()=>[(0,l.Uk)((0,u.zw)((0,c.SU)(a)),1)])),content:(0,l.w5)((()=>[(0,c.SU)(s)?((0,l.wg)(),(0,l.iD)("div",Hn,[(0,l.Wm)(r,{keypath:(0,c.SU)(o)},{default:(0,l.w5)((()=>[(0,l._)("span",null,(0,u.zw)((0,c.SU)(s)),1)])),_:1},8,["keypath"])])):((0,l.wg)(),(0,l.iD)("div",qn,(0,u.zw)((0,c.SU)(o)),1)),(0,c.SU)(i)?((0,l.wg)(),(0,l.j4)(d,{key:2,message:(0,c.SU)(i)},null,8,["message"])):(0,l.kq)("",!0),(0,l._)("div",Vn,[(0,c.SU)(i)?(0,l.kq)("",!0):((0,l.wg)(),(0,l.iD)("button",{key:0,class:"confirm",onClick:n[0]||(n[0]=e=>t("confirmAction"))},(0,u.zw)(e.$t("buttons.YES")),1)),(0,l._)("button",{class:"cancel",onClick:n[1]||(n[1]=e=>t("cancelAction"))},(0,u.zw)(e.$t("buttons."+((0,c.SU)(i)?"CANCEL":"NO"))),1)])])),_:1})])])}}});const Xn=(0,h.Z)(jn,[["__scopeId","data-v-e8fcfaba"]]);var Jn=Xn;const Qn=[{target:Ae,name:"AlertMessage"},{target:Oe.Z,name:"Card"},{target:he,name:"CustomTextArea"},{target:ve,name:"Distance"},{target:be,name:"Dropdown"},{target:Ye,name:"ErrorMessage"},{target:$n,name:"Loader"},{target:Jn,name:"Modal"},{target:Fn,name:"SportImage"}],er={mounted:(e,t)=>{e.clickOutsideEvent=function(n){e===n.target||e.contains(n.target)||t.value(n)},document.body.addEventListener("click",e.clickOutsideEvent),document.body.addEventListener("touchstart",e.clickOutsideEvent)},unmounted:function(e){e.clickOutsideEvent&&(document.body.removeEventListener("click",e.clickOutsideEvent),document.body.removeEventListener("touchstart",e.clickOutsideEvent),e.clickOutsideEvent=void 0)}};var tr=n(631);r.kL.register(r.ZL,r.jn,r.od,r.De,r.Dx,r.u,r.Gu,r.vn,r.uw,r.ST,r.f$,a.Z);const nr=(0,o.ri)(ue).provide("sportColors",tr.Zo).use(de.Z).use(_e.Z).use(me.Z).use(s.ZP,{name:"VFullscreen"}).directive("click-outside",er);Qn.forEach((e=>{nr.component(e.name,e.target)})),nr.mount("#app")},5073:function(e,t,n){"use strict";n.d(t,{Z:function(){return wl}});var r=n(2201),a=(n(7658),n(6252)),o=n(3577),s=n(9963),i=n(2262),l=n(5801),c=n(9917),u=n(8966);const d=e=>((0,a.dD)("data-v-24ec93e2"),e=e(),(0,a.Cn)(),e),m={id:"admin-app",class:"admin-card"},_=["onSubmit"],E={for:"admin_contact"},S=["value"],T=["disabled"],p={for:"max_users"},A=["disabled"],O={class:"user-limit-help"},R={class:"info-box"},I=d((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),U={for:"max_single_file_size"},g=["disabled"],N={for:"max_zip_file_size"},h=["disabled"],z={for:"gpx_limit_import"},w=["disabled"],f={key:1,class:"form-buttons"},v={class:"confirm",type:"submit"},C=["onClick"],D={key:2,class:"form-buttons"};var k=(0,a.aZ)({__name:"AdminApplication",props:{appConfig:null,edition:{type:Boolean,default:!1}},setup(e){const t=e,{edition:n}=(0,i.BK)(t),d=(0,c.o)(),k=(0,r.tv)(),P=(0,i.qj)({admin_contact:"",max_users:0,max_single_file_size:0,max_zip_file_size:0,gpx_limit_import:0}),L=(0,a.Fl)((()=>d.getters[l.SY.GETTERS.ERROR_MESSAGES]));function M(e){Object.keys(P).map((t=>{["max_single_file_size","max_zip_file_size"].includes(t)?P[t]=(0,u.j)(e[t]):P[t]=e[t]}))}function b(){M(t.appConfig),d.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),k.push("/admin/application")}function y(){const e=Object.assign({},P);e.max_single_file_size*=1048576,e.max_zip_file_size*=1048576,d.dispatch(l.SY.ACTIONS.UPDATE_APPLICATION_CONFIG,e)}return(0,a.wF)((()=>{t.appConfig&&M(t.appConfig)})),(e,t)=>{const r=(0,a.up)("ErrorMessage"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",m,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.TITLE")),1)])),content:(0,a.w5)((()=>[(0,a._)("form",{class:"admin-form",onSubmit:(0,s.iM)(y,["prevent"])},[(0,a._)("label",E,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.ADMIN_CONTACT"))+": ",1),(0,i.SU)(n)||P.admin_contact?(0,a.wy)(((0,a.wg)(),(0,a.iD)("input",{key:1,id:"admin_contact",name:"admin_contact",type:"email","onUpdate:modelValue":t[0]||(t[0]=e=>P.admin_contact=e),disabled:!(0,i.SU)(n)},null,8,T)),[[s.nr,P.admin_contact]]):((0,a.wg)(),(0,a.iD)("input",{key:0,class:"no-contact",value:e.$t("admin.APP_CONFIG.NO_CONTACT_EMAIL"),disabled:""},null,8,S))]),(0,a._)("label",p,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.MAX_USERS_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_users",name:"max_users",type:"number",min:"0","onUpdate:modelValue":t[1]||(t[1]=e=>P.max_users=e),disabled:!(0,i.SU)(n)},null,8,A),[[s.nr,P.max_users]])]),(0,a._)("div",O,[(0,a._)("span",R,[I,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.APP_CONFIG.MAX_USERS_HELP")),1)])]),(0,a._)("label",U,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.SINGLE_UPLOAD_MAX_SIZE_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_single_file_size",name:"max_single_file_size",type:"number",step:"0.1",min:"0","onUpdate:modelValue":t[2]||(t[2]=e=>P.max_single_file_size=e),disabled:!(0,i.SU)(n)},null,8,g),[[s.nr,P.max_single_file_size]])]),(0,a._)("label",N,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.ZIP_UPLOAD_MAX_SIZE_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"max_zip_file_size",name:"max_zip_file_size",type:"number",step:"0.1",min:"0","onUpdate:modelValue":t[3]||(t[3]=e=>P.max_zip_file_size=e),disabled:!(0,i.SU)(n)},null,8,h),[[s.nr,P.max_zip_file_size]])]),(0,a._)("label",z,[(0,a.Uk)((0,o.zw)(e.$t("admin.APP_CONFIG.MAX_FILES_IN_ZIP_LABEL"))+": ",1),(0,a.wy)((0,a._)("input",{id:"gpx_limit_import",name:"gpx_limit_import",type:"number",min:"0","onUpdate:modelValue":t[4]||(t[4]=e=>P.gpx_limit_import=e),disabled:!(0,i.SU)(n)},null,8,w),[[s.nr,P.gpx_limit_import]])]),(0,i.SU)(L)?((0,a.wg)(),(0,a.j4)(r,{key:0,message:(0,i.SU)(L)},null,8,["message"])):(0,a.kq)("",!0),(0,i.SU)(n)?((0,a.wg)(),(0,a.iD)("div",f,[(0,a._)("button",v,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:(0,s.iM)(b,["prevent"])},(0,o.zw)(e.$t("buttons.CANCEL")),9,C)])):((0,a.wg)(),(0,a.iD)("div",D,[(0,a._)("button",{class:"confirm",onClick:t[5]||(t[5]=(0,s.iM)((t=>e.$router.push("/admin/application/edit")),["prevent"]))},(0,o.zw)(e.$t("buttons.EDIT")),1),(0,a._)("button",{class:"cancel",onClick:t[6]||(t[6]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)]))],40,_)])),_:1})])}}}),P=n(3744);const L=(0,P.Z)(k,[["__scopeId","data-v-24ec93e2"]]);var M=L;const b={class:"stat-card"},y={class:"stat-content box"},G={class:"stat-icon"},F={class:"stat-details"},W={class:"stat-huge"},K={class:"stat"};var Y=(0,a.aZ)({__name:"StatCard",props:{icon:null,text:null,value:null},setup(e){const t=e,{icon:n,text:r,value:s}=(0,i.BK)(t);return(e,t)=>((0,a.wg)(),(0,a.iD)("div",b,[(0,a._)("div",y,[(0,a._)("div",G,[(0,a._)("i",{class:(0,o.C_)(["fa",`fa-${(0,i.SU)(n)}`])},null,2)]),(0,a._)("div",F,[(0,a._)("div",W,(0,o.zw)((0,i.SU)(s)),1),(0,a._)("div",K,(0,o.zw)((0,i.SU)(r)),1)])])]))}});const x=Y;var $=x;const B={id:"user-stats"};var Z=(0,a.aZ)({__name:"AppStatsCards",props:{appStatistics:null},setup(e){const t=e,{appStatistics:n}=(0,i.BK)(t),r=(0,a.Fl)((()=>(0,u.Z)(n.value.uploads_dir_size,!1)));return(e,t)=>((0,a.wg)(),(0,a.iD)("div",B,[(0,a.Wm)($,{icon:"users",value:(0,i.SU)(n).users,text:e.$t("admin.USER",(0,i.SU)(n).users)},null,8,["value","text"]),(0,a.Wm)($,{icon:"tags",value:(0,i.SU)(n).sports,text:e.$t("workouts.SPORT",(0,i.SU)(n).sports)},null,8,["value","text"]),(0,a.Wm)($,{icon:"calendar",value:(0,i.SU)(n).workouts,text:e.$t("workouts.WORKOUT",(0,i.SU)(n).workouts)},null,8,["value","text"]),(0,a.Wm)($,{icon:"folder-open",value:(0,i.SU)(r).size,text:(0,i.SU)(r).suffix},null,8,["value","text"])]))}});const H=Z;var q=H,V=n(2531);const j=e=>((0,a.dD)("data-v-0dd66f89"),e=e(),(0,a.Cn)(),e),X={id:"admin-menu",class:"center-card"},J={class:"admin-menu description-list"},Q={class:"application-config-details"},ee=j((()=>(0,a._)("br",null,null,-1))),te={class:"registration-status"},ne={key:0,class:"email-sending-status"},re=j((()=>(0,a._)("i",{class:"fa fa-exclamation-triangle","aria-hidden":"true"},null,-1)));var ae=(0,a.aZ)({__name:"AdminMenu",props:{appConfig:null,appStatistics:{default:()=>({})}},setup(e){const t=e,{appConfig:n,appStatistics:r}=(0,i.BK)(t);return(e,t)=>{const s=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("div",X,[(0,a.Wm)(V.Z,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.ADMINISTRATION")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(q,{appStatistics:(0,i.SU)(r)},null,8,["appStatistics"]),(0,a._)("div",J,[(0,a._)("dl",null,[(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/application"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.APPLICATION")),1)])),_:1})]),(0,a._)("dd",Q,[(0,a.Uk)((0,o.zw)(e.$t("admin.UPDATE_APPLICATION_DESCRIPTION")),1),ee,(0,a._)("span",te,(0,o.zw)(e.$t("admin.REGISTRATION_"+((0,i.SU)(n).is_registration_enabled?"ENABLED":"DISABLED"))),1),(0,i.SU)(n).is_email_sending_enabled?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("span",ne,[re,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.EMAIL_SENDING_DISABLED")),1)]))]),(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/sports"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("workouts.SPORT",0))),1)])),_:1})]),(0,a._)("dd",null,(0,o.zw)(e.$t("admin.ENABLE_DISABLE_SPORTS")),1),(0,a._)("dt",null,[(0,a.Wm)(s,{to:"/admin/users"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("admin.USER",0))),1)])),_:1})]),(0,a._)("dd",null,(0,o.zw)(e.$t("admin.ADMIN_RIGHTS_DELETE_USER_ACCOUNT")),1)])])])),_:1})])}}});const oe=(0,P.Z)(ae,[["__scopeId","data-v-0dd66f89"]]);var se=oe,ie=n(9150),le=n(631);const ce=e=>((0,a.dD)("data-v-6d62af67"),e=e(),(0,a.Cn)(),e),ue={id:"admin-sports",class:"admin-card"},de={class:"responsive-table"},me=ce((()=>(0,a._)("th",null,"#",-1))),_e={class:"text-left"},Ee={class:"text-left sport-action"},Se=ce((()=>(0,a._)("th",null,null,-1))),Te={class:"text-center"},pe=ce((()=>(0,a._)("span",{class:"cell-heading"},"id",-1))),Ae={class:"cell-heading"},Oe={class:"sport-label"},Re={class:"cell-heading"},Ie={class:"text-center"},Ue={class:"cell-heading"},ge={class:"sport-action"},Ne={class:"cell-heading"},he={class:"action-button"},ze=["onClick"],we={key:0,class:"has-workouts"},fe=ce((()=>(0,a._)("i",{class:"fa fa-warning","aria-hidden":"true"},null,-1)));var ve=(0,a.aZ)({__name:"AdminSports",setup(e){const{t:t}=(0,ie.QT)(),n=(0,c.o)(),r=(0,a.Fl)((()=>(0,le.xH)(n.getters[l.O8.GETTERS.SPORTS],t))),u=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function d(e,t){n.dispatch(l.O8.ACTIONS.UPDATE_SPORTS,{id:e,isActive:t})}return(e,t)=>{const n=(0,a.up)("SportImage"),l=(0,a.up)("ErrorMessage"),c=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",ue,[(0,a.Wm)(c,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("admin.SPORTS.TITLE")),1)])),content:(0,a.w5)((()=>[(0,a._)("button",{class:"top-button",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1),(0,a._)("div",de,[(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[me,(0,a._)("th",null,(0,o.zw)(e.$t("admin.SPORTS.TABLE.IMAGE")),1),(0,a._)("th",_e,(0,o.zw)(e.$t("admin.SPORTS.TABLE.LABEL")),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.SPORTS.TABLE.ACTIVE")),1),(0,a._)("th",Ee,(0,o.zw)(e.$t("admin.ACTION")),1),Se])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(r),(t=>((0,a.wg)(),(0,a.iD)("tr",{key:t.id},[(0,a._)("td",Te,[pe,(0,a.Uk)(" "+(0,o.zw)(t.id),1)]),(0,a._)("td",null,[(0,a._)("span",Ae,(0,o.zw)(e.$t("admin.SPORTS.TABLE.IMAGE")),1),(0,a.Wm)(n,{title:t.translatedLabel,"sport-label":t.label,color:t.color},null,8,["title","sport-label","color"])]),(0,a._)("td",Oe,[(0,a._)("span",Re,(0,o.zw)(e.$t("admin.SPORTS.TABLE.LABEL")),1),(0,a.Uk)(" "+(0,o.zw)(t.translatedLabel),1)]),(0,a._)("td",Ie,[(0,a._)("span",Ue,(0,o.zw)(e.$t("admin.SPORTS.TABLE.ACTIVE")),1),(0,a._)("i",{class:(0,o.C_)("fa fa"+(t.is_active?"-check":"")),"aria-hidden":"true"},null,2)]),(0,a._)("td",ge,[(0,a._)("span",Ne,(0,o.zw)(e.$t("admin.ACTION")),1),(0,a._)("div",he,[(0,a._)("button",{class:(0,o.C_)({danger:t.is_active}),onClick:e=>d(t.id,!t.is_active)},(0,o.zw)(e.$t(`buttons.${t.is_active?"DIS":"EN"}ABLE`)),11,ze),t.has_workouts?((0,a.wg)(),(0,a.iD)("span",we,[fe,(0,a.Uk)(" "+(0,o.zw)(e.$t("admin.SPORTS.TABLE.HAS_WORKOUTS")),1)])):(0,a.kq)("",!0)])])])))),128))])]),(0,i.SU)(u)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(u)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("button",{onClick:t[1]||(t[1]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)])])),_:1})])}}});const Ce=(0,P.Z)(ve,[["__scopeId","data-v-6d62af67"]]);var De=Ce,ke=n(8626),Pe=n(5020),Le=n(6595);const Me={class:"users-filters"},be={class:"search-username"},ye=["onKeyup","placeholder"];var Ge=(0,a.aZ)({__name:"UsersNameFilter",emits:["filterOnUsername"],setup(e,{emit:t}){const n=(0,r.yj)(),l=(0,i.iH)(n.query.q?n.query.q:"");function c(){""!==l.value&&t("filterOnUsername",l)}function u(){l.value="",t("filterOnUsername",l.value)}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Me,[(0,a._)("div",be,[(0,a.wy)((0,a._)("input",{id:"username",name:"username","onUpdate:modelValue":t[0]||(t[0]=e=>l.value=e),onKeyup:(0,s.D2)(c,["enter"]),placeholder:e.$t("user.FILTER_ON_USERNAME")},null,40,ye),[[s.nr,l.value,void 0,{trim:!0}]]),""!==l.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-times","aria-hidden":"true",onClick:u})):(0,a.kq)("",!0)]),(0,a._)("i",{class:(0,o.C_)(["fa fa-search",{"fa-disabled":""===l.value}]),"aria-hidden":"true",onClick:c},null,2)]))}});const Fe=(0,P.Z)(Ge,[["__scopeId","data-v-627a8e91"]]);var We=Fe,Ke=n(2766),Ye=n(6558);const xe=e=>((0,a.dD)("data-v-dc12ff78"),e=e(),(0,a.Cn)(),e),$e={id:"admin-users",class:"admin-card"},Be={key:0,class:"no-users"},Ze={key:1,class:"responsive-table"},He=xe((()=>(0,a._)("th",null,"#",-1))),qe={class:"left-text"},Ve={class:"left-text"},je={class:"left-text"},Xe={class:"cell-heading"},Je={class:"cell-heading"},Qe={class:"cell-heading"},et={class:"cell-heading"},tt={class:"text-center"},nt={class:"cell-heading"},rt={class:"text-center"},at={class:"cell-heading"},ot={class:"text-center"},st={class:"cell-heading"},it={class:"text-center"},lt={class:"cell-heading"},ct=["disabled","onClick"];var ut=(0,a.aZ)({__name:"AdminUsers",setup(e){const t=(0,c.o)(),n=(0,r.yj)(),u=(0,r.tv)(),d=["is_active","admin","created_at","username","workouts_count"],m="created_at";let _=(0,i.qj)((0,Ke.pm)(n.query,d,m));const E=(0,a.Fl)((()=>t.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),S=(0,a.Fl)((()=>t.getters[l.RT.GETTERS.USERS])),T=(0,a.Fl)((()=>t.getters[l.RT.GETTERS.USERS_PAGINATION])),p=(0,a.Fl)((()=>t.getters[l.SY.GETTERS.ERROR_MESSAGES]));function A(e){t.dispatch(l.RT.ACTIONS.GET_USERS,e)}function O(e){I("q",e.value)}function R(e,n){t.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,admin:n})}function I(e,t){_[e]=t,"per_page"===e&&(_.page=1),u.push({path:"/admin/users",query:_})}return(0,a.wF)((()=>A(_))),(0,a.Ah)((()=>{t.dispatch(l.RT.ACTIONS.EMPTY_USERS)})),(0,a.YP)((()=>n.query),(e=>{_=(0,Ke.pm)(e,d,m,{query:_}),A(_)})),(e,t)=>{const n=(0,a.up)("router-link"),r=(0,a.up)("ErrorMessage"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",$e,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,o.kC)(e.$t("admin.USER",0))),1)])),content:(0,a.w5)((()=>[(0,a._)("button",{class:"top-button",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1),(0,a.Wm)(We,{onFilterOnUsername:O}),(0,a.Wm)(ke.Z,{sort:(0,i.SU)(Ke.fS),order_by:d,query:(0,i.SU)(_),message:"admin.USERS.SELECTS.ORDER_BY",onUpdateSelect:I},null,8,["sort","query"]),0===(0,i.SU)(S).length?((0,a.wg)(),(0,a.iD)("div",Be,(0,o.zw)(e.$t("user.NO_USERS_FOUND")),1)):((0,a.wg)(),(0,a.iD)("div",Ze,[(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[He,(0,a._)("th",qe,(0,o.zw)(e.$t("user.USERNAME")),1),(0,a._)("th",Ve,(0,o.zw)(e.$t("user.EMAIL")),1),(0,a._)("th",je,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE")),1),(0,a._)("th",null,(0,o.zw)((0,o.kC)(e.$t("workouts.WORKOUT",0))),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.ACTIVE")),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.ADMIN")),1),(0,a._)("th",null,(0,o.zw)(e.$t("admin.ACTION")),1)])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(t=>((0,a.wg)(),(0,a.iD)("tr",{key:t.username},[(0,a._)("td",null,[(0,a._)("span",Xe,(0,o.zw)(e.$t("user.PROFILE.PICTURE")),1),(0,a.Wm)(Le.Z,{user:t},null,8,["user"])]),(0,a._)("td",null,[(0,a._)("span",Je,(0,o.zw)(e.$t("user.USERNAME")),1),(0,a.Wm)(n,{to:`/admin/users/${t.username}`},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.username),1)])),_:2},1032,["to"])]),(0,a._)("td",null,[(0,a._)("span",Qe,(0,o.zw)(e.$t("user.EMAIL")),1),(0,a.Uk)(" "+(0,o.zw)(t.email),1)]),(0,a._)("td",null,[(0,a._)("span",et,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE")),1),(0,a.Uk)(" "+(0,o.zw)((0,i.SU)(Ye.p6)(t.created_at,(0,i.SU)(E).timezone,(0,i.SU)(E).date_format)),1)]),(0,a._)("td",tt,[(0,a._)("span",nt,(0,o.zw)((0,o.kC)(e.$t("workouts.WORKOUT",0))),1),(0,a.Uk)(" "+(0,o.zw)(t.nb_workouts),1)]),(0,a._)("td",rt,[(0,a._)("span",at,(0,o.zw)(e.$t("admin.ACTIVE")),1),(0,a._)("i",{class:(0,o.C_)(`fa fa${t.is_active?"-check":""}-square-o`),"aria-hidden":"true"},null,2)]),(0,a._)("td",ot,[(0,a._)("span",st,(0,o.zw)(e.$t("user.ADMIN")),1),(0,a._)("i",{class:(0,o.C_)(`fa fa${t.admin?"-check":""}-square-o`),"aria-hidden":"true"},null,2)]),(0,a._)("td",it,[(0,a._)("span",lt,(0,o.zw)(e.$t("admin.ACTION")),1),(0,a._)("button",{class:(0,o.C_)({danger:t.admin}),disabled:t.username===(0,i.SU)(E).username,onClick:e=>R(t.username,!t.admin)},(0,o.zw)(e.$t(`admin.USERS.TABLE.${t.admin?"REMOVE":"ADD"}_ADMIN_RIGHTS`)),11,ct)])])))),128))])]),(0,i.SU)(T).page?((0,a.wg)(),(0,a.j4)(Pe.Z,{key:0,path:"/admin/users",pagination:(0,i.SU)(T),query:(0,i.SU)(_)},null,8,["pagination","query"])):(0,a.kq)("",!0),(0,i.SU)(p)?((0,a.wg)(),(0,a.j4)(r,{key:1,message:(0,i.SU)(p)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("button",{onClick:t[1]||(t[1]=(0,s.iM)((t=>e.$router.push("/admin")),["prevent"]))},(0,o.zw)(e.$t("admin.BACK_TO_ADMIN")),1)]))])),_:1})])}}});const dt=(0,P.Z)(ut,[["__scopeId","data-v-dc12ff78"]]);var mt=dt,_t=n(2179);const Et={class:"profile-tabs custom-checkboxes-group"},St={class:"profile-tabs-checkboxes custom-checkboxes"},Tt=["id","name","checked","disabled","onInput"];var pt=(0,a.aZ)({__name:"UserProfileTabs",props:{tabs:null,selectedTab:null,edition:{type:Boolean},disabled:{type:Boolean,default:!1}},setup(e){const t=e,{tabs:n,selectedTab:r,disabled:s}=(0,i.BK)(t);function l(e){switch(e){case"ACCOUNT":case"PICTURE":return`/profile/edit/${e.toLocaleLowerCase()}`;case"APPS":case"PREFERENCES":case"SPORTS":return`/profile${t.edition?"/edit":""}/${e.toLocaleLowerCase()}`;default:case"PROFILE":return"/profile"+(t.edition?"/edit":"")}}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Et,[(0,a._)("div",St,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(n),(t=>((0,a.wg)(),(0,a.iD)("div",{class:"profile-tab custom-checkbox",key:t},[(0,a._)("label",null,[(0,a._)("input",{type:"radio",id:t,name:t,checked:(0,i.SU)(r).split("/")[0]===t,disabled:(0,i.SU)(s),onInput:n=>e.$router.push(l(t))},null,40,Tt),(0,a._)("span",null,(0,o.zw)(e.$t(`user.PROFILE.TABS.${t}`)),1)])])))),128))])]))}});const At=pt;var Ot=At;const Rt={id:"user-profile"},It={class:"box"};var Ut=(0,a.aZ)({__name:"index",props:{user:null,tab:null},setup(e){const t=e,{user:n,tab:r}=(0,i.BK)(t),o=["PROFILE","PREFERENCES","SPORTS","APPS"];return(e,t)=>{const s=(0,a.up)("router-view");return(0,a.wg)(),(0,a.iD)("div",Rt,[(0,a.Wm)(_t.Z,{user:(0,i.SU)(n)},null,8,["user"]),(0,a._)("div",It,[(0,a.Wm)(Ot,{tabs:o,selectedTab:(0,i.SU)(r),edition:!1},null,8,["selectedTab"]),(0,a.Wm)(s,{user:(0,i.SU)(n)},null,8,["user"])])])}}});const gt=(0,P.Z)(Ut,[["__scopeId","data-v-9729cba4"]]);var Nt=gt,ht=n(1585),zt=n(6287);const wt={id:"user-preferences",class:"description-list"},ft={class:"profile-buttons"};var vt=(0,a.aZ)({__name:"UserPreferences",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LANGUAGE])),s=(0,a.Fl)((()=>t.user.language?zt.zK[t.user.language]:zt.zK.en)),u=(0,a.Fl)((()=>t.user.weekm?"MONDAY":"SUNDAY")),d=(0,a.Fl)((()=>t.user.timezone?t.user.timezone:"Europe/Paris")),m=(0,a.Fl)((()=>t.user.date_format?t.user.date_format:"MM/dd/yyyy")),_=(0,a.Fl)((()=>t.user.display_ascent?"DISPLAYED":"HIDDEN"));return(t,n)=>((0,a.wg)(),(0,a.iD)("div",wt,[(0,a._)("dl",null,[(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.LANGUAGE"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(s)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.TIMEZONE"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(d)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.DATE_FORMAT"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(Ye.mh)((0,i.SU)(m),(0,i.SU)(r))),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.FIRST_DAY_OF_WEEK"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t(`user.PROFILE.${(0,i.SU)(u)}`)),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.UNITS.LABEL"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t("user.PROFILE.UNITS."+(e.user.imperial_units?"IMPERIAL":"METRIC"))),1),(0,a._)("dt",null,(0,o.zw)(t.$t("user.PROFILE.ASCENT_DATA"))+":",1),(0,a._)("dd",null,(0,o.zw)(t.$t(`common.${(0,i.SU)(_)}`)),1)]),(0,a._)("div",ft,[(0,a._)("button",{onClick:n[0]||(n[0]=e=>t.$router.push("/profile/edit/preferences"))},(0,o.zw)(t.$t("user.PROFILE.EDIT_PREFERENCES")),1),(0,a._)("button",{onClick:n[1]||(n[1]=e=>t.$router.push("/"))},(0,o.zw)(t.$t("common.HOME")),1)])]))}});const Ct=vt;var Dt=Ct;const kt={id:"user-profile-edition",class:"center-card"};var Pt=(0,a.aZ)({__name:"index",props:{user:null,tab:null},setup(e){const t=e,n=(0,c.o)(),{user:r,tab:s}=(0,i.BK)(t),u=["PROFILE","ACCOUNT","PICTURE","PREFERENCES","SPORTS"],d=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING]));return(e,t)=>{const n=(0,a.up)("router-view"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",kt,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t(`user.PROFILE.${(0,i.SU)(s)}_EDITION`)),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(Ot,{tabs:u,selectedTab:(0,i.SU)(s),edition:!0,disabled:(0,i.SU)(d)},null,8,["selectedTab","disabled"]),(0,a.Wm)(n,{user:(0,i.SU)(r)},null,8,["user"])])),_:1})])}}});const Lt=Pt;var Mt=Lt,bt=n(8403);const yt={id:"user-infos-edition"},Gt={class:"profile-form form-box"},Ft={key:1,class:"info-box success-message"},Wt=["onSubmit"],Kt={class:"form-items",for:"email"},Yt=["disabled"],xt={class:"form-items",for:"password-field"},$t={class:"form-items",for:"new-password-field"},Bt={class:"form-buttons"},Zt={class:"confirm",type:"submit"};var Ht=(0,a.aZ)({__name:"UserAccountEdition",props:{user:null},setup(e){const t=e,{user:n}=(0,i.BK)(t),r=(0,c.o)(),u=(0,i.qj)({email:"",password:"",new_password:""}),d=(0,a.Fl)((()=>r.getters[l.YN.GETTERS.USER_LOADING])),m=(0,a.Fl)((()=>r.getters[l.SY.GETTERS.APP_CONFIG])),_=(0,a.Fl)((()=>r.getters[l.YN.GETTERS.IS_SUCCESS])),E=(0,i.iH)(!1),S=(0,a.Fl)((()=>r.getters[l.SY.GETTERS.ERROR_MESSAGES])),T=(0,i.iH)(!1),p=(0,i.iH)(!1);function A(){T.value=!0}function O(e){u.email=e.email}function R(e){u.password=e}function I(e){u.new_password=e}function U(){const e={email:u.email,password:u.password};u.new_password&&(e.new_password=u.new_password),E.value=u.email!==n.value.email,r.dispatch(l.YN.ACTIONS.UPDATE_USER_ACCOUNT,e)}function g(e){p.value=e}function N(e){r.dispatch(l.YN.ACTIONS.DELETE_ACCOUNT,{username:e})}return(0,a.bv)((()=>{t.user&&O(t.user)})),(0,a.Ah)((()=>{r.commit(l.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),r.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(0,a.YP)((()=>_.value),(async e=>{e&&(R(""),I(""),O(n.value),T.value=!1)})),(0,a.YP)((()=>n.value.email),(async()=>{O(n.value)})),(e,t)=>{const r=(0,a.up)("Modal"),l=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",yt,[p.value?((0,a.wg)(),(0,a.j4)(r,{key:0,title:e.$t("common.CONFIRMATION"),message:e.$t("user.CONFIRM_ACCOUNT_DELETION"),onConfirmAction:t[0]||(t[0]=e=>N((0,i.SU)(n).username)),onCancelAction:t[1]||(t[1]=e=>g(!1))},null,8,["title","message"])):(0,a.kq)("",!0),(0,a._)("div",Gt,[(0,i.SU)(S)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(S)},null,8,["message"])):(0,a.kq)("",!0),(0,i.SU)(_)?((0,a.wg)(),(0,a.iD)("div",Ft,(0,o.zw)(e.$t(`user.PROFILE.SUCCESSFUL_${E.value&&(0,i.SU)(m).is_email_sending_enabled?"EMAIL_":""}UPDATE`)),1)):(0,a.kq)("",!0),(0,a._)("form",{class:(0,o.C_)({errors:T.value}),onSubmit:(0,s.iM)(U,["prevent"])},[(0,a._)("label",Kt,[(0,a.Uk)((0,o.zw)(e.$t("user.EMAIL"))+"* ",1),(0,a.wy)((0,a._)("input",{id:"email","onUpdate:modelValue":t[2]||(t[2]=e=>u.email=e),disabled:(0,i.SU)(d),required:!0,onInvalid:A},null,40,Yt),[[s.nr,u.email]])]),(0,a._)("label",xt,[(0,a.Uk)((0,o.zw)(e.$t("user.CURRENT_PASSWORD"))+"* ",1),(0,a.Wm)(bt.Z,{id:"password-field",disabled:(0,i.SU)(d),password:u.password,required:!0,onUpdatePassword:R,onPasswordError:A},null,8,["disabled","password"])]),(0,a._)("label",$t,[(0,a.Uk)((0,o.zw)(e.$t("user.NEW_PASSWORD"))+" ",1),(0,a.Wm)(bt.Z,{id:"new-password-field",disabled:(0,i.SU)(d),checkStrength:!0,password:u.new_password,isSuccess:!1,onUpdatePassword:I,onPasswordError:A},null,8,["disabled","password"])]),(0,a._)("div",Bt,[(0,a._)("button",Zt,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[3]||(t[3]=(0,s.iM)((t=>e.$router.push("/profile")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1),(0,a._)("button",{class:"danger",onClick:t[4]||(t[4]=(0,s.iM)((e=>g(!0)),["prevent"]))},(0,o.zw)(e.$t("buttons.DELETE_MY_ACCOUNT")),1)])],42,Wt)])])}}});const qt=(0,P.Z)(Ht,[["__scopeId","data-v-37b8c4c8"]]);var Vt=qt,jt=n(4850);const Xt={id:"user-infos-edition"},Jt={class:"profile-form form-box"},Qt=["onSubmit"],en={class:"form-items",for:"registrationDate"},tn=["value"],nn={class:"form-items",for:"first_name"},rn=["disabled"],an={class:"form-items",for:"last_name"},on={class:"form-items",for:"birth_date"},sn=["disabled"],ln={class:"form-items",for:"location"},cn=["disabled"],un={class:"form-items"},dn={class:"form-buttons"},mn={class:"confirm",type:"submit"};var _n=(0,a.aZ)({__name:"UserInfosEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({first_name:"",last_name:"",birth_date:"",location:"",bio:""}),u=(0,a.Fl)((()=>t.user.created_at?(0,Ye.p6)(t.user.created_at,t.user.timezone,t.user.date_format):"")),d=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function _(e){r.first_name=e.first_name?e.first_name:"",r.last_name=e.last_name?e.last_name:"",r.birth_date=e.birth_date?(0,jt.Z)(new Date(e.birth_date),"yyyy-MM-dd"):"",r.location=e.location?e.location:"",r.bio=e.bio?e.bio:""}function E(e){r.bio=e}function S(){n.dispatch(l.YN.ACTIONS.UPDATE_USER_PROFILE,r)}return(0,a.bv)((()=>{t.user&&_(t.user)})),(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage"),l=(0,a.up)("CustomTextArea");return(0,a.wg)(),(0,a.iD)("div",Xt,[(0,a._)("div",Jt,[(0,i.SU)(m)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(m)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("form",{onSubmit:(0,s.iM)(S,["prevent"])},[(0,a._)("label",en,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE"))+" ",1),(0,a._)("input",{id:"registrationDate",value:(0,i.SU)(u),disabled:""},null,8,tn)]),(0,a._)("label",nn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.FIRST_NAME"))+" ",1),(0,a.wy)((0,a._)("input",{id:"first_name","onUpdate:modelValue":t[0]||(t[0]=e=>r.first_name=e),disabled:(0,i.SU)(d)},null,8,rn),[[s.nr,r.first_name]])]),(0,a._)("label",an,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LAST_NAME"))+" ",1),(0,a.wy)((0,a._)("input",{id:"last_name","onUpdate:modelValue":t[1]||(t[1]=e=>r.last_name=e)},null,512),[[s.nr,r.last_name]])]),(0,a._)("label",on,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.BIRTH_DATE"))+" ",1),(0,a.wy)((0,a._)("input",{id:"birth_date",type:"date",class:"birth-date","onUpdate:modelValue":t[2]||(t[2]=e=>r.birth_date=e),disabled:(0,i.SU)(d)},null,8,sn),[[s.nr,r.birth_date]])]),(0,a._)("label",ln,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LOCATION"))+" ",1),(0,a.wy)((0,a._)("input",{id:"location","onUpdate:modelValue":t[3]||(t[3]=e=>r.location=e),disabled:(0,i.SU)(d)},null,8,cn),[[s.nr,r.location]])]),(0,a._)("label",un,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.BIO"))+" ",1),(0,a.Wm)(l,{name:"bio",charLimit:200,input:r.bio,disabled:(0,i.SU)(d),onUpdateValue:E},null,8,["input","disabled"])]),(0,a._)("div",dn,[(0,a._)("button",mn,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[4]||(t[4]=(0,s.iM)((t=>e.$router.push("/profile")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,Qt)])])}}});const En=(0,P.Z)(_n,[["__scopeId","data-v-5e5a4552"]]);var Sn=En;const Tn=e=>((0,a.dD)("data-v-687e9604"),e=e(),(0,a.Cn)(),e),pn={id:"user-picture-edition"},An={class:"user-picture-form"},On=["onSubmit"],Rn={class:"picture-help"},In={class:"info-box"},Un=Tn((()=>(0,a._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),gn={class:"picture-buttons"},Nn=["disabled"];var hn=(0,a.aZ)({__name:"UserPictureEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),{user:r}=(0,i.BK)(t),d=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.APP_CONFIG])),_=m.value.max_single_file_size?(0,u.Z)(m.value.max_single_file_size):"",E=(0,i.iH)(null);function S(){n.dispatch(l.YN.ACTIONS.DELETE_PICTURE)}function T(e){e.target.files&&(E.value=e.target.files[0])}function p(){E.value&&n.dispatch(l.YN.ACTIONS.UPDATE_USER_PICTURE,{picture:E.value})}return(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",pn,[(0,a._)("div",An,[(0,i.SU)(d)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(d)},null,8,["message"])):(0,a.kq)("",!0),(0,a.Wm)(Le.Z,{user:(0,i.SU)(r)},null,8,["user"]),(0,a._)("form",{onSubmit:(0,s.iM)(p,["prevent"])},[(0,a._)("input",{type:"file",name:"picture",accept:".png,.jpg,.gif",onInput:T},null,32),(0,a._)("div",Rn,[(0,a._)("span",In,[Un,(0,a.Uk)(" "+(0,o.zw)(e.$t("workouts.MAX_SIZE"))+": "+(0,o.zw)((0,i.SU)(_)),1)])]),(0,a._)("div",gn,[(0,a._)("button",{type:"submit",disabled:!E.value},(0,o.zw)(e.$t("user.PROFILE.PICTURE_UPDATE")),9,Nn),(0,i.SU)(r).picture?((0,a.wg)(),(0,a.iD)("button",{key:0,class:"danger",onClick:S},(0,o.zw)(e.$t("user.PROFILE.PICTURE_REMOVE")),1)):(0,a.kq)("",!0),(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=t=>e.$router.push("/profile"))},(0,o.zw)(e.$t("user.PROFILE.BACK_TO_PROFILE")),1)])],40,On)])])}}});const zn=(0,P.Z)(hn,[["__scopeId","data-v-687e9604"]]);var wn=zn;const fn=["Africa/Abidjan","Africa/Accra","Africa/Algiers","Africa/Bissau","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/El_Aaiun","Africa/Johannesburg","Africa/Juba","Africa/Khartoum","Africa/Lagos","Africa/Maputo","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Sao_Tome","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Araguaina","America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Asuncion","America/Atikokan","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Cayenne","America/Chicago","America/Chihuahua","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Fortaleza","America/Fort_Nelson","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Inuvik","America/Iqaluit","America/Jamaica","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/La_Paz","America/Lima","America/Los_Angeles","America/Maceio","America/Managua","America/Manaus","America/Martinique","America/Matamoros","America/Mazatlan","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Sitka","America/St_Johns","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Atyrau","Asia/Baghdad","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Chita","Asia/Choibalsan","Asia/Colombo","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Kathmandu","Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Riyadh","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ulaanbaatar","Asia/Urumqi","Asia/Ust-Nera","Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faroe","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/Stanley","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/Perth","Australia/Sydney","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belgrade","Europe/Berlin","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Helsinki","Europe/Istanbul","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Oslo","Europe/Paris","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/Saratov","Europe/Simferopol","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zaporozhye","Europe/Zurich","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Reunion","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Chuuk","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Pohnpei","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Wake","Pacific/Wallis"],vn={id:"tz-dropdown"},Cn=["value","disabled","onKeydown"],Dn=["onClick","onMouseover","autofocus"];var kn=(0,a.aZ)({__name:"TimezoneDropdown",props:{input:null,disabled:{type:Boolean,default:!1}},emits:["updateTimezone"],setup(e,{emit:t}){const n=e,{input:r,disabled:l}=(0,i.BK)(n),c=(0,i.iH)(n.input),u=(0,i.iH)(!1),d=(0,i.iH)(null),m=(0,i.iH)(0);function _(e){return e.toLowerCase().match(c.value.toLowerCase())}function E(e){m.value=e}function S(e){c.value=e,u.value=!1,t("updateTimezone",e)}function T(e){e.preventDefault(),d.value?.firstElementChild?.innerHTML&&S(d.value?.firstElementChild?.innerHTML)}function p(e){e.preventDefault(),u.value=!0,c.value=e.target.value.trim()}return(0,a.YP)((()=>n.input),(e=>{c.value=e})),(e,t)=>((0,a.wg)(),(0,a.iD)("div",vn,[(0,a._)("input",{class:"tz-dropdown-input",id:"timezone",name:"timezone",value:c.value,disabled:(0,i.SU)(l),required:"",onKeydown:[t[0]||(t[0]=(0,s.D2)((e=>S((0,i.SU)(r))),["esc"])),(0,s.D2)(T,["enter"])],onInput:p},null,40,Cn),u.value?((0,a.wg)(),(0,a.iD)("ul",{key:0,class:"tz-dropdown-list",ref_key:"tzList",ref:d},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(fn).filter((e=>_(e))),((e,t)=>((0,a.wg)(),(0,a.iD)("li",{key:e,class:(0,o.C_)(["tz-dropdown-item",{focus:t===m.value}]),onClick:t=>S(e),onMouseover:e=>E(t),autofocus:t===m.value},(0,o.zw)(e),43,Dn)))),128))],512)):(0,a.kq)("",!0)]))}});const Pn=(0,P.Z)(kn,[["__scopeId","data-v-47ea2903"]]);var Ln=Pn;const Mn={id:"user-preferences-edition"},bn={class:"profile-form form-box"},yn=["onSubmit"],Gn={class:"form-items"},Fn=["disabled"],Wn=["value"],Kn={class:"form-items"},Yn={class:"form-items"},xn=["disabled"],$n=["value"],Bn={class:"form-items form-checkboxes"},Zn={class:"checkboxes-label"},Hn={class:"checkboxes"},qn=["id","name","checked","disabled","onInput"],Vn={class:"checkbox-label"},jn={class:"form-items form-checkboxes"},Xn={class:"checkboxes-label"},Jn={class:"checkboxes"},Qn=["id","name","checked","disabled","onInput"],er={class:"checkbox-label"},tr={class:"form-items form-checkboxes"},nr={class:"checkboxes-label"},rr={class:"checkboxes"},ar=["id","name","checked","disabled","onInput"],or={class:"checkbox-label"},sr={class:"form-buttons"},ir={class:"confirm",type:"submit"};var lr=(0,a.aZ)({__name:"UserPreferencesEdition",props:{user:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({display_ascent:!0,imperial_units:!1,language:"",timezone:"Europe/Paris",date_format:"dd/MM/yyyy",weekm:!1}),u=[{label:"SUNDAY",value:!1},{label:"MONDAY",value:!0}],d=[{label:"METRIC",value:!1},{label:"IMPERIAL",value:!0}],m=[{label:"DISPLAYED",value:!0},{label:"HIDDEN",value:!1}],_=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),E=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),S=(0,a.Fl)((()=>(0,Ye.d2)((new Date).toUTCString(),t.user.timezone,r.language)));function T(e){r.display_ascent=e.display_ascent,r.imperial_units=!!e.imperial_units&&e.imperial_units,r.language=e.language?e.language:"en",r.timezone=e.timezone?e.timezone:"Europe/Paris",r.date_format=e.date_format?e.date_format:"dd/MM/yyyy",r.weekm=!!e.weekm&&e.weekm}function p(){n.dispatch(l.YN.ACTIONS.UPDATE_USER_PREFERENCES,r)}function A(e){r.timezone=e}function O(e){r.display_ascent=e}function R(e){r.imperial_units=e}function I(e){r.weekm=e}return(0,a.bv)((()=>{t.user&&T(t.user)})),(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)})),(e,t)=>{const n=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",Mn,[(0,a._)("div",bn,[(0,i.SU)(E)?((0,a.wg)(),(0,a.j4)(n,{key:0,message:(0,i.SU)(E)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("form",{onSubmit:(0,s.iM)(p,["prevent"])},[(0,a._)("label",Gn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.LANGUAGE"))+" ",1),(0,a.wy)((0,a._)("select",{id:"language","onUpdate:modelValue":t[0]||(t[0]=e=>r.language=e),disabled:(0,i.SU)(_)},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(zt.mT),(e=>((0,a.wg)(),(0,a.iD)("option",{value:e.value,key:e.value},(0,o.zw)(e.label),9,Wn)))),128))],8,Fn),[[s.bM,r.language]])]),(0,a._)("label",Kn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.TIMEZONE"))+" ",1),(0,a.Wm)(Ln,{input:r.timezone,disabled:(0,i.SU)(_),onUpdateTimezone:A},null,8,["input","disabled"])]),(0,a._)("label",Yn,[(0,a.Uk)((0,o.zw)(e.$t("user.PROFILE.DATE_FORMAT"))+" ",1),(0,a.wy)((0,a._)("select",{id:"date_format","onUpdate:modelValue":t[1]||(t[1]=e=>r.date_format=e),disabled:(0,i.SU)(_)},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(e=>((0,a.wg)(),(0,a.iD)("option",{value:e.value,key:e.value},(0,o.zw)(e.label),9,$n)))),128))],8,xn),[[s.bM,r.date_format]])]),(0,a._)("div",Bn,[(0,a._)("span",Zn,(0,o.zw)(e.$t("user.PROFILE.FIRST_DAY_OF_WEEK")),1),(0,a._)("div",Hn,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(u,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.weekm,disabled:(0,i.SU)(_),onInput:e=>I(t.value)},null,40,qn),(0,a._)("span",Vn,(0,o.zw)(e.$t(`user.PROFILE.${t.label}`)),1)]))),64))])]),(0,a._)("div",jn,[(0,a._)("span",Xn,(0,o.zw)(e.$t("user.PROFILE.UNITS.LABEL")),1),(0,a._)("div",Jn,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(d,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.imperial_units,disabled:(0,i.SU)(_),onInput:e=>R(t.value)},null,40,Qn),(0,a._)("span",er,(0,o.zw)(e.$t(`user.PROFILE.UNITS.${t.label}`)),1)]))),64))])]),(0,a._)("div",tr,[(0,a._)("span",nr,(0,o.zw)(e.$t("user.PROFILE.ASCENT_DATA")),1),(0,a._)("div",rr,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(m,(t=>(0,a._)("label",{key:t.label},[(0,a._)("input",{type:"radio",id:t.label,name:t.label,checked:t.value===r.display_ascent,disabled:(0,i.SU)(_),onInput:e=>O(t.value)},null,40,ar),(0,a._)("span",or,(0,o.zw)(e.$t(`common.${t.label}`)),1)]))),64))])]),(0,a._)("div",sr,[(0,a._)("button",ir,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,a._)("button",{class:"cancel",onClick:t[2]||(t[2]=(0,s.iM)((t=>e.$router.push("/profile/preferences")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,yn)])])}}});const cr=(0,P.Z)(lr,[["__scopeId","data-v-065d5e6c"]]);var ur=cr;const dr=["profile:read","profile:write","users:read","users:write","workouts:read","workouts:write"],mr=["application:write"],_r={id:"new-oauth2-app"},Er={id:"new-oauth2-title"},Sr={id:"apps-form"},Tr=["onSubmit"],pr={class:"form-items"},Ar={class:"form-item"},Or={for:"app-name"},Rr={class:"form-item"},Ir={for:"app-description"},Ur={class:"form-item"},gr={for:"app-url"},Nr={class:"form-item"},hr={for:"app-redirect-uri"},zr={class:"form-item-scope"},wr={class:"form-item-scope-label"},fr={class:"scope-label"},vr=["name","checked","onChange"],Cr=["innerHTML"],Dr={class:"form-buttons"},kr=["disabled"];var Pr=(0,a.aZ)({__name:"AddUserApp",props:{authUser:null},setup(e){const t=e,n=(0,c.o)(),r=(0,i.qj)({client_name:"",client_uri:"",client_description:"",redirect_uri:""}),u=(0,i.qj)([]),d=(0,a.Fl)((()=>S(t.authUser,mr,dr)));function m(){const e={client_name:r.client_name,client_description:r.client_description,client_uri:r.client_uri,redirect_uris:[r.redirect_uri],scope:u.sort().join(" ")};n.dispatch(l.Km.ACTIONS.CREATE_CLIENT,e)}function _(e){r.client_description=e}function E(e){const t=u.indexOf(e);t>-1?u.splice(t,1):u.push(e)}function S(e,t,n){const r=[...n];return e.admin&&r.push(...t),r.sort()}return(e,t)=>{const n=(0,a.up)("CustomTextArea");return(0,a.wg)(),(0,a.iD)("div",_r,[(0,a._)("h1",Er,(0,o.zw)(e.$t("oauth2.ADD_A_NEW_APP")),1),(0,a._)("div",Sr,[(0,a._)("form",{onSubmit:(0,s.iM)(m,["prevent"])},[(0,a._)("div",pr,[(0,a._)("div",Ar,[(0,a._)("label",Or,(0,o.zw)(e.$t("oauth2.APP.NAME"))+"*",1),(0,a.wy)((0,a._)("input",{id:"app-name",type:"text",required:"","onUpdate:modelValue":t[0]||(t[0]=e=>r.client_name=e)},null,512),[[s.nr,r.client_name]])]),(0,a._)("div",Rr,[(0,a._)("label",Ir,(0,o.zw)(e.$t("oauth2.APP.DESCRIPTION")),1),(0,a.Wm)(n,{name:"app-description",charLimit:200,input:r.description,onUpdateValue:_},null,8,["input"])]),(0,a._)("div",Ur,[(0,a._)("label",gr,(0,o.zw)(e.$t("oauth2.APP.URL"))+"*",1),(0,a.wy)((0,a._)("input",{id:"app-url",type:"text",required:"","onUpdate:modelValue":t[1]||(t[1]=e=>r.client_uri=e)},null,512),[[s.nr,r.client_uri]])]),(0,a._)("div",Nr,[(0,a._)("label",hr,(0,o.zw)(e.$t("oauth2.APP.REDIRECT_URL"))+"* ",1),(0,a.wy)((0,a._)("input",{id:"app-redirect-uri",type:"text",required:"","onUpdate:modelValue":t[2]||(t[2]=e=>r.redirect_uri=e)},null,512),[[s.nr,r.redirect_uri]])]),(0,a._)("div",zr,[(0,a._)("div",wr,(0,o.zw)(e.$t("oauth2.APP.SCOPE.LABEL"))+"* ",1),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(d),(t=>((0,a.wg)(),(0,a.iD)("div",{class:"form-item-scope-checkboxes",key:t},[(0,a._)("label",fr,[(0,a._)("input",{type:"checkbox",name:t,checked:u.includes(t),onChange:e=>E(t)},null,40,vr),(0,a._)("code",null,(0,o.zw)(t),1)]),(0,a._)("p",{class:"scope-description",innerHTML:e.$t(`oauth2.APP.SCOPE.${t}_DESCRIPTION`)},null,8,Cr)])))),128))])]),(0,a._)("div",Dr,[(0,a._)("button",{class:"confirm",type:"submit",disabled:0===u.length},(0,o.zw)(e.$t("buttons.SUBMIT")),9,kr),(0,a._)("button",{class:"cancel",onClick:t[3]||(t[3]=(0,s.iM)((()=>e.$router.push("/profile/apps")),["prevent"]))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])],40,Tr)])])}}});const Lr=(0,P.Z)(Pr,[["__scopeId","data-v-0657ee77"]]);var Mr=Lr;const br={id:"authorize-oauth2-app"},yr={key:0},Gr={id:"authorize-oauth2-title"},Fr={class:"oauth2-access description-list"},Wr={class:"client-scope"},Kr=["innerHTML"],Yr={class:"authorize-oauth2-buttons"},xr={key:1},$r={class:"no-app"};var Br=(0,a.aZ)({__name:"AuthorizeUserApp",setup(e){const t=(0,r.yj)(),n=(0,c.o)(),s=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENT])),u=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES]));function d(){t.query.client_id&&"string"===typeof t.query.client_id&&n.dispatch(l.Km.ACTIONS.GET_CLIENT_BY_CLIENT_ID,t.query.client_id)}function m(){n.dispatch(l.Km.ACTIONS.AUTHORIZE_CLIENT,{client_id:`${t.query.client_id}`,redirect_uri:`${t.query.redirect_uri}`,response_type:`${t.query.response_type}`,scope:`${t.query.scope}`,state:`${t.query.state?t.query.state:""}`,code_challenge:`${t.query.code_challenge?t.query.code_challenge:""}`,code_challenge_method:`${t.query.code_challenge_method?t.query.code_challenge_method:""}`})}return(0,a.wF)((()=>d())),(e,t)=>{const n=(0,a.up)("router-link"),r=(0,a.up)("i18n-t"),l=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",br,[(0,i.SU)(s).client_id?((0,a.wg)(),(0,a.iD)("div",yr,[(0,a._)("h1",Gr,[(0,a.Wm)(r,{keypath:"oauth2.AUTHORIZE_APP"},{default:(0,a.w5)((()=>[(0,a.Wm)(n,{to:{name:"UserApp",params:{id:(0,i.SU)(s).id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(s).name),1)])),_:1},8,["to"])])),_:1})]),(0,i.SU)(u)?((0,a.wg)(),(0,a.j4)(l,{key:0,message:(0,i.SU)(u)},null,8,["message"])):(0,a.kq)("",!0),(0,a._)("div",Fr,[(0,a._)("p",null,(0,o.zw)(e.$t("oauth2.APP_REQUESTING_ACCESS")),1),(0,a._)("dl",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(s).scope.split(" "),(t=>((0,a.wg)(),(0,a.iD)(a.HY,{key:t},[(0,a._)("dt",Wr,[(0,a._)("code",null,(0,o.zw)(t),1)]),(0,a._)("dd",{innerHTML:e.$t(`oauth2.APP.SCOPE.${t}_DESCRIPTION`)},null,8,Kr)],64)))),128))]),(0,a._)("div",Yr,[(0,a._)("button",{class:"danger",onClick:m},(0,o.zw)(e.$t("buttons.AUTHORIZE")),1),(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.CANCEL")),1)])])])):((0,a.wg)(),(0,a.iD)("div",xr,[(0,a._)("p",$r,(0,o.zw)(e.$t("oauth2.NO_APP")),1),(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)]))])}}});const Zr=(0,P.Z)(Br,[["__scopeId","data-v-3b2fe9ed"]]);var Hr=Zr;const qr={id:"oauth2-apps"};var Vr=(0,a.aZ)({__name:"index",props:{user:null},setup(e){const t=e,n=(0,c.o)(),{user:r}=(0,i.BK)(t);return(0,a.Ah)((()=>{n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),n.commit(l.Km.MUTATIONS.SET_CLIENTS,[])})),(e,t)=>{const n=(0,a.up)("router-view");return(0,a.wg)(),(0,a.iD)("div",qr,[(0,a.Wm)(n,{authUser:(0,i.SU)(r)},null,8,["authUser"])])}}});const jr=Vr;var Xr=jr;const Jr={id:"oauth2-app",class:"description-list"},Qr={key:1},ea={key:0,class:"info-box success-message"},ta=["title"],na={key:0},ra={key:1,class:"app-secret"},aa=["title"],oa={class:"client-scopes"},sa={class:"app-buttons"},ia={key:2},la={class:"no-app"};var ca=(0,a.aZ)({__name:"UserApp",props:{authUser:null,afterCreation:{type:Boolean,default:!1}},setup(e){const t=e,n=(0,r.yj)(),s=(0,c.o)(),{afterCreation:u,authUser:d}=(0,i.BK)(t),m=(0,a.Fl)((()=>s.getters[l.Km.GETTERS.CLIENT])),_=(0,a.Fl)((()=>s.getters[l.Km.GETTERS.REVOCATION_SUCCESSFUL])),E=(0,i.iH)(!1),S=(0,i.iH)(null),T=(0,i.iH)(!1),p=(0,i.iH)(!1),A=(0,i.iH)(!1);function O(){!u.value&&n.params.id&&"string"===typeof n.params.id&&s.dispatch(l.Km.ACTIONS.GET_CLIENT_BY_ID,+n.params.id)}function R(e){S.value=e?"oauth2.APP_DELETION_CONFIRMATION":"oauth2.TOKENS_REVOCATION_CONFIRMATION",I(!0)}function I(e){E.value=e,e||(S.value=null)}function U(e){"oauth2.APP_DELETION_CONFIRMATION"===S.value?s.dispatch(l.Km.ACTIONS.DELETE_CLIENT,e):s.dispatch(l.Km.ACTIONS.REVOKE_ALL_TOKENS,e)}function g(){navigator.clipboard.writeText(m.value.client_id),T.value=!0,p.value=!1,setTimeout((()=>{T.value=!1}),3e3)}function N(){m.value.client_secret&&(navigator.clipboard.writeText(m.value.client_secret),p.value=!0,T.value=!1,setTimeout((()=>{p.value=!1}),3e3))}return(0,a.wF)((()=>{O(),navigator.clipboard&&(A.value=!0)})),(0,a.Ah)((()=>{s.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),s.commit(l.Km.MUTATIONS.EMPTY_CLIENT),s.commit(l.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!1)})),(0,a.YP)((()=>_.value),(e=>{e&&I(!1)})),(e,t)=>{const n=(0,a.up)("Modal");return(0,a.wg)(),(0,a.iD)("div",Jr,[E.value?((0,a.wg)(),(0,a.j4)(n,{key:0,title:e.$t("common.CONFIRMATION"),message:e.$t(S.value),onConfirmAction:t[0]||(t[0]=e=>U((0,i.SU)(m).id)),onCancelAction:t[1]||(t[1]=e=>I(!1))},null,8,["title","message"])):(0,a.kq)("",!0),(0,i.SU)(m)&&(0,i.SU)(m).client_id?((0,a.wg)(),(0,a.iD)("div",Qr,[(0,i.SU)(u)||(0,i.SU)(_)?((0,a.wg)(),(0,a.iD)("div",ea,(0,o.zw)(e.$t((0,i.SU)(u)?"oauth2.APP_CREATED_SUCCESSFULLY":"oauth2.TOKENS_REVOKED")),1)):(0,a.kq)("",!0),(0,a._)("dl",null,[(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.CLIENT_ID"))+":",1),(0,a._)("dd",null,[(0,a.Uk)((0,o.zw)((0,i.SU)(m).client_id)+" ",1),(0,i.SU)(u)&&A.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:(0,o.C_)("fa fa-"+(T.value?"check":"copy")),"aria-hidden":"true",title:e.$t("oauth2.COPY_TO_CLIPBOARD"),onClick:g},null,10,ta)):(0,a.kq)("",!0)]),(0,i.SU)(u)&&(0,i.SU)(m).client_secret?((0,a.wg)(),(0,a.iD)("dt",na,(0,o.zw)(e.$t("oauth2.APP.CLIENT_SECRET"))+": ",1)):(0,a.kq)("",!0),(0,i.SU)(u)&&(0,i.SU)(m).client_secret?((0,a.wg)(),(0,a.iD)("dd",ra,[(0,a.Uk)((0,o.zw)((0,i.SU)(m).client_secret)+" ",1),A.value?((0,a.wg)(),(0,a.iD)("i",{key:0,class:(0,o.C_)("fa fa-"+(p.value?"check":"copy")),"aria-hidden":"true",title:e.$t("oauth2.COPY_TO_CLIPBOARD"),onClick:N},null,10,aa)):(0,a.kq)("",!0)])):(0,a.kq)("",!0),(0,a._)("dt",null,(0,o.zw)((0,o.kC)(e.$t("oauth2.APP.ISSUE_AT")))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(Ye.p6)((0,i.SU)(m).issued_at,(0,i.SU)(d).timezone,(0,i.SU)(d).date_format)),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.NAME"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).name),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.DESCRIPTION"))+":",1),(0,a._)("dd",{class:(0,o.C_)({"no-description":!(0,i.SU)(m).client_description})},(0,o.zw)((0,i.SU)(m).client_description?(0,i.SU)(m).client_description:e.$t("oauth2.NO_DESCRIPTION")),3),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.URL"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).website),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.REDIRECT_URL"))+":",1),(0,a._)("dd",null,(0,o.zw)((0,i.SU)(m).redirect_uris.length>0?(0,i.SU)(m).redirect_uris[0]:""),1),(0,a._)("dt",null,(0,o.zw)(e.$t("oauth2.APP.SCOPE.LABEL"))+":",1),(0,a._)("dd",oa,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(m).scope.split(" "),(e=>((0,a.wg)(),(0,a.iD)("span",{class:"client-scope",key:e},[(0,a._)("code",null,(0,o.zw)(e),1)])))),128))])]),(0,a._)("div",sa,[(0,a._)("button",{class:"danger",onClick:t[2]||(t[2]=e=>R(!1))},(0,o.zw)(e.$t("oauth2.REVOKE_ALL_TOKENS")),1),(0,a._)("button",{class:"danger",onClick:t[3]||(t[3]=e=>R(!0))},(0,o.zw)(e.$t("oauth2.DELETE_APP")),1),(0,a._)("button",{onClick:t[4]||(t[4]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)])])):((0,a.wg)(),(0,a.iD)("div",ia,[(0,a._)("p",la,(0,o.zw)(e.$t("oauth2.NO_APP")),1),(0,a._)("button",{onClick:t[5]||(t[5]=t=>e.$router.push("/profile/apps"))},(0,o.zw)(e.$t("buttons.BACK")),1)]))])}}});const ua=(0,P.Z)(ca,[["__scopeId","data-v-3a844fa2"]]);var da=ua;const ma={id:"oauth2-apps-list"},_a={class:"apps-list"},Ea={key:0},Sa={class:"app-issued-at"},Ta={key:1,class:"no-apps"},pa={class:"app-list-buttons"};var Aa=(0,a.aZ)({__name:"UserAppsList",props:{authUser:null},setup(e){const t=e,n=(0,c.o)(),s=(0,r.yj)(),{authUser:u}=(0,i.BK)(t),d=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENTS])),m=(0,a.Fl)((()=>n.getters[l.Km.GETTERS.CLIENTS_PAGINATION]));let _=E(s.query);function E(e){const t={};return e.page&&(t.page=(0,Ke.z_)(e.page,Ke.Hf)),t}function S(e){n.dispatch(l.Km.ACTIONS.GET_CLIENTS,e)}return(0,a.wF)((()=>{S(_)})),(0,a.YP)((()=>s.query),(async e=>{_=E(e),S(_)})),(e,t)=>{const n=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("div",ma,[(0,a._)("p",_a,(0,o.zw)(e.$t("oauth2.APPS_LIST")),1),(0,i.SU)(d).length>0?((0,a.wg)(),(0,a.iD)("ul",Ea,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(d),(t=>((0,a.wg)(),(0,a.iD)("li",{key:t.client_id},[(0,a.Wm)(n,{to:{name:"UserApp",params:{id:t.id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.name),1)])),_:2},1032,["to"]),(0,a._)("span",Sa,(0,o.zw)(e.$t("oauth2.APP.ISSUE_AT"))+" "+(0,o.zw)((0,i.SU)(Ye.p6)(t.issued_at,(0,i.SU)(u).timezone,(0,i.SU)(u).date_format)),1)])))),128))])):((0,a.wg)(),(0,a.iD)("div",Ta,(0,o.zw)(e.$t("oauth2.NO_APPS")),1)),(0,i.SU)(d).length>0?((0,a.wg)(),(0,a.j4)(Pe.Z,{key:2,pagination:(0,i.SU)(m),path:"/profile/apps",query:(0,i.SU)(_)},null,8,["pagination","query"])):(0,a.kq)("",!0),(0,a._)("div",pa,[(0,a._)("button",{onClick:t[0]||(t[0]=t=>e.$router.push("/profile/apps/new"))},(0,o.zw)(e.$t("oauth2.NEW_APP")),1),(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)])])}}});const Oa=(0,P.Z)(Aa,[["__scopeId","data-v-efa45ea0"]]);var Ra=Oa;const Ia={id:"user-sport-preferences"},Ua={key:0,class:"responsive-table"},ga={class:"mobile-display"},Na={key:0,class:"profile-buttons mobile-display"},ha={key:1,class:"profile-buttons"},za={class:"text-left"},wa={key:0},fa={class:"cell-heading"},va=["value"],Ca={class:"cell-heading"},Da={key:0,class:"disabled-message"},ka={key:1,class:"fa fa-refresh fa-spin fa-fw"},Pa={class:"cell-heading"},La={class:"cell-heading"},Ma=["checked"],ba={class:"cell-heading"},ya=["value"],Ga={key:1},Fa={key:0,class:"action-buttons"},Wa={class:"cell-heading"},Ka=["onClick"],Ya={key:1,class:"edition-buttons"},xa=["disabled"],$a=["disabled","onClick"],Ba=["disabled"],Za={key:0,class:"profile-buttons"},Ha={key:1,class:"profile-buttons"};var qa=(0,a.aZ)({__name:"UserSportPreferences",props:{user:null,isEdition:{type:Boolean}},setup(e){const t=e,n=(0,c.o)(),{t:r}=(0,ie.QT)(),{isEdition:u,user:d}=(0,i.BK)(t),m="#838383",_=(0,a.f3)("sportColors"),E=(0,a.Fl)((()=>n.getters[l.O8.GETTERS.SPORTS])),S=(0,a.Fl)((()=>(0,le.xH)(E.value,r,"is_active",d.value.sports_list))),T=(0,a.Fl)((()=>n.getters[l.YN.GETTERS.USER_LOADING])),p=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),A=(0,i.qj)({sport_id:0,color:null,is_active:!0,stopped_speed_threshold:1});function O(e){null!==e?(A.sport_id=e.id,A.color=e.color?e.color:_?_[e.label]:m,A.is_active=e.is_active_for_user,A.stopped_speed_threshold=e.stopped_speed_threshold):N()}function R(e){return A.sport_id===e}function I(e){A.color=e.target.value}function U(e){A.stopped_speed_threshold=parseFloat(e.target.value)}function g(e){A.is_active=e.target.checked}function N(){A.sport_id=0,A.color=null,A.is_active=!0,A.stopped_speed_threshold=1,n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES)}function h(e){e.preventDefault(),n.dispatch(l.YN.ACTIONS.UPDATE_USER_SPORT_PREFERENCES,A)}function z(e,t){e.preventDefault(),n.dispatch(l.YN.ACTIONS.RESET_USER_SPORT_PREFERENCES,t)}return(0,a.YP)((()=>T.value),(e=>{e||p.value||N()})),(e,t)=>{const n=(0,a.up)("SportImage"),r=(0,a.up)("ErrorMessage");return(0,a.wg)(),(0,a.iD)("div",Ia,[(0,i.SU)(E).length>0?((0,a.wg)(),(0,a.iD)("div",Ua,[(0,a._)("div",ga,[(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("div",Na,[(0,a._)("button",{class:"cancel",onClick:t[0]||(t[0]=(0,s.iM)((t=>e.$router.push("/profile/sports")),["prevent"]))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,a.wg)(),(0,a.iD)("div",ha,[(0,a._)("button",{onClick:t[1]||(t[1]=t=>e.$router.push("/profile/edit/sports"))},(0,o.zw)(e.$t("user.PROFILE.EDIT_SPORTS_PREFERENCES")),1),(0,a._)("button",{onClick:t[2]||(t[2]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))]),(0,a._)("table",null,[(0,a._)("thead",null,[(0,a._)("tr",null,[(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.COLOR")),1),(0,a._)("th",za,(0,o.zw)(e.$t("workouts.SPORT",0)),1),(0,a._)("th",null,(0,o.zw)(e.$t("workouts.WORKOUT",0)),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.IS_ACTIVE")),1),(0,a._)("th",null,(0,o.zw)(e.$t("user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD")),1),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("th",wa,(0,o.zw)(e.$t("user.PROFILE.SPORT.ACTION")),1)):(0,a.kq)("",!0)])]),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(S),(s=>((0,a.wg)(),(0,a.iD)("tr",{key:s.id},[(0,a._)("td",null,[(0,a._)("span",fa,(0,o.zw)(e.$t("user.PROFILE.SPORT.COLOR")),1),R(s.id)?((0,a.wg)(),(0,a.iD)("input",{key:0,class:"sport-color",type:"color",value:A.color,onInput:I},null,40,va)):((0,a.wg)(),(0,a.j4)(n,{key:1,title:s.translatedLabel,"sport-label":s.label,color:s.color?s.color:(0,i.SU)(_)[s.label]},null,8,["title","sport-label","color"]))]),(0,a._)("td",{class:(0,o.C_)(["sport-label",{"disabled-sport":!s.is_active}])},[(0,a._)("span",Ca,(0,o.zw)(e.$t("user.PROFILE.SPORT.LABEL")),1),(0,a.Uk)(" "+(0,o.zw)(s.translatedLabel)+" ",1),s.is_active?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("span",Da," ("+(0,o.zw)(e.$t("user.PROFILE.SPORT.DISABLED_BY_ADMIN"))+") ",1)),(0,i.SU)(T)&&R(s.id)?((0,a.wg)(),(0,a.iD)("i",ka)):(0,a.kq)("",!0),(0,i.SU)(p)&&A.sport_id===s.id?((0,a.wg)(),(0,a.j4)(r,{key:2,message:(0,i.SU)(p)},null,8,["message"])):(0,a.kq)("",!0)],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",Pa,(0,o.zw)(e.$t("workouts.WORKOUT",0)),1),(0,a._)("i",{class:(0,o.C_)("fa fa"+((0,i.SU)(d).sports_list.includes(s.id)?"-check":"")),"aria-hidden":"true"},null,2)],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",La,(0,o.zw)(e.$t("user.PROFILE.SPORT.IS_ACTIVE")),1),R(s.id)&&s.is_active?((0,a.wg)(),(0,a.iD)("input",{key:0,type:"checkbox",checked:s.is_active_for_user,onChange:g},null,40,Ma)):((0,a.wg)(),(0,a.iD)("i",{key:1,class:(0,o.C_)("fa fa"+(s.is_active_for_user?"-check":"")),"aria-hidden":"true"},null,2))],2),(0,a._)("td",{class:(0,o.C_)(["text-center",{"disabled-sport":!s.is_active}])},[(0,a._)("span",ba,(0,o.zw)(e.$t("user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD")),1),R(s.id)&&s.is_active?((0,a.wg)(),(0,a.iD)("input",{key:0,class:"threshold-input",type:"number",min:"0",step:"0.1",value:A.stopped_speed_threshold,onInput:U},null,40,ya)):((0,a.wg)(),(0,a.iD)("span",Ga,(0,o.zw)(s.stopped_speed_threshold),1))],2),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("td",Fa,[(0,a._)("span",Wa,(0,o.zw)(e.$t("user.PROFILE.SPORT.ACTION")),1),0===A.sport_id?((0,a.wg)(),(0,a.iD)("button",{key:0,onClick:e=>O(s)},(0,o.zw)(e.$t("buttons.EDIT")),9,Ka)):(0,a.kq)("",!0),R(s.id)?((0,a.wg)(),(0,a.iD)("div",Ya,[(0,a._)("button",{disabled:(0,i.SU)(T),onClick:h},(0,o.zw)(e.$t("buttons.SUBMIT")),9,xa),(0,a._)("button",{disabled:(0,i.SU)(T),onClick:e=>z(e,s.id)},(0,o.zw)(e.$t("buttons.RESET")),9,$a),(0,a._)("button",{disabled:(0,i.SU)(T),onClick:t[3]||(t[3]=e=>O(null))},(0,o.zw)(e.$t("buttons.CANCEL")),9,Ba)])):(0,a.kq)("",!0)])):(0,a.kq)("",!0)])))),128))])]),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("div",Za,[(0,a._)("button",{class:"cancel",onClick:t[4]||(t[4]=(0,s.iM)((t=>e.$router.push("/profile/sports")),["prevent"]))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,a.wg)(),(0,a.iD)("div",Ha,[(0,a._)("button",{onClick:t[5]||(t[5]=t=>e.$router.push("/profile/edit/sports"))},(0,o.zw)(e.$t("user.PROFILE.EDIT_SPORTS_PREFERENCES")),1),(0,a._)("button",{onClick:t[6]||(t[6]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))])):(0,a.kq)("",!0)])}}});const Va=(0,P.Z)(qa,[["__scopeId","data-v-74e52489"]]);var ja=Va,Xa=n(2894);const Ja=e=>((0,a.dD)("data-v-74257266"),e=e(),(0,a.Cn)(),e),Qa={class:"about-text"},eo=["innerHTML"],to=Ja((()=>(0,a._)("i",{class:"fa fa-book fa-padding","aria-hidden":"true"},null,-1))),no={href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer"},ro=Ja((()=>(0,a._)("i",{class:"fa fa-github fa-padding","aria-hidden":"true"},null,-1))),ao={href:"https://github.com/SamR1/FitTrackee",target:"_blank",rel:"noopener noreferrer"},oo=Ja((()=>(0,a._)("i",{class:"fa fa-balance-scale fa-padding","aria-hidden":"true"},null,-1))),so=Ja((()=>(0,a._)("a",{href:"https://choosealicense.com/licenses/agpl-3.0/",target:"_blank",rel:"noopener noreferrer"}," AGPLv3 ",-1))),io={key:0},lo=Ja((()=>(0,a._)("i",{class:"fa fa-envelope-o fa-padding","aria-hidden":"true"},null,-1))),co=["href"];var uo=(0,a.aZ)({__name:"About",setup(e){const t=(0,c.o)(),n=(0,a.Fl)((()=>t.getters[l.SY.GETTERS.APP_CONFIG]));return(e,t)=>{const r=(0,a.up)("i18n-t");return(0,a.wg)(),(0,a.iD)("div",Qa,[(0,a._)("div",null,[(0,a._)("p",{class:"error-message",innerHTML:e.$t("about.FITTRACKEE_DESCRIPTION")},null,8,eo),(0,a._)("p",null,[to,(0,a._)("a",no,(0,o.zw)((0,o.kC)(e.$t("common.DOCUMENTATION"))),1)]),(0,a._)("p",null,[ro,(0,a._)("a",ao,(0,o.zw)(e.$t("about.SOURCE_CODE")),1)]),(0,a._)("p",null,[oo,(0,a.Wm)(r,{keypath:"about.FITTRACKEE_LICENSE"},{default:(0,a.w5)((()=>[so])),_:1})]),(0,i.SU)(n).admin_contact?((0,a.wg)(),(0,a.iD)("div",io,[lo,(0,a._)("a",{href:`mailto:${(0,i.SU)(n).admin_contact}`},(0,o.zw)(e.$t("about.CONTACT_ADMIN")),9,co)])):(0,a.kq)("",!0)])])}}});const mo=(0,P.Z)(uo,[["__scopeId","data-v-74257266"]]);var _o=mo;const Eo={id:"bike"},So=["src"];function To(e,t){return(0,a.wg)(),(0,a.iD)("div",Eo,[(0,a._)("img",{class:"bike-img",src:"/img/bike.svg",alt:"mountain bike"},null,8,So)])}const po={},Ao=(0,P.Z)(po,[["render",To],["__scopeId","data-v-795f7f5f"]]);var Oo=Ao;const Ro={id:"about",class:"view"},Io={class:"container"},Uo={class:"container-sub"},go={class:"container-sub about-details"};var No=(0,a.aZ)({__name:"AboutView",setup(e){return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ro,[(0,a._)("div",Io,[(0,a._)("div",Uo,[(0,a.Wm)(Oo)]),(0,a._)("div",go,[(0,a.Wm)(_o)])])]))}});const ho=(0,P.Z)(No,[["__scopeId","data-v-bffb50d0"]]);var zo=ho,wo=n(1818),fo=n(2056);const vo=e=>((0,a.dD)("data-v-96abcc38"),e=e(),(0,a.Cn)(),e),Co={class:"timeline-workout"},Do={class:"box"},ko={class:"workout-user-date"},Po={class:"workout-user"},Lo=["title"],Mo={key:0},bo={key:1,class:"no-map"},yo={class:"img"},Go={class:"data"},Fo=vo((()=>(0,a._)("i",{class:"fa fa-clock-o","aria-hidden":"true"},null,-1))),Wo={key:0},Ko={class:"data"},Yo=vo((()=>(0,a._)("i",{class:"fa fa-road","aria-hidden":"true"},null,-1))),xo={key:0,class:"data elevation"},$o=["alt"],Bo={class:"data-values"},Zo={key:1,class:"data altitude"},Ho=vo((()=>(0,a._)("i",{class:"fa fa-location-arrow","aria-hidden":"true"},null,-1))),qo={class:"data-values"};var Vo=(0,a.aZ)({__name:"WorkoutCard",props:{user:null,useImperialUnits:{type:Boolean},workout:{default:()=>({})},sport:{default:()=>({})}},setup(e){const t=e,n=(0,c.o)(),{user:r,workout:s,sport:u,useImperialUnits:d}=(0,i.BK)(t),m=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LOCALE]));return(e,t)=>{const n=(0,a.up)("router-link"),l=(0,a.up)("SportImage"),c=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",Co,[(0,a._)("div",Do,[(0,a._)("div",ko,[(0,a._)("div",Po,[(0,a.Wm)(Le.Z,{user:(0,i.SU)(r)},null,8,["user"]),(0,i.SU)(r).username?((0,a.wg)(),(0,a.j4)(n,{key:0,class:"workout-user-name",to:{name:"User",params:{username:(0,i.SU)(r).username}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(r).username),1)])),_:1},8,["to"])):(0,a.kq)("",!0)]),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(n,{key:0,class:"workout-title",to:{name:"Workout",params:{workoutId:(0,i.SU)(s).id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)((0,i.SU)(s).title),1)])),_:1},8,["to"])):(0,a.kq)("",!0),(0,i.SU)(s).workout_date&&(0,i.SU)(r)?((0,a.wg)(),(0,a.iD)("div",{key:1,class:"workout-date",title:(0,i.SU)(Ye.p6)((0,i.SU)(s).workout_date,(0,i.SU)(r).timezone,(0,i.SU)(r).date_format)},(0,o.zw)((0,i.SU)(wo.Z)(new Date((0,i.SU)(s).workout_date),new Date,{addSuffix:!0,locale:(0,i.SU)(m)})),9,Lo)):(0,a.kq)("",!0)]),(0,a._)("div",{class:(0,o.C_)(["workout-map",{"no-cursor":!(0,i.SU)(s)}]),onClick:t[0]||(t[0]=t=>(0,i.SU)(s).id?e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(s).id}}):null)},[(0,i.SU)(s)?((0,a.wg)(),(0,a.iD)("div",Mo,[(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.j4)(fo.Z,{key:0,workout:(0,i.SU)(s)},null,8,["workout"])):((0,a.wg)(),(0,a.iD)("div",bo,(0,o.zw)(e.$t("workouts.NO_MAP")),1))])):(0,a.kq)("",!0)],2),(0,a._)("div",{class:(0,o.C_)(["workout-data",{"without-gpx":(0,i.SU)(s)&&!(0,i.SU)(s).with_gpx}]),onClick:t[1]||(t[1]=t=>(0,i.SU)(s).id?e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(s).id}}):null)},[(0,a._)("div",yo,[(0,i.SU)(u).label?((0,a.wg)(),(0,a.j4)(l,{key:0,"sport-label":(0,i.SU)(u).label,color:(0,i.SU)(u).color},null,8,["sport-label","color"])):(0,a.kq)("",!0)]),(0,a._)("div",Go,[Fo,(0,i.SU)(s)?((0,a.wg)(),(0,a.iD)("span",Wo,(0,o.zw)((0,i.SU)(s).moving),1)):(0,a.kq)("",!0)]),(0,a._)("div",Ko,[Yo,(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).distance,digits:3,unitFrom:"km",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)]),(0,i.SU)(s)&&(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.iD)("div",xo,[(0,a._)("img",{class:"mountains",src:"/img/workouts/mountains.svg",alt:e.$t("workouts.ELEVATION")},null,8,$o),(0,a._)("div",Bo,[(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).min_alt,unitFrom:"m",displayUnit:!1,useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0),(0,a.Uk)("/ "),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:1,distance:(0,i.SU)(s).max_alt,unitFrom:"m",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)])])):(0,a.kq)("",!0),(0,i.SU)(s)&&(0,i.SU)(s).with_gpx?((0,a.wg)(),(0,a.iD)("div",Zo,[Ho,(0,a._)("div",qo,[(0,a.Uk)(" +"),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:0,distance:(0,i.SU)(s).ascent,unitFrom:"m",displayUnit:!1,useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0),(0,a.Uk)("/- "),(0,i.SU)(s).id?((0,a.wg)(),(0,a.j4)(c,{key:1,distance:(0,i.SU)(s).descent,unitFrom:"m",useImperialUnits:(0,i.SU)(d)},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)])])):(0,a.kq)("",!0)],2)])])}}});const jo=(0,P.Z)(Vo,[["__scopeId","data-v-96abcc38"]]);var Xo=jo,Jo=n(5630),Qo=n(3768);const es={id:"timeline"},ts={class:"section-title"},ns={key:0},rs={key:1},as={key:1,class:"more-workouts"};var os=(0,a.aZ)({__name:"Timeline",props:{sports:null,user:null},setup(e){const t=e,n=(0,c.o)(),{sports:r,user:s}=(0,i.BK)(t),u=(0,i.iH)(1),d=5,m=t.user.nb_workouts>=d?d:t.user.nb_workouts;(0,a.wF)((()=>S()));const _=(0,a.Fl)((()=>n.getters[l.aX.GETTERS.TIMELINE_WORKOUTS])),E=(0,a.Fl)((()=>_.value.length>0&&null!==_.value[_.value.length-1].previous_workout));function S(){n.dispatch(l.aX.ACTIONS.GET_TIMELINE_WORKOUTS,{page:u.value,per_page:d,...Qo.eR})}function T(){u.value+=1,n.dispatch(l.aX.ACTIONS.GET_MORE_TIMELINE_WORKOUTS,{page:u.value,per_page:d,...Qo.eR})}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",es,[(0,a._)("div",ts,(0,o.zw)(e.$t("workouts.LATEST_WORKOUTS")),1),(0,i.SU)(s).nb_workouts>0&&0===(0,i.SU)(_).length?((0,a.wg)(),(0,a.iD)("div",ns,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)([...Array((0,i.SU)(m)).keys()],(e=>((0,a.wg)(),(0,a.j4)(Xo,{user:(0,i.SU)(s),useImperialUnits:(0,i.SU)(s).imperial_units,key:e},null,8,["user","useImperialUnits"])))),128))])):((0,a.wg)(),(0,a.iD)("div",rs,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(_),(e=>((0,a.wg)(),(0,a.j4)(Xo,{workout:e,sport:(0,i.SU)(_).length>0?(0,i.SU)(r).filter((t=>t.id===e.sport_id))[0]:null,user:(0,i.SU)(s),useImperialUnits:(0,i.SU)(s).imperial_units,key:e.id},null,8,["workout","sport","user","useImperialUnits"])))),128)),0===(0,i.SU)(_).length?((0,a.wg)(),(0,a.j4)(Jo.Z,{key:0})):(0,a.kq)("",!0),(0,i.SU)(E)?((0,a.wg)(),(0,a.iD)("div",as,[(0,a._)("button",{onClick:T},(0,o.zw)(e.$t("workouts.LOAD_MORE_WORKOUT")),1)])):(0,a.kq)("",!0)]))]))}});const ss=(0,P.Z)(os,[["__scopeId","data-v-35567bf2"]]);var is=ss,ls=n(1640),cs=n(4559),us=n(7349),ds=n(1743),ms=n(9160),_s=n(1085);const Es=["title"];var Ss=(0,a.aZ)({__name:"CalendarWorkout",props:{displayHARecord:{type:Boolean},workout:null,sportLabel:null,sportColor:null},setup(e){const t=e,{displayHARecord:n,workout:r,sportLabel:o,sportColor:s}=(0,i.BK)(t);return(e,t)=>{const l=(0,a.up)("SportImage");return(0,a.wg)(),(0,a.iD)("div",{class:"calendar-workout",onClick:t[0]||(t[0]=t=>e.$router.push({name:"Workout",params:{workoutId:(0,i.SU)(r).id}}))},[(0,a.Wm)(l,{"sport-label":(0,i.SU)(o),title:(0,i.SU)(r).title,color:(0,i.SU)(s)},null,8,["sport-label","title","color"]),(0,a._)("sup",null,[(0,i.SU)(r).records.length>0?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-trophy custom-fa-small","aria-hidden":"true",title:(0,i.SU)(r).records.filter((e=>!!(0,i.SU)(n)||"HA"!==e.record_type)).map((t=>` ${e.$t(`workouts.RECORD_${t.record_type}`)}`))},null,8,Es)):(0,a.kq)("",!0)])])}}});const Ts=Ss;var ps=Ts;const As={class:"donut-chart"},Os={height:"34",width:"34",viewBox:"0 0 34 34"},Rs=["stroke","stroke-dashoffset","transform"];var Is=(0,a.aZ)({__name:"DonutChart",props:{colors:null,datasets:null},setup(e){const t=e,{colors:n,datasets:r}=(0,i.BK)(t);let o=-90;const s=16,l=16,c=14,u=2*Math.PI*c;function d(e,t){return t-e*t}function m(e,t){const n=`rotate(${o}, ${s}, ${l})`;return o=360*t+o,n}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",As,[((0,a.wg)(),(0,a.iD)("svg",Os,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(Object.entries((0,i.SU)(r)),((e,t)=>((0,a.wg)(),(0,a.iD)("g",{key:t},[(0,a._)("circle",{cx:s,cy:l,r:c,fill:"transparent",stroke:(0,i.SU)(n)[+e[0]],"stroke-dashoffset":d(e[1].percentage,u),"stroke-dasharray":u,"stroke-width":"3","stroke-opacity":"0.8",transform:m(t,e[1].percentage)},null,8,Rs)])))),128))]))]))}});const Us=Is;var gs=Us;const Ns={class:"calendar-workouts-chart"},hs={class:"workouts-count"},zs={key:0,class:"workouts-pane"},ws={class:"more-workouts"};var fs=(0,a.aZ)({__name:"CalendarWorkoutsChart",props:{colors:null,datasets:null,sports:null,workouts:null},setup(e){const t=e,{colors:n,datasets:r,sports:s,workouts:l}=(0,i.BK)(t),c=(0,i.iH)(!0);function u(e){e.stopPropagation(),c.value=!c.value}return(e,t)=>{const d=(0,a.Q2)("click-outside");return(0,a.wg)(),(0,a.iD)("div",Ns,[(0,a._)("div",{class:"workouts-chart",onClick:u},[(0,a._)("div",hs,(0,o.zw)((0,i.SU)(l).length),1),(0,a.Wm)(gs,{datasets:(0,i.SU)(r),colors:(0,i.SU)(n)},null,8,["datasets","colors"])]),c.value?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("div",zs,[(0,a.wy)(((0,a.wg)(),(0,a.iD)("div",ws,[(0,a._)("i",{class:"fa fa-times calendar-more","aria-hidden":"true",onClick:u}),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(l),((e,t)=>((0,a.wg)(),(0,a.j4)(ps,{key:t,workout:e,sportLabel:(0,i.SU)(le.PA)(e,(0,i.SU)(s)),sportColor:(0,i.SU)(le.CM)(e,(0,i.SU)(s))},null,8,["workout","sportLabel","sportColor"])))),128))])),[[d,u]])]))])}}});const vs=(0,P.Z)(fs,[["__scopeId","data-v-52d4310a"]]);var Cs=vs;const Ds={class:"calendar-workouts"},ks={class:"desktop-display"},Ps={key:0,class:"workouts-display"},Ls={key:1,class:"donut-display"},Ms={class:"mobile-display"},bs={key:0,class:"donut-display"};var ys=(0,a.aZ)({__name:"CalendarWorkouts",props:{displayHARecord:{type:Boolean},workouts:null,sports:null},setup(e){const t=e,{displayHARecord:n,workouts:r,sports:o}=(0,i.BK)(t),s=(0,a.Fl)((()=>(0,Qo.BN)(t.workouts))),l=(0,a.Fl)((()=>(0,le.Yx)(t.sports))),c=6;return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ds,[(0,a._)("div",ks,[(0,i.SU)(r).length<=c?((0,a.wg)(),(0,a.iD)("div",Ps,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(r).slice(0,c),((e,t)=>((0,a.wg)(),(0,a.j4)(ps,{key:t,displayHARecord:(0,i.SU)(n),workout:e,sportLabel:(0,i.SU)(le.PA)(e,(0,i.SU)(o)),sportColor:(0,i.SU)(le.CM)(e,(0,i.SU)(o))},null,8,["displayHARecord","workout","sportLabel","sportColor"])))),128))])):((0,a.wg)(),(0,a.iD)("div",Ls,[(0,a.Wm)(Cs,{workouts:(0,i.SU)(r),sports:(0,i.SU)(o),datasets:(0,i.SU)(s),colors:(0,i.SU)(l)},null,8,["workouts","sports","datasets","colors"])]))]),(0,a._)("div",Ms,[(0,i.SU)(r).length>0?((0,a.wg)(),(0,a.iD)("div",bs,[(0,a.Wm)(Cs,{workouts:(0,i.SU)(r),sports:(0,i.SU)(o),datasets:(0,i.SU)(s),colors:(0,i.SU)(l)},null,8,["workouts","sports","datasets","colors"])])):(0,a.kq)("",!0)])]))}});const Gs=ys;var Fs=Gs;const Ws={class:"calendar-cells"},Ks={class:"calendar-cell-day"};var Ys=(0,a.aZ)({__name:"CalendarCells",props:{currentDay:null,displayHARecord:{type:Boolean},endDate:null,sports:null,startDate:null,timezone:null,weekStartingMonday:{type:Boolean},workouts:null},setup(e){const t=e,{currentDay:n,displayHARecord:r,endDate:s,sports:l,startDate:c,timezone:u,weekStartingMonday:d,workouts:m}=(0,i.BK)(t),_=(0,i.iH)([]);function E(){_.value=[];let e=c.value;while(e<=s.value){const t=[];for(let n=0;n<7;n++)t.push(e),e=(0,us.Z)(e,1);_.value.push(t)}}function S(e){return d.value?[5,6].includes(e):[0,6].includes(e)}function T(e,t){return t?t.filter((t=>(0,ds.Z)((0,Ye.eB)(t.workout_date,u.value),e))).reverse():[]}return(0,a.bv)((()=>E())),(0,a.YP)((()=>t.currentDay),(()=>E())),(e,t)=>((0,a.wg)(),(0,a.iD)("div",Ws,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(_.value,((e,t)=>((0,a.wg)(),(0,a.iD)("div",{class:"calendar-row",key:t},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(e,((e,t)=>((0,a.wg)(),(0,a.iD)("div",{class:(0,o.C_)(["calendar-cell",{"disabled-cell":!(0,i.SU)(ms.Z)(e,(0,i.SU)(n)),"week-end":S(t),today:(0,i.SU)(_s.Z)(e)}]),key:t},[(0,a.Wm)(Fs,{workouts:T(e,(0,i.SU)(m)),sports:(0,i.SU)(l),displayHARecord:(0,i.SU)(r)},null,8,["workouts","sports","displayHARecord"]),(0,a._)("div",Ks,(0,o.zw)((0,i.SU)(jt.Z)(e,"d")),1)],2)))),128))])))),128))]))}});const xs=Ys;var $s=xs;const Bs={class:"calendar-days"};var Zs=(0,a.aZ)({__name:"CalendarDays",props:{startDate:null,localeOptions:null},setup(e){const t=e,n=[];for(let r=0;r<7;r++)n.push((0,us.Z)(t.startDate,r));return(t,r)=>((0,a.wg)(),(0,a.iD)("div",Bs,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(n,((t,n)=>(0,a._)("div",{class:"calendar-day",key:n},(0,o.zw)((0,i.SU)(jt.Z)(t,"EEE",{locale:e.localeOptions})),1))),64))]))}});const Hs=Zs;var qs=Hs;const Vs={class:"calendar-header"},js=(0,a._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1),Xs=[js],Js={class:"calendar-month"},Qs=(0,a._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1),ei=[Qs];var ti=(0,a.aZ)({__name:"CalendarHeader",props:{day:null,localeOptions:null},emits:["displayNextMonth","displayPreviousMonth"],setup(e,{emit:t}){const n=e,{day:r,localeOptions:s}=(0,i.BK)(n);return(e,n)=>((0,a.wg)(),(0,a.iD)("div",Vs,[(0,a._)("div",{class:"calendar-arrow calendar-arrow-left",onClick:n[0]||(n[0]=e=>t("displayPreviousMonth"))},Xs),(0,a._)("div",Js,[(0,a._)("span",null,(0,o.zw)((0,i.SU)(jt.Z)((0,i.SU)(r),"MMM yyyy",{locale:(0,i.SU)(s)})),1)]),(0,a._)("div",{class:"calendar-arrow calendar-arrow-right",onClick:n[1]||(n[1]=e=>t("displayNextMonth"))},ei)]))}});const ni=ti;var ri=ni;const ai={id:"user-calendar"},oi={class:"calendar-card box"};var si=(0,a.aZ)({__name:"index",props:{sports:null,user:null},setup(e){const t=e,n=(0,c.o)(),{sports:r,user:o}=(0,i.BK)(t),s="yyyy-MM-dd",u=(0,i.iH)(new Date),d=(0,i.iH)((0,Ye.yx)(u.value,t.user.weekm)),m=(0,a.Fl)((()=>n.getters[l.aX.GETTERS.CALENDAR_WORKOUTS])),_=(0,a.Fl)((()=>n.getters[l.SY.GETTERS.LOCALE]));function E(){d.value=(0,Ye.yx)(u.value,t.user.weekm);const e={from:(0,jt.Z)(d.value.start,s),to:(0,jt.Z)(d.value.end,s),page:1,per_page:100,...Qo.eR};n.dispatch(l.aX.ACTIONS.GET_CALENDAR_WORKOUTS,e)}function S(){u.value=(0,ls.Z)(u.value,1),E()}function T(){u.value=(0,cs.Z)(u.value,1),E()}return(0,a.wF)((()=>E())),(e,t)=>((0,a.wg)(),(0,a.iD)("div",ai,[(0,a._)("div",oi,[(0,a.Wm)(ri,{day:u.value,"locale-options":(0,i.SU)(_),onDisplayNextMonth:S,onDisplayPreviousMonth:T},null,8,["day","locale-options"]),(0,a.Wm)(qs,{"start-date":d.value.start,"locale-options":(0,i.SU)(_)},null,8,["start-date","locale-options"]),(0,a.Wm)($s,{currentDay:u.value,displayHARecord:(0,i.SU)(o).display_ascent,"end-date":d.value.end,sports:(0,i.SU)(r),"start-date":d.value.start,timezone:(0,i.SU)(o).timezone,workouts:(0,i.SU)(m),weekStartingMonday:(0,i.SU)(o).weekm},null,8,["currentDay","displayHARecord","end-date","sports","start-date","timezone","workouts","weekStartingMonday"])])]))}});const ii=si;var li=ii,ci=n(3703),ui=n(4135),di=n(3170);const mi={class:"user-month-stats"};var _i=(0,a.aZ)({__name:"UserMonthStats",props:{sports:null,user:null},setup(e){const t=e,{sports:n,user:r}=(0,i.BK)(t),s=new Date,l={duration:"week",start:(0,ci.Z)(s),end:(0,ui.Z)(s)},c=t.sports.map((e=>e.id));return(e,t)=>{const s=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",mi,[(0,a.Wm)(s,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.$t("dashboard.THIS_MONTH")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(di.Z,{sports:(0,i.SU)(n),user:(0,i.SU)(r),"chart-params":l,"displayed-sport-ids":(0,i.SU)(c),"hide-chart-if-no-data":!0},null,8,["sports","user","displayed-sport-ids"])])),_:1})])}}});const Ei=(0,P.Z)(_i,[["__scopeId","data-v-1bcddc12"]]);var Si=Ei,Ti=n(2540),pi=n(3649);const{locale:Ai}=Ti.Z.global,Oi=(e,t,n,r)=>{const a="km",o=n?pi.Dl[a].defaultTarget:a,s="m",i=n?pi.Dl[s].defaultTarget:s;let l;switch(e.record_type){case"AS":case"MS":l=`${(0,pi.sC)(+e.value,a,o,2)} ${o}/h`;break;case"FD":l=`${(0,pi.sC)(+e.value,a,o,3)} ${o}`;break;case"HA":l=`${(0,pi.sC)(+e.value,s,i,2)} ${i}`;break;case"LD":l=e.value;break;default:throw new Error(`Invalid record type, expected: "AS", "FD", "HA", "LD", "MD", got: "${e.record_type}"`)}return{workout_date:(0,Ye.p6)(e.workout_date,t,r,!1),workout_id:e.workout_id,id:e.id,record_type:e.record_type,value:l}},Ri=(e,t)=>{const n=e.label.toLowerCase(),r=t.label.toLowerCase();return n>r?1:n(o=(0,Ye.mh)(o,Ai.value),e.filter((e=>!!a||"HA"!==e.record_type)).reduce(((e,a)=>{const s=t.find((e=>e.id===a.sport_id));return s&&s.label&&(void 0===e[s.translatedLabel]&&(e[s.translatedLabel]={label:s.label,color:s.color,records:[]}),e[s.translatedLabel].records.push(Oi(a,n,r,o))),e}),{})),Ui={class:"records-card"},gi={class:"record-type"},Ni={class:"record-value"},hi={class:"record-date"};var zi=(0,a.aZ)({__name:"RecordsCard",props:{records:null,sportTranslatedLabel:null},setup(e){const t=e,{records:n,sportTranslatedLabel:r}=(0,i.BK)(t),{t:s}=(0,ie.QT)();function l(e){const t=[];return e.map((e=>{t.push({...e,label:s(`workouts.RECORD_${e.record_type}`)})})),t.sort(Ri)}return(e,t)=>{const s=(0,a.up)("SportImage"),c=(0,a.up)("router-link"),u=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",Ui,[(0,a.Wm)(u,null,{title:(0,a.w5)((()=>[(0,a.Wm)(s,{"sport-label":(0,i.SU)(n).label,color:(0,i.SU)(n).color},null,8,["sport-label","color"]),(0,a.Uk)(" "+(0,o.zw)((0,i.SU)(r)),1)])),content:(0,a.w5)((()=>[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(l((0,i.SU)(n).records),(e=>((0,a.wg)(),(0,a.iD)("div",{class:"record",key:e.id},[(0,a._)("span",gi,(0,o.zw)(e.label),1),(0,a._)("span",Ni,(0,o.zw)(e.value),1),(0,a._)("span",hi,[(0,a.Wm)(c,{to:{name:"Workout",params:{workoutId:e.workout_id}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(e.workout_date),1)])),_:2},1032,["to"])])])))),128))])),_:1})])}}});const wi=(0,P.Z)(zi,[["__scopeId","data-v-8d17c606"]]);var fi=wi;const vi=e=>((0,a.dD)("data-v-f0c85cb8"),e=e(),(0,a.Cn)(),e),Ci={class:"user-records-section"},Di={class:"section-title"},ki=vi((()=>(0,a._)("i",{class:"fa fa-trophy custom-fa-small","aria-hidden":"true"},null,-1))),Pi={class:"user-records"},Li={key:0,class:"no-records"};var Mi=(0,a.aZ)({__name:"index",props:{sports:null,user:null},setup(e){const t=e,{t:n}=(0,ie.QT)(),r=(0,a.Fl)((()=>Ii(t.user.records,(0,le.xH)(t.sports,n),t.user.timezone,t.user.imperial_units,t.user.display_ascent,t.user.date_format)));return(t,n)=>((0,a.wg)(),(0,a.iD)("div",Ci,[(0,a._)("div",Di,[ki,(0,a.Uk)(" "+(0,o.zw)(t.$t("workouts.RECORD",2)),1)]),(0,a._)("div",Pi,[0===Object.keys((0,i.SU)(r)).length?((0,a.wg)(),(0,a.iD)("div",Li,(0,o.zw)(t.$t("workouts.NO_RECORDS")),1)):(0,a.kq)("",!0),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(Object.keys((0,i.SU)(r)).sort(),(t=>((0,a.wg)(),(0,a.j4)(fi,{sportTranslatedLabel:t,records:(0,i.SU)(r)[t],key:t,useImperialUnits:e.user.imperial_units},null,8,["sportTranslatedLabel","records","useImperialUnits"])))),128))])]))}});const bi=(0,P.Z)(Mi,[["__scopeId","data-v-f0c85cb8"]]);var yi=bi;const Gi={id:"user-stats"};var Fi=(0,a.aZ)({__name:"index",props:{user:null},setup(e){const t=e,{t:n}=(0,ie.QT)(),{user:r}=(0,i.BK)(t),o=(0,a.Fl)((()=>t.user.total_duration)),s=(0,a.Fl)((()=>E(o))),l="km",c=r.value.imperial_units?pi.Dl[l].defaultTarget:l,u=(0,a.Fl)((()=>r.value.imperial_units?(0,pi.sC)(r.value.total_distance,l,c,2):parseFloat(r.value.total_distance.toFixed(2)))),d="m",m=r.value.imperial_units?pi.Dl[d].defaultTarget:d,_=(0,a.Fl)((()=>r.value.imperial_units?(0,pi.sC)(r.value.total_ascent,d,m,2):parseFloat(r.value.total_ascent.toFixed(2))));function E(e){const t=e.value.match(/day/g)?e.value.split(", ")[1]:e.value;return{days:e.value.match(/day/g)?`${e.value.split(" ")[0]} ${e.value.match(/days/g)?n("common.DAY",2):n("common.DAY",1)}`:`0 ${n("common.DAY",2)},`,duration:`${t.split(":")[0]}h ${t.split(":")[1]}min`}}return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Gi,[(0,a.Wm)($,{icon:"calendar",value:(0,i.SU)(r).nb_workouts,text:e.$t("workouts.WORKOUT",(0,i.SU)(r).nb_workouts)},null,8,["value","text"]),(0,a.Wm)($,{icon:"road",value:(0,i.SU)(u),text:"mi"===(0,i.SU)(c)?"miles":(0,i.SU)(c)},null,8,["value","text"]),(0,i.SU)(r).display_ascent?((0,a.wg)(),(0,a.j4)($,{key:0,icon:"location-arrow",value:(0,i.SU)(_),text:"ft"===(0,i.SU)(m)?"feet":(0,i.SU)(m)},null,8,["value","text"])):(0,a.kq)("",!0),(0,a.Wm)($,{icon:"clock-o",value:(0,i.SU)(s).days,text:(0,i.SU)(s).duration},null,8,["value","text"]),(0,i.SU)(r).display_ascent?(0,a.kq)("",!0):((0,a.wg)(),(0,a.j4)($,{key:1,icon:"tags",value:(0,i.SU)(r).nb_sports,text:e.$t("workouts.SPORT",(0,i.SU)(r).nb_sports)},null,8,["value","text"]))]))}});const Wi=Fi;var Ki=Wi;const Yi=e=>((0,a.dD)("data-v-4c0893c1"),e=e(),(0,a.Cn)(),e),xi={key:0,id:"dashboard",class:"view"},$i={class:"container mobile-menu"},Bi={class:"box"},Zi=Yi((()=>(0,a._)("i",{class:"fa fa-calendar","aria-hidden":"true"},null,-1))),Hi=[Zi],qi=Yi((()=>(0,a._)("i",{class:"fa fa-bar-chart","aria-hidden":"true"},null,-1))),Vi=[qi],ji=Yi((()=>(0,a._)("i",{class:"fa fa-map-o","aria-hidden":"true"},null,-1))),Xi=[ji],Ji=Yi((()=>(0,a._)("i",{class:"fa fa-trophy","aria-hidden":"true"},null,-1))),Qi=[Ji],el={class:"container"},tl={class:"container dashboard-container"},nl={class:"left-container dashboard-sub-container"},rl={class:"right-container dashboard-sub-container"},al=Yi((()=>(0,a._)("div",{id:"bottom"},null,-1))),ol={key:1,class:"app-loading"};var sl=(0,a.aZ)({__name:"Dashboard",setup(e){const t=(0,c.o)(),n=(0,a.Fl)((()=>t.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),r=(0,a.Fl)((()=>t.getters[l.O8.GETTERS.SPORTS])),s=(0,i.iH)("calendar");function u(e){s.value=e}return(0,a.wF)((()=>t.dispatch(l.YN.ACTIONS.GET_USER_PROFILE))),(e,t)=>{const l=(0,a.up)("Loader");return(0,i.SU)(n).username&&(0,i.SU)(r).length>0?((0,a.wg)(),(0,a.iD)("div",xi,[(0,a._)("div",$i,[(0,a._)("div",Bi,[(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"calendar"===s.value}]),onClick:t[0]||(t[0]=e=>u("calendar"))},Hi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"chart"===s.value}]),onClick:t[1]||(t[1]=e=>u("chart"))},Vi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"timeline"===s.value}]),onClick:t[2]||(t[2]=e=>u("timeline"))},Xi,2),(0,a._)("div",{class:(0,o.C_)(["mobile-menu-item",{"is-selected":"records"===s.value}]),onClick:t[3]||(t[3]=e=>u("records"))},Qi,2)])]),(0,a._)("div",el,[(0,a.Wm)(Ki,{user:(0,i.SU)(n)},null,8,["user"])]),(0,a._)("div",tl,[(0,a._)("div",nl,[(0,a.Wm)(Si,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("chart"===s.value)})},null,8,["sports","user","class"]),(0,a.Wm)(yi,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("records"===s.value)})},null,8,["sports","user","class"])]),(0,a._)("div",rl,[(0,a.Wm)(li,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("calendar"===s.value)})},null,8,["sports","user","class"]),(0,a.Wm)(is,{sports:(0,i.SU)(r),user:(0,i.SU)(n),class:(0,o.C_)({"is-hidden":!("timeline"===s.value)})},null,8,["sports","user","class"])])]),al])):((0,a.wg)(),(0,a.iD)("div",ol,[(0,a.Wm)(l)]))}}});const il=(0,P.Z)(sl,[["__scopeId","data-v-4c0893c1"]]);var ll=il,cl=n(8273);const ul={class:"not-found view"};var dl=(0,a.aZ)({__name:"NotFoundView",setup(e){return(e,t)=>((0,a.wg)(),(0,a.iD)("div",ul,[(0,a.Wm)(cl.Z)]))}});const ml=dl;var _l=ml,El=n(2411);const Sl={id:"loginOrRegister",class:"view"},Tl={class:"container"},pl={class:"container-sub"},Al={class:"container-sub"};var Ol=(0,a.aZ)({__name:"LoginOrRegister",props:{action:null},setup(e){const t=e,{action:n}=(0,i.BK)(t);return(e,t)=>((0,a.wg)(),(0,a.iD)("div",Sl,[(0,a._)("div",Tl,[(0,a._)("div",pl,[(0,a.Wm)(Oo)]),(0,a._)("div",Al,[(0,a.Wm)(El.Z,{action:(0,i.SU)(n)},null,8,["action"])])])]))}});const Rl=(0,P.Z)(Ol,[["__scopeId","data-v-6a38125b"]]);var Il=Rl;const Ul=e=>{const t=/(\/profile)(\/edit)*(\/*)/,n=e.replace(t,"").toUpperCase();return""===n?"PROFILE":n.toUpperCase()},gl=[{path:"/",name:"Dashboard",component:ll},{path:"/login",name:"Login",component:Il,props:{action:"login"}},{path:"/register",name:"Register",component:Il,props:{action:"register"}},{path:"/account-confirmation",name:"AccountConfirmation",component:()=>n.e(845).then(n.bind(n,4264))},{path:"/account-confirmation/resend",name:"AccountConfirmationResend",component:()=>n.e(24).then(n.bind(n,5639)),props:{action:"account-confirmation-resend"}},{path:"/account-confirmation/email-sent",name:"AccountConfirmationEmailSend",component:()=>n.e(24).then(n.bind(n,5639)),props:{action:"email-sent"}},{path:"/password-reset/sent",name:"PasswordEmailSent",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"request-sent"}},{path:"/password-reset/request",name:"PasswordResetRequest",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"reset-request"}},{path:"/password-reset/password-updated",name:"PasswordUpdated",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"password-updated"}},{path:"/password-reset",name:"PasswordReset",component:()=>n.e(24).then(n.bind(n,1627)),props:{action:"reset"}},{path:"/email-update",name:"EmailUpdate",component:()=>n.e(845).then(n.bind(n,8160))},{path:"/profile",name:"Profile",component:()=>n.e(845).then(n.bind(n,6266)),children:[{path:"",name:"UserProfile",component:Nt,props:e=>({tab:Ul(e.path)}),children:[{path:"",name:"UserInfos",component:ht.Z},{path:"preferences",name:"UserPreferences",component:Dt},{path:"sports",name:"UserSportPreferences",component:ja,props:{isEdition:!1}},{path:"apps",name:"UserApps",component:Xr,children:[{path:"",name:"UserAppsList",component:Ra},{path:":id",name:"UserApp",component:da},{path:":id/created",name:"CreatedUserApp",component:da,props:{afterCreation:!0}},{path:"new",name:"AddUserApp",component:Mr},{path:"authorize",name:"AuthorizeUserApp",component:Hr}]}]},{path:"edit",name:"UserProfileEdition",component:Mt,props:e=>({tab:Ul(e.path)}),children:[{path:"",name:"UserInfosEdition",component:Sn},{path:"account",name:"UserAccountEdition",component:Vt},{path:"picture",name:"UserPictureEdition",component:wn},{path:"preferences",name:"UserPreferencesEdition",component:ur},{path:"sports",name:"UserSportPreferencesEdition",component:ja,props:{isEdition:!0}}]}]},{path:"/statistics",name:"Statistics",component:()=>n.e(193).then(n.bind(n,7885))},{path:"/users/:username",name:"User",component:()=>n.e(845).then(n.bind(n,9453))},{path:"/workouts",name:"Workouts",component:()=>n.e(401).then(n.bind(n,5651))},{path:"/workouts/:workoutId",name:"Workout",component:()=>n.e(401).then(n.bind(n,4915)),props:{displaySegment:!1}},{path:"/workouts/:workoutId/edit",name:"EditWorkout",component:()=>n.e(401).then(n.bind(n,8237))},{path:"/workouts/:workoutId/segment/:segmentId",name:"WorkoutSegment",component:()=>n.e(401).then(n.bind(n,4915)),props:{displaySegment:!0}},{path:"/workouts/add",name:"AddWorkout",component:()=>n.e(401).then(n.bind(n,4189))},{path:"/admin",name:"Administration",component:()=>n.e(328).then(n.bind(n,6e3)),children:[{path:"",name:"AdministrationMenu",component:se},{path:"application",name:"ApplicationAdministration",component:M},{path:"application/edit",name:"ApplicationAdministrationEdition",component:M,props:{edition:!0}},{path:"sports",name:"SportsAdministration",component:De},{path:"users/:username",name:"UserFromAdmin",component:()=>n.e(845).then(n.bind(n,9453)),props:{fromAdmin:!0}},{path:"users",name:"UsersAdministration",component:mt}]},{path:"/about",name:"About",component:zo},{path:"/:pathMatch(.*)*",name:"not-found",component:_l}],Nl=(0,r.p7)({history:(0,r.PO)("/"),routes:gl}),hl=["/login","/password-reset","/password-reset/password-updated","/password-reset/request","/password-reset/sent","/register","/account-confirmation","/account-confirmation/resend","/account-confirmation/email-sent"],zl=["/email-update","/about"];Nl.beforeEach(((e,t,n)=>{Xa.Z.dispatch(l.YN.ACTIONS.CHECK_AUTH_USER).then((()=>{if(zl.includes(e.path))return n();if(Xa.Z.getters[l.YN.GETTERS.IS_AUTHENTICATED]&&hl.includes(e.path))return n("/");if(Xa.Z.getters[l.YN.GETTERS.IS_AUTHENTICATED]||hl.includes(e.path))n();else{const t="/"===e.path?{path:"/login"}:{path:"/login",query:{from:e.fullPath}};n(t)}})).catch((e=>{console.error(e),n()}))}));var wl=Nl},5801:function(e,t,n){"use strict";var r,a,o,s,i,l,c,u,d,m,_,E,S,T,p,A,O,R;n.d(t,{YN:function(){return h},Km:function(){return z},SY:function(){return U},O8:function(){return g},gu:function(){return N},RT:function(){return w},aX:function(){return f}}),function(e){e["CHECK_AUTH_USER"]="CHECK_AUTH_USER",e["CONFIRM_ACCOUNT"]="CONFIRM_ACCOUNT",e["CONFIRM_EMAIL"]="CONFIRM_EMAIL",e["DELETE_ACCOUNT"]="DELETE_ACCOUNT",e["DELETE_PICTURE"]="DELETE_PICTURE",e["GET_USER_PROFILE"]="GET_USER_PROFILE",e["LOGIN_OR_REGISTER"]="LOGIN_OR_REGISTER",e["LOGOUT"]="LOGOUT",e["SEND_PASSWORD_RESET_REQUEST"]="SEND_PASSWORD_RESET_REQUEST",e["RESEND_ACCOUNT_CONFIRMATION_EMAIL"]="RESEND_ACCOUNT_CONFIRMATION_EMAIL",e["RESET_USER_PASSWORD"]="RESET_USER_PASSWORD",e["RESET_USER_SPORT_PREFERENCES"]="RESET_USER_SPORT_PREFERENCES",e["UPDATE_USER_ACCOUNT"]="UPDATE_USER_ACCOUNT",e["UPDATE_USER_PICTURE"]="UPDATE_USER_PICTURE",e["UPDATE_USER_PROFILE"]="UPDATE_USER_PROFILE",e["UPDATE_USER_PREFERENCES"]="UPDATE_USER_PREFERENCES",e["UPDATE_USER_SPORT_PREFERENCES"]="UPDATE_USER_SPORT_PREFERENCES"}(r||(r={})),function(e){e["AUTH_TOKEN"]="AUTH_TOKEN",e["AUTH_USER_PROFILE"]="AUTH_USER_PROFILE",e["IS_ADMIN"]="IS_ADMIN",e["IS_AUTHENTICATED"]="IS_AUTHENTICATED",e["IS_SUCCESS"]="IS_SUCCESS",e["IS_REGISTRATION_SUCCESS"]="IS_REGISTRATION_SUCCESS",e["USER_LOADING"]="USER_LOADING"}(a||(a={})),function(e){e["CLEAR_AUTH_USER_TOKEN"]="CLEAR_AUTH_USER_TOKEN",e["UPDATE_AUTH_TOKEN"]="UPDATE_AUTH_TOKEN",e["UPDATE_AUTH_USER_PROFILE"]="UPDATE_AUTH_USER_PROFILE",e["UPDATE_IS_SUCCESS"]="UPDATE_USER_IS_SUCCESS",e["UPDATE_IS_REGISTRATION_SUCCESS"]="UPDATE_IS_REGISTRATION_SUCCESS",e["UPDATE_USER_LOADING"]="UPDATE_USER_LOADING"}(o||(o={})),function(e){e["AUTHORIZE_CLIENT"]="AUTHORIZE_CLIENT",e["CREATE_CLIENT"]="CREATE_CLIENT",e["DELETE_CLIENT"]="DELETE_CLIENT",e["GET_CLIENTS"]="GET_CLIENTS",e["GET_CLIENT_BY_CLIENT_ID"]="GET_CLIENT_BY_CLIENT_ID",e["GET_CLIENT_BY_ID"]="GET_CLIENT_BY_ID",e["REVOKE_ALL_TOKENS"]="REVOKE_ALL_TOKENS"}(s||(s={})),function(e){e["CLIENT"]="CLIENT",e["CLIENTS"]="CLIENTS",e["CLIENTS_PAGINATION"]="CLIENTS_PAGINATION",e["REVOCATION_SUCCESSFUL"]="REVOCATION_SUCCESSFUL"}(i||(i={})),function(e){e["EMPTY_CLIENT"]="EMPTY_CLIENT",e["SET_CLIENT"]="SET_CLIENT",e["SET_CLIENTS"]="SET_CLIENTS",e["SET_CLIENTS_PAGINATION"]="SET_CLIENTS_PAGINATION",e["SET_REVOCATION_SUCCESSFUL"]="SET_REVOCATION_SUCCESSFUL"}(l||(l={})),function(e){e["GET_APPLICATION_CONFIG"]="GET_APPLICATION_CONFIG",e["GET_APPLICATION_STATS"]="GET_APPLICATION_STATS",e["UPDATE_APPLICATION_CONFIG"]="UPDATE_APPLICATION_CONFIG",e["UPDATE_APPLICATION_LANGUAGE"]="UPDATE_APPLICATION_LANGUAGE"}(c||(c={})),function(e){e["APP_CONFIG"]="APP_CONFIG",e["APP_LOADING"]="APP_LOADING",e["APP_STATS"]="APP_STATS",e["ERROR_MESSAGES"]="ERROR_MESSAGES",e["LANGUAGE"]="LANGUAGE",e["LOCALE"]="LOCALE"}(u||(u={})),function(e){e["EMPTY_ERROR_MESSAGES"]="EMPTY_ERROR_MESSAGES",e["SET_ERROR_MESSAGES"]="SET_ERROR_MESSAGES",e["UPDATE_APPLICATION_CONFIG"]="UPDATE_APPLICATION_CONFIG",e["UPDATE_APPLICATION_LOADING"]="UPDATE_APPLICATION_LOADING",e["UPDATE_APPLICATION_STATS"]="UPDATE_APPLICATION_STATS",e["UPDATE_LANG"]="UPDATE_LANG"}(d||(d={})),function(e){e["GET_SPORTS"]="GET_SPORTS",e["UPDATE_SPORTS"]="UPDATE_SPORTS"}(m||(m={})),function(e){e["SPORTS"]="SPORTS"}(_||(_={})),function(e){e["SET_SPORTS"]="SET_SPORTS"}(E||(E={})),function(e){e["GET_USER_STATS"]="GET_USER_STATS"}(S||(S={})),function(e){e["USER_STATS"]="USER_STATS"}(T||(T={})),function(e){e["EMPTY_USER_STATS"]="EMPTY_USER_STATS",e["UPDATE_USER_STATS"]="UPDATE_USER_STATS"}(p||(p={})),function(e){e["EMPTY_USER"]="EMPTY_USER",e["EMPTY_USERS"]="EMPTY_USERS",e["GET_USER"]="GET_USER",e["GET_USERS"]="GET_USERS",e["UPDATE_USER"]="UPDATE_USER",e["DELETE_USER_ACCOUNT"]="DELETE_USER_ACCOUNT"}(A||(A={})),function(e){e["USER"]="USER",e["USERS"]="USERS",e["USERS_IS_SUCCESS"]="USERS_IS_SUCCESS",e["USERS_LOADING"]="USERS_LOADING",e["USERS_PAGINATION"]="USERS_PAGINATION"}(O||(O={})),function(e){e["UPDATE_USER"]="UPDATE_USER",e["UPDATE_USER_IN_USERS"]="UPDATE_USER_IN_USERS",e["UPDATE_USERS"]="UPDATE_USERS",e["UPDATE_USERS_LOADING"]="UPDATE_USERS_LOADING",e["UPDATE_USERS_PAGINATION"]="UPDATE_USERS_PAGINATION",e["UPDATE_IS_SUCCESS"]="UPDATE_IS_SUCCESS"}(R||(R={}));var I=n(52);const U={ACTIONS:c,GETTERS:u,MUTATIONS:d},g={ACTIONS:m,GETTERS:_,MUTATIONS:E},N={ACTIONS:S,GETTERS:T,MUTATIONS:p},h={ACTIONS:r,GETTERS:a,MUTATIONS:o},z={ACTIONS:s,GETTERS:i,MUTATIONS:l},w={ACTIONS:A,GETTERS:O,MUTATIONS:R},f={ACTIONS:I.tW,GETTERS:I.JP,MUTATIONS:I.CW}},2894:function(e,t,n){"use strict";n.d(t,{Z:function(){return me}});var r=n(3907),a=(n(7658),n(5167)),o=n(9669),s=n.n(o),i=n(8566),l=n(2024);const c=s().create({baseURL:(0,l.k)()});c.interceptors.request.use((e=>{const t=new AbortController;e.signal=t.signal;const n=(0,i.a)(e);return i.j.set(n,t),e}),(e=>Promise.reject(e))),c.interceptors.response.use((e=>((0,i.a)(e.config),e)),(e=>("canceled"!==e.message&&(0,i.a)(e.response.config),Promise.reject(e))));var u=c,d=n(5073),m=n(5801);const _=(e,t)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z["delete"](`users/${t.username}`).then((n=>{204===n.status?t.fromAdmin?d.Z.push("/admin/users"):e.dispatch(m.YN.ACTIONS.LOGOUT).then((()=>d.Z.push("/"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},E={[m.RT.ACTIONS.EMPTY_USER](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USER,{})},[m.RT.ACTIONS.EMPTY_USERS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS,[]),e.commit(m.RT.MUTATIONS.UPDATE_USERS_PAGINATION,{})},[m.RT.ACTIONS.GET_USER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!0),a.Z.get(`users/${t}`).then((t=>{"success"===t.data.status?e.commit(m.RT.MUTATIONS.UPDATE_USER,t.data.data.users[0]):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.GET_USERS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!0),a.Z.get("users",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.RT.MUTATIONS.UPDATE_USERS,t.data.data.users),e.commit(m.RT.MUTATIONS.UPDATE_USERS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.UPDATE_USER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1);const n={};void 0!==t.admin&&(n.admin=t.admin),t.resetPassword&&(n.reset_password=t.resetPassword),t.activate&&(n.activate=t.activate),void 0!==t.new_email&&(n.new_email=t.new_email),a.Z.patch(`users/${t.username}`,n).then((n=>{"success"===n.data.status?(e.commit(m.RT.MUTATIONS.UPDATE_USER_IN_USERS,n.data.data.users[0]),(t.resetPassword||t.new_email)&&e.commit(m.RT.MUTATIONS.UPDATE_IS_SUCCESS,!0),(t.activate||t.new_email)&&e.commit(m.RT.MUTATIONS.UPDATE_USER,n.data.data.users[0])):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.RT.MUTATIONS.UPDATE_USERS_LOADING,!1)))},[m.RT.ACTIONS.DELETE_USER_ACCOUNT](e,t){_(e,{username:t.username,fromAdmin:!0})}},S=e=>{localStorage.removeItem("authToken"),e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.gu.MUTATIONS.EMPTY_USER_STATS),e.commit(m.YN.MUTATIONS.CLEAR_AUTH_USER_TOKEN),e.commit(m.RT.MUTATIONS.UPDATE_USERS,[]),e.commit(m.aX.MUTATIONS.EMPTY_WORKOUTS),e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),d.Z.push("/login")},T={[m.YN.ACTIONS.CHECK_AUTH_USER](e){window.localStorage.authToken&&!e.getters[m.YN.GETTERS.IS_AUTHENTICATED]&&(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,window.localStorage.authToken),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE)),!window.localStorage.authToken&&e.getters[m.YN.GETTERS.IS_AUTHENTICATED]&&S(e)},[m.YN.ACTIONS.CONFIRM_ACCOUNT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/account/confirm",{token:t.token}).then((t=>{if("success"===t.data.status){const n=t.data.auth_token;window.localStorage.setItem("authToken",n),e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,n),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/")))}else(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t)}))},[m.YN.ACTIONS.CONFIRM_EMAIL](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),u.post("/auth/email/update",{token:t.token}).then((n=>{"success"===n.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!0),t.refreshUser&&e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile/edit/account"))),d.Z.push("/profile/edit/account")):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t)}))},[m.YN.ACTIONS.GET_USER_PROFILE](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("auth/profile").then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),t.data.data.language&&e.dispatch(m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,t.data.data.language),e.dispatch(m.O8.ACTIONS.GET_SPORTS)):((0,l.S)(e,null),S(e))})).catch((t=>{"canceled"!==t.message&&((0,l.S)(e,t),S(e))}))},[m.YN.ACTIONS.LOGIN_OR_REGISTER](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!1),u.post(`/auth/${t.actionType}`,t.formData).then((n=>{if("success"===n.data.status)if("login"===t.actionType){const r=n.data.auth_token;window.localStorage.setItem("authToken",r),e.commit(m.YN.MUTATIONS.UPDATE_AUTH_TOKEN,r),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("string"===typeof t.redirectUrl?t.redirectUrl:"/")))}else d.Z.push("/login").then((()=>e.commit(m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!0)));else(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.LOGOUT](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.post("auth/logout").then((t=>{"success"===t.data.status?S(e):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.UPDATE_USER_PROFILE](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),d.Z.push("/profile")):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.UPDATE_USER_ACCOUNT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),a.Z.patch("auth/profile/edit/account",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),e.commit(m.YN.MUTATIONS.UPDATE_IS_SUCCESS,!0)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.UPDATE_USER_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit/preferences",t).then((t=>{"success"===t.data.status?(e.commit(m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE,t.data.data),e.dispatch(m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE,t.data.data.language).then((()=>d.Z.push("/profile/preferences")))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.RESET_USER_SPORT_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z["delete"](`auth/profile/reset/sports/${t}`).then((t=>{204===t.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)}))},[m.YN.ACTIONS.UPDATE_USER_SPORT_PREFERENCES](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z.post("auth/profile/edit/sports",t).then((t=>{"success"===t.data.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>{(0,l.S)(e,t),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)}))},[m.YN.ACTIONS.UPDATE_USER_PICTURE](e,t){if(e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),!t.picture)throw new Error("No file part");const n=new FormData;n.append("file",t.picture),a.Z.post("auth/picture",n,{headers:{"content-type":"multipart/form-data"}}).then((t=>{"success"===t.data.status?e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.DELETE_ACCOUNT](e,t){_(e,t)},[m.YN.ACTIONS.DELETE_PICTURE](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!0),a.Z["delete"]("auth/picture").then((t=>{204===t.status?e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE).then((()=>d.Z.push("/profile"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)))},[m.YN.ACTIONS.SEND_PASSWORD_RESET_REQUEST](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/password/reset-request",t).then((t=>{"success"===t.data.status?d.Z.push("/password-reset/sent"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/account/resend-confirmation",t).then((t=>{"success"===t.data.status?d.Z.push("/account-confirmation/email-sent"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.YN.ACTIONS.RESET_USER_PASSWORD](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),u.post("auth/password/update",t).then((t=>{"success"===t.data.status?d.Z.push("/password-reset/password-updated"):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},p={[m.YN.GETTERS.AUTH_TOKEN]:e=>e.authToken,[m.YN.GETTERS.AUTH_USER_PROFILE]:e=>e.authUserProfile,[m.YN.GETTERS.IS_AUTHENTICATED]:e=>null!==e.authToken,[m.YN.GETTERS.IS_ADMIN]:e=>e.authUserProfile&&e.authUserProfile.admin,[m.YN.GETTERS.IS_REGISTRATION_SUCCESS]:e=>e.isRegistrationSuccess,[m.YN.GETTERS.IS_SUCCESS]:e=>e.isSuccess,[m.YN.GETTERS.USER_LOADING]:e=>e.loading},A={[m.YN.MUTATIONS.CLEAR_AUTH_USER_TOKEN](e){e.authToken=null,e.authUserProfile={}},[m.YN.MUTATIONS.UPDATE_AUTH_TOKEN](e,t){e.authToken=t},[m.YN.MUTATIONS.UPDATE_AUTH_USER_PROFILE](e,t){e.authUserProfile=t},[m.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS](e,t){e.isRegistrationSuccess=t},[m.YN.MUTATIONS.UPDATE_IS_SUCCESS](e,t){e.isSuccess=t},[m.YN.MUTATIONS.UPDATE_USER_LOADING](e,t){e.loading=t}},O={authToken:null,authUserProfile:{},isSuccess:!1,isRegistrationSuccess:!1,loading:!1},R={state:O,actions:T,getters:p,mutations:A};var I=R;const U=(e,t)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get(t).then((t=>{"success"===t.data.status?e.commit(m.Km.MUTATIONS.SET_CLIENT,t.data.data.client):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},g={[m.Km.ACTIONS.AUTHORIZE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES);const n=new FormData;n.set("client_id",t.client_id),n.set("response_type",t.response_type),n.set("scope",t.scope),n.set("confirm","true"),t.state&&n.set("state",t.state),t.code_challenge&&n.set("code_challenge",t.code_challenge),t.code_challenge_method&&n.set("code_challenge_method",t.code_challenge_method),a.Z.post("oauth/authorize",n,{headers:{"Content-Type":"multipart/form-data"}}).then((t=>{200==t.status&&t.data.redirect_url?window.location.href=t.data.redirect_url:(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.CREATE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.post("oauth/apps",t).then((t=>{"created"===t.data.status?(e.commit(m.Km.MUTATIONS.SET_CLIENT,t.data.data.client),d.Z.push(`/profile/apps/${t.data.data.client.id}/created`)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.DELETE_CLIENT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z["delete"](`oauth/apps/${t}`).then((t=>{204===t.status?e.dispatch(m.Km.ACTIONS.GET_CLIENTS).then((()=>d.Z.push("/profile/apps"))):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.GET_CLIENT_BY_CLIENT_ID](e,t){U(e,`oauth/apps/${t}`)},[m.Km.ACTIONS.GET_CLIENT_BY_ID](e,t){U(e,`oauth/apps/${t}/by_id`)},[m.Km.ACTIONS.GET_CLIENTS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("oauth/apps",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.Km.MUTATIONS.SET_CLIENTS,t.data.data.clients),e.commit(m.Km.MUTATIONS.SET_CLIENTS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.Km.ACTIONS.REVOKE_ALL_TOKENS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!1),a.Z.post(`oauth/apps/${t}/revoke`).then((t=>{"success"===t.data.status?e.commit(m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL,!0):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},N={[m.Km.GETTERS.CLIENT]:e=>e.client,[m.Km.GETTERS.CLIENTS]:e=>e.clients,[m.Km.GETTERS.CLIENTS_PAGINATION]:e=>e.pagination,[m.Km.GETTERS.REVOCATION_SUCCESSFUL]:e=>e.revocationSuccessful},h={[m.Km.MUTATIONS.SET_CLIENT](e,t){e.client=t},[m.Km.MUTATIONS.EMPTY_CLIENT](e){e.client={}},[m.Km.MUTATIONS.SET_CLIENTS](e,t){e.clients=t},[m.Km.MUTATIONS.SET_CLIENTS_PAGINATION](e,t){e.pagination=t},[m.Km.MUTATIONS.SET_REVOCATION_SUCCESSFUL](e,t){e.revocationSuccessful=t}},z={client:{},clients:[],pagination:{},revocationSuccessful:!1},w={state:z,actions:g,getters:N,mutations:h};var f=w,v=n(2540);const{locale:C}=v.Z.global,D={[m.SY.ACTIONS.GET_APPLICATION_CONFIG](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING,!0),a.Z.get("config").then((t=>{"success"===t.data.status?e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG,t.data.data):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t))).finally((()=>e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING,!1)))},[m.SY.ACTIONS.GET_APPLICATION_STATS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("stats/all").then((t=>{"success"===t.data.status?e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_STATS,t.data.data):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.SY.ACTIONS.UPDATE_APPLICATION_CONFIG](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.patch("config",t).then((t=>{"success"===t.data.status?(e.commit(m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG,t.data.data),d.Z.push("/admin/application")):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.SY.ACTIONS.UPDATE_APPLICATION_LANGUAGE](e,t){document.querySelector("html")?.setAttribute("lang",t),e.commit(m.SY.MUTATIONS.UPDATE_LANG,t),C.value=t}},k={[m.SY.GETTERS.APP_CONFIG]:e=>e.application.config,[m.SY.GETTERS.APP_LOADING]:e=>e.appLoading,[m.SY.GETTERS.APP_STATS]:e=>e.application.statistics,[m.SY.GETTERS.ERROR_MESSAGES]:e=>e.errorMessages,[m.SY.GETTERS.LANGUAGE]:e=>e.language,[m.SY.GETTERS.LOCALE]:e=>e.locale};var P=n(6287);const L={[m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES](e){e.errorMessages=null},[m.SY.MUTATIONS.SET_ERROR_MESSAGES](e,t){e.errorMessages=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_CONFIG](e,t){e.application.config=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_LOADING](e,t){e.appLoading=t},[m.SY.MUTATIONS.UPDATE_APPLICATION_STATS](e,t){e.application.statistics=t},[m.SY.MUTATIONS.UPDATE_LANG](e,t){e.language=t,e.locale=P.v1[t]}};var M=n(5826);const b={root:!0,language:"en",locale:M.Z,errorMessages:null,application:{statistics:{sports:0,uploads_dir_size:0,users:0,workouts:0}},appLoading:!1},y={[m.O8.ACTIONS.GET_SPORTS](e){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("sports").then((t=>{"success"===t.data.status?(e.commit(m.O8.MUTATIONS.SET_SPORTS,t.data.data.sports),e.commit(m.YN.MUTATIONS.UPDATE_USER_LOADING,!1)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},[m.O8.ACTIONS.UPDATE_SPORTS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.patch(`sports/${t.id}`,{is_active:t.isActive}).then((t=>{"success"===t.data.status?e.dispatch(m.O8.ACTIONS.GET_SPORTS):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},G={[m.O8.GETTERS.SPORTS]:e=>e.sports},F={[m.O8.MUTATIONS.SET_SPORTS](e,t){e.sports=t}},W={sports:[]},K={state:W,actions:y,getters:G,mutations:F};var Y=K;const x={[m.gu.ACTIONS.GET_USER_STATS](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get(`stats/${t.username}/${t.filterType}`,{params:t.params}).then((t=>{"success"===t.data.status?e.commit(m.gu.MUTATIONS.UPDATE_USER_STATS,t.data.data.statistics):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))}},$={[m.gu.GETTERS.USER_STATS]:e=>e.statistics},B={[m.gu.MUTATIONS.UPDATE_USER_STATS](e,t){e.statistics=t},[m.gu.MUTATIONS.EMPTY_USER_STATS](e){e.statistics={}}},Z={statistics:{}},H={state:Z,actions:x,getters:$,mutations:B};var q=H;const V={[m.RT.GETTERS.USER]:e=>e.user,[m.RT.GETTERS.USERS]:e=>e.users,[m.RT.GETTERS.USERS_IS_SUCCESS]:e=>e.isSuccess,[m.RT.GETTERS.USERS_LOADING]:e=>e.loading,[m.RT.GETTERS.USERS_PAGINATION]:e=>e.pagination},j={[m.RT.MUTATIONS.UPDATE_USER](e,t){e.user=t},[m.RT.MUTATIONS.UPDATE_USER_IN_USERS](e,t){e.users=e.users.map((e=>e.username===t.username?t:e))},[m.RT.MUTATIONS.UPDATE_USERS](e,t){e.users=t},[m.RT.MUTATIONS.UPDATE_USERS_LOADING](e,t){e.loading=t},[m.RT.MUTATIONS.UPDATE_USERS_PAGINATION](e,t){e.pagination=t},[m.RT.MUTATIONS.UPDATE_IS_SUCCESS](e,t){e.isSuccess=t}},X={user:{},users:[],loading:!1,isSuccess:!1,pagination:{}},J={state:X,actions:E,getters:V,mutations:j};var Q=J,ee=n(52);const te=(e,t,n)=>{e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),a.Z.get("workouts",{params:t}).then((t=>{"success"===t.data.status?(e.commit(m.aX.MUTATIONS[n],t.data.data.workouts),n===ee.CW.SET_USER_WORKOUTS&&e.commit(m.aX.MUTATIONS.SET_WORKOUTS_PAGINATION,t.data.pagination)):(0,l.S)(e,null)})).catch((t=>(0,l.S)(e,t)))},ne={[m.aX.ACTIONS.GET_CALENDAR_WORKOUTS](e,t){e.commit(m.aX.MUTATIONS.EMPTY_CALENDAR_WORKOUTS),te(e,t,ee.CW.SET_CALENDAR_WORKOUTS)},[m.aX.ACTIONS.GET_USER_WORKOUTS](e,t){te(e,t,ee.CW.SET_USER_WORKOUTS)},[m.aX.ACTIONS.GET_TIMELINE_WORKOUTS](e,t){te(e,t,ee.CW.SET_TIMELINE_WORKOUTS)},[m.aX.ACTIONS.GET_MORE_TIMELINE_WORKOUTS](e,t){te(e,t,ee.CW.ADD_TIMELINE_WORKOUTS)},[m.aX.ACTIONS.GET_WORKOUT_DATA](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0);const n=t.segmentId?`/segment/${t.segmentId}`:"";a.Z.get(`workouts/${t.workoutId}`).then((r=>{const o=r.data.data.workouts[0];if("success"===r.data.status){if(t.segmentId&&(0===o.segments.length||!o.segments[+t.segmentId-1]))throw new Error("WORKOUT_NOT_FOUND");e.commit(m.aX.MUTATIONS.SET_WORKOUT,r.data.data.workouts[0]),r.data.data.workouts[0].with_gpx&&(a.Z.get(`workouts/${t.workoutId}/chart_data${n}`).then((t=>{"success"===t.data.status&&e.commit(m.aX.MUTATIONS.SET_WORKOUT_CHART_DATA,t.data.data.chart_data)})),a.Z.get(`workouts/${t.workoutId}/gpx${n}`).then((t=>{"success"===t.data.status&&e.commit(m.aX.MUTATIONS.SET_WORKOUT_GPX,t.data.data.gpx)})))}else e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),(0,l.S)(e,null)})).catch((t=>{e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.DELETE_WORKOUT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z["delete"](`workouts/${t.workoutId}`).then((()=>{e.commit(m.aX.MUTATIONS.EMPTY_WORKOUT),e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE),d.Z.push("/")})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.EDIT_WORKOUT](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z.patch(`workouts/${t.workoutId}`,t.data).then((()=>{e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE),e.dispatch(m.aX.ACTIONS.GET_WORKOUT_DATA,{workoutId:t.workoutId}).then((()=>{d.Z.push({name:"Workout",params:{workoutId:t.workoutId}})}))})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.ADD_WORKOUT](e,t){if(e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),!t.file)throw new Error("No file part");const n=new FormData;n.append("file",t.file),n.append("data",`{"sport_id": ${t.sport_id}, "notes": "${t.notes}"}`),a.Z.post("workouts",n,{headers:{"content-type":"multipart/form-data"}}).then((t=>{if("created"===t.data.status){e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE);const n=t.data.data.workouts[0];d.Z.push(1===t.data.data.workouts.length?`/workouts/${n.id}`:"/")}})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))},[m.aX.ACTIONS.ADD_WORKOUT_WITHOUT_GPX](e,t){e.commit(m.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!0),a.Z.post("workouts/no_gpx",t).then((t=>{if("created"===t.data.status){e.dispatch(m.YN.ACTIONS.GET_USER_PROFILE);const n=t.data.data.workouts[0];d.Z.push(`/workouts/${n.id}`)}})).catch((t=>{(0,l.S)(e,t)})).finally((()=>e.commit(m.aX.MUTATIONS.SET_WORKOUT_LOADING,!1)))}},re={[m.aX.GETTERS.CALENDAR_WORKOUTS]:e=>e.calendar_workouts,[m.aX.GETTERS.TIMELINE_WORKOUTS]:e=>e.timeline_workouts,[m.aX.GETTERS.USER_WORKOUTS]:e=>e.user_workouts,[m.aX.GETTERS.WORKOUT_DATA]:e=>e.workoutData,[m.aX.GETTERS.WORKOUTS_PAGINATION]:e=>e.pagination},ae={[m.aX.MUTATIONS.ADD_TIMELINE_WORKOUTS](e,t){e.timeline_workouts=e.timeline_workouts.concat(t)},[m.aX.MUTATIONS.SET_CALENDAR_WORKOUTS](e,t){e.calendar_workouts=t},[m.aX.MUTATIONS.SET_TIMELINE_WORKOUTS](e,t){e.timeline_workouts=t},[m.aX.MUTATIONS.SET_USER_WORKOUTS](e,t){e.user_workouts=t},[m.aX.MUTATIONS.SET_WORKOUTS_PAGINATION](e,t){e.pagination=t},[m.aX.MUTATIONS.SET_WORKOUT](e,t){e.workoutData.workout=t},[m.aX.MUTATIONS.SET_WORKOUT_CHART_DATA](e,t){e.workoutData.chartData=t},[m.aX.MUTATIONS.SET_WORKOUT_GPX](e,t){e.workoutData.gpx=t},[m.aX.MUTATIONS.SET_WORKOUT_LOADING](e,t){e.workoutData.loading=t},[m.aX.MUTATIONS.EMPTY_CALENDAR_WORKOUTS](e){e.calendar_workouts=[]},[m.aX.MUTATIONS.EMPTY_WORKOUTS](e){e.calendar_workouts=[],e.user_workouts=[],e.timeline_workouts=[]},[m.aX.MUTATIONS.EMPTY_WORKOUT](e){e.workoutData={gpx:"",loading:!1,workout:{},chartData:[]}}},oe={calendar_workouts:[],timeline_workouts:[],pagination:{},user_workouts:[],workoutData:{gpx:"",loading:!1,workout:{},chartData:[]}},se={state:oe,actions:ne,getters:re,mutations:ae};var ie=se;const le={authUserModule:I,oAuthModule:f,sportsModule:Y,statsModule:q,usersModule:Q,workoutsModule:ie},ce={state:b,actions:D,getters:k,mutations:L,modules:le};var ue=ce;const de=(0,r.MT)(ue);var me=de},52:function(e,t,n){"use strict";var r,a,o;n.d(t,{CW:function(){return o},JP:function(){return a},tW:function(){return r}}),function(e){e["ADD_WORKOUT"]="ADD_WORKOUT",e["ADD_WORKOUT_WITHOUT_GPX"]="ADD_WORKOUT_WITHOUT_GPX",e["DELETE_WORKOUT"]="DELETE_WORKOUT",e["EDIT_WORKOUT"]="EDIT_WORKOUT",e["GET_CALENDAR_WORKOUTS"]="GET_CALENDAR_WORKOUTS",e["GET_USER_WORKOUTS"]="GET_USER_WORKOUTS",e["GET_TIMELINE_WORKOUTS"]="GET_TIMELINE_WORKOUTS",e["GET_MORE_TIMELINE_WORKOUTS"]="GET_MORE_TIMELINE_WORKOUTS",e["GET_WORKOUT_DATA"]="GET_WORKOUT_DATA"}(r||(r={})),function(e){e["CALENDAR_WORKOUTS"]="CALENDAR_WORKOUTS",e["TIMELINE_WORKOUTS"]="TIMELINE_WORKOUTS",e["USER_WORKOUTS"]="USER_WORKOUTS",e["WORKOUT_DATA"]="WORKOUT_DATA",e["WORKOUTS_PAGINATION"]="WORKOUTS_PAGINATION"}(a||(a={})),function(e){e["ADD_TIMELINE_WORKOUTS"]="ADD_TIMELINE_WORKOUTS",e["EMPTY_WORKOUTS"]="EMPTY_WORKOUTS",e["EMPTY_CALENDAR_WORKOUTS"]="EMPTY_CALENDAR_WORKOUTS",e["EMPTY_WORKOUT"]="EMPTY_WORKOUT",e["SET_CALENDAR_WORKOUTS"]="SET_CALENDAR_WORKOUTS",e["SET_TIMELINE_WORKOUTS"]="SET_TIMELINE_WORKOUTS",e["SET_USER_WORKOUTS"]="SET_USER_WORKOUTS",e["SET_WORKOUT"]="SET_WORKOUT",e["SET_WORKOUT_GPX"]="SET_WORKOUT_GPX",e["SET_WORKOUT_CHART_DATA"]="SET_WORKOUT_CHART_DATA",e["SET_WORKOUT_LOADING"]="SET_WORKOUT_LOADING",e["SET_WORKOUTS_PAGINATION"]="SET_WORKOUTS_PAGINATION"}(o||(o={}))},9917:function(e,t,n){"use strict";n.d(t,{o:function(){return a}});var r=n(3907);function a(){return(0,r.oR)()}},2766:function(e,t,n){"use strict";n.d(t,{Hf:function(){return a},Ne:function(){return c},fS:function(){return r},lM:function(){return d},pm:function(){return l},z_:function(){return s}});const r=["asc","desc"],a=1,o=10,s=(e,t)=>e&&"string"===typeof e&&+e>0?+e:t,i=(e,t,n)=>e&&"string"===typeof e&&t.includes(e)?e:n,l=(e,t,n,l)=>{const c=l||{},u=c.defaultSort||"asc",d={};return d.page=s(e.page,a),d.per_page=s(e.per_page,o),d.order=i(e.order,r,u),d.order_by=i(e.order_by,t,n),"string"===typeof e.q?d.q=e.q:delete d.q,d},c=["from","to","ave_speed_from","ave_speed_to","max_speed_from","max_speed_to","distance_from","distance_to","duration_from","duration_to","sport_id"],u=(e,t=1)=>Array.from({length:e-t+1},((e,n)=>t+n)),d=(e,t)=>{if(e<0)return[];if(e<9)return u(e);let n=[1,2];return t<4?n=n.concat([3,4,5]):t<6?n=n.concat(u(t+2,3)):(n=n.concat(["..."]),t=e-2&&n[n.length-1]{switch(e){case"week":return(0,r.Z)(t,{weekStartsOn:n?1:0});case"year":return(0,a.Z)(t);case"month":return(0,o.Z)(t);default:throw new Error(`Invalid duration, expected: "week", "month", "year", got: "${e}"`)}},p=(e,t)=>{switch(e){case"week":return(0,s.Z)(t,7);case"year":return(0,i.Z)(t,1);case"month":return(0,l.Z)(t,1);default:throw new Error(`Invalid duration, expected: "week", "month", "year", got: "${e}"`)}},A=(e,t)=>(0,m.utcToZonedTime)(new Date(e),t),O=(e,t)=>{const n=(0,o.Z)(e),a=(0,c.Z)(e),s=t?1:0;return{start:(0,r.Z)(n,{weekStartsOn:s}),end:(0,u.Z)(a,{weekStartsOn:s})}},R=(e,t=null,n=null)=>(t||(t="yyyy/MM/dd"),t=g(t,S.value),n||(n="HH:mm"),{workout_date:(0,d.Z)(e,t,{locale:E.v1[S.value]}),workout_time:(0,d.Z)(e,n)}),I=["MM/dd/yyyy","dd/MM/yyyy","yyyy-MM-dd","date_string"],U={de:"do MMM yyyy",en:"MMM. do, yyyy",fr:"d MMM yyyy"},g=(e,t)=>"date_string"===e?U[t]:e,N=(e,t,n,r=!0,a=null)=>(a||(a=S.value),(0,d.Z)(A(e,t),`${g(n,a)}${r?" HH:mm":""}`,{locale:E.v1[a]})),h=(e,t,n=null)=>{const r=n||S.value,a=[];return I.map((n=>{const o=g(n,r);a.push({label:`${o} - ${N(e,t,o,!1,r)}`,value:n})})),a}},8966:function(e,t,n){"use strict";n.d(t,{Z:function(){return a},j:function(){return o}});const r=["bytes","KB","MB","GB","TB"],a=(e,t=!0)=>{const n=Math.floor(Math.log(e)/Math.log(1024));if(!e)return t?"0 bytes":{size:"0",suffix:"bytes"};const a=(e/Math.pow(1024,n)).toFixed(1),o=r[n];return t?`${a}${o}`:{size:a,suffix:o}},o=e=>{const t=e/1048576;return+t.toFixed(2)}},2024:function(e,t,n){"use strict";n.d(t,{S:function(){return o},k:function(){return a}});var r=n(5801);const a=()=>"/api/",o=(e,t,n="UNKNOWN")=>{if(t&&"canceled"===t.message)return;if(401===t?.response?.status&&"invalid_token"===t.response.data.error)return localStorage.removeItem("authToken"),void e.dispatch(r.YN.ACTIONS.CHECK_AUTH_USER);const a=t?t.response?413===t.response.status?"file size is greater than the allowed size":t.response.data.message?t.response.data.message:n:t.message?t.message:n:n;e.commit(r.SY.MUTATIONS.SET_ERROR_MESSAGES,a.includes("\n")?a.split("\n").filter((e=>""!==e)).map((e=>`api.ERROR.${e}`)):`api.ERROR.${a}`)}},6287:function(e,t,n){"use strict";n.d(t,{mT:function(){return u},v1:function(){return i},zK:function(){return l}});var r=n(879),a=n(5826),o=n(5830),s=n(2540);const i={de:r.Z,en:a.Z,fr:o.Z},l={de:"Deutsch",en:"English",fr:"Français"},{availableLocales:c}=s.Z.global,u=c.map((e=>({label:l[e],value:e})))},631:function(e,t,n){"use strict";n.d(t,{CM:function(){return l},PA:function(){return i},Yx:function(){return a},Zo:function(){return r},xH:function(){return s}});const r={"Cycling (Sport)":"#4c9792","Cycling (Transport)":"#88af98","Cycling (Virtual)":"#64a360",Hiking:"#bb757c","Mountain Biking":"#d4b371","Mountain Biking (Electric)":"#fc9d6f",Rowing:"#fcce72",Running:"#835b83","Skiing (Alpine)":"#67a4bd","Skiing (Cross Country)":"#9498d0",Snowshoes:"#5780a8",Trail:"#09a98a",Walking:"#838383"},a=e=>{const t={};return e.map((e=>t[e.id]=e.color?e.color:r[e.label])),t},o=(e,t)=>{const n=e.translatedLabel.toLowerCase(),r=t.translatedLabel.toLowerCase();return n>r?1:ne.filter((e=>"all"===n||(r.includes(e.id)||e[n]))).map((e=>({...e,translatedLabel:t(`sports.${e.label}.LABEL`)}))).sort(o),i=(e,t)=>t.filter((t=>t.id===e.sport_id)).map((e=>e.label))[0],l=(e,t)=>t.filter((t=>t.id===e.sport_id)).map((e=>e.color))[0]},9318:function(e,t,n){"use strict";n.d(t,{FN:function(){return C},aZ:function(){return v},v1:function(){return f}});n(7658);var r=n(4850),a=n(8148),o=n(9319),s=n(584),i=n(4559),l=n(3703),c=n(876),u=n(7090),d=n(4135),m=n(1593),_=n(7982),E=n(3500),S=n(1640),T=n(2540),p=n(6558),A=n(6287),O=n(631),R=n(3649);const{locale:I}=T.Z.global,U={week:{api:"yyyy-MM-dd",chart:"MM/dd/yyyy"},month:{api:"yyyy-MM",chart:"MM/yyyy"},year:{api:"yyyy",chart:"yyyy"}},g=["average_speed","nb_workouts","total_duration","total_distance","total_ascent","total_descent"],N=(e,t)=>{const n=[];for(let r=(0,p.Nh)(e.duration,e.start,t);r<=e.end;r=(0,p.xA)(e.duration,r))n.push(r);return n},h=(e,t,n=!1)=>{const r={label:e,backgroundColor:[t],data:[]};return n&&(r.type="line",r.borderColor=[t],r.spanGaps=!0),r},z=e=>{const t={average_speed:[],nb_workouts:[],total_distance:[],total_duration:[],total_ascent:[],total_descent:[]};return e.map((e=>{const n=e.color?e.color:O.Zo[e.label];t.average_speed.push(h(e.label,n,!0)),t.nb_workouts.push(h(e.label,n)),t.total_distance.push(h(e.label,n)),t.total_duration.push(h(e.label,n)),t.total_ascent.push(h(e.label,n)),t.total_descent.push(h(e.label,n))})),t},w=(e,t,n)=>{switch(e){case"average_speed":case"total_distance":case"total_ascent":case"total_descent":return(0,R.f3)(["average_speed","total_distance"].includes(e)?"km":"m",t,n);default:case"nb_workouts":case"total_duration":return t}},f=(e,t,n,a,o,s,i)=>{const l=N(e,t),c=U[e.duration],u=n.filter((e=>a.includes(e.id))),d=[],m=z(u),_={};return u.map((e=>_[e.label]=e.id)),l.map((t=>{const n=(0,r.Z)(t,c.api),a=(0,r.Z)(t,"week"===e.duration?(0,p.mh)(i,I.value):c.chart,{locale:A.v1[I.value]});d.push(a),g.map((e=>{m[e].map((t=>{t.data.push(n in o&&_[t.label]in o[n]?w(e,o[n][_[t.label]][e],s):"average_speed"===e?null:0)}))}))})),{labels:d,datasets:m}},v=(e,t,n)=>{const r=n?1:0,m="year"===t?(0,a.Z)((0,o.Z)(e,9)):"week"===t?(0,s.Z)((0,i.Z)(e,2),{weekStartsOn:r}):(0,l.Z)((0,i.Z)(e,11)),_="year"===t?(0,c.Z)(e):"week"===t?(0,u.Z)(e,{weekStartsOn:r}):(0,d.Z)(e);return{duration:t,end:_,start:m}},C=(e,t,n)=>{const{duration:r,start:T,end:p}=e,A=n?1:0;return{duration:r,end:"year"===r?(0,c.Z)(t?(0,o.Z)(p,1):(0,m.Z)(p,1)):"week"===r?(0,u.Z)(t?(0,_.Z)(p,1):(0,E.Z)(p,1),{weekStartsOn:A}):(0,d.Z)(t?(0,i.Z)(p,1):(0,S.Z)(p,1)),start:"year"===r?(0,a.Z)(t?(0,o.Z)(T,1):(0,m.Z)(T,1)):"week"===r?(0,s.Z)(t?(0,_.Z)(T,1):(0,E.Z)(T,1),{weekStartsOn:A}):(0,l.Z)(t?(0,i.Z)(T,1):(0,S.Z)(T,1))}}},3649:function(e,t,n){"use strict";n.d(t,{Dl:function(){return r},f3:function(){return s},sC:function(){return o}});const r={ft:{unit:"ft",system:"imperial",multiplier:1,defaultTarget:"m"},mi:{unit:"mi",system:"imperial",multiplier:5280,defaultTarget:"km"},m:{unit:"m",system:"metric",multiplier:1,defaultTarget:"ft"},km:{unit:"m",system:"metric",multiplier:1e3,defaultTarget:"mi"}},a={metric:{imperial:3.280839895,metric:1},imperial:{metric:1/3.280839895,imperial:1}},o=(e,t,n,o=3)=>{const s=r[t],i=r[n],l=e*s.multiplier*a[s.system][i.system]/i.multiplier;return null!==o?parseFloat(l.toFixed(o)):l},s=(e,t,n)=>{const a=n?r[e].defaultTarget:e;return n?o(t,e,a,2):t}},3768:function(e,t,n){"use strict";n.d(t,{BN:function(){return o},EX:function(){return a},eR:function(){return s}});n(7658);var r=n(3649);const a=(e,t,n)=>{const a={speed:{label:t("workouts.SPEED"),backgroundColor:["#FFFFFF"],borderColor:["#8884d8"],borderWidth:2,data:[],yAxisID:"ySpeed"},elevation:{label:t("workouts.ELEVATION"),backgroundColor:["#e5e5e5"],borderColor:["#cccccc"],borderWidth:1,fill:!0,data:[],yAxisID:"yElevation"}},o=[],s=[],i=[];return e.map((e=>{o.push(e.distance),s.push(e.duration),a.speed.data.push((0,r.f3)("km",e.speed,n)),a.elevation.data.push((0,r.f3)("m",e.elevation,n)),i.push({latitude:e.latitude,longitude:e.longitude})})),{distance_labels:o,duration_labels:s,datasets:a,coordinates:i}},o=e=>{const t=e.length;if(0===t)return{};const n={};return e.map((e=>{n[e.sport_id]||(n[e.sport_id]={count:0,percentage:0}),n[e.sport_id].count+=1,n[e.sport_id].percentage=n[e.sport_id].count/t})),n},s={order:"desc",order_by:"workout_date"}},2531:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(6252);const a={class:"card"},o={class:"card-title"},s={class:"card-content"};function i(e,t){return(0,r.wg)(),(0,r.iD)("div",a,[(0,r._)("div",o,[(0,r.WI)(e.$slots,"title")]),(0,r._)("div",s,[(0,r.WI)(e.$slots,"content")])])}var l=n(3744);const c={},u=(0,l.Z)(c,[["render",i]]);var d=u},8626:function(e,t,n){"use strict";n.d(t,{Z:function(){return T}});var r=n(6252),a=n(3577),o=n(2262);const s={class:"table-selects"},i=["value"],l=["value"],c=["value"],u=["value"],d=["value"],m=["value"];var _=(0,r.aZ)({__name:"FilterSelects",props:{order_by:null,query:null,sort:null,message:null},emits:["updateSelect"],setup(e,{emit:t}){const n=e,{order_by:_,query:E,sort:S,message:T}=(0,o.BK)(n),p=[10,25,50,100];function A(e){t("updateSelect",e.target.id,e.target.value)}return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.ORDER_BY.LABEL"))+": ",1),(0,r._)("select",{name:"order_by",id:"order_by",value:(0,o.SU)(E).order_by,onChange:A},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(_),(t=>((0,r.wg)(),(0,r.iD)("option",{value:t,key:t},(0,a.zw)(e.$t(`${(0,o.SU)(T)}.${t.toUpperCase()}`)),9,l)))),128))],40,i)]),(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.ORDER.LABEL"))+": ",1),(0,r._)("select",{name:"order",id:"order",value:(0,o.SU)(E).order,onChange:A},[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(S),(t=>((0,r.wg)(),(0,r.iD)("option",{value:t,key:t},(0,a.zw)(e.$t(`common.SELECTS.ORDER.${t.toUpperCase()}`)),9,u)))),128))],40,c)]),(0,r._)("label",null,[(0,r.Uk)((0,a.zw)(e.$t("common.SELECTS.PER_PAGE.LABEL"))+": ",1),(0,r._)("select",{name:"per_page",id:"per_page",value:(0,o.SU)(E).per_page,onChange:A},[((0,r.wg)(),(0,r.iD)(r.HY,null,(0,r.Ko)(p,(e=>(0,r._)("option",{value:e,key:e},(0,a.zw)(e),9,m))),64))],40,d)])]))}}),E=n(3744);const S=(0,E.Z)(_,[["__scopeId","data-v-72463173"]]);var T=S},7167:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(6252);const a={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 -51 512 512"},o=(0,r.uE)('',1),s=[o];function i(e,t,n,o,i,l){return(0,r.wg)(),(0,r.iD)("svg",a,s)}var l={name:"ErrorImg"},c=n(3744);const u=(0,c.Z)(l,[["render",i]]);var d=u},8273:function(e,t,n){"use strict";n.d(t,{Z:function(){return E}});var r=n(6252),a=n(2262),o=(n(7658),n(3577));const s={id:"error"},i={class:"error-content"};var l=(0,r.aZ)({__name:"Error",props:{title:null,message:null,buttonText:null,path:{default:"/"}},setup(e){const t=e,{buttonText:n,title:l,message:c,path:u}=(0,a.BK)(t);return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[(0,r._)("div",i,[(0,r._)("h1",null,(0,o.zw)((0,a.SU)(l)),1),(0,r._)("p",null,(0,o.zw)((0,a.SU)(c)),1),(0,a.SU)(n)?((0,r.wg)(),(0,r.iD)("button",{key:0,onClick:t[0]||(t[0]=t=>e.$router.push((0,a.SU)(u))),class:"upper"},(0,o.zw)((0,a.SU)(n)),1)):(0,r.kq)("",!0)])]))}}),c=n(3744);const u=(0,c.Z)(l,[["__scopeId","data-v-b60bfa80"]]);var d=u,m=(0,r.aZ)({__name:"NotFound",props:{target:{default:"PAGE"}},setup(e){const t=e,{target:n}=(0,a.BK)(t),o=(0,a.iH)(),s=(0,a.iH)(!1);function i(){o.value=setTimeout((()=>{s.value=!0}),500)}return(0,r.bv)((()=>i())),(0,r.Ah)((()=>{o.value&&clearTimeout(o.value)})),(e,t)=>s.value?((0,r.wg)(),(0,r.j4)(d,{key:0,title:"404",message:e.$t(`error.NOT_FOUND.${(0,a.SU)(n)}`),"button-text":e.$t("common.HOME")},null,8,["message","button-text"])):(0,r.kq)("",!0)}});const _=m;var E=_},5020:function(e,t,n){"use strict";n.d(t,{Z:function(){return T}});var r=n(6252),a=n(3577),o=n(2262),s=n(2766);const i=e=>((0,r.dD)("data-v-3a9a4a65"),e=e(),(0,r.Cn)(),e),l={class:"pagination-center","aria-label":"navigation"},c={class:"pagination"},u=i((()=>(0,r._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1))),d={key:0},m=i((()=>(0,r._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1)));var _=(0,r.aZ)({__name:"Pagination",props:{pagination:null,path:null,query:null},setup(e){const t=e,{pagination:n,path:i,query:_}=(0,o.BK)(t);function E(e,t){const n=Object.assign({},_.value);return n.page=t?e+t:e,n}return(e,t)=>{const _=(0,r.up)("router-link");return(0,r.wg)(),(0,r.iD)("nav",l,[(0,r._)("ul",c,[(0,r._)("li",{class:(0,a.C_)(["page-prev",{disabled:!(0,o.SU)(n).has_prev}])},[(0,r.Wm)(_,{class:"page-link",to:{path:(0,o.SU)(i),query:E((0,o.SU)(n).page,-1)},disabled:!(0,o.SU)(n).has_prev},{default:(0,r.w5)((({navigate:t})=>[(0,r.WI)(e.$slots,"default",{onClick:e=>(0,o.SU)(n).has_next?t:null},(()=>[(0,r.Uk)((0,a.zw)(e.$t("api.PAGINATION.PREVIOUS"))+" ",1),u]))])),_:3},8,["to","disabled"])],2),((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)((0,o.SU)(s.lM)((0,o.SU)(n).pages,(0,o.SU)(n).page),(e=>((0,r.wg)(),(0,r.iD)("li",{key:e,class:(0,a.C_)(["page",{active:e===(0,o.SU)(n).page}])},["..."===e?((0,r.wg)(),(0,r.iD)("span",d," ... ")):((0,r.wg)(),(0,r.j4)(_,{key:1,class:"page-link",to:{path:(0,o.SU)(i),query:E(+e)}},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e),1)])),_:2},1032,["to"]))],2)))),128)),(0,r._)("li",{class:(0,a.C_)(["page-next",{disabled:!(0,o.SU)(n).has_next}])},[(0,r.Wm)(_,{class:"page-link",to:{path:(0,o.SU)(i),query:E((0,o.SU)(n).page,1)},disabled:!(0,o.SU)(n).has_next},{default:(0,r.w5)((({navigate:t})=>[(0,r.WI)(e.$slots,"default",{onClick:e=>(0,o.SU)(n).has_next?t:null},(()=>[(0,r.Uk)((0,a.zw)(e.$t("api.PAGINATION.NEXT"))+" ",1),m]))])),_:3},8,["to","disabled"])],2)])])}}}),E=n(3744);const S=(0,E.Z)(_,[["__scopeId","data-v-3a9a4a65"]]);var T=S},8403:function(e,t,n){"use strict";n.d(t,{Z:function(){return v}});var r=n(6252),a=n(2262),o=n(9963),s=n(3577),i=n(4366),l=n(5801),c=n(9917);const u=async e=>{const t=await n.e(881).then(n.bind(n,410)),r=await n.e(881).then(n.bind(n,8288)),a=await n.e(881).then(n.bind(n,6947)),o=await n.e(881).then(n.bind(n,8056)),s={de:o,en:r,fr:a,nb:r},l=s[e],c={graphs:t.default.adjacencyGraphs,dictionary:{...t.default.dictionary,...l.default.dictionary}};i.Mu.setOptions(c)},d=e=>{switch(e){case 2:return"AVERAGE";case 3:return"GOOD";case 4:return"STRONG";default:return"WEAK"}},m={class:"password-strength"},_=["value"],E={key:0,class:"password-strength-details"},S={class:"password-strength-value"},T={key:0,class:"info-box"},p={class:"password-feedback"};var A=(0,r.aZ)({__name:"PasswordStength",props:{password:null},setup(e){const t=e,{password:n}=(0,a.BK)(t),o=(0,c.o)(),A=(0,r.Fl)((()=>o.getters[l.SY.GETTERS.LANGUAGE])),O=(0,r.Fl)((()=>o.getters[l.YN.GETTERS.IS_SUCCESS])),R=(0,a.iH)(0),I=(0,a.iH)(""),U=(0,a.iH)([]),g=(0,a.iH)("0% 100%");function N(e){const t=(0,i.tu)(e);R.value=t.score,I.value=d(R.value),U.value=t.feedback.suggestions,g.value=100*R.value/4+"% 100%"}return(0,r.wF)((async()=>await u(A.value))),(0,r.YP)((()=>A.value),(async e=>{await u(e)})),(0,r.YP)((()=>n.value),(async e=>{O.value?I.value="":N(e)})),(e,t)=>((0,r.wg)(),(0,r.iD)("div",m,[(0,r._)("input",{class:(0,s.C_)(["password-slider",`strength-${R.value}`]),style:(0,s.j5)({backgroundSize:g.value}),type:"range",value:R.value,min:"0",max:"4",step:"1"},null,14,_),I.value?((0,r.wg)(),(0,r.iD)("div",E,[(0,r._)("span",S,(0,s.zw)(e.$t("user.PASSWORD_STRENGTH.LABEL"))+": "+(0,s.zw)(e.$t(`user.PASSWORD_STRENGTH.${I.value}`)),1),U.value.length>0?((0,r.wg)(),(0,r.iD)("div",T,[(0,r._)("ul",p,[((0,r.wg)(!0),(0,r.iD)(r.HY,null,(0,r.Ko)(U.value,(t=>((0,r.wg)(),(0,r.iD)("li",{key:t},(0,s.zw)(e.$t(`user.PASSWORD_STRENGTH.SUGGESTIONS.${t}`)),1)))),128))])])):(0,r.kq)("",!0)])):(0,r.kq)("",!0)]))}}),O=n(3744);const R=(0,O.Z)(A,[["__scopeId","data-v-74e71df5"]]);var I=R;const U=e=>((0,r.dD)("data-v-5a126514"),e=e(),(0,r.Cn)(),e),g={class:"password-input"},N=["id","disabled","placeholder","required","type"],h={key:0,class:"form-info"},z=U((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1)));var w=(0,r.aZ)({__name:"PasswordInput",props:{checkStrength:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},id:{default:"password"},password:{default:""},placeholder:null,required:{type:Boolean,default:!1}},emits:["updatePassword","passwordError"],setup(e,{emit:t}){const n=e,{checkStrength:i,disabled:l,id:c,password:u,placeholder:d,required:m}=(0,a.BK)(n),_=(0,a.iH)(!1),E=(0,a.iH)("");function S(){_.value=!_.value}function T(e){t("updatePassword",e.target.value)}function p(){t("passwordError")}return(0,r.YP)((()=>u.value),(e=>{""===e&&(E.value="")})),(e,t)=>((0,r.wg)(),(0,r.iD)("div",g,[(0,r.wy)((0,r._)("input",{id:(0,a.SU)(c),disabled:(0,a.SU)(l),placeholder:(0,a.SU)(d),required:(0,a.SU)(m),type:_.value?"text":"password","onUpdate:modelValue":t[0]||(t[0]=e=>E.value=e),minlength:"8",onInput:T,onInvalid:p},null,40,N),[[o.YZ,E.value]]),(0,r._)("div",{class:"show-password",onClick:S},[(0,r.Uk)((0,s.zw)(e.$t(`user.${_.value?"HIDE":"SHOW"}_PASSWORD`))+" ",1),(0,r._)("i",{class:(0,s.C_)(["fa","fa-eye"+(_.value?"-slash":"")]),"aria-hidden":"true"},null,2)]),(0,a.SU)(i)?((0,r.wg)(),(0,r.iD)("div",h,[z,(0,r.Uk)(" "+(0,s.zw)(e.$t("user.PASSWORD_INFO")),1)])):(0,r.kq)("",!0),(0,a.SU)(i)?((0,r.wg)(),(0,r.j4)(I,{key:1,password:E.value},null,8,["password"])):(0,r.kq)("",!0)]))}});const f=(0,O.Z)(w,[["__scopeId","data-v-5a126514"]]);var v=f},2056:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(6252),a=n(3577),o=n(2262),s=n(2024);const i=(0,r._)("div",{class:"map-attribution"},[(0,r._)("span",{class:"map-attribution-text"},"©"),(0,r._)("a",{class:"map-attribution-text",href:"https://www.openstreetmap.org/copyright",target:"_blank",rel:"noopener noreferrer"}," OpenStreetMap ")],-1);var l=(0,r.aZ)({__name:"StaticMap",props:{workout:null,displayHover:{type:Boolean,default:!1}},setup(e){const t=e,{displayHover:n}=(0,o.BK)(t),l=`${(0,s.k)()}workouts/map/${t.workout.map}`;return(e,t)=>((0,r.wg)(),(0,r.iD)("div",{class:(0,a.C_)(["static-map",{"display-hover":(0,o.SU)(n)}])},[(0,o.SU)(n)?((0,r.wg)(),(0,r.iD)("img",{key:0,src:l,alt:""})):((0,r.wg)(),(0,r.iD)("div",{key:1,class:"bg-map-image",style:(0,a.j5)({backgroundImage:`url(${l})`})},null,4)),i],2))}});const c=l;var u=c},3170:function(e,t,n){"use strict";n.d(t,{Z:function(){return y}});var r=n(6252),a=n(3577);const o={class:"start-chart"},s={key:0},i={key:1},l={class:"chart-radio"},c=["checked"],u=["checked"],d=["checked"],m={key:0},_=["checked"],E={key:1},S=["checked"],T={key:2},p=["checked"];function A(e,t,n,A,O,R){const I=(0,r.up)("Chart");return(0,r.wg)(),(0,r.iD)("div",o,[e.hideChartIfNoData&&e.emptyStats?((0,r.wg)(),(0,r.iD)("div",s,(0,a.zw)(e.$t("workouts.NO_WORKOUTS")),1)):((0,r.wg)(),(0,r.iD)("div",i,[(0,r._)("div",l,[(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"total_distance",checked:"total_distance"===e.displayedData,onClick:t[0]||(t[0]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,c),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DISTANCE")),1)]),(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"total_duration",checked:"total_duration"===e.displayedData,onClick:t[1]||(t[1]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,u),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DURATION")),1)]),(0,r._)("label",null,[(0,r._)("input",{type:"radio",name:"nb_workouts",checked:"nb_workouts"===e.displayedData,onClick:t[2]||(t[2]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,d),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.WORKOUT",2)),1)]),e.fullStats?((0,r.wg)(),(0,r.iD)("label",m,[(0,r._)("input",{type:"radio",name:"average_speed",checked:"average_speed"===e.displayedData,onClick:t[3]||(t[3]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,_),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.AVERAGE_SPEED")),1)])):(0,r.kq)("",!0),e.fullStats?((0,r.wg)(),(0,r.iD)("label",E,[(0,r._)("input",{type:"radio",name:"total_ascent",checked:"total_ascent"===e.displayedData,onClick:t[4]||(t[4]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,S),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.ASCENT")),1)])):(0,r.kq)("",!0),e.fullStats?((0,r.wg)(),(0,r.iD)("label",T,[(0,r._)("input",{type:"radio",name:"total_descent",checked:"total_descent"===e.displayedData,onClick:t[5]||(t[5]=(...t)=>e.updateDisplayData&&e.updateDisplayData(...t))},null,8,p),(0,r.Uk)(" "+(0,a.zw)(e.$t("workouts.DESCENT")),1)])):(0,r.kq)("",!0)]),e.labels.length>0?((0,r.wg)(),(0,r.j4)(I,{key:0,datasets:e.datasets,labels:e.labels,displayedData:e.displayedData,displayedSportIds:e.displayedSportIds,fullStats:e.fullStats,useImperialUnits:e.user.imperial_units},null,8,["datasets","labels","displayedData","displayedSportIds","fullStats","useImperialUnits"])):(0,r.kq)("",!0)]))])}var O=n(4850),R=n(2262);const I={class:"chart"};function U(e,t,n,a,o,s){const i=(0,r.up)("BarChart");return(0,r.wg)(),(0,r.iD)("div",I,[(0,r.Wm)(i,(0,r.dG)(e.barChartProps,{class:"bar-chart"}),null,16)])}var g=n(6518),N=n(9150);const h=(e,t=!1)=>{let n="0";t&&(n=String(Math.floor(e/86400)),e%=86400);const r=String(Math.floor(e/3600)).padStart(2,"0");e%=3600;const a=String(Math.floor(e/60)).padStart(2,"0"),o=String(e%60).padStart(2,"0");return t?`${"0"===n?"":`${n}d `}${"00"===r?"":`${r}h `}${a}m ${o}s`:`${"00"===r?"":`${r}:`}${a}:${o}`};var z=n(3649);const w=(e,t,n,r=!0,a="km")=>{const o=n?z.Dl[a].defaultTarget:a;switch(e){case"average_speed":return`${t.toFixed(2)} ${o}/h`;case"total_duration":return h(t,r);case"total_distance":case"total_ascent":case"total_descent":return`${t.toFixed(2)} ${o}`;default:return t.toString()}};var f=(0,r.aZ)({name:"Chart",components:{BarChart:g.vz},props:{datasets:{type:Object,required:!0},labels:{type:Object,required:!0},displayedData:{type:String,required:!0},displayedSportIds:{type:Array,required:!0},fullStats:{type:Boolean,required:!0},useImperialUnits:{type:Boolean,required:!0}},setup(e){const{t:t}=(0,N.QT)();function n(e){return isNaN(e)?0:+e}function a(e,t){return n(e)+n(t)}function o(e){return["total_ascent","total_descent"].includes(e)?"m":"km"}const s=(0,r.Fl)((()=>({labels:e.labels,datasets:JSON.parse(JSON.stringify(e.datasets))}))),i=(0,r.Fl)((()=>({responsive:!0,maintainAspectRatio:!0,animation:!1,layout:{padding:{top:e.fullStats?40:22}},scales:{x:{stacked:!0,grid:{drawOnChartArea:!1}},y:{stacked:"average_speed"!==e.displayedData,grid:{drawOnChartArea:!1},ticks:{maxTicksLimit:6,callback:function(t){return w(e.displayedData,+t,e.useImperialUnits,!1,o(e.displayedData))}},afterFit:function(t){t.width=e.fullStats?90:60}}},plugins:{datalabels:{anchor:"end",align:"end",color:function(t){return"average_speed"===e.displayedData&&t.dataset.backgroundColor?t.dataset.backgroundColor[0]:"#666666"},rotation:function(t){return e.fullStats&&t.chart.chartArea.width<580?310:0},display:function(t){return!(e.fullStats&&t.chart.chartArea.width<300)&&("average_speed"!==e.displayedData||1==e.displayedSportIds.length&&"auto")},formatter:function(t,n){if("average_speed"===e.displayedData)return w(e.displayedData,t,e.useImperialUnits,!1);{const t=n.chart.data.datasets.map((e=>e.data[n.dataIndex])).reduce(((e,t)=>a(e,t)),0);return n.datasetIndex===e.displayedSportIds.length-1&&t>0?w(e.displayedData,t,e.useImperialUnits,!1,o(e.displayedData)):null}}},legend:{display:!1},tooltip:{interaction:{intersect:!0,mode:"index",position:"average_speed"===e.displayedData?"nearest":"average"},filter:function(e){return"0"!==e.formattedValue},callbacks:{label:function(n){let r=t(`sports.${n.dataset.label}.LABEL`)||"";return r&&(r+=": "),null!==n.parsed.y&&(r+=w(e.displayedData,n.parsed.y,e.useImperialUnits,!0,o(e.displayedData))),r},footer:function(n){if("average_speed"===e.displayedData)return"";let r=0;return n.map((e=>{r+=e.parsed.y})),`${t("common.TOTAL")}: `+w(e.displayedData,r,e.useImperialUnits,!0,o(e.displayedData))}}}}}))),{barChartProps:l}=(0,g.xZ)({chartData:s,options:i});return{barChartProps:l}}}),v=n(3744);const C=(0,v.Z)(f,[["render",U]]);var D=C,k=n(5801),P=n(9917),L=n(9318),M=(0,r.aZ)({name:"UserMonthStats",components:{Chart:D},props:{sports:{type:Object,required:!0},user:{type:Object,required:!0},chartParams:{type:Object,required:!0},displayedSportIds:{type:Array,default:()=>[]},fullStats:{type:Boolean,default:!1},hideChartIfNoData:{type:Boolean,default:!1}},setup(e){const t=(0,P.o)(),n=(0,R.iH)("total_distance"),a=(0,r.Fl)((()=>t.getters[k.gu.GETTERS.USER_STATS])),o=(0,r.Fl)((()=>(0,L.v1)(e.chartParams,e.user.weekm,e.sports,e.displayedSportIds,a.value,e.user.imperial_units,e.user.date_format)));function s(n){t.dispatch(k.gu.ACTIONS.GET_USER_STATS,{username:e.user.username,filterType:"by_time",params:n})}function i(e){n.value=e.target.name}function l(e,t){return{from:(0,O.Z)(e.start,"yyyy-MM-dd"),to:(0,O.Z)(e.end,"yyyy-MM-dd"),time:"week"===e.duration?"week"+(t.weekm?"m":""):e.duration}}return(0,r.wF)((()=>s(l(e.chartParams,e.user)))),(0,r.YP)((()=>e.chartParams),(async t=>{s(l(t,e.user))})),{datasets:(0,r.Fl)((()=>o.value.datasets[n.value])),labels:(0,r.Fl)((()=>o.value.labels)),emptyStats:(0,r.Fl)((()=>0===Object.keys(a.value).length)),displayedData:n,updateDisplayData:i}}});const b=(0,v.Z)(M,[["render",A],["__scopeId","data-v-d5e9b348"]]);var y=b},2179:function(e,t,n){"use strict";n.d(t,{Z:function(){return N}});var r=n(6252),a=n(2262),o=n(3577),s=n(6595),i=n(5801),l=n(9917);const c={class:"box user-header"},u={class:"user-details"},d={class:"user-name"},m={class:"user-stats"},_={class:"user-stat"},E={class:"stat-number"},S={class:"stat-label"},T={class:"user-stat"},p={class:"stat-label"},A={class:"user-stat hide-small"},O={class:"stat-number"},R={class:"stat-label"};var I=(0,r.aZ)({__name:"UserHeader",props:{user:null},setup(e){const t=e,{user:n}=(0,a.BK)(t),I=(0,l.o)(),U=(0,r.Fl)((()=>I.getters[i.YN.GETTERS.AUTH_USER_PROFILE]));return(e,t)=>{const i=(0,r.up)("Distance");return(0,r.wg)(),(0,r.iD)("div",c,[(0,r.Wm)(s.Z,{user:(0,a.SU)(n)},null,8,["user"]),(0,r._)("div",u,[(0,r._)("div",d,(0,o.zw)((0,a.SU)(n).username),1),(0,r._)("div",m,[(0,r._)("div",_,[(0,r._)("span",E,(0,o.zw)((0,a.SU)(n).nb_workouts),1),(0,r._)("span",S,(0,o.zw)(e.$t("workouts.WORKOUT",(0,a.SU)(n).nb_workouts)),1)]),(0,r._)("div",T,[(0,r.Wm)(i,{distance:(0,a.SU)(n).total_distance,unitFrom:"km",digits:0,displayUnit:!1,useImperialUnits:(0,a.SU)(U).imperial_units},null,8,["distance","useImperialUnits"]),(0,r._)("span",p,(0,o.zw)((0,a.SU)(U).imperial_units?"miles":"km"),1)]),(0,r._)("div",A,[(0,r._)("span",O,(0,o.zw)((0,a.SU)(n).nb_sports),1),(0,r._)("span",R,(0,o.zw)(e.$t("workouts.SPORT",(0,a.SU)(n).nb_sports)),1)])])])])}}}),U=n(3744);const g=(0,U.Z)(I,[["__scopeId","data-v-20291951"]]);var N=g},1585:function(e,t,n){"use strict";n.d(t,{Z:function(){return f}});n(7658);var r=n(6252),a=n(2262),o=n(3577),s=n(9963),i=n(4850),l=n(5801),c=n(9917),u=n(6558),d=n(6287);const m={id:"user-infos",class:"description-list"},_={key:1,class:"info-box success-message"},E={key:4,class:"email-form form-box"},S={class:"form-items",for:"email"},T={class:"form-items",for:"email"},p={class:"form-buttons"},A={class:"confirm",type:"submit"},O=["onClick"],R={key:5},I={class:"user-bio"},U={key:0,class:"profile-buttons"},g=["onClick"],N={key:1,class:"profile-buttons"};var h=(0,r.aZ)({__name:"UserInfos",props:{user:null,fromAdmin:{type:Boolean,default:!1}},setup(e){const t=e,n=(0,c.o)(),{user:h,fromAdmin:z}=(0,a.BK)(t),w=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.LANGUAGE])),f=(0,r.Fl)((()=>n.getters[l.YN.GETTERS.AUTH_USER_PROFILE])),v=(0,r.Fl)((()=>t.user.created_at?(0,u.p6)(t.user.created_at,f.value.timezone,f.value.date_format):"")),C=(0,r.Fl)((()=>t.user.birth_date?(0,i.Z)(new Date(t.user.birth_date),`${(0,u.mh)(f.value.date_format,w.value)}`,{locale:d.v1[w.value]}):"")),D=(0,r.Fl)((()=>n.getters[l.RT.GETTERS.USERS_IS_SUCCESS])),k=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.ERROR_MESSAGES])),P=(0,r.Fl)((()=>n.getters[l.SY.GETTERS.APP_CONFIG])),L=(0,a.iH)(""),M=(0,a.iH)(!1),b=(0,a.iH)(!1),y=(0,a.iH)(""),G=(0,a.iH)("");function F(e){L.value=e,""!==e&&n.commit(l.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1)}function W(e){n.dispatch(l.RT.ACTIONS.DELETE_USER_ACCOUNT,{username:e})}function K(e){G.value="password-reset",n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,resetPassword:!0})}function Y(e){n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,activate:!0})}function x(){Z(),y.value=h.value.email_to_confirm?h.value.email_to_confirm:"",b.value=!0,G.value="email-update"}function $(){y.value="",b.value=!1}function B(e){n.dispatch(l.RT.ACTIONS.UPDATE_USER,{username:e,new_email:y.value})}function Z(){n.commit(l.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),n.commit(l.RT.MUTATIONS.UPDATE_IS_SUCCESS,!1),G.value=""}return(0,r.Ah)((()=>Z())),(0,r.YP)((()=>D.value),(e=>{e&&(F(""),$())})),(e,t)=>{const n=(0,r.up)("Modal"),i=(0,r.up)("AlertMessage"),l=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",m,[L.value?((0,r.wg)(),(0,r.j4)(n,{key:0,title:e.$t("common.CONFIRMATION"),message:"delete"===L.value?"admin.CONFIRM_USER_ACCOUNT_DELETION":"admin.CONFIRM_USER_PASSWORD_RESET",strongMessage:(0,a.SU)(h).username,onConfirmAction:t[0]||(t[0]=e=>"delete"===L.value?W((0,a.SU)(h).username):K((0,a.SU)(h).username)),onCancelAction:t[1]||(t[1]=e=>F(""))},null,8,["title","message","strongMessage"])):(0,r.kq)("",!0),(0,a.SU)(D)?((0,r.wg)(),(0,r.iD)("div",_,(0,o.zw)(e.$t(`admin.${"password-reset"===G.value?"PASSWORD_RESET":"USER_EMAIL_UPDATE"}_SUCCESSFUL`)),1)):(0,r.kq)("",!0),(0,a.SU)(h).is_active?(0,r.kq)("",!0):((0,r.wg)(),(0,r.j4)(i,{key:2,message:"user.THIS_USER_ACCOUNT_IS_INACTIVE"})),(0,a.SU)(k)?((0,r.wg)(),(0,r.j4)(l,{key:3,message:(0,a.SU)(k)},null,8,["message"])):(0,r.kq)("",!0),b.value?((0,r.wg)(),(0,r.iD)("div",E,[(0,r._)("form",{class:(0,o.C_)({errors:M.value}),onSubmit:t[4]||(t[4]=(0,s.iM)((e=>B((0,a.SU)(h).username)),["prevent"]))},[(0,r._)("label",S,[(0,r.Uk)((0,o.zw)(e.$t("admin.CURRENT_EMAIL"))+" ",1),(0,r.wy)((0,r._)("input",{id:"email",type:"email","onUpdate:modelValue":t[2]||(t[2]=e=>(0,a.SU)(h).email=e),disabled:""},null,512),[[s.nr,(0,a.SU)(h).email]])]),(0,r._)("label",T,[(0,r.Uk)((0,o.zw)(e.$t("admin.NEW_EMAIL"))+"* ",1),(0,r.wy)((0,r._)("input",{id:"new-email",type:"email",required:"","onUpdate:modelValue":t[3]||(t[3]=e=>y.value=e)},null,512),[[s.nr,y.value]])]),(0,r._)("div",p,[(0,r._)("button",A,(0,o.zw)(e.$t("buttons.SUBMIT")),1),(0,r._)("button",{class:"cancel",onClick:(0,s.iM)($,["prevent"])},(0,o.zw)(e.$t("buttons.CANCEL")),9,O)])],34)])):((0,r.wg)(),(0,r.iD)("div",R,[(0,r._)("dl",null,[(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.REGISTRATION_DATE"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(v)),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.FIRST_NAME"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(h).first_name),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.LAST_NAME"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(h).last_name),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.BIRTH_DATE"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(C)),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.LOCATION"))+":",1),(0,r._)("dd",null,(0,o.zw)((0,a.SU)(h).location),1),(0,r._)("dt",null,(0,o.zw)(e.$t("user.PROFILE.BIO"))+":",1),(0,r._)("dd",I,(0,o.zw)((0,a.SU)(h).bio),1)]),(0,a.SU)(z)?((0,r.wg)(),(0,r.iD)("div",U,[(0,a.SU)(f).username!==(0,a.SU)(h).username?((0,r.wg)(),(0,r.iD)("button",{key:0,class:"danger",onClick:t[5]||(t[5]=(0,s.iM)((e=>F("delete")),["prevent"]))},(0,o.zw)(e.$t("admin.DELETE_USER")),1)):(0,r.kq)("",!0),(0,a.SU)(h).is_active?(0,r.kq)("",!0):((0,r.wg)(),(0,r.iD)("button",{key:1,onClick:t[6]||(t[6]=(0,s.iM)((e=>Y((0,a.SU)(h).username)),["prevent"]))},(0,o.zw)(e.$t("admin.ACTIVATE_USER_ACCOUNT")),1)),(0,a.SU)(f).username!==(0,a.SU)(h).username?((0,r.wg)(),(0,r.iD)("button",{key:2,onClick:(0,s.iM)(x,["prevent"])},(0,o.zw)(e.$t("admin.UPDATE_USER_EMAIL")),9,g)):(0,r.kq)("",!0),(0,a.SU)(f).username!==(0,a.SU)(h).username&&(0,a.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("button",{key:3,onClick:t[7]||(t[7]=(0,s.iM)((e=>F("reset")),["prevent"]))},(0,o.zw)(e.$t("admin.RESET_USER_PASSWORD")),1)):(0,r.kq)("",!0),(0,r._)("button",{onClick:t[8]||(t[8]=t=>e.$router.go(-1))},(0,o.zw)(e.$t("buttons.BACK")),1)])):((0,r.wg)(),(0,r.iD)("div",N,[(0,r._)("button",{onClick:t[9]||(t[9]=t=>e.$router.push("/profile/edit"))},(0,o.zw)(e.$t("user.PROFILE.EDIT")),1),(0,r._)("button",{onClick:t[10]||(t[10]=t=>e.$router.push("/"))},(0,o.zw)(e.$t("common.HOME")),1)]))]))])}}}),z=n(3744);const w=(0,z.Z)(h,[["__scopeId","data-v-217519af"]]);var f=w},2411:function(e,t,n){"use strict";n.d(t,{Z:function(){return C}});var r=n(6252),a=n(3577),o=n(2262),s=n(9963),i=n(2201),l=n(8403),c=n(5801),u=n(9917);const d=e=>((0,r.dD)("data-v-b3c885de"),e=e(),(0,r.Cn)(),e),m={id:"user-form"},_={key:2,class:"info-box success-message"},E={class:"form-items"},S=["disabled","placeholder"],T={key:1,class:"form-info"},p=d((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),A=["disabled","placeholder"],O={key:3,class:"form-info"},R=d((()=>(0,r._)("i",{class:"fa fa-info-circle","aria-hidden":"true"},null,-1))),I=["disabled"],U={key:3},g={key:0},N={key:4},h={class:"account"},z={key:5};var w=(0,r.aZ)({__name:"UserAuthForm",props:{action:null,token:{default:""}},setup(e){const t=e,n=(0,i.yj)(),d=(0,u.o)(),{action:w}=(0,o.BK)(t),f=(0,o.qj)({username:"",email:"",password:""}),v=(0,r.Fl)((()=>G(t.action))),C=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.ERROR_MESSAGES])),D=(0,r.Fl)((()=>d.getters[c.YN.GETTERS.IS_REGISTRATION_SUCCESS])),k=(0,r.Fl)((()=>d.getters[c.YN.GETTERS.IS_SUCCESS])),P=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.APP_CONFIG])),L=(0,r.Fl)((()=>d.getters[c.SY.GETTERS.LANGUAGE])),M=(0,r.Fl)((()=>"register"===t.action&&!P.value.is_registration_enabled)),b=(0,r.Fl)((()=>["reset-request","account-confirmation-resend"].includes(t.action)&&!P.value.is_email_sending_enabled)),y=(0,o.iH)(!1);function G(e){switch(e){case"reset-request":case"reset":return"buttons.SUBMIT";default:return`buttons.${t.action.toUpperCase()}`}}function F(){y.value=!0}function W(e){f.password=e}function K(e){switch(e){case"reset":return t.token?d.dispatch(c.YN.ACTIONS.RESET_USER_PASSWORD,{password:f.password,token:t.token}):d.commit(c.SY.MUTATIONS.SET_ERROR_MESSAGES,"user.INVALID_TOKEN");case"reset-request":return d.dispatch(c.YN.ACTIONS.SEND_PASSWORD_RESET_REQUEST,{email:f.email});case"account-confirmation-resend":return d.dispatch(c.YN.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL,{email:f.email});default:f["language"]=L.value,d.dispatch(c.YN.ACTIONS.LOGIN_OR_REGISTER,{actionType:e,formData:f,redirectUrl:n.query.from})}}function Y(){f.username="",f.email="",f.password=""}return(0,r.Ah)((()=>d.commit(c.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(0,r.YP)((()=>n.path),(async()=>{d.commit(c.SY.MUTATIONS.EMPTY_ERROR_MESSAGES),d.commit(c.YN.MUTATIONS.UPDATE_IS_SUCCESS,!1),d.commit(c.YN.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,!1),y.value=!1,Y()})),(e,t)=>{const n=(0,r.up)("AlertMessage"),i=(0,r.up)("router-link"),c=(0,r.up)("ErrorMessage");return(0,r.wg)(),(0,r.iD)("div",{id:"user-auth-form",class:(0,a.C_)(`${["reset","reset-request"].includes((0,o.SU)(w))?(0,o.SU)(w):"user-form"}`)},[(0,r._)("div",m,[(0,r._)("div",{class:(0,a.C_)(["form-box",{disabled:(0,o.SU)(M)}])},[(0,o.SU)(M)?((0,r.wg)(),(0,r.j4)(n,{key:0,message:"user.REGISTER_DISABLED"})):(0,r.kq)("",!0),(0,o.SU)(b)?((0,r.wg)(),(0,r.j4)(n,{key:1,message:"admin.EMAIL_SENDING_DISABLED"})):(0,r.kq)("",!0),(0,o.SU)(k)||(0,o.SU)(D)?((0,r.wg)(),(0,r.iD)("div",_,(0,a.zw)(e.$t("user.PROFILE.SUCCESSFUL_"+((0,o.SU)(D)?"REGISTRATION"+((0,o.SU)(P).is_email_sending_enabled?"_WITH_EMAIL":""):"UPDATE"))),1)):(0,r.kq)("",!0),(0,r._)("form",{class:(0,a.C_)({errors:y.value}),onSubmit:t[2]||(t[2]=(0,s.iM)((e=>K((0,o.SU)(w))),["prevent"]))},[(0,r._)("div",E,["register"===(0,o.SU)(w)?(0,r.wy)(((0,r.wg)(),(0,r.iD)("input",{key:0,id:"username",disabled:(0,o.SU)(M),required:"",pattern:"[a-zA-Z0-9_]+",minlength:"3",maxlength:"30",onInvalid:F,"onUpdate:modelValue":t[0]||(t[0]=e=>f.username=e),placeholder:e.$t("user.USERNAME")},null,40,S)),[[s.nr,f.username]]):(0,r.kq)("",!0),"register"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",T,[p,(0,r.Uk)(" "+(0,a.zw)(e.$t("user.USERNAME_INFO")),1)])):(0,r.kq)("",!0),"reset"!==(0,o.SU)(w)?(0,r.wy)(((0,r.wg)(),(0,r.iD)("input",{key:2,id:"email",disabled:(0,o.SU)(M)||(0,o.SU)(b),required:"",onInvalid:F,type:"email","onUpdate:modelValue":t[1]||(t[1]=e=>f.email=e),placeholder:e.$t("user.EMAIL")},null,40,A)),[[s.nr,f.email]]):(0,r.kq)("",!0),["reset-request","register","account-confirmation-resend"].includes((0,o.SU)(w))?((0,r.wg)(),(0,r.iD)("div",O,[R,(0,r.Uk)(" "+(0,a.zw)(e.$t("user.EMAIL_INFO")),1)])):(0,r.kq)("",!0),["account-confirmation-resend","reset-request"].includes((0,o.SU)(w))?(0,r.kq)("",!0):((0,r.wg)(),(0,r.j4)(l.Z,{key:4,disabled:(0,o.SU)(M),required:!0,placeholder:"reset"===(0,o.SU)(w)?e.$t("user.ENTER_PASSWORD"):e.$t("user.PASSWORD"),password:f.password,checkStrength:["reset","register"].includes((0,o.SU)(w)),onUpdatePassword:W,onPasswordError:F},null,8,["disabled","placeholder","password","checkStrength"]))]),(0,r._)("button",{type:"submit",disabled:(0,o.SU)(M)||(0,o.SU)(b)},(0,a.zw)(e.$t((0,o.SU)(v))),9,I)],34),"login"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",U,[(0,r.Wm)(i,{class:"links",to:"/register"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.REGISTER")),1)])),_:1}),(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("span",g,"-")):(0,r.kq)("",!0),(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.j4)(i,{key:1,class:"links",to:"/password-reset/request"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.PASSWORD_FORGOTTEN")),1)])),_:1})):(0,r.kq)("",!0)])):(0,r.kq)("",!0),"register"===(0,o.SU)(w)?((0,r.wg)(),(0,r.iD)("div",N,[(0,r._)("span",h,(0,a.zw)(e.$t("user.ALREADY_HAVE_ACCOUNT")),1),(0,r.Wm)(i,{class:"links",to:"/login"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.LOGIN")),1)])),_:1})])):(0,r.kq)("",!0),["login","register"].includes((0,o.SU)(w))&&(0,o.SU)(P).is_email_sending_enabled?((0,r.wg)(),(0,r.iD)("div",z,[(0,r.Wm)(i,{class:"links",to:"/account-confirmation/resend"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("user.ACCOUNT_CONFIRMATION_NOT_RECEIVED")),1)])),_:1})])):(0,r.kq)("",!0),(0,o.SU)(C)?((0,r.wg)(),(0,r.j4)(c,{key:6,message:(0,o.SU)(C)},null,8,["message"])):(0,r.kq)("",!0)],2)])],2)}}}),f=n(3744);const v=(0,f.Z)(w,[["__scopeId","data-v-b3c885de"]]);var C=v},6595:function(e,t,n){"use strict";n.d(t,{Z:function(){return _}});var r=n(6252),a=n(2262),o=n(2024);const s={class:"user-picture"},i=["alt","src"],l={key:1,class:"no-picture"},c=(0,r._)("i",{class:"fa fa-user-circle-o","aria-hidden":"true"},null,-1),u=[c];var d=(0,r.aZ)({__name:"UserPicture",props:{user:null},setup(e){const t=e,n=(0,r.Fl)((()=>t.user.picture?`${(0,o.k)()}users/${t.user.username}/picture?${Date.now()}`:""));return(e,t)=>((0,r.wg)(),(0,r.iD)("div",s,[""!==(0,a.SU)(n)?((0,r.wg)(),(0,r.iD)("img",{key:0,class:"profile-user-img",alt:e.$t("user.USER_PICTURE"),src:(0,a.SU)(n)},null,8,i)):((0,r.wg)(),(0,r.iD)("div",l,u))]))}});const m=d;var _=m},5630:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(6252),a=n(3577);const o={class:"no-workouts box"};function s(e,t){const n=(0,r.up)("router-link");return(0,r.wg)(),(0,r.iD)("div",o,[(0,r._)("div",null,[(0,r.Uk)((0,a.zw)(e.$t("workouts.NO_WORKOUTS"))+" ",1),(0,r.Wm)(n,{to:"/workouts/add"},{default:(0,r.w5)((()=>[(0,r.Uk)((0,a.zw)(e.$t("workouts.UPLOAD_FIRST_WORKOUT")),1)])),_:1})])])}var i=n(3744);const l={},c=(0,i.Z)(l,[["render",s],["__scopeId","data-v-4b4d15fb"]]);var u=c},4612:function(e,t,n){var r={"./de/de.ts":9923,"./en/en.ts":8757,"./fr/fr.ts":6625,"./nb/nb.ts":8891};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=4612}},t={};function n(r){var a=t[r];if(void 0!==a)return a.exports;var o=t[r]={exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.m=e,function(){var e=[];n.O=function(t,r,a,o){if(!r){var s=1/0;for(u=0;u=o)&&Object.keys(n.O).every((function(e){return n.O[e](r[l])}))?r.splice(l--,1):(i=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]}}(),function(){n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,{a:t}),t}}(),function(){var e,t=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__};n.t=function(r,a){if(1&a&&(r=this(r)),8&a)return r;if("object"===typeof r&&r){if(4&a&&r.__esModule)return r;if(16&a&&"function"===typeof r.then)return r}var o=Object.create(null);n.r(o);var s={};e=e||[null,t({}),t([]),t(t)];for(var i=2&a&&r;"object"==typeof i&&!~e.indexOf(i);i=t(i))Object.getOwnPropertyNames(i).forEach((function(e){s[e]=function(){return r[e]}}));return s["default"]=function(){return r},n.d(o,s),o}}(),function(){n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}}(),function(){n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce((function(t,r){return n.f[r](e,t),t}),[]))}}(),function(){n.u=function(e){return"static/js/"+({24:"reset",193:"statistics",328:"admin",401:"workouts",845:"profile",881:"password"}[e]||e)+"."+{24:"112f801c",93:"02cf293c",193:"04a17f2e",243:"e551248f",328:"9bc68088",401:"71e8fef0",431:"e5102e07",633:"81a8ddc8",845:"430ae7df",858:"3f2a93f2",881:"43430dfc"}[e]+".js"}}(),function(){n.miniCssF=function(e){return"static/css/"+{24:"reset",193:"statistics",328:"admin",401:"workouts",845:"profile"}[e]+"."+{24:"e2527ec6",193:"40e24e75",328:"73df498d",401:"41709693",845:"203e78e2"}[e]+".css"}}(),function(){n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){var e={},t="fittrackee_client:";n.l=function(r,a,o,s){if(e[r])e[r].push(a);else{var i,l;if(void 0!==o)for(var c=document.getElementsByTagName("script"),u=0;u {\n const controller = new AbortController()\n config.signal = controller.signal\n const requestKey = removeRequestIfPending(config)\n pendingRequests.set(requestKey, controller)\n\n const authToken = store.getters[AUTH_USER_STORE.GETTERS.AUTH_TOKEN]\n if (authToken) {\n const auth = `Bearer ${authToken}`\n if (config.headers && config.headers.Authorization !== auth) {\n config.headers.Authorization = `Bearer ${authToken}`\n }\n }\n return config\n },\n (error) => Promise.reject(error)\n)\n\nauthApi.interceptors.response.use(\n (response) => {\n removeRequestIfPending(response.config)\n return response\n },\n (error) => {\n if (error.message !== 'canceled') {\n removeRequestIfPending(error.response.config)\n }\n return Promise.reject(error)\n }\n)\n\nexport default authApi\n","import { AxiosRequestConfig } from 'axios'\n\nexport const pendingRequests = new Map()\n\nconst generateRequestKey = (config: AxiosRequestConfig): string => {\n const { method, url, params = {}, data = {} } = config\n return [method, url, JSON.stringify(params), JSON.stringify(data)].join('')\n}\n\nexport const removeRequestIfPending = (config: AxiosRequestConfig): string => {\n const requestKey = generateRequestKey(config)\n if (pendingRequests.has(requestKey)) {\n const controller = pendingRequests.get(requestKey) || {}\n controller?.abort()\n pendingRequests.delete(requestKey)\n }\n return requestKey\n}\n","import { createI18n, LocaleMessages, VueMessageType } from 'vue-i18n'\n\n/**\n * Load locale messages\n *\n * The loaded `JSON` locale messages is pre-compiled by `@intlify/vue-i18n-loader`, which is integrated into `vue-cli-plugin-i18n`.\n * See: https://github.com/intlify/vue-i18n-loader#rocket-i18n-resource-pre-compilation\n */\nconst disabledLanguages = ['nb'] // to remove after norwegian translations release\n\nfunction loadLocaleMessages(): Record> {\n const locales = require.context('./locales', true, /[A-Za-z0-9-_,\\s]+\\.ts$/i)\n const messages: Record> = {}\n locales.keys().forEach((key) => {\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i)\n if (\n matched &&\n matched.length > 1 &&\n !disabledLanguages.includes(matched[1])\n ) {\n const locale = matched[1]\n messages[locale] = locales(key).default\n }\n })\n return messages\n}\n\nexport default createI18n({\n legacy: false,\n locale: 'en',\n fallbackLocale: 'en',\n globalInjection: true,\n messages: loadLocaleMessages(),\n})\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontaktiere den Administrator\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee ist ein selbst-gehosteter Outdoor-Aktivitäts-Tracker.\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"unter \", _interpolate(_list(0)), \" Lizenz \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Quellkode\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktion\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiviere Konto\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiv\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hinzufügen/Entfernen von Administratorrechten, Lösche Nutzerkonto.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontakt-E-Mail des Administrators\"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Anzahl aktiver Nutzer\"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wenn 0, gibt es keine Registrierungslimitierung..\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Dateianzahl im zip Archiv\"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Kontakt-E-Mail\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Größe der hochgeladenen Dateien (in Mb)\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungskonfiguration\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Größe des zip Archives (in Mb)\"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück zu Admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Möchtest du wirklich das \", _interpolate(_list(0)), \" Konto löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Möchtest du wirklich das \", _interpolate(_list(0)), \" Passwort zurücksetzen?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktuelle E-Mail\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lösche Nutzer\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail-Versand ist deaktiviert.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktivieren/Deaktivieren von Sportarten.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Neue E-Mail\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Das wasswort wurde zurückgesetzt.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung ist derzeit deaktiviert.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung ist derzeit aktiviert.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiv\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainings existieren\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten Administration\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktualisiere Anwemdungskonfiguration (maximale Anzahl an registrierten Nutzern, maximale Dateigröße).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktualisiere E-Mail\"])},\n \"USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzer\"])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die E-Mail Adresse wurde aktualisiert.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administratorrechte hinzufügen\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administratorrechte entfernen\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Adminstatus\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierungsdatum\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accountstatus\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzername\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainingsanzahl\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail: Eine gültige E-Mail muss angegeben werden.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler bei der GPX-Verarbeitung.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Einlesen der GPX-Datei\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Abrufen der Konfiguration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Aktualisieren der Konfiguration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Die Registrierung ist deaktiviert.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dateierweiterung ist nicht erlaubt.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die Datei ist größer als erlaubt.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültige Anmeldedaten.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die bereitgestellten Daten sind ungültig.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte erneut anmelden.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte erneut anmelden.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Netzwerkfehler.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die neue E-Mail muss sich von der aktuellen E-Mail unterscheiden\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei angegeben.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei ausgewählt.\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort: Passwort und Passwortbestätigung stimmen nicht überein.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe ein gültiges Authentifizierungstoken an.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Es tut mir leid, der Benutzername ist schon vergeben.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportart existiert nicht.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die Signatur ist abgelaufen. Bitte melde dich erneut an.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung erfolgreich.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Der Nutzer existiert nicht.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Um den Administrator zu kontaktieren, muss eine gültige E-Mail-Adresse angegeben werden\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du kannst Dein Konto nicht löschen, da kein anderer Nutzer hat Administratorrechte besitzt.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du hast keine Berechtigung.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorhergehende\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächste\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bestätigungs-E-Mail erneut senden\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Autorisieren\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abbrechen\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter löschen\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mein Konto löschen\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Deaktivieren\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bearbeiten\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktivieren\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmelden\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nein\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrieren\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurücksetzen\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Speichern\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ja\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Über\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bestätigung\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontakt\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Tag\"]), _normalize([\"Tage\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Angezeigt\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dokumentation (en)\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hier\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Versteckt\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Startseite\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sortiert nach\"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sortieren\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"aufsteigend\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"absteigend\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pro Seite\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Insgesamt\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dashboard\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dieser Monat\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bei der Anwendung scheinen einige Probleme aufgetreten zu sein.
                                                                              Bitte versuche es später noch einmal oder kontaktiere den Administrator.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Seite nicht gefunden\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training nicht gefunden\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Etwas lief schief\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Eine neue OAuth2-Anwendung hinzufügen\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ID\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geheimnis\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungsbeschreibung\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erstellt am\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungsname\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Weiterleitungs-URL\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geltungsbereich\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf auth-Endpunkte\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf auth-Endpunkte\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf users-Endpunkte\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf users-Endpunkte\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf workouts-Endpunkte\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf workouts-Endpunkte\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf die Anwendungskonfiguration\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungs-URL\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung erfolgreich erstellt. Stelle sicher, dass du das Geheimnis kopierst, du kannst es nicht erneut anzeigen.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist sicher, dass du diese App löschen willst?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Die Anwendung \", _interpolate(_list(0)), \" fragt an:\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OAuth2-Anwendungen\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" den Zugriff auf deinen Account erlauben?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"in Zwischenablage kopieren\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung löschen\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung hinzufügen\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung wurde nicht gefunden!\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Anwendungen\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Beschreibung\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alle Tokens zurückrufen\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist du sicher, dass du alle Tokens zurückrufen möchtest?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alle vorhandenen und vergebenen Tokens wurde zurückgerufen.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Pendeln)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Virtuell)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wandern\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountainbiken\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountainbiken (elektrisch)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Rudern\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Laufen\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skifahren (Alpin)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skifahren (Langlauf)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schneeschuhe\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gehen\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistik\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Woche\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Monat\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jahr\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hast du keine Anweisungen erhalten?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prüfe deine E-Mail. Eine neue Bestätigungs-E-Mail wurde an die angegebene Adresse geschickt.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hast du bereits ein Konto?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Möchtest du dein Konto wirklich löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktuelles Passwort\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe eine gültige E-Mail-Adresse an.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe ein Passwort ein\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nach Benutzernamen filtern\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort verbergen\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte fordere ein neues Passworts an.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sprache\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmelden\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmeldung\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abmelden\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Neues Passwort\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Nutzer gefunden.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mindestens 8 Zeichen sind erforderlich.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort vergessen?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prüfe Deine E-Mail. Wenn Deine Adresse in der Datenbank enthalten ist, wirst du eine E-Mail mit einem Link erhalten um Dein Passwort zurückzusetzen.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"schwach\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mittel\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"gut\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwortstärke\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide vorhersehbare Buchstabenersetzungen wie \", \"@\", \" für a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide umgekehrte Schreibweisen gebräuchlicher Wörter.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schreibe einige, aber nicht alle Buchstaben groß.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schreibe mehr als nur den ersten Buchstaben groß.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Daten und Jahreszahlen, die mit Dir in Verbindung gebracht werden.\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Angabe von letzten Jahreszahlen.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Jahreszahlen, die mit Dir in Verbindung gebracht werden.\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide gebräuchliche Zeichenfolgen.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide wiederholungen von Wörtern und Zeichen.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Verwende längere Tastaturmuster und ändere mehrmals die Schreibrichtung.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Füge weitere weniger gebräuchliche Wörter hinzu.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Verwenden Sie mehrere Wörter, aber vermeide gebräuchliche Ausdrücke.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du kannst sichere Passwörter erstellen, ohne Symbole, Zahlen oder Großbuchstaben zu verwenden.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wenn Sie dieses Passwort auch anderweitig verwenden, sollten Sie es ändern.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Dein Passwort wurde aktualisiert. Klicke \", _interpolate(_list(0)), \" um dich anzumelden.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontoausgabe\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anstiegs-bezogene Daten (Aufnahmen, gesamt)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück zum Profil\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Biographie\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geburtsdatum\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Datumsanzeigeformat\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil bearbeiten\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen ändern\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen für Sportarten ändern\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Bitte \", _interpolate(_list(0)), \" um Deine E-Mail Adresse nochmals zu ändern oder kontaktiere den Administrator\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorname\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erster Tag der Woche\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sprache\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nachname\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ort\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Montag\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bildausgabe\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild aktualisieren\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild entfernen\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungsausgabe\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil-Ausgabe\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Regirierungsdatum\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten-Einstellungsausgabe\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sontag\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Konto\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungen\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktion\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Farbe\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vom Admin deaktiviert\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"aktiv\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geschwindigkeitsschwellenwert für Stopp\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich aktualisiert. Bitte prüfe Deine E-Mail um die neue E-Mail Adresse zu bestätigen.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich erstellt.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ein Aktivierungslink für Dein Konto wurde an die angegebene E-Mail Adresse geschickt.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich aktualisiert.\"])},\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einheiten für die Distanz\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Imperiales System (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Metrisches System (m, km)\"])}\n },\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zeitzone\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrieren\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail zur Kontobestätigung erneut senden\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Entschuldigung, die Registrierung ist deaktiviert.\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort anzeigen\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dieser Account ist inaktiv.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Benutzerbild\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzername\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 bis 30 Zeichen sind erforderlich, nur alphanumerische Zeichen und der Unterstrich _ sind erlaubt.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training hinzufügen\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Analyse\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aufstieg\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschn. Geschwindigkeit\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschnittsgeschwindigkeit\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"zurück zum Training\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Datum\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abstieg\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"zeige Filter\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Entfernung\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dauer\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training bearbeiten\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höhe\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ende\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Von\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".gpx Datei\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"verberge Filter\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Letzte Trainings\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lade mehr Trainings\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"maximale Höhe\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Maximale Dateianzahl\"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Maximalgröße\"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Geschwindigkeit\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"minimale Höhe\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächstes Segment\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächstes Training\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Daten aus gpx, ohne Bereinigung\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei angegeben\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"enthält keinen Ordner\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Karte\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein nächstes Segment\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein nächstes Training\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Anmerkungen\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein vorheriges Segment\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein vorheriges Training\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Aufzeichnungen.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Trainings.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmerkungen\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pausen\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorheriges Segment\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorheriges Training\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Aufzeichnung\"]), _normalize([\"Aufzeichnungen\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschn. Geschwindigkeit\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Weiteste Entfernung\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höchster Anstieg\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Längste Dauer\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Geschwindigkeit\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"verbleibende Zeichen\"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Segment\"]), _normalize([\"Segmente\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geschwindigkeit\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Sportart\"]), _normalize([\"Sportarten\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start und Ziel\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höhenachse bei Null starten\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"bis\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gesamtdauer\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Füge erstes Training hinzu!\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Luftfeuchtigkeit\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Temperatur\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wind\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNO\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NO\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ONO\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"O\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OSO\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SO\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSO\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSW\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SW\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WSW\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"W\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WNW\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NW\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNW\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"klarer Tag\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"klare Nacht\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wolkig\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nebel\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"teilweise bewölkter Tag\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"teilweise bewölkte Nacht\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Regen\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schneeregen\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schnee\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wind\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mit .gpx Datei\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ohne .gpx Datei\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Training\"]), _normalize([\"Trainings\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainingsdatum\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist du sicher, dass du dieses Training löschen möchtest?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".zip Datei\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"oder .zip Datei mit .gpx Dateien\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Contact the administrator\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee is a self-hosted outdoor activity tracker.\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"under \", _interpolate(_list(0)), \" license \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Source code\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Action\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activate account\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Active\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add/remove admin rights, delete user account.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administrator email for contact\"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. number of active users\"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"If 0, no limitation on registration.\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. files of zip archive\"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no contact email\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. size of uploaded files (in Mb)\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application configuration\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. size of zip archive (in Mb)\"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back to admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Are you sure you want to delete \", _interpolate(_list(0)), \" account? All data will be deleted, this cannot be undone.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Are you sure you want to reset \", _interpolate(_list(0)), \" password?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Current email\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete user\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email sending is disabled.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enable/disable sports.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New email\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The password has been reset.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration is currently disabled.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration is currently enabled.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset password\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Active\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workouts exist\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Label\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sports administration\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update application configuration (maximum number of registered users, maximum files size).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update email\"])},\n \"USER\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"user\"]), _normalize([\"users\"])])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The email address has been updated.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add admin rights\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove admin rights\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"admin status\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"registration date\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"account status\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"username\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workout count\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error. Please try again or contact the administrator.\"])},\n \"at least one file in zip archive exceeds size limit, please check the archive\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"At least one file in zip archive exceeds size limit, please check the archive.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email: valid email must be provided.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error during gpx processing.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error during gpx file parsing.\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error on getting configuration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error when updating configuration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error, please try again or contact the administrator.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error, registration is disabled.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File extension not allowed.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File size is greater than the allowed size.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid credentials.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Provided data are invalid.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please log in again.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please log in again.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Network Error.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The new email must be different than curent email\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No file provided.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No selected file.\"])},\n \"the number of files in the archive exceeds the limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The number of files in the archive exceeds the limit.\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password: password and password confirmation don't match.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Provide a valid auth token.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sorry, that username is already taken.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sport does not exist.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Signature expired. Please log in again.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Successfully registered.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User does not exist.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"A valid email must be provided for administrator contact\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You can not delete your account, no other user has admin rights.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You do not have permissions.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"previous\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"next\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Resend confirmation email\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Authorize\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cancel\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Clear filters\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete my account\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disable\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enable\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Log in\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Register\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Submit\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Yes\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"about\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirmation\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"contact\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"day\"]), _normalize([\"days\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Displayed\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"here\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hidden\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Home\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"order by\"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sort\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascending\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descending\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"par page\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Total\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dashboard\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This month\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error. Please try again or contact the administrator.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The application seems to have encountered some issues.
                                                                              Please try again later or contact the administrator.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Page not found\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Workout not found\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Something went wrong\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add a new OAuth2 application\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Id\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Secret\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application description\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Issue at\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application name\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Redirect URL\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scope\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to application configuration.\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to auth endpoints.\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to auth endpoints.\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to users endpoints.\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to users endpoints.\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to workouts endpoints.\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to workouts endpoints.\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application URL\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application created successfully. Make sure to copy the secret now, it won't show up again.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete this app?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"The application \", _interpolate(_list(0)), \" is requesting:\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OAuth2 applications\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Authorize \", _interpolate(_list(0)), \" to use your account?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"copy to the clipboard\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete application\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add an application\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application not found!\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no applications\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no description\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revoke all tokens\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to revoke all tokens?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"All existing associated tokens have been revoked.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Transport)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Virtual)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hiking\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountain Biking\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountain Biking (Electric)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Rowing\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Running\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skiing (Alpine)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skiing (Cross Country)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Snowshoes\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Walking\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistics\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"week\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"month\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"year\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Didn't received instructions?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Check your email. A new confirmation email has been sent to the address provided.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Already have an account?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete your account? All data will be deleted, this cannot be undone\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Current password\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter a valid email address.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter a password\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter on username\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hide password\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please request a new password reset.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Language\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"log in\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Login\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Logout\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New password\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No users found.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"At least 8 characters required.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Forgot password?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password reset\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Check your email. If your address is in our database, you'll received an email with a link to reset your password.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"weak\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"average\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"good\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"strong\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"password strength\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid predictable letter substitutions like \", \"@\", \" for a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid reversed spellings of common words.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalize some, but not all letters.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalize more than the first letter.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid dates and years that are associated with you.\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid recent years.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid years that are associated with you.\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid common character sequences.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid repeated words and characters.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Use longer keyboard patterns and change typing direction multiple times.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add more words that are less common.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Use multiple words, but avoid common phrases.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You can create strong passwords without using symbols, numbers, or uppercase letters.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"If you use this password elsewhere, you should change it.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Your password have been updated. Click \", _interpolate(_list(0)), \" to log in.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Account edition\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ascent-related data (records, total)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back to profile\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bio\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Birth date\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date display format\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit profile\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit preferences\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit sports preferences\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Please \", _interpolate(_list(0)), \" to change your email address again or contact the administrator\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"First name\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"First day of week\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Language\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Last name\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Location\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Monday\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Picture\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Picture edition\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update picture\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove picture\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preferences edition\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile edition\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration date\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sports preferences edition\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sunday\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"account\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"apps\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"picture\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"preferences\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"profile\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sports\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"action\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"color\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"disabled by admin\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"active\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"label\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"stopped speed threshold\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been updated successfully. Please check your email to confirm your new email address.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been created successfully.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"A link to activate your account has been emailed to the address provided.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been updated successfully.\"])},\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Units for distance\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Imperial system (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Metric system (m, km)\"])}\n },\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Timezone\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Register\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Resend account confirmation email\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sorry, registration is disabled.\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset your password\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"show password\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This user account is inactive.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"user picture\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Username\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 to 30 characters required, only alphanumeric characters and the underscore character \\\"_\\\" allowed.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add a workout\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"analysis\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascent\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ave. speed\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"average speed\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"back to workout\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descent\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"display filters\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"distance\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"duration\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit the workout\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"elevation\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"end\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"from\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".gpx file\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hide filters\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Latest workouts\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load more workouts\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max. altitude\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max files\"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max size\"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max. speed\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"min. altitude\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next segment\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Next workout\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"data from gpx, without any cleaning\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No file provided\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no folder inside\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No map\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next segment\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next workout\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No notes\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No previous segment\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No previous workout\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No records.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No workouts.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"notes\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pauses\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Previous segment\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Previous workout\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"record\"]), _normalize([\"records\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ave. speed\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Farthest distance\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Highest ascent\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Longest duration\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. speed\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"remaining characters\"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"segment\"]), _normalize([\"segments\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"speed\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"sport\"]), _normalize([\"sports\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start and finish\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start elevation axis at zero\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"title\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"to\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"total duration\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Upload one!\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"humidity\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"temperature\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wind\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNE\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NE\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ENE\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ESE\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SE\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSE\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSW\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SW\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WSW\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"W\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WNW\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NW\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNW\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"clear day\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"clear night\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cloudy\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fog\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partly cloudy day\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partly cloudy night\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"rain\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sleet\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"snow\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wind\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"with .gpx file\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"without .gpx file\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"workout\"]), _normalize([\"workouts\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workout date\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete this workout?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".zip file\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"or .zip file containing .gpx files\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Contacter l'administrateur\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee est un tracker d'activités sportives (en extérieur).\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"sous licence \", _interpolate(_list(0)), \" (en) \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Code source (en)\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Action\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer le compte\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Actif\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter/retirer des droits d'administration, supprimer des comptes utilisateurs.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email de l'administrateur pour contact \"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nombre maximum d'utilisateurs actifs \"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Si égal à 0, pas limite d'inscription\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nombre max. de fichiers dans une archive zip \"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"non renseigné\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Taille max. des fichiers (en Mo) \"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Configuration de l'application\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Taille max. des archives zip (en Mo) \"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revenir à l'admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Êtes-vous sûr de vouloir supprimer le compte de l'utilisateur \", _interpolate(_list(0)), \" ? Toutes les données seront définitivement.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Êtes-vous sûr de vouloir réinitialiser le mot de passe de l'utilisateur \", _interpolate(_list(0)), \" ?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Adresse email actuelle\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer l'utilisateur\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'envoi d'emails est désactivé.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer/désactiver des sports.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nouvelle adresse email\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Le mot de passe a été réinitialisé.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Les inscriptions sont actuellement désactivées.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Les inscriptions sont actuellement activées.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinit. le mot de passe\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Actif\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"des séances existent\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Label\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration - Sports\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Configurer l'application (nombre maximum d'utilisateurs inscrits, taille maximale des fichers).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Changer l'email\"])},\n \"USER\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"utilisateur\"]), _normalize([\"utilisateurs\"])])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'adresse email a été mise à jour.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter les droits d'admin\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Retirer les droits d'admin\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"status administrateur\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date d'inscription\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"statut du compte\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nom d'utilisateur\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nombre de séances\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur. Veuillez réessayer ou contacter l'administrateur.\"])},\n \"at least one file in zip archive exceeds size limit, please check the archive\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Au moins un fichier de l'archive zip dépasse la taille maximale, veuillez vérifier l'archive.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Courriel : une adresse électronique valide doit être fournie.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors du traitement du fichier gpx.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de l'analyse du fichier.\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de la récupération de la configuration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de la mise à jour de la configuration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur, veuillez réessayer ou contacter l'administrateur.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur, les inscriptions sont désactivées.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Extension de fichier non autorisée.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"La taille du fichier est supérieure à la limite autorisée.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Identifiants invalides.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Données fournies incorrectes.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton de connexion invalide, merci de vous reconnecter.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton de connexion, merci de vous reconnecter.\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier fourni.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier sélectionné.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur réseau.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"La nouvelle addresse électronique doit être differente de l'adresse actuelle\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe : les mots de passe saisis sont différents.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Merci de fournir un jeton de connexion valide.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ce sport n'existe pas.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Signature expirée. Merci de vous reconnecter.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désolé, ce nom d'utilisateur est déjà utilisé.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Inscription validée.\"])},\n \"the number of files in the archive exceeds the limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Le nombre de fichiers de l'archive dépasse la limite.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'utilisateur n'existe pas.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Une adresse électronique doit être fournie pour le contact de l'administrateur\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous ne pouvez pas supprimer votre compte, aucun autre utilisateur n'a des droits d'administration.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous n'avez pas les permissions nécessaires.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"précédent\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"suivant\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Renvoyer le message de confirmation\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Autoriser\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Retour\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Annuler\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialiser\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer mon compte\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désactiver\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filtrer\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se connecter\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Non\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S'inscrire\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinit.\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Valider\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Oui\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"à propos\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirmation\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"contact\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"jour\"]), _normalize([\"jours\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Affiché\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation (en)\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ici\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Masqué\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accueil\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"trier par \"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"tri\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascendant\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descendant\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"par page\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Total\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tableau de bord\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ce mois-ci\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur. Veuillez réessayer ou contacter l'administrateur.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'application semble rencontrer quelques problèmes.
                                                                              Veuillez réessayer plus tard ou contacter l'administrateur.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Page introuvable\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance introuvable\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Une erreur s'est produite\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une nouvelle application OAuth2\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Identifiant\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Secret\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Description de l'application\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Créée le\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom de l'application\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"URL de redirection\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scope\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture à la configuration de l'application.\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes auth.\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes auth.\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes users.\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes users.\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes workouts.\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes workouts.\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"URL de l'application\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application créée avec succès. Assurez-vous de copier le secret maintenant, il ne s'affichera plus.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr de vouloir supprimer cette application ?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"L'application \", _interpolate(_list(0)), \" demande les accès suivants :\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Applications OAuth2\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Autoriser \", _interpolate(_list(0)), \" à utiliser votre compte ?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"copier dans le presse papier\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer l'application\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une application\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application introuvable !\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de applications\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de description\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Révoquer tous les jetons\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr de vouloir révoquer tous les jetons ?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tous les jetons associés existants ont été révoqués.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Transport)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Virtuel)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Randonnée\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"VTT\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"VTT (Électrique)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aviron\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Course\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ski (Alpin)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ski (Randonnée)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Raquettes\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Marche\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistiques\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"semaine\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mois\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"année\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous n'avez pas reçu les instructions ?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vérifiez vos courriels. Un nouveau courriel de confirmation a été envoyé à l'adresse électronique fournie.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous avez déjà un compte ?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr·e de vouloir supprimer votre compte ? Toutes les données seront définitivement effacés\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe actuel\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Courriel\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Saisissez une adresse électronique valide.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Saisissez un mot de passe\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filtrer sur le nom d'utilisateur\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"masquer le mot de passe\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton invalide, veuillez demander une nouvelle réinitialisation de mot de passe.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Langue\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"connecter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se connecter\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se déconnecter\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nouveau mot de passe\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aucun utilisateur trouvé.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"8 caractères minimum.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe oublié ?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialisation du mot de passe\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vérifiez vos courriels. Si vote adresse est dans notre base de données, vous recevrez un courriel avec un lien pour réinitialiser votre mot de passe.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"faible\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"moyenne\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"bonne\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"forte\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"robustesse du mot de passe\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les substitutions de lettres prévisibles comme \", \"@\", \" pour a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les orthographes inversées des mots courants.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mettez quelques lettres en majuscules, mais pas toutes.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalisez mais pas seulement la première lettre.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les dates et les années qui vous sont associées. (ex : date ou année de naissance).\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les dernières années.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les années qui vous sont associées. (ex : date de naissance).\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les séquences de caractères courantes.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les mots et les caractères répétés.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Utilisez des motifs de clavier plus longs et changez de sens de frappe plusieurs fois.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajoutez des mots moins courants.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Utilisez plusieurs mots, mais évitez les phrases courantes.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous pouvez créer des mots de passe forts sans utiliser de symboles, de chiffres ou de lettres majuscules.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Si vous utilisez ce mot de passe ailleurs, vous devriez le modifier.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Votre mot de passe a été mis à jour. Cliquez \", _interpolate(_list(0)), \" pour vous connecter.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour du compte\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Données relatives au dénivelé positif (records, total)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revenir au profil\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bio\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date de naissance\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Format d'affichage de la date\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier le profil\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier les préférences\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier les préférences des sports\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Veuillez vous \", _interpolate(_list(0)), \" pour changer de nouveau votre adresse électronique ou contacter l'administrateur\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Premier jour de la semaine\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prénom\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Langue\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lieu\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lundi\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image de profil\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour de l'image de profil\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mettre à jour l'image\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour des préférences\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour du profil\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date d'inscription\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour des préférences des sports\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dimanche\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"compte\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"apps\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"image\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"préférences\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"profil\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sports\"])}\n },\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unités pour les distances\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Système impérial (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Système métrique (m, km)\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"action\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"couleur\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"désactivé par l'administrateur\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"actif\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"label\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"seuil de vitesse arrêtée\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été modifié avec succès. Veuillez vérifier votre boîte de réception pour valider votre nouvelle adresse électronique.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été créé avec succès.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Un lien pour activer votre compte a été envoyé à l'adresse électronique fournie.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été modifié avec succès.\"])},\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fuseau horaire\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S'inscrire\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désolé, les inscriptions sont désactivées.\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Envoyer à nouveau le courriel de confirmation de compte\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialiser votre mot de passe\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"afficher le mot de passe\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Le compte de cet utilisateur est inactif.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"photo de l'utilisateur\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom d'utilisateur\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 à 30 caractères requis, seuls les caractères alphanumériques et le caractère _ sont autorisés.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une séance\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"analyse\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"dénivelé positif\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse moyenne\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse moy.\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"revenir à la séance\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"dénivelé négatif\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"afficher les filtres\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"distance\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"durée\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier la séance\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fin\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"à partir de\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fichier .gpx\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"masquer les filtres\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séances récentes\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Charger les séances suivantes\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude max\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fichiers max. \"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"taille max. \"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse max\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude min\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Segment suivant\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance suivante\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"données issues du fichier gpx, sans correction\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier fourni\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de répertoire\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de carte\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de segment suivant\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séance suivante\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de notes\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de segment précédent\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séance précédente\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de records.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séances.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"notes\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pauses\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Segment précédent\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance précédente\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"record\"]), _normalize([\"records\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vitesse moy.\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Distance la + longue\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dénivelé positif le + élevé\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durée la + longue\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vitesse max.\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nombre de caractères restants \"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"segment\"]), _normalize([\"segments\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"sport\"]), _normalize([\"sports\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"début\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Départ et arrivée\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"démarrer l'axe de l'altitude à 0\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"titre\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"jusqu'au\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"durée totale\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajoutez votre première séance !\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"humidité\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"température\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vent\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNE\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NE\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ENE\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ESE\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SE\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSE\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSO\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SO\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OSO\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"O\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ONO\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NO\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNO\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ensoleillé\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuit claire\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuageux\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"brouillard\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partiellement nuageux\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuit partiellement nuageuse\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pluie\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"neige fondue\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"neige\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"venteux\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"avec un fichier .gpx\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sans fichier .gpx\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"séance\"]), _normalize([\"séances\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date de la séance\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Etes-vous sûr de vouloir supprimer cette séance ?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"archive .zip\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ou une archive .zip contenant des fichiers .gpx\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","/* eslint-disable no-console */\n\nimport { register } from 'register-service-worker'\n\nif (process.env.NODE_ENV === 'production') {\n register(`${process.env.BASE_URL}service-worker.js`, {\n ready() {\n console.log(\n 'App is being served from cache by a service worker.\\n' +\n 'For more details, visit https://goo.gl/AFskqB'\n )\n },\n registered() {\n console.log('Service worker has been registered.')\n },\n cached() {\n console.log('Content has been cached for offline use.')\n },\n updatefound() {\n console.log('New content is downloading.')\n },\n updated() {\n console.log('New content is available; please refresh.')\n },\n offline() {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n )\n },\n error(error) {\n console.error('Error during service worker registration:', error)\n },\n })\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2c73279e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"footer\" }\nconst _hoisted_2 = { class: \"footer-items\" }\nconst _hoisted_3 = { class: \"footer-item\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"strong\", null, \"FitTrackee\", -1))\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"footer-item bullet\" }, \"•\", -1))\nconst _hoisted_6 = { class: \"footer-item\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"footer-item bullet\"\n}\nconst _hoisted_8 = {\n key: 1,\n class: \"footer-item\"\n}\nconst _hoisted_9 = [\"href\"]\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"footer-item bullet\" }, \"•\", -1))\nconst _hoisted_11 = { class: \"footer-item\" }\nconst _hoisted_12 = {\n href: \"https://samr1.github.io/FitTrackee/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\n\nimport { toRefs } from 'vue'\n\n interface Props {\n version: string\n adminContact?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Footer',\n props: {\n version: null,\n adminContact: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n version: string\n adminContact?: string\n }\n\n \n\n const { adminContact, version } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _hoisted_4,\n _createTextVNode(\" v\" + _toDisplayString(_unref(version)), 1)\n ]),\n _hoisted_5,\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_router_link, { to: \"/about\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('common.ABOUT')), 1)\n ]),\n _: 1\n })\n ]),\n (_unref(adminContact))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, \"•\"))\n : _createCommentVNode(\"\", true),\n (_unref(adminContact))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"a\", {\n href: `mailto:${_unref(adminContact)}`\n }, _toDisplayString(_ctx.$t('common.CONTACT')), 9, _hoisted_9)\n ]))\n : _createCommentVNode(\"\", true),\n _hoisted_10,\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"a\", _hoisted_12, _toDisplayString(_ctx.$t('common.DOCUMENTATION')), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./Footer.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Footer.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Footer.vue?vue&type=style&index=0&id=2c73279e&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2c73279e\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-95c1cc02\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"nav\" }\nconst _hoisted_2 = { class: \"nav-container\" }\nconst _hoisted_3 = { class: \"nav-app-name\" }\nconst _hoisted_4 = { class: \"nav-items-close\" }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"app-name\" }, \"FitTrackee\", -1))\nconst _hoisted_6 = {\n key: 0,\n class: \"nav-items-group\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"nav-item nav-separator\" }, null, -1))\nconst _hoisted_8 = { class: \"nav-items-user-menu\" }\nconst _hoisted_9 = {\n key: 0,\n class: \"nav-items-group\"\n}\nconst _hoisted_10 = { class: \"nav-item nav-profile-img\" }\nconst _hoisted_11 = {\n key: 1,\n class: \"nav-items-group\"\n}\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", { class: \"fa fa-language\" }, null, -1))\n\nimport { ComputedRef, computed, ref, capitalize } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IDropdownOption } from '@/types/forms'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { availableLanguages } from '@/utils/locales'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'NavBar',\n emits: ['menuInteraction'],\n setup(__props, { emit }) {\n\n \n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const isAuthenticated: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n )\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const isMenuOpen = ref(false)\n\n function openMenu() {\n isMenuOpen.value = true\n emit('menuInteraction', true)\n }\n function closeMenu() {\n isMenuOpen.value = false\n emit('menuInteraction', false)\n }\n function updateLanguage(option: IDropdownOption) {\n store.dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n option.value.toString()\n )\n }\n function logout() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.LOGOUT)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Dropdown = _resolveComponent(\"Dropdown\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: \"nav-item app-name\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/')))\n }, \" FitTrackee \")\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"nav-icon-open\", { 'menu-open': isMenuOpen.value }])\n }, [\n _createElementVNode(\"i\", {\n class: \"fa fa-bars hamburger-icon\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (openMenu()))\n })\n ], 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"nav-items\", { 'menu-open': isMenuOpen.value }])\n }, [\n _createElementVNode(\"div\", _hoisted_4, [\n _hoisted_5,\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa fa-close close-icon nav-item\", { 'menu-closed': !isMenuOpen.value }]),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (closeMenu()))\n }, null, 2)\n ]),\n _createElementVNode(\"div\", {\n class: \"nav-items-app-menu\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (closeMenu()))\n }, [\n (_unref(isAuthenticated))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('dashboard.DASHBOARD')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/workouts\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 2))), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/statistics\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('statistics.STATISTICS')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/workouts/add\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.ADD_WORKOUT')), 1)\n ]),\n _: 1\n }),\n (_unref(isAuthenticated) && _unref(authUser).admin)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"nav-item\",\n to: \"/admin\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.ADMIN')), 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n _hoisted_7\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n (_unref(isAuthenticated))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _createVNode(UserPicture, { user: _unref(authUser) }, null, 8, [\"user\"])\n ]),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/profile\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(authUser).username), 1)\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", {\n class: \"nav-item nav-link\",\n onClick: logout\n }, _toDisplayString(_ctx.$t('user.LOGOUT')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/login\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.LOGIN')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/register\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.REGISTER')), 1)\n ]),\n _: 1\n })\n ])),\n (_unref(availableLanguages) && _unref(language))\n ? (_openBlock(), _createBlock(_component_Dropdown, {\n key: 2,\n class: \"nav-item\",\n options: _unref(availableLanguages),\n selected: _unref(language),\n onSelected: updateLanguage\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }, 8, [\"options\", \"selected\"]))\n : _createCommentVNode(\"\", true)\n ])\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./NavBar.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NavBar.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./NavBar.vue?vue&type=style&index=0&id=95c1cc02&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-95c1cc02\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-47759238\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"no-config\" }\nconst _hoisted_2 = { class: \"error-page\" }\nconst _hoisted_3 = { class: \"error-img\" }\nconst _hoisted_4 = [\"innerHTML\"]\n\nimport ErrorImg from '@/components/Common/Images/ErrorImg.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'NoConfig',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(ErrorImg)\n ]),\n _createElementVNode(\"p\", {\n class: \"error-message\",\n innerHTML: _ctx.$t('error.APP_ERROR')\n }, null, 8, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./NoConfig.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./NoConfig.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./NoConfig.vue?vue&type=style&index=0&id=47759238&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-47759238\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, createVNode as _createVNode, unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, normalizeClass as _normalizeClass, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { id: \"top\" }, null, -1)\nconst _hoisted_2 = {\n key: 0,\n class: \"app-container\"\n}\nconst _hoisted_3 = { class: \"app-loading\" }\nconst _hoisted_4 = { class: \"container scroll\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-up\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_6 = [\n _hoisted_5\n]\n\nimport { ComputedRef, computed, ref, onBeforeMount, onMounted } from 'vue'\n\n import Footer from '@/components/Footer.vue'\n import NavBar from '@/components/NavBar.vue'\n import NoConfig from '@/components/NoConfig.vue'\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { useStore } from '@/use/useStore'\n import { localeFromLanguage } from '@/utils/locales'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'App',\n setup(__props) {\n\n const store = useStore()\n\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const appLoading: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_LOADING]\n )\n const hideScrollBar = ref(false)\n const displayScrollButton = ref(false)\n\n onBeforeMount(() => {\n initLanguage()\n store.dispatch(ROOT_STORE.ACTIONS.GET_APPLICATION_CONFIG)\n })\n onMounted(() => scroll())\n\n function updateHideScrollBar(isMenuOpen: boolean) {\n hideScrollBar.value = isMenuOpen\n }\n function isScrolledToBottom(element: Element): boolean {\n return (\n element.getBoundingClientRect().top < window.innerHeight &&\n element.getBoundingClientRect().bottom >= 0\n )\n }\n function scroll() {\n window.onscroll = () => {\n const bottom = document.querySelector('#bottom')\n displayScrollButton.value = bottom !== null && isScrolledToBottom(bottom)\n }\n }\n function scrollToTop() {\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n })\n setTimeout(() => {\n displayScrollButton.value = false\n }, 300)\n }\n function initLanguage() {\n let language = 'en'\n try {\n const navigatorLanguage = navigator.language.split('-')[0]\n if (navigatorLanguage in localeFromLanguage) {\n language = navigatorLanguage\n }\n } catch (e) {\n language = 'en'\n }\n store.dispatch(ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE, language)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Loader = _resolveComponent(\"Loader\")!\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _hoisted_1,\n _createVNode(NavBar, { onMenuInteraction: updateHideScrollBar }),\n (_unref(appLoading))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Loader)\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([\"app-container\", { 'hide-scroll': hideScrollBar.value }])\n }, [\n (_unref(appConfig))\n ? (_openBlock(), _createBlock(_component_router_view, { key: 0 }))\n : (_openBlock(), _createBlock(NoConfig, { key: 1 }))\n ], 2)),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"scroll-button\", { 'display-button': displayScrollButton.value }]),\n onClick: scrollToTop\n }, _hoisted_6, 2)\n ]),\n (_unref(appConfig))\n ? (_openBlock(), _createBlock(Footer, {\n key: 2,\n version: _unref(appConfig) ? _unref(appConfig).version : '',\n adminContact: _unref(appConfig).admin_contact\n }, null, 8, [\"version\", \"adminContact\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n}\n}\n\n})","import script from \"./App.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./App.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./App.vue?vue&type=style&index=0&id=2930d5e0&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-69d7e4ff\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"alert-message\" }\nconst _hoisted_2 = [\"innerHTML\"]\n\nimport { toRefs } from 'vue'\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AlertMessage',\n props: {\n message: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n message: string\n }\n\n \n const { message } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n innerHTML: _ctx.$t(_unref(message))\n }, null, 8, _hoisted_2)\n ]))\n}\n}\n\n})","import script from \"./AlertMessage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AlertMessage.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AlertMessage.vue?vue&type=style&index=0&id=69d7e4ff&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-69d7e4ff\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8cf5cc64\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"custom-textarea\" }\nconst _hoisted_2 = [\"id\", \"name\", \"maxLenght\", \"disabled\"]\nconst _hoisted_3 = { class: \"remaining-chars\" }\n\nimport { ref, watch, withDefaults } from 'vue'\n\n interface Props {\n name: string\n charLimit?: number\n disabled?: boolean\n input?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CustomTextArea',\n props: {\n name: null,\n charLimit: { default: 500 },\n disabled: { type: Boolean, default: false },\n input: { default: '' }\n },\n emits: ['updateValue'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { name: string, charLimit: number, disabled: boolean, input: string | null }\n\n \n\n \n\n const text = ref('')\n\n function updateText(event: Event & { target: HTMLInputElement }) {\n emit('updateValue', event.target.value)\n }\n\n watch(\n () => props.input,\n (value) => {\n text.value = value === null ? '' : value\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _withDirectives(_createElementVNode(\"textarea\", {\n id: __props.name,\n name: __props.name,\n maxLenght: __props.charLimit,\n disabled: __props.disabled,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((text).value = $event)),\n onInput: updateText\n }, null, 40, _hoisted_2), [\n [_vModelText, text.value]\n ]),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('workouts.REMAINING_CHARS')) + \": \" + _toDisplayString(text.value.length) + \"/\" + _toDisplayString(__props.charLimit), 1)\n ]))\n}\n}\n\n})","import script from \"./CustomTextArea.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CustomTextArea.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CustomTextArea.vue?vue&type=style&index=0&id=8cf5cc64&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8cf5cc64\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, Fragment as _Fragment } from \"vue\"\n\nimport { ComputedRef, computed, toRefs, withDefaults } from 'vue'\n\n import { TUnit } from '@/types/units'\n import { units, convertDistance } from '@/utils/units'\n\n interface Props {\n distance: number\n unitFrom: TUnit\n useImperialUnits: boolean\n digits?: number\n displayUnit?: boolean\n speed?: boolean\n strong?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Distance',\n props: {\n distance: null,\n unitFrom: null,\n useImperialUnits: { type: Boolean },\n digits: { default: 2 },\n displayUnit: { type: Boolean, default: true },\n speed: { type: Boolean, default: false },\n strong: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { distance: number, unitFrom: TUnit, useImperialUnits: boolean, digits: number, displayUnit: boolean, speed: boolean, strong: boolean }\n\n \n\n const {\n digits,\n displayUnit,\n distance,\n speed,\n strong,\n unitFrom,\n useImperialUnits,\n } = toRefs(props)\n const unitTo: ComputedRef = computed(() =>\n useImperialUnits.value\n ? units[unitFrom.value].defaultTarget\n : unitFrom.value\n )\n const convertedDistance = computed(() =>\n useImperialUnits.value\n ? convertDistance(\n distance.value,\n unitFrom.value,\n unitTo.value,\n digits.value\n )\n : parseFloat(distance.value.toFixed(digits.value))\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"distance\", { strong: _unref(strong) }])\n }, _toDisplayString(_unref(convertedDistance)), 3),\n _createTextVNode(\" \" + _toDisplayString(' ') + \" \"),\n (_unref(displayUnit))\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n class: _normalizeClass([\"unit\", { strong: _unref(strong) }])\n }, _toDisplayString(_unref(unitTo)) + _toDisplayString(_unref(speed) ? '/h' : ''), 3))\n : _createCommentVNode(\"\", true)\n ], 64))\n}\n}\n\n})","import script from \"./Distance.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Distance.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Distance.vue?vue&type=style&index=0&id=f46ff1d6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-f46ff1d6\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2d3b4eac\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"dropdown-wrapper\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"dropdown-list\"\n}\nconst _hoisted_3 = [\"onClick\"]\n\nimport { ref, watch } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { IDropdownOption, TDropdownOptions } from '@/types/forms'\n interface Props {\n options: TDropdownOptions\n selected: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Dropdown',\n props: {\n options: null,\n selected: null\n },\n emits: {\n selected: (option: IDropdownOption) => option,\n },\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n options: TDropdownOptions\n selected: string\n }\n\n \n\n \n\n const route = useRoute()\n const isOpen = ref(false)\n const dropdownOptions = props.options.map((option) => option)\n\n function toggleDropdown() {\n isOpen.value = !isOpen.value\n }\n function updateSelected(option: IDropdownOption) {\n emit('selected', option)\n isOpen.value = false\n }\n\n watch(\n () => route.path,\n () => (isOpen.value = false)\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"dropdown-selected\",\n onClick: toggleDropdown\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n (isOpen.value)\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(dropdownOptions), (option, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n class: _normalizeClass([\"dropdown-item\", { selected: option.value === __props.selected }]),\n key: index,\n onClick: ($event: any) => (updateSelected(option))\n }, _toDisplayString(option.label), 11, _hoisted_3))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./Dropdown.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Dropdown.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Dropdown.vue?vue&type=style&index=0&id=2d3b4eac&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2d3b4eac\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2659a79a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"error-message\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { key: 1 }\n\nimport { toRefs } from 'vue'\n\n interface Props {\n message: string | string[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'ErrorMessage',\n props: {\n message: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n message: string | string[]\n }\n\n \n const { message } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (Array.isArray(_unref(message)))\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(message), (subMessage, index) => {\n return (_openBlock(), _createElementBlock(\"li\", { key: index }, _toDisplayString(_ctx.$t(subMessage)), 1))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(_unref(message))), 1))\n ]))\n}\n}\n\n})","import script from \"./ErrorMessage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ErrorMessage.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./ErrorMessage.vue?vue&type=style&index=0&id=2659a79a&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2659a79a\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingSport.vue?vue&type=template&id=be8023a2\"\nimport script from \"./CyclingSport.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingSport.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingTransport.vue?vue&type=template&id=97af5148\"\nimport script from \"./CyclingTransport.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingTransport.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingVirtual.vue?vue&type=template&id=ec8f7bb6\"\nimport script from \"./CyclingVirtual.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingVirtual.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Hiking.vue?vue&type=template&id=40903dc4\"\nimport script from \"./Hiking.vue?vue&type=script&lang=js\"\nexport * from \"./Hiking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./MountainBiking.vue?vue&type=template&id=5bdbc6e8\"\nimport script from \"./MountainBiking.vue?vue&type=script&lang=js\"\nexport * from \"./MountainBiking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./MountainBikingElectric.vue?vue&type=template&id=21e72aec\"\nimport script from \"./MountainBikingElectric.vue?vue&type=script&lang=js\"\nexport * from \"./MountainBikingElectric.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Rowing.vue?vue&type=template&id=31ae2dd5\"\nimport script from \"./Rowing.vue?vue&type=script&lang=js\"\nexport * from \"./Rowing.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Running.vue?vue&type=template&id=4d47a4fe\"\nimport script from \"./Running.vue?vue&type=script&lang=js\"\nexport * from \"./Running.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./SkiingAlpine.vue?vue&type=template&id=3ebf3bca\"\nimport script from \"./SkiingAlpine.vue?vue&type=script&lang=js\"\nexport * from \"./SkiingAlpine.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./SkiingCrossCountry.vue?vue&type=template&id=1561bbe6\"\nimport script from \"./SkiingCrossCountry.vue?vue&type=script&lang=js\"\nexport * from \"./SkiingCrossCountry.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Snowshoes.vue?vue&type=template&id=67df2761\"\nimport script from \"./Snowshoes.vue?vue&type=script&lang=js\"\nexport * from \"./Snowshoes.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Trail.vue?vue&type=template&id=32a14156\"\nimport script from \"./Trail.vue?vue&type=script&lang=js\"\nexport * from \"./Trail.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Walking.vue?vue&type=template&id=2ed4f5f4\"\nimport script from \"./Walking.vue?vue&type=script&lang=js\"\nexport * from \"./Walking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"title\"]\n\nimport { inject, toRefs, withDefaults } from 'vue'\n\n import CyclingSport from '@/components/Common/Images/SportImage/CyclingSport.vue'\n import CyclingTransport from '@/components/Common/Images/SportImage/CyclingTransport.vue'\n import CyclingVirtual from '@/components/Common/Images/SportImage/CyclingVirtual.vue'\n import Hiking from '@/components/Common/Images/SportImage/Hiking.vue'\n import MountainBiking from '@/components/Common/Images/SportImage/MountainBiking.vue'\n import MountainBikingElectric from '@/components/Common/Images/SportImage/MountainBikingElectric.vue'\n import Rowing from '@/components/Common/Images/SportImage/Rowing.vue'\n import Running from '@/components/Common/Images/SportImage/Running.vue'\n import SkiingAlpine from '@/components/Common/Images/SportImage/SkiingAlpine.vue'\n import SkiingCrossCountry from '@/components/Common/Images/SportImage/SkiingCrossCountry.vue'\n import Snowshoes from '@/components/Common/Images/SportImage/Snowshoes.vue'\n import Trail from '@/components/Common/Images/SportImage/Trail.vue'\n import Walking from '@/components/Common/Images/SportImage/Walking.vue'\n\n interface Props {\n sportLabel: string\n color: string | null\n title?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sportLabel: null,\n color: null,\n title: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { sportLabel: string, color: string | null, title: string }\n\n \n\n const { color, sportLabel, title } = toRefs(props)\n const sportColors = inject('sportColors')\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"sport-img\",\n style: _normalizeStyle({ fill: _unref(color) ? _unref(color) : _unref(sportColors)[_unref(sportLabel)] }),\n title: _unref(title) ? _unref(title) : _ctx.$t(`sports.${_unref(sportLabel)}.LABEL`)\n }, [\n (_unref(sportLabel) === 'Cycling (Sport)')\n ? (_openBlock(), _createBlock(CyclingSport, { key: 0 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Cycling (Transport)')\n ? (_openBlock(), _createBlock(CyclingTransport, { key: 1 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Cycling (Virtual)')\n ? (_openBlock(), _createBlock(CyclingVirtual, { key: 2 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Hiking')\n ? (_openBlock(), _createBlock(Hiking, { key: 3 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Mountain Biking')\n ? (_openBlock(), _createBlock(MountainBiking, { key: 4 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Mountain Biking (Electric)')\n ? (_openBlock(), _createBlock(MountainBikingElectric, { key: 5 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Rowing')\n ? (_openBlock(), _createBlock(Rowing, { key: 6 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Running')\n ? (_openBlock(), _createBlock(Running, { key: 7 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Skiing (Alpine)')\n ? (_openBlock(), _createBlock(SkiingAlpine, { key: 8 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Skiing (Cross Country)')\n ? (_openBlock(), _createBlock(SkiingCrossCountry, { key: 9 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Snowshoes')\n ? (_openBlock(), _createBlock(Snowshoes, { key: 10 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Trail')\n ? (_openBlock(), _createBlock(Trail, { key: 11 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Walking')\n ? (_openBlock(), _createBlock(Walking, { key: 12 }))\n : _createCommentVNode(\"\", true)\n ], 12, _hoisted_1))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","\n\n\n","import { render } from \"./Loader.vue?vue&type=template&id=4c9921ee&scoped=true\"\nconst script = {}\n\nimport \"./Loader.vue?vue&type=style&index=0&id=4c9921ee&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4c9921ee\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-e8fcfaba\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"modal\" }\nconst _hoisted_2 = { class: \"custom-modal\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"modal-message\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"modal-message\"\n}\nconst _hoisted_5 = { class: \"modal-buttons\" }\n\nimport { ComputedRef, computed, toRefs, withDefaults, onUnmounted } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n title: string\n message: string\n strongMessage?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Modal',\n props: {\n title: null,\n message: null,\n strongMessage: { default: () => null }\n },\n emits: ['cancelAction', 'confirmAction'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { title: string, message: string, strongMessage: string | null }\n\n \n\n \n\n const store = useStore()\n\n const { title, message, strongMessage } = toRefs(props)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\nreturn (_ctx: any,_cache: any) => {\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(title)), 1)\n ]),\n content: _withCtx(() => [\n (_unref(strongMessage))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createVNode(_component_i18n_t, { keypath: _unref(message) }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(strongMessage)), 1)\n ]),\n _: 1\n }, 8, [\"keypath\"])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, _toDisplayString(_unref(message)), 1)),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 2,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_5, [\n (!_unref(errorMessages))\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"confirm\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('confirmAction')))\n }, _toDisplayString(_ctx.$t('buttons.YES')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('cancelAction')))\n }, _toDisplayString(_ctx.$t(`buttons.${_unref(errorMessages) ? 'CANCEL' : 'NO'}`)), 1)\n ])\n ]),\n _: 1\n })\n ])\n ]))\n}\n}\n\n})","import script from \"./Modal.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Modal.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Modal.vue?vue&type=style&index=0&id=e8fcfaba&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-e8fcfaba\"]])\n\nexport default __exports__","import AlertMessage from '@/components/Common/AlertMessage.vue'\nimport Card from '@/components/Common/Card.vue'\nimport CustomTextArea from '@/components/Common/CustomTextArea.vue'\nimport Distance from '@/components/Common/Distance.vue'\nimport Dropdown from '@/components/Common/Dropdown.vue'\nimport ErrorMessage from '@/components/Common/ErrorMessage.vue'\nimport SportImage from '@/components/Common/Images/SportImage/index.vue'\nimport Loader from '@/components/Common/Loader.vue'\nimport Modal from '@/components/Common/Modal.vue'\n\nexport const customComponents = [\n { target: AlertMessage, name: 'AlertMessage' },\n { target: Card, name: 'Card' },\n { target: CustomTextArea, name: 'CustomTextArea' },\n { target: Distance, name: 'Distance' },\n { target: Dropdown, name: 'Dropdown' },\n { target: ErrorMessage, name: 'ErrorMessage' },\n { target: Loader, name: 'Loader' },\n { target: Modal, name: 'Modal' },\n { target: SportImage, name: 'SportImage' },\n]\n","import { Directive, DirectiveBinding } from 'vue'\n\ninterface ClickOutsideHTMLElement extends HTMLElement {\n clickOutsideEvent?: (event: MouseEvent | TouchEvent) => void\n}\n\nexport const clickOutsideDirective: Directive = {\n mounted: (\n element: ClickOutsideHTMLElement,\n binding: DirectiveBinding\n ): void => {\n element.clickOutsideEvent = function (event) {\n if (!(element === event.target || element.contains(event.target))) {\n binding.value(event)\n }\n }\n document.body.addEventListener('click', element.clickOutsideEvent)\n document.body.addEventListener('touchstart', element.clickOutsideEvent)\n },\n unmounted: function (element: ClickOutsideHTMLElement): void {\n if (element.clickOutsideEvent) {\n document.body.removeEventListener('click', element.clickOutsideEvent)\n document.body.removeEventListener('touchstart', element.clickOutsideEvent)\n element.clickOutsideEvent = undefined\n }\n },\n}\n","import {\n Chart,\n BarElement,\n LineElement,\n PointElement,\n Legend,\n Title,\n Tooltip,\n Filler,\n BarController,\n CategoryScale,\n LineController,\n LinearScale,\n} from 'chart.js'\nimport ChartDataLabels from 'chartjs-plugin-datalabels'\nimport { createApp } from 'vue'\nimport VueFullscreen from 'vue-fullscreen'\n\nimport './registerServiceWorker'\nimport App from './App.vue'\nimport i18n from './i18n'\nimport router from './router'\nimport store from './store'\n\nimport { customComponents } from '@/custom-components'\nimport { clickOutsideDirective } from '@/directives'\nimport { sportColors } from '@/utils/sports'\n\nChart.register(\n BarElement,\n LineElement,\n PointElement,\n Legend,\n Title,\n Tooltip,\n Filler,\n BarController,\n CategoryScale,\n LineController,\n LinearScale,\n ChartDataLabels\n)\n\nconst app = createApp(App)\n .provide('sportColors', sportColors)\n .use(i18n)\n .use(store)\n .use(router)\n .use(VueFullscreen, { name: 'VFullscreen' })\n .directive('click-outside', clickOutsideDirective)\n\ncustomComponents.forEach((component) => {\n app.component(component.name, component.target)\n})\n\napp.mount('#app')\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, vModelText as _vModelText, withDirectives as _withDirectives, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, withModifiers as _withModifiers, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-24ec93e2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-app\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = [\"onSubmit\"]\nconst _hoisted_3 = { for: \"admin_contact\" }\nconst _hoisted_4 = [\"value\"]\nconst _hoisted_5 = [\"disabled\"]\nconst _hoisted_6 = { for: \"max_users\" }\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = { class: \"user-limit-help\" }\nconst _hoisted_9 = { class: \"info-box\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { for: \"max_single_file_size\" }\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = { for: \"max_zip_file_size\" }\nconst _hoisted_14 = [\"disabled\"]\nconst _hoisted_15 = { for: \"gpx_limit_import\" }\nconst _hoisted_16 = [\"disabled\"]\nconst _hoisted_17 = {\n key: 1,\n class: \"form-buttons\"\n}\nconst _hoisted_18 = {\n class: \"confirm\",\n type: \"submit\"\n}\nconst _hoisted_19 = [\"onClick\"]\nconst _hoisted_20 = {\n key: 2,\n class: \"form-buttons\"\n}\n\nimport {\n ComputedRef,\n computed,\n reactive,\n withDefaults,\n onBeforeMount,\n toRefs,\n } from 'vue'\n import { useRouter } from 'vue-router'\n\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig, TAppConfigForm } from '@/types/application'\n import { useStore } from '@/use/useStore'\n import { getFileSizeInMB } from '@/utils/files'\n\n interface Props {\n appConfig: TAppConfig\n edition?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminApplication',\n props: {\n appConfig: null,\n edition: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { appConfig: TAppConfig, edition: boolean }\n\n \n const { edition } = toRefs(props)\n\n const store = useStore()\n const router = useRouter()\n\n const appData: TAppConfigForm = reactive({\n admin_contact: '',\n max_users: 0,\n max_single_file_size: 0,\n max_zip_file_size: 0,\n gpx_limit_import: 0,\n })\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => {\n if (props.appConfig) {\n updateForm(props.appConfig)\n }\n })\n\n function updateForm(appConfig: TAppConfig) {\n Object.keys(appData).map((key) => {\n ['max_single_file_size', 'max_zip_file_size'].includes(key)\n ? // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (appData[key] = getFileSizeInMB(appConfig[key]))\n : // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (appData[key] = appConfig[key])\n })\n }\n function onCancel() {\n updateForm(props.appConfig)\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n router.push('/admin/application')\n }\n function onSubmit() {\n const formData: TAppConfigForm = Object.assign({}, appData)\n formData.max_single_file_size *= 1048576\n formData.max_zip_file_size *= 1048576\n store.dispatch(ROOT_STORE.ACTIONS.UPDATE_APPLICATION_CONFIG, formData)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.TITLE')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"form\", {\n class: \"admin-form\",\n onSubmit: _withModifiers(onSubmit, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_3, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.ADMIN_CONTACT')) + \": \", 1),\n (!_unref(edition) && !appData.admin_contact)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"no-contact\",\n value: _ctx.$t('admin.APP_CONFIG.NO_CONTACT_EMAIL'),\n disabled: \"\"\n }, null, 8, _hoisted_4))\n : _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 1,\n id: \"admin_contact\",\n name: \"admin_contact\",\n type: \"email\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((appData.admin_contact) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_5)), [\n [_vModelText, appData.admin_contact]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_USERS_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_users\",\n name: \"max_users\",\n type: \"number\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((appData.max_users) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_7), [\n [_vModelText, appData.max_users]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"span\", _hoisted_9, [\n _hoisted_10,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_USERS_HELP')), 1)\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.SINGLE_UPLOAD_MAX_SIZE_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_single_file_size\",\n name: \"max_single_file_size\",\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((appData.max_single_file_size) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_12), [\n [_vModelText, appData.max_single_file_size]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_13, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.ZIP_UPLOAD_MAX_SIZE_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_zip_file_size\",\n name: \"max_zip_file_size\",\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((appData.max_zip_file_size) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_14), [\n [_vModelText, appData.max_zip_file_size]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_15, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_FILES_IN_ZIP_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"gpx_limit_import\",\n name: \"gpx_limit_import\",\n type: \"number\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((appData.gpx_limit_import) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_16), [\n [_vModelText, appData.gpx_limit_import]\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(edition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createElementVNode(\"button\", _hoisted_18, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(onCancel, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_19)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: _cache[5] || (_cache[5] = _withModifiers(($event: any) => (_ctx.$router.push('/admin/application/edit')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.EDIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[6] || (_cache[6] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ]))\n ], 40, _hoisted_2)\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminApplication.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminApplication.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminApplication.vue?vue&type=style&index=0&id=24ec93e2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-24ec93e2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"stat-card\" }\nconst _hoisted_2 = { class: \"stat-content box\" }\nconst _hoisted_3 = { class: \"stat-icon\" }\nconst _hoisted_4 = { class: \"stat-details\" }\nconst _hoisted_5 = { class: \"stat-huge\" }\nconst _hoisted_6 = { class: \"stat\" }\n\nimport { toRefs } from 'vue'\n\n interface Props {\n icon: string\n text: string\n value: string | number\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatCard',\n props: {\n icon: null,\n text: null,\n value: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n icon: string\n text: string\n value: string | number\n }\n\n \n const { icon, text, value } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa\", `fa-${_unref(icon)}`])\n }, null, 2)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, _toDisplayString(_unref(value)), 1),\n _createElementVNode(\"div\", _hoisted_6, _toDisplayString(_unref(text)), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./StatCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatCard.vue?vue&type=style&index=0&id=6cbb3351&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-stats\" }\n\nimport { computed, toRefs } from 'vue'\n\n import StatCard from '@/components/Common/StatCard.vue'\n import { IAppStatistics } from '@/types/application'\n import { getReadableFileSize } from '@/utils/files'\n\n interface Props {\n appStatistics: IAppStatistics\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AppStatsCards',\n props: {\n appStatistics: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n appStatistics: IAppStatistics\n }\n\n \n\n const { appStatistics } = toRefs(props)\n const uploadDirSize = computed(() =>\n getReadableFileSize(appStatistics.value.uploads_dir_size, false)\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatCard, {\n icon: \"users\",\n value: _unref(appStatistics).users,\n text: _ctx.$t('admin.USER', _unref(appStatistics).users)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"tags\",\n value: _unref(appStatistics).sports,\n text: _ctx.$t('workouts.SPORT', _unref(appStatistics).sports)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"calendar\",\n value: _unref(appStatistics).workouts,\n text: _ctx.$t('workouts.WORKOUT', _unref(appStatistics).workouts)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"folder-open\",\n value: _unref(uploadDirSize).size,\n text: _unref(uploadDirSize).suffix\n }, null, 8, [\"value\", \"text\"])\n ]))\n}\n}\n\n})","import script from \"./AppStatsCards.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStatsCards.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AppStatsCards.vue?vue&type=style&index=0&id=61c5053e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0dd66f89\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-menu\",\n class: \"center-card\"\n}\nconst _hoisted_2 = { class: \"admin-menu description-list\" }\nconst _hoisted_3 = { class: \"application-config-details\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_5 = { class: \"registration-status\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"email-sending-status\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-exclamation-triangle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { capitalize, toRefs, withDefaults } from 'vue'\n\n import AppStatsCards from '@/components/Administration/AppStatsCards.vue'\n import Card from '@/components/Common/Card.vue'\n import { IAppStatistics, TAppConfig } from '@/types/application'\n\n interface Props {\n appConfig: TAppConfig\n appStatistics?: IAppStatistics\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminMenu',\n props: {\n appConfig: null,\n appStatistics: { default: () => ({} as IAppStatistics) }\n },\n setup(__props: any) {\n\nconst props = __props as { appConfig: TAppConfig, appStatistics: IAppStatistics }\n\n \n\n const { appConfig, appStatistics } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.ADMINISTRATION')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(AppStatsCards, { appStatistics: _unref(appStatistics) }, null, 8, [\"appStatistics\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/application\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APPLICATION')), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", _hoisted_3, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.UPDATE_APPLICATION_DESCRIPTION')), 1),\n _hoisted_4,\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.$t(\n `admin.REGISTRATION_${\n _unref(appConfig).is_registration_enabled ? 'ENABLED' : 'DISABLED'\n }`\n )), 1),\n (!_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_6, [\n _hoisted_7,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.EMAIL_SENDING_DISABLED')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/sports\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('workouts.SPORT', 0))), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t('admin.ENABLE_DISABLE_SPORTS')), 1),\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/users\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('admin.USER', 0))), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t('admin.ADMIN_RIGHTS_DELETE_USER_ACCOUNT')), 1)\n ])\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminMenu.vue?vue&type=style&index=0&id=0dd66f89&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0dd66f89\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withModifiers as _withModifiers, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, createBlock as _createBlock, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6d62af67\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-sports\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = { class: \"responsive-table\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, \"#\", -1))\nconst _hoisted_4 = { class: \"text-left\" }\nconst _hoisted_5 = { class: \"text-left sport-action\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, null, -1))\nconst _hoisted_7 = { class: \"text-center\" }\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"cell-heading\" }, \"id\", -1))\nconst _hoisted_9 = { class: \"cell-heading\" }\nconst _hoisted_10 = { class: \"sport-label\" }\nconst _hoisted_11 = { class: \"cell-heading\" }\nconst _hoisted_12 = { class: \"text-center\" }\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"sport-action\" }\nconst _hoisted_15 = { class: \"cell-heading\" }\nconst _hoisted_16 = { class: \"action-button\" }\nconst _hoisted_17 = [\"onClick\"]\nconst _hoisted_18 = {\n key: 0,\n class: \"has-workouts\"\n}\nconst _hoisted_19 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-warning\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { ComputedRef, computed } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ROOT_STORE, SPORTS_STORE } from '@/store/constants'\n import { ITranslatedSport } from '@/types/sports'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminSports',\n setup(__props) {\n\n const { t } = useI18n()\n const store = useStore()\n\n const translatedSports: ComputedRef = computed(() =>\n translateSports(store.getters[SPORTS_STORE.GETTERS.SPORTS], t)\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n function updateSportStatus(id: number, isActive: boolean) {\n store.dispatch(SPORTS_STORE.ACTIONS.UPDATE_SPORTS, {\n id,\n isActive,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.SPORTS.TITLE')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"button\", {\n class: \"top-button\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_3,\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.IMAGE')), 1),\n _createElementVNode(\"th\", _hoisted_4, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.LABEL')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.ACTIVE')), 1),\n _createElementVNode(\"th\", _hoisted_5, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _hoisted_6\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: sport.id\n }, [\n _createElementVNode(\"td\", _hoisted_7, [\n _hoisted_8,\n _createTextVNode(\" \" + _toDisplayString(sport.id), 1)\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.IMAGE')), 1),\n _createVNode(_component_SportImage, {\n title: sport.translatedLabel,\n \"sport-label\": sport.label,\n color: sport.color\n }, null, 8, [\"title\", \"sport-label\", \"color\"])\n ]),\n _createElementVNode(\"td\", _hoisted_10, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.LABEL')), 1),\n _createTextVNode(\" \" + _toDisplayString(sport.translatedLabel), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_12, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.ACTIVE')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${sport.is_active ? '-check' : ''}`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_14, [\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"button\", {\n class: _normalizeClass({ danger: sport.is_active }),\n onClick: ($event: any) => (updateSportStatus(sport.id, !sport.is_active))\n }, _toDisplayString(_ctx.$t(`buttons.${sport.is_active ? 'DIS' : 'EN'}ABLE`)), 11, _hoisted_17),\n (sport.has_workouts)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_18, [\n _hoisted_19,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.HAS_WORKOUTS')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ]))\n }), 128))\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminSports.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminSports.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminSports.vue?vue&type=style&index=0&id=6d62af67&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6d62af67\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { vModelText as _vModelText, withKeys as _withKeys, createElementVNode as _createElementVNode, withDirectives as _withDirectives, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-627a8e91\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"users-filters\" }\nconst _hoisted_2 = { class: \"search-username\" }\nconst _hoisted_3 = [\"onKeyup\", \"placeholder\"]\n\nimport { ref } from 'vue'\n import { useRoute } from 'vue-router'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UsersNameFilter',\n emits: ['filterOnUsername'],\n setup(__props, { emit }) {\n\n const route = useRoute()\n const username = ref(route.query.q ? route.query.q : '')\n\n \n function searchUsers() {\n if (username.value !== '') {\n emit('filterOnUsername', username)\n }\n }\n function resetFilter() {\n username.value = ''\n emit('filterOnUsername', username.value)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"username\",\n name: \"username\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((username).value = $event)),\n onKeyup: _withKeys(searchUsers, [\"enter\"]),\n placeholder: _ctx.$t('user.FILTER_ON_USERNAME')\n }, null, 40, _hoisted_3), [\n [\n _vModelText,\n username.value,\n void 0,\n { trim: true }\n ]\n ]),\n (username.value !== '')\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-times\",\n \"aria-hidden\": \"true\",\n onClick: resetFilter\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa fa-search\", { 'fa-disabled': username.value === '' }]),\n \"aria-hidden\": \"true\",\n onClick: searchUsers\n }, null, 2)\n ]))\n}\n}\n\n})","import script from \"./UsersNameFilter.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./UsersNameFilter.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./UsersNameFilter.vue?vue&type=style&index=0&id=627a8e91&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-627a8e91\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withModifiers as _withModifiers, createElementVNode as _createElementVNode, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, withCtx as _withCtx, normalizeClass as _normalizeClass, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-dc12ff78\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-users\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"no-users\"\n}\nconst _hoisted_3 = {\n key: 1,\n class: \"responsive-table\"\n}\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, \"#\", -1))\nconst _hoisted_5 = { class: \"left-text\" }\nconst _hoisted_6 = { class: \"left-text\" }\nconst _hoisted_7 = { class: \"left-text\" }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = { class: \"cell-heading\" }\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = { class: \"cell-heading\" }\nconst _hoisted_12 = { class: \"text-center\" }\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"text-center\" }\nconst _hoisted_15 = { class: \"cell-heading\" }\nconst _hoisted_16 = { class: \"text-center\" }\nconst _hoisted_17 = { class: \"cell-heading\" }\nconst _hoisted_18 = { class: \"text-center\" }\nconst _hoisted_19 = { class: \"cell-heading\" }\nconst _hoisted_20 = [\"disabled\", \"onClick\"]\n\nimport {\n ComputedRef,\n Ref,\n computed,\n reactive,\n watch,\n capitalize,\n onBeforeMount,\n onUnmounted,\n } from 'vue'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import FilterSelects from '@/components/Common/FilterSelects.vue'\n import Pagination from '@/components/Common/Pagination.vue'\n import UserPicture from '@/components/User/UserPicture.vue'\n import UsersNameFilter from '@/components/Users/UsersNameFilter.vue'\n import { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\n import { IPagination, TPaginationPayload } from '@/types/api'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getQuery, sortList } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminUsers',\n setup(__props) {\n\n const store = useStore()\n const route = useRoute()\n const router = useRouter()\n\n const orderByList: string[] = [\n 'is_active',\n 'admin',\n 'created_at',\n 'username',\n 'workouts_count',\n ]\n const defaultOrderBy = 'created_at'\n let query: TPaginationPayload = reactive(\n getQuery(route.query, orderByList, defaultOrderBy)\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const users: ComputedRef = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS]\n )\n const pagination: ComputedRef = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS_PAGINATION]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => loadUsers(query))\n\n function loadUsers(queryParams: TPaginationPayload) {\n store.dispatch(USERS_STORE.ACTIONS.GET_USERS, queryParams)\n }\n function searchUsers(username: Ref) {\n reloadUsers('q', username.value)\n }\n\n function updateUser(username: string, admin: boolean) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n admin,\n })\n }\n function reloadUsers(queryParam: string, queryValue: string) {\n query[queryParam] = queryValue\n if (queryParam === 'per_page') {\n query.page = 1\n }\n router.push({ path: '/admin/users', query })\n }\n\n onUnmounted(() => {\n store.dispatch(USERS_STORE.ACTIONS.EMPTY_USERS)\n })\n\n watch(\n () => route.query,\n (newQuery: LocationQuery) => {\n query = getQuery(newQuery, orderByList, defaultOrderBy, { query })\n loadUsers(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('admin.USER', 0))), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"button\", {\n class: \"top-button\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1),\n _createVNode(UsersNameFilter, { onFilterOnUsername: searchUsers }),\n _createVNode(FilterSelects, {\n sort: _unref(sortList),\n order_by: orderByList,\n query: _unref(query),\n message: \"admin.USERS.SELECTS.ORDER_BY\",\n onUpdateSelect: reloadUsers\n }, null, 8, [\"sort\", \"query\"]),\n (_unref(users).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('user.NO_USERS_FOUND')), 1))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_4,\n _createElementVNode(\"th\", _hoisted_5, _toDisplayString(_ctx.$t('user.USERNAME')), 1),\n _createElementVNode(\"th\", _hoisted_6, _toDisplayString(_ctx.$t('user.EMAIL')), 1),\n _createElementVNode(\"th\", _hoisted_7, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 0))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.ACTIVE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.ADMIN')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.ACTION')), 1)\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(users), (user) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: user.username\n }, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE')), 1),\n _createVNode(UserPicture, { user: user }, null, 8, [\"user\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_ctx.$t('user.USERNAME')), 1),\n _createVNode(_component_router_link, {\n to: `/admin/users/${user.username}`\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(user.username), 1)\n ]),\n _: 2\n }, 1032, [\"to\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('user.EMAIL')), 1),\n _createTextVNode(\" \" + _toDisplayString(user.email), 1)\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')), 1),\n _createTextVNode(\" \" + _toDisplayString(_unref(formatDate)(\n user.created_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_12, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 0))), 1),\n _createTextVNode(\" \" + _toDisplayString(user.nb_workouts), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_14, [\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('admin.ACTIVE')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${user.is_active ? '-check' : ''}-square-o`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_16, [\n _createElementVNode(\"span\", _hoisted_17, _toDisplayString(_ctx.$t('user.ADMIN')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${user.admin ? '-check' : ''}-square-o`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_18, [\n _createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _createElementVNode(\"button\", {\n class: _normalizeClass({ danger: user.admin }),\n disabled: user.username === _unref(authUser).username,\n onClick: ($event: any) => (updateUser(user.username, !user.admin))\n }, _toDisplayString(_ctx.$t(\n `admin.USERS.TABLE.${\n user.admin ? 'REMOVE' : 'ADD'\n }_ADMIN_RIGHTS`\n )), 11, _hoisted_20)\n ])\n ]))\n }), 128))\n ])\n ]),\n (_unref(pagination).page)\n ? (_openBlock(), _createBlock(Pagination, {\n key: 0,\n path: \"/admin/users\",\n pagination: _unref(pagination),\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 1,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ]))\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminUsers.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminUsers.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminUsers.vue?vue&type=style&index=0&id=dc12ff78&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-dc12ff78\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = { class: \"profile-tabs custom-checkboxes-group\" }\nconst _hoisted_2 = { class: \"profile-tabs-checkboxes custom-checkboxes\" }\nconst _hoisted_3 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n tabs: string[]\n selectedTab: string\n edition: boolean\n disabled?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserProfileTabs',\n props: {\n tabs: null,\n selectedTab: null,\n edition: { type: Boolean },\n disabled: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { tabs: string[], selectedTab: string, edition: boolean, disabled: boolean }\n\n \n\n const { tabs, selectedTab, disabled } = toRefs(props)\n\n function getPath(tab: string) {\n switch (tab) {\n case 'ACCOUNT':\n case 'PICTURE':\n return `/profile/edit/${tab.toLocaleLowerCase()}`\n case 'APPS':\n case 'PREFERENCES':\n case 'SPORTS':\n return `/profile${\n props.edition ? '/edit' : ''\n }/${tab.toLocaleLowerCase()}`\n default:\n case 'PROFILE':\n return `/profile${props.edition ? '/edit' : ''}`\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(tabs), (tab) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"profile-tab custom-checkbox\",\n key: tab\n }, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: tab,\n name: tab,\n checked: _unref(selectedTab).split('/')[0] === tab,\n disabled: _unref(disabled),\n onInput: ($event: any) => (_ctx.$router.push(getPath(tab)))\n }, null, 40, _hoisted_3),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`user.PROFILE.TABS.${tab}`)), 1)\n ])\n ]))\n }), 128))\n ])\n ]))\n}\n}\n\n})","import script from \"./UserProfileTabs.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserProfileTabs.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserProfileTabs.vue?vue&type=style&index=0&id=01b05f01&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9729cba4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-profile\" }\nconst _hoisted_2 = { class: \"box\" }\n\nimport { toRefs } from 'vue'\n\n import UserHeader from '@/components/User/ProfileDisplay/UserHeader.vue'\n import UserProfileTabs from '@/components/User/UserProfileTabs.vue'\n import { IUserProfile } from '@/types/user'\n\n interface Props {\n user: IUserProfile\n tab: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null,\n tab: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n tab: string\n }\n\n \n\n const { user, tab } = toRefs(props)\n const tabs = ['PROFILE', 'PREFERENCES', 'SPORTS', 'APPS']\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(UserHeader, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(UserProfileTabs, {\n tabs: tabs,\n selectedTab: _unref(tab),\n edition: false\n }, null, 8, [\"selectedTab\"]),\n _createVNode(_component_router_view, { user: _unref(user) }, null, 8, [\"user\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=9729cba4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9729cba4\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"user-preferences\",\n class: \"description-list\"\n}\nconst _hoisted_2 = { class: \"profile-buttons\" }\n\nimport { computed, ComputedRef } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getDateFormat } from '@/utils/dates'\n import { languageLabels } from '@/utils/locales'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPreferences',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const appLanguage: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const userLanguage = computed(() =>\n props.user.language\n ? languageLabels[props.user.language]\n : languageLabels['en']\n )\n const fistDayOfWeek = computed(() => (props.user.weekm ? 'MONDAY' : 'SUNDAY'))\n const timezone = computed(() =>\n props.user.timezone ? props.user.timezone : 'Europe/Paris'\n )\n const date_format = computed(() =>\n props.user.date_format ? props.user.date_format : 'MM/dd/yyyy'\n )\n const display_ascent = computed(() =>\n props.user.display_ascent ? 'DISPLAYED' : 'HIDDEN'\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LANGUAGE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(userLanguage)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.TIMEZONE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(timezone)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.DATE_FORMAT')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(getDateFormat)(_unref(date_format), _unref(appLanguage))), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_DAY_OF_WEEK')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(`user.PROFILE.${_unref(fistDayOfWeek)}`)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.UNITS.LABEL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(\n `user.PROFILE.UNITS.${__props.user.imperial_units ? 'IMPERIAL' : 'METRIC'}`\n )), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.ASCENT_DATA')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(`common.${_unref(display_ascent)}`)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"button\", {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/edit/preferences')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPreferences.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPreferences.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"user-profile-edition\",\n class: \"center-card\"\n}\n\nimport { computed, toRefs } from 'vue'\n\n import UserProfileTabs from '@/components/User/UserProfileTabs.vue'\n import { AUTH_USER_STORE } from '@/store/constants'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n tab: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null,\n tab: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n tab: string\n }\n\n \n\n const store = useStore()\n\n const { user, tab } = toRefs(props)\n const tabs = ['PROFILE', 'ACCOUNT', 'PICTURE', 'PREFERENCES', 'SPORTS']\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(`user.PROFILE.${_unref(tab)}_EDITION`)), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserProfileTabs, {\n tabs: tabs,\n selectedTab: _unref(tab),\n edition: true,\n disabled: _unref(loading)\n }, null, 8, [\"selectedTab\", \"disabled\"]),\n _createVNode(_component_router_view, { user: _unref(user) }, null, 8, [\"user\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, createVNode as _createVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-37b8c4c8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-infos-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = {\n key: 1,\n class: \"info-box success-message\"\n}\nconst _hoisted_4 = [\"onSubmit\"]\nconst _hoisted_5 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_6 = [\"disabled\"]\nconst _hoisted_7 = {\n class: \"form-items\",\n for: \"password-field\"\n}\nconst _hoisted_8 = {\n class: \"form-items\",\n for: \"new-password-field\"\n}\nconst _hoisted_9 = { class: \"form-buttons\" }\nconst _hoisted_10 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport {\n ComputedRef,\n Ref,\n computed,\n reactive,\n ref,\n toRefs,\n onMounted,\n watch,\n onUnmounted,\n } from 'vue'\n\n import PasswordInput from '@/components/Common/PasswordInput.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IUserProfile, IUserAccountPayload } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAccountEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n const { user } = toRefs(props)\n\n const store = useStore()\n const userForm: IUserAccountPayload = reactive({\n email: '',\n password: '',\n new_password: '',\n })\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const emailUpdate = ref(false)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const formErrors = ref(false)\n const displayModal: Ref = ref(false)\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function invalidateForm() {\n formErrors.value = true\n }\n function updateUserForm(user: IUserProfile) {\n userForm.email = user.email\n }\n function updatePassword(password: string) {\n userForm.password = password\n }\n function updateNewPassword(new_password: string) {\n userForm.new_password = new_password\n }\n function updateProfile() {\n const payload: IUserAccountPayload = {\n email: userForm.email,\n password: userForm.password,\n }\n if (userForm.new_password) {\n payload.new_password = userForm.new_password\n }\n emailUpdate.value = userForm.email !== user.value.email\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_ACCOUNT, payload)\n }\n function updateDisplayModal(value: boolean) {\n displayModal.value = value\n }\n function deleteAccount(username: string) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.DELETE_ACCOUNT, { username })\n }\n\n onUnmounted(() => {\n store.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\n watch(\n () => isSuccess.value,\n async (isSuccessValue) => {\n if (isSuccessValue) {\n updatePassword('')\n updateNewPassword('')\n updateUserForm(user.value)\n formErrors.value = false\n }\n }\n )\n watch(\n () => user.value.email,\n async () => {\n updateUserForm(user.value)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t('user.CONFIRM_ACCOUNT_DELETION'),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (deleteAccount(_unref(user).username))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\n `user.PROFILE.SUCCESSFUL_${\n emailUpdate.value && _unref(appConfig).is_email_sending_enabled ? 'EMAIL_' : ''\n }UPDATE`\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_5, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.EMAIL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"email\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((userForm.email) = $event)),\n disabled: _unref(loading),\n required: true,\n onInvalid: invalidateForm\n }, null, 40, _hoisted_6), [\n [_vModelText, userForm.email]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.CURRENT_PASSWORD')) + \"* \", 1),\n _createVNode(PasswordInput, {\n id: \"password-field\",\n disabled: _unref(loading),\n password: userForm.password,\n required: true,\n onUpdatePassword: updatePassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"password\"])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.NEW_PASSWORD')) + \" \", 1),\n _createVNode(PasswordInput, {\n id: \"new-password-field\",\n disabled: _unref(loading),\n checkStrength: true,\n password: userForm.new_password,\n isSuccess: false,\n onUpdatePassword: updateNewPassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"password\"])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"button\", _hoisted_10, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[3] || (_cache[3] = _withModifiers(($event: any) => (_ctx.$router.push('/profile')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1),\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (updateDisplayModal(true)), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.DELETE_MY_ACCOUNT')), 1)\n ])\n ], 42, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserAccountEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAccountEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAccountEdition.vue?vue&type=style&index=0&id=37b8c4c8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-37b8c4c8\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, vModelText as _vModelText, withDirectives as _withDirectives, createVNode as _createVNode, withModifiers as _withModifiers, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5e5a4552\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-infos-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = {\n class: \"form-items\",\n for: \"registrationDate\"\n}\nconst _hoisted_5 = [\"value\"]\nconst _hoisted_6 = {\n class: \"form-items\",\n for: \"first_name\"\n}\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = {\n class: \"form-items\",\n for: \"last_name\"\n}\nconst _hoisted_9 = {\n class: \"form-items\",\n for: \"birth_date\"\n}\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = {\n class: \"form-items\",\n for: \"location\"\n}\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = { class: \"form-items\" }\nconst _hoisted_14 = { class: \"form-buttons\" }\nconst _hoisted_15 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport { format } from 'date-fns'\n import { ComputedRef, computed, reactive, onMounted, onUnmounted } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IUserProfile, IUserPayload, IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserInfosEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const userForm: IUserPayload = reactive({\n first_name: '',\n last_name: '',\n birth_date: '',\n location: '',\n bio: '',\n })\n const registrationDate = computed(() =>\n props.user.created_at\n ? formatDate(\n props.user.created_at,\n props.user.timezone,\n props.user.date_format\n )\n : ''\n )\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function updateUserForm(user: IUserProfile) {\n userForm.first_name = user.first_name ? user.first_name : ''\n userForm.last_name = user.last_name ? user.last_name : ''\n userForm.birth_date = user.birth_date\n ? format(new Date(user.birth_date), 'yyyy-MM-dd')\n : ''\n userForm.location = user.location ? user.location : ''\n userForm.bio = user.bio ? user.bio : ''\n }\n function updateBio(value: string) {\n userForm.bio = value\n }\n function updateProfile() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PROFILE, userForm)\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')) + \" \", 1),\n _createElementVNode(\"input\", {\n id: \"registrationDate\",\n value: _unref(registrationDate),\n disabled: \"\"\n }, null, 8, _hoisted_5)\n ]),\n _createElementVNode(\"label\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.FIRST_NAME')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"first_name\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((userForm.first_name) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_7), [\n [_vModelText, userForm.first_name]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LAST_NAME')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"last_name\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((userForm.last_name) = $event))\n }, null, 512), [\n [_vModelText, userForm.last_name]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_9, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.BIRTH_DATE')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"birth_date\",\n type: \"date\",\n class: \"birth-date\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((userForm.birth_date) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_10), [\n [_vModelText, userForm.birth_date]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LOCATION')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"location\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((userForm.location) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_12), [\n [_vModelText, userForm.location]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_13, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.BIO')) + \" \", 1),\n _createVNode(_component_CustomTextArea, {\n name: \"bio\",\n charLimit: 200,\n input: userForm.bio,\n disabled: _unref(loading),\n onUpdateValue: updateBio\n }, null, 8, [\"input\", \"disabled\"])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"button\", _hoisted_15, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (_ctx.$router.push('/profile')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserInfosEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserInfosEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserInfosEdition.vue?vue&type=style&index=0&id=5e5a4552&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5e5a4552\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-687e9604\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-picture-edition\" }\nconst _hoisted_2 = { class: \"user-picture-form\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = { class: \"picture-help\" }\nconst _hoisted_5 = { class: \"info-box\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = { class: \"picture-buttons\" }\nconst _hoisted_8 = [\"disabled\"]\n\nimport { ComputedRef, Ref, computed, ref, toRefs, onUnmounted } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getReadableFileSize } from '@/utils/files'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPictureEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const store = useStore()\n\n const { user } = toRefs(props)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const appConfig: ComputedRef = 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 pictureFile: Ref = ref(null)\n\n function deleteUserPicture() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.DELETE_PICTURE)\n }\n function updatePictureFile(event: Event & { target: HTMLInputElement }) {\n if (event.target.files) {\n pictureFile.value = event.target.files[0]\n }\n }\n function updateUserPicture() {\n if (pictureFile.value) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PICTURE, {\n picture: pictureFile.value,\n })\n }\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateUserPicture, [\"prevent\"])\n }, [\n _createElementVNode(\"input\", {\n type: \"file\",\n name: \"picture\",\n accept: \".png,.jpg,.gif\",\n onInput: updatePictureFile\n }, null, 32),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"span\", _hoisted_5, [\n _hoisted_6,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(fileSizeLimit)), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"button\", {\n type: \"submit\",\n disabled: !pictureFile.value\n }, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE_UPDATE')), 9, _hoisted_8),\n (_unref(user).picture)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"danger\",\n onClick: deleteUserPicture\n }, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE_REMOVE')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.BACK_TO_PROFILE')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPictureEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPictureEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPictureEdition.vue?vue&type=style&index=0&id=687e9604&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-687e9604\"]])\n\nexport default __exports__","export const timeZones = [\n 'Africa/Abidjan',\n 'Africa/Accra',\n 'Africa/Algiers',\n 'Africa/Bissau',\n 'Africa/Cairo',\n 'Africa/Casablanca',\n 'Africa/Ceuta',\n 'Africa/El_Aaiun',\n 'Africa/Johannesburg',\n 'Africa/Juba',\n 'Africa/Khartoum',\n 'Africa/Lagos',\n 'Africa/Maputo',\n 'Africa/Monrovia',\n 'Africa/Nairobi',\n 'Africa/Ndjamena',\n 'Africa/Sao_Tome',\n 'Africa/Tripoli',\n 'Africa/Tunis',\n 'Africa/Windhoek',\n 'America/Adak',\n 'America/Anchorage',\n 'America/Araguaina',\n 'America/Argentina/Buenos_Aires',\n 'America/Argentina/Catamarca',\n 'America/Argentina/Cordoba',\n 'America/Argentina/Jujuy',\n 'America/Argentina/La_Rioja',\n 'America/Argentina/Mendoza',\n 'America/Argentina/Rio_Gallegos',\n 'America/Argentina/Salta',\n 'America/Argentina/San_Juan',\n 'America/Argentina/San_Luis',\n 'America/Argentina/Tucuman',\n 'America/Argentina/Ushuaia',\n 'America/Asuncion',\n 'America/Atikokan',\n 'America/Bahia',\n 'America/Bahia_Banderas',\n 'America/Barbados',\n 'America/Belem',\n 'America/Belize',\n 'America/Blanc-Sablon',\n 'America/Boa_Vista',\n 'America/Bogota',\n 'America/Boise',\n 'America/Cambridge_Bay',\n 'America/Campo_Grande',\n 'America/Cancun',\n 'America/Caracas',\n 'America/Cayenne',\n 'America/Chicago',\n 'America/Chihuahua',\n 'America/Costa_Rica',\n 'America/Creston',\n 'America/Cuiaba',\n 'America/Curacao',\n 'America/Danmarkshavn',\n 'America/Dawson',\n 'America/Dawson_Creek',\n 'America/Denver',\n 'America/Detroit',\n 'America/Edmonton',\n 'America/Eirunepe',\n 'America/El_Salvador',\n 'America/Fortaleza',\n 'America/Fort_Nelson',\n 'America/Glace_Bay',\n 'America/Godthab',\n 'America/Goose_Bay',\n 'America/Grand_Turk',\n 'America/Guatemala',\n 'America/Guayaquil',\n 'America/Guyana',\n 'America/Halifax',\n 'America/Havana',\n 'America/Hermosillo',\n 'America/Indiana/Indianapolis',\n 'America/Indiana/Knox',\n 'America/Indiana/Marengo',\n 'America/Indiana/Petersburg',\n 'America/Indiana/Tell_City',\n 'America/Indiana/Vevay',\n 'America/Indiana/Vincennes',\n 'America/Indiana/Winamac',\n 'America/Inuvik',\n 'America/Iqaluit',\n 'America/Jamaica',\n 'America/Juneau',\n 'America/Kentucky/Louisville',\n 'America/Kentucky/Monticello',\n 'America/La_Paz',\n 'America/Lima',\n 'America/Los_Angeles',\n 'America/Maceio',\n 'America/Managua',\n 'America/Manaus',\n 'America/Martinique',\n 'America/Matamoros',\n 'America/Mazatlan',\n 'America/Menominee',\n 'America/Merida',\n 'America/Metlakatla',\n 'America/Mexico_City',\n 'America/Miquelon',\n 'America/Moncton',\n 'America/Monterrey',\n 'America/Montevideo',\n 'America/Nassau',\n 'America/New_York',\n 'America/Nipigon',\n 'America/Nome',\n 'America/Noronha',\n 'America/North_Dakota/Beulah',\n 'America/North_Dakota/Center',\n 'America/North_Dakota/New_Salem',\n 'America/Ojinaga',\n 'America/Panama',\n 'America/Pangnirtung',\n 'America/Paramaribo',\n 'America/Phoenix',\n 'America/Port-au-Prince',\n 'America/Port_of_Spain',\n 'America/Porto_Velho',\n 'America/Puerto_Rico',\n 'America/Punta_Arenas',\n 'America/Rainy_River',\n 'America/Rankin_Inlet',\n 'America/Recife',\n 'America/Regina',\n 'America/Resolute',\n 'America/Rio_Branco',\n 'America/Santarem',\n 'America/Santiago',\n 'America/Santo_Domingo',\n 'America/Sao_Paulo',\n 'America/Scoresbysund',\n 'America/Sitka',\n 'America/St_Johns',\n 'America/Swift_Current',\n 'America/Tegucigalpa',\n 'America/Thule',\n 'America/Thunder_Bay',\n 'America/Tijuana',\n 'America/Toronto',\n 'America/Vancouver',\n 'America/Whitehorse',\n 'America/Winnipeg',\n 'America/Yakutat',\n 'America/Yellowknife',\n 'Antarctica/Casey',\n 'Antarctica/Davis',\n 'Antarctica/DumontDUrville',\n 'Antarctica/Macquarie',\n 'Antarctica/Mawson',\n 'Antarctica/Palmer',\n 'Antarctica/Rothera',\n 'Antarctica/Syowa',\n 'Antarctica/Troll',\n 'Antarctica/Vostok',\n 'Asia/Almaty',\n 'Asia/Amman',\n 'Asia/Anadyr',\n 'Asia/Aqtau',\n 'Asia/Aqtobe',\n 'Asia/Ashgabat',\n 'Asia/Atyrau',\n 'Asia/Baghdad',\n 'Asia/Baku',\n 'Asia/Bangkok',\n 'Asia/Barnaul',\n 'Asia/Beirut',\n 'Asia/Bishkek',\n 'Asia/Brunei',\n 'Asia/Chita',\n 'Asia/Choibalsan',\n 'Asia/Colombo',\n 'Asia/Damascus',\n 'Asia/Dhaka',\n 'Asia/Dili',\n 'Asia/Dubai',\n 'Asia/Dushanbe',\n 'Asia/Famagusta',\n 'Asia/Gaza',\n 'Asia/Hebron',\n 'Asia/Ho_Chi_Minh',\n 'Asia/Hong_Kong',\n 'Asia/Hovd',\n 'Asia/Irkutsk',\n 'Asia/Jakarta',\n 'Asia/Jayapura',\n 'Asia/Jerusalem',\n 'Asia/Kabul',\n 'Asia/Kamchatka',\n 'Asia/Karachi',\n 'Asia/Kathmandu',\n 'Asia/Khandyga',\n 'Asia/Kolkata',\n 'Asia/Krasnoyarsk',\n 'Asia/Kuala_Lumpur',\n 'Asia/Kuching',\n 'Asia/Macau',\n 'Asia/Magadan',\n 'Asia/Makassar',\n 'Asia/Manila',\n 'Asia/Nicosia',\n 'Asia/Novokuznetsk',\n 'Asia/Novosibirsk',\n 'Asia/Omsk',\n 'Asia/Oral',\n 'Asia/Pontianak',\n 'Asia/Pyongyang',\n 'Asia/Qatar',\n 'Asia/Qostanay',\n 'Asia/Qyzylorda',\n 'Asia/Riyadh',\n 'Asia/Sakhalin',\n 'Asia/Samarkand',\n 'Asia/Seoul',\n 'Asia/Shanghai',\n 'Asia/Singapore',\n 'Asia/Srednekolymsk',\n 'Asia/Taipei',\n 'Asia/Tashkent',\n 'Asia/Tbilisi',\n 'Asia/Tehran',\n 'Asia/Thimphu',\n 'Asia/Tokyo',\n 'Asia/Tomsk',\n 'Asia/Ulaanbaatar',\n 'Asia/Urumqi',\n 'Asia/Ust-Nera',\n 'Asia/Vladivostok',\n 'Asia/Yakutsk',\n 'Asia/Yangon',\n 'Asia/Yekaterinburg',\n 'Asia/Yerevan',\n 'Atlantic/Azores',\n 'Atlantic/Bermuda',\n 'Atlantic/Canary',\n 'Atlantic/Cape_Verde',\n 'Atlantic/Faroe',\n 'Atlantic/Madeira',\n 'Atlantic/Reykjavik',\n 'Atlantic/South_Georgia',\n 'Atlantic/Stanley',\n 'Australia/Adelaide',\n 'Australia/Brisbane',\n 'Australia/Broken_Hill',\n 'Australia/Currie',\n 'Australia/Darwin',\n 'Australia/Eucla',\n 'Australia/Hobart',\n 'Australia/Lindeman',\n 'Australia/Lord_Howe',\n 'Australia/Melbourne',\n 'Australia/Perth',\n 'Australia/Sydney',\n 'Europe/Amsterdam',\n 'Europe/Andorra',\n 'Europe/Astrakhan',\n 'Europe/Athens',\n 'Europe/Belgrade',\n 'Europe/Berlin',\n 'Europe/Brussels',\n 'Europe/Bucharest',\n 'Europe/Budapest',\n 'Europe/Chisinau',\n 'Europe/Copenhagen',\n 'Europe/Dublin',\n 'Europe/Gibraltar',\n 'Europe/Helsinki',\n 'Europe/Istanbul',\n 'Europe/Kaliningrad',\n 'Europe/Kiev',\n 'Europe/Kirov',\n 'Europe/Lisbon',\n 'Europe/London',\n 'Europe/Luxembourg',\n 'Europe/Madrid',\n 'Europe/Malta',\n 'Europe/Minsk',\n 'Europe/Monaco',\n 'Europe/Moscow',\n 'Europe/Oslo',\n 'Europe/Paris',\n 'Europe/Prague',\n 'Europe/Riga',\n 'Europe/Rome',\n 'Europe/Samara',\n 'Europe/Saratov',\n 'Europe/Simferopol',\n 'Europe/Sofia',\n 'Europe/Stockholm',\n 'Europe/Tallinn',\n 'Europe/Tirane',\n 'Europe/Ulyanovsk',\n 'Europe/Uzhgorod',\n 'Europe/Vienna',\n 'Europe/Vilnius',\n 'Europe/Volgograd',\n 'Europe/Warsaw',\n 'Europe/Zaporozhye',\n 'Europe/Zurich',\n 'Indian/Chagos',\n 'Indian/Christmas',\n 'Indian/Cocos',\n 'Indian/Kerguelen',\n 'Indian/Mahe',\n 'Indian/Maldives',\n 'Indian/Mauritius',\n 'Indian/Reunion',\n 'Pacific/Apia',\n 'Pacific/Auckland',\n 'Pacific/Bougainville',\n 'Pacific/Chatham',\n 'Pacific/Chuuk',\n 'Pacific/Easter',\n 'Pacific/Efate',\n 'Pacific/Enderbury',\n 'Pacific/Fakaofo',\n 'Pacific/Fiji',\n 'Pacific/Funafuti',\n 'Pacific/Galapagos',\n 'Pacific/Gambier',\n 'Pacific/Guadalcanal',\n 'Pacific/Guam',\n 'Pacific/Honolulu',\n 'Pacific/Kiritimati',\n 'Pacific/Kosrae',\n 'Pacific/Kwajalein',\n 'Pacific/Majuro',\n 'Pacific/Marquesas',\n 'Pacific/Nauru',\n 'Pacific/Niue',\n 'Pacific/Norfolk',\n 'Pacific/Noumea',\n 'Pacific/Pago_Pago',\n 'Pacific/Palau',\n 'Pacific/Pitcairn',\n 'Pacific/Pohnpei',\n 'Pacific/Port_Moresby',\n 'Pacific/Rarotonga',\n 'Pacific/Tahiti',\n 'Pacific/Tarawa',\n 'Pacific/Tongatapu',\n 'Pacific/Wake',\n 'Pacific/Wallis',\n]\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, withKeys as _withKeys, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-47ea2903\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"tz-dropdown\" }\nconst _hoisted_2 = [\"value\", \"disabled\", \"onKeydown\"]\nconst _hoisted_3 = [\"onClick\", \"onMouseover\", \"autofocus\"]\n\nimport { Ref, ref, toRefs, watch, withDefaults } from 'vue'\n\n import { timeZones } from '@/utils/timezone'\n\n interface Props {\n input: string\n disabled?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'TimezoneDropdown',\n props: {\n input: null,\n disabled: { type: Boolean, default: false }\n },\n emits: ['updateTimezone'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { input: string, disabled: boolean }\n\n \n\n \n\n const { input, disabled } = toRefs(props)\n const timezone: Ref = ref(props.input)\n const isOpen: Ref = ref(false)\n const tzList: Ref = ref(null)\n const focusItemIndex: Ref = ref(0)\n\n function matchTimezone(t: string): RegExpMatchArray | null {\n return t.toLowerCase().match(timezone.value.toLowerCase())\n }\n function onMouseOver(index: number) {\n focusItemIndex.value = index\n }\n function onUpdateTimezone(value: string) {\n timezone.value = value\n isOpen.value = false\n emit('updateTimezone', value)\n }\n function onEnter(event: Event & { target: HTMLInputElement }) {\n event.preventDefault()\n if (tzList.value?.firstElementChild?.innerHTML) {\n onUpdateTimezone(tzList.value?.firstElementChild?.innerHTML)\n }\n }\n function openDropdown(event: Event & { target: HTMLInputElement }) {\n event.preventDefault()\n isOpen.value = true\n timezone.value = event.target.value.trim()\n }\n\n watch(\n () => props.input,\n (value) => {\n timezone.value = value\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"input\", {\n class: \"tz-dropdown-input\",\n id: \"timezone\",\n name: \"timezone\",\n value: timezone.value,\n disabled: _unref(disabled),\n required: \"\",\n onKeydown: [\n _cache[0] || (_cache[0] = _withKeys(($event: any) => (onUpdateTimezone(_unref(input))), [\"esc\"])),\n _withKeys(onEnter, [\"enter\"])\n ],\n onInput: openDropdown\n }, null, 40, _hoisted_2),\n (isOpen.value)\n ? (_openBlock(), _createElementBlock(\"ul\", {\n key: 0,\n class: \"tz-dropdown-list\",\n ref_key: \"tzList\",\n ref: tzList\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(timeZones).filter((t) => matchTimezone(t)), (tz, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: tz,\n class: _normalizeClass([\"tz-dropdown-item\", { focus: index === focusItemIndex.value }]),\n onClick: ($event: any) => (onUpdateTimezone(tz)),\n onMouseover: ($event: any) => (onMouseOver(index)),\n autofocus: index === focusItemIndex.value\n }, _toDisplayString(tz), 43, _hoisted_3))\n }), 128))\n ], 512))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./TimezoneDropdown.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./TimezoneDropdown.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./TimezoneDropdown.vue?vue&type=style&index=0&id=47ea2903&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-47ea2903\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, vModelSelect as _vModelSelect, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, createVNode as _createVNode, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-065d5e6c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-preferences-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = { class: \"form-items\" }\nconst _hoisted_5 = [\"disabled\"]\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = { class: \"form-items\" }\nconst _hoisted_8 = { class: \"form-items\" }\nconst _hoisted_9 = [\"disabled\"]\nconst _hoisted_10 = [\"value\"]\nconst _hoisted_11 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_12 = { class: \"checkboxes-label\" }\nconst _hoisted_13 = { class: \"checkboxes\" }\nconst _hoisted_14 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_15 = { class: \"checkbox-label\" }\nconst _hoisted_16 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_17 = { class: \"checkboxes-label\" }\nconst _hoisted_18 = { class: \"checkboxes\" }\nconst _hoisted_19 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_20 = { class: \"checkbox-label\" }\nconst _hoisted_21 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_22 = { class: \"checkboxes-label\" }\nconst _hoisted_23 = { class: \"checkboxes\" }\nconst _hoisted_24 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_25 = { class: \"checkbox-label\" }\nconst _hoisted_26 = { class: \"form-buttons\" }\nconst _hoisted_27 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport { ComputedRef, computed, reactive, onMounted, onUnmounted } from 'vue'\n\n import TimezoneDropdown from '@/components/User/ProfileEdition/TimezoneDropdown.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IUserPreferencesPayload, IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { availableDateFormatOptions } from '@/utils/dates'\n import { availableLanguages } from '@/utils/locales'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPreferencesEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const userForm: IUserPreferencesPayload = reactive({\n display_ascent: true,\n imperial_units: false,\n language: '',\n timezone: 'Europe/Paris',\n date_format: 'dd/MM/yyyy',\n weekm: false,\n })\n const weekStart = [\n {\n label: 'SUNDAY',\n value: false,\n },\n {\n label: 'MONDAY',\n value: true,\n },\n ]\n const imperialUnits = [\n {\n label: 'METRIC',\n value: false,\n },\n {\n label: 'IMPERIAL',\n value: true,\n },\n ]\n const ascentData = [\n {\n label: 'DISPLAYED',\n value: true,\n },\n {\n label: 'HIDDEN',\n value: false,\n },\n ]\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const dateFormatOptions = computed(() =>\n availableDateFormatOptions(\n new Date().toUTCString(),\n props.user.timezone,\n userForm.language\n )\n )\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function updateUserForm(user: IAuthUserProfile) {\n userForm.display_ascent = user.display_ascent\n userForm.imperial_units = user.imperial_units ? user.imperial_units : false\n userForm.language = user.language ? user.language : 'en'\n userForm.timezone = user.timezone ? user.timezone : 'Europe/Paris'\n userForm.date_format = user.date_format ? user.date_format : 'dd/MM/yyyy'\n userForm.weekm = user.weekm ? user.weekm : false\n }\n function updateProfile() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PREFERENCES, userForm)\n }\n function updateTZ(value: string) {\n userForm.timezone = value\n }\n function updateAscentDisplay(value: boolean) {\n userForm.display_ascent = value\n }\n function updateImperialUnit(value: boolean) {\n userForm.imperial_units = value\n }\n function updateWeekM(value: boolean) {\n userForm.weekm = value\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LANGUAGE')) + \" \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"language\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((userForm.language) = $event)),\n disabled: _unref(loading)\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(availableLanguages), (lang) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: lang.value,\n key: lang.value\n }, _toDisplayString(lang.label), 9, _hoisted_6))\n }), 128))\n ], 8, _hoisted_5), [\n [_vModelSelect, userForm.language]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.TIMEZONE')) + \" \", 1),\n _createVNode(TimezoneDropdown, {\n input: userForm.timezone,\n disabled: _unref(loading),\n onUpdateTimezone: updateTZ\n }, null, 8, [\"input\", \"disabled\"])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.DATE_FORMAT')) + \" \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"date_format\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((userForm.date_format) = $event)),\n disabled: _unref(loading)\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(dateFormatOptions), (dateFormat) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: dateFormat.value,\n key: dateFormat.value\n }, _toDisplayString(dateFormat.label), 9, _hoisted_10))\n }), 128))\n ], 8, _hoisted_9), [\n [_vModelSelect, userForm.date_format]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_DAY_OF_WEEK')), 1),\n _createElementVNode(\"div\", _hoisted_13, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(weekStart, (start) => {\n return _createElementVNode(\"label\", {\n key: start.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: start.label,\n name: start.label,\n checked: start.value === userForm.weekm,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateWeekM(start.value))\n }, null, 40, _hoisted_14),\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t(`user.PROFILE.${start.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"span\", _hoisted_17, _toDisplayString(_ctx.$t('user.PROFILE.UNITS.LABEL')), 1),\n _createElementVNode(\"div\", _hoisted_18, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(imperialUnits, (unit) => {\n return _createElementVNode(\"label\", {\n key: unit.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: unit.label,\n name: unit.label,\n checked: unit.value === userForm.imperial_units,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateImperialUnit(unit.value))\n }, null, 40, _hoisted_19),\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t(`user.PROFILE.UNITS.${unit.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"span\", _hoisted_22, _toDisplayString(_ctx.$t('user.PROFILE.ASCENT_DATA')), 1),\n _createElementVNode(\"div\", _hoisted_23, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(ascentData, (status) => {\n return _createElementVNode(\"label\", {\n key: status.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: status.label,\n name: status.label,\n checked: status.value === userForm.display_ascent,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateAscentDisplay(status.value))\n }, null, 40, _hoisted_24),\n _createElementVNode(\"span\", _hoisted_25, _toDisplayString(_ctx.$t(`common.${status.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_26, [\n _createElementVNode(\"button\", _hoisted_27, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/preferences')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPreferencesEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPreferencesEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPreferencesEdition.vue?vue&type=style&index=0&id=065d5e6c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-065d5e6c\"]])\n\nexport default __exports__","export const oauth2_scopes = [\n 'profile:read',\n 'profile:write',\n 'users:read',\n 'users:write',\n 'workouts:read',\n 'workouts:write',\n]\n\nexport const admin_oauth2_scopes = ['application:write']\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, vModelText as _vModelText, withDirectives as _withDirectives, resolveComponent as _resolveComponent, createVNode as _createVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0657ee77\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"new-oauth2-app\" }\nconst _hoisted_2 = { id: \"new-oauth2-title\" }\nconst _hoisted_3 = { id: \"apps-form\" }\nconst _hoisted_4 = [\"onSubmit\"]\nconst _hoisted_5 = { class: \"form-items\" }\nconst _hoisted_6 = { class: \"form-item\" }\nconst _hoisted_7 = { for: \"app-name\" }\nconst _hoisted_8 = { class: \"form-item\" }\nconst _hoisted_9 = { for: \"app-description\" }\nconst _hoisted_10 = { class: \"form-item\" }\nconst _hoisted_11 = { for: \"app-url\" }\nconst _hoisted_12 = { class: \"form-item\" }\nconst _hoisted_13 = { for: \"app-redirect-uri\" }\nconst _hoisted_14 = { class: \"form-item-scope\" }\nconst _hoisted_15 = { class: \"form-item-scope-label\" }\nconst _hoisted_16 = { class: \"scope-label\" }\nconst _hoisted_17 = [\"name\", \"checked\", \"onChange\"]\nconst _hoisted_18 = [\"innerHTML\"]\nconst _hoisted_19 = { class: \"form-buttons\" }\nconst _hoisted_20 = [\"disabled\"]\n\nimport { computed, reactive } from 'vue'\n\n import { OAUTH2_STORE } from '@/store/constants'\n import { IOAuth2ClientPayload } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { admin_oauth2_scopes, oauth2_scopes } from '@/utils/oauth'\n\n interface Props {\n authUser: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AddUserApp',\n props: {\n authUser: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n const appForm = reactive({\n client_name: '',\n client_uri: '',\n client_description: '',\n redirect_uri: '',\n })\n const scopes: string[] = reactive([])\n const filtered_scopes = computed(() =>\n getScopes(props.authUser, admin_oauth2_scopes, oauth2_scopes)\n )\n\n function createApp() {\n const payload: IOAuth2ClientPayload = {\n client_name: appForm.client_name,\n client_description: appForm.client_description,\n client_uri: appForm.client_uri,\n redirect_uris: [appForm.redirect_uri],\n scope: scopes.sort().join(' '),\n }\n store.dispatch(OAUTH2_STORE.ACTIONS.CREATE_CLIENT, payload)\n }\n function updateDescription(value: string) {\n appForm.client_description = value\n }\n function updateScopes(scope: string) {\n const index = scopes.indexOf(scope)\n if (index > -1) {\n scopes.splice(index, 1)\n } else {\n scopes.push(scope)\n }\n }\n function getScopes(\n authUser: IAuthUserProfile,\n admin_scopes: string[],\n scopes: string[]\n ) {\n const filtered_scopes = [...scopes]\n if (authUser.admin) {\n filtered_scopes.push(...admin_scopes)\n }\n return filtered_scopes.sort()\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"h1\", _hoisted_2, _toDisplayString(_ctx.$t('oauth2.ADD_A_NEW_APP')), 1),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(createApp, [\"prevent\"])\n }, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"label\", _hoisted_7, _toDisplayString(_ctx.$t('oauth2.APP.NAME')) + \"*\", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-name\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((appForm.client_name) = $event))\n }, null, 512), [\n [_vModelText, appForm.client_name]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"label\", _hoisted_9, _toDisplayString(_ctx.$t('oauth2.APP.DESCRIPTION')), 1),\n _createVNode(_component_CustomTextArea, {\n name: \"app-description\",\n charLimit: 200,\n input: appForm.description,\n onUpdateValue: updateDescription\n }, null, 8, [\"input\"])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"label\", _hoisted_11, _toDisplayString(_ctx.$t('oauth2.APP.URL')) + \"*\", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-url\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((appForm.client_uri) = $event))\n }, null, 512), [\n [_vModelText, appForm.client_uri]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"label\", _hoisted_13, _toDisplayString(_ctx.$t('oauth2.APP.REDIRECT_URL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-redirect-uri\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((appForm.redirect_uri) = $event))\n }, null, 512), [\n [_vModelText, appForm.redirect_uri]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", _hoisted_15, _toDisplayString(_ctx.$t('oauth2.APP.SCOPE.LABEL')) + \"* \", 1),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(filtered_scopes), (scope) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"form-item-scope-checkboxes\",\n key: scope\n }, [\n _createElementVNode(\"label\", _hoisted_16, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n name: scope,\n checked: scopes.includes(scope),\n onChange: ($event: any) => (updateScopes(scope))\n }, null, 40, _hoisted_17),\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]),\n _createElementVNode(\"p\", {\n class: \"scope-description\",\n innerHTML: _ctx.$t(`oauth2.APP.SCOPE.${scope}_DESCRIPTION`)\n }, null, 8, _hoisted_18)\n ]))\n }), 128))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n type: \"submit\",\n disabled: scopes.length === 0\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_20),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[3] || (_cache[3] = _withModifiers(() => _ctx.$router.push('/profile/apps'), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./AddUserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AddUserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AddUserApp.vue?vue&type=style&index=0&id=0657ee77&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0657ee77\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3b2fe9ed\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"authorize-oauth2-app\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { id: \"authorize-oauth2-title\" }\nconst _hoisted_4 = { class: \"oauth2-access description-list\" }\nconst _hoisted_5 = { class: \"client-scope\" }\nconst _hoisted_6 = [\"innerHTML\"]\nconst _hoisted_7 = { class: \"authorize-oauth2-buttons\" }\nconst _hoisted_8 = { key: 1 }\nconst _hoisted_9 = { class: \"no-app\" }\n\nimport { computed, ComputedRef, onBeforeMount } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IOAuth2Client } from '@/types/oauth'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AuthorizeUserApp',\n setup(__props) {\n\n const route = useRoute()\n const store = useStore()\n\n const client: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENT]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => loadApp())\n\n function loadApp() {\n if (route.query.client_id && typeof route.query.client_id === 'string') {\n store.dispatch(\n OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_CLIENT_ID,\n route.query.client_id\n )\n }\n }\n\n function authorizeApp() {\n store.dispatch(OAUTH2_STORE.ACTIONS.AUTHORIZE_CLIENT, {\n client_id: `${route.query.client_id}`,\n redirect_uri: `${route.query.redirect_uri}`,\n response_type: `${route.query.response_type}`,\n scope: `${route.query.scope}`,\n state: `${route.query.state ? route.query.state : ''}`,\n code_challenge: `${\n route.query.code_challenge ? route.query.code_challenge : ''\n }`,\n code_challenge_method: `${\n route.query.code_challenge_method\n ? route.query.code_challenge_method\n : ''\n }`,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(client).client_id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"h1\", _hoisted_3, [\n _createVNode(_component_i18n_t, { keypath: \"oauth2.AUTHORIZE_APP\" }, {\n default: _withCtx(() => [\n _createVNode(_component_router_link, {\n to: { name: 'UserApp', params: { id: _unref(client).id } }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(client).name), 1)\n ]),\n _: 1\n }, 8, [\"to\"])\n ]),\n _: 1\n })\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t('oauth2.APP_REQUESTING_ACCESS')), 1),\n _createElementVNode(\"dl\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(client).scope.split(' '), (scope) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: scope }, [\n _createElementVNode(\"dt\", _hoisted_5, [\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]),\n _createElementVNode(\"dd\", {\n innerHTML: _ctx.$t(`oauth2.APP.SCOPE.${scope}_DESCRIPTION`)\n }, null, 8, _hoisted_6)\n ], 64))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: authorizeApp\n }, _toDisplayString(_ctx.$t('buttons.AUTHORIZE')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"p\", _hoisted_9, _toDisplayString(_ctx.$t('oauth2.NO_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n ]))\n}\n}\n\n})","import script from \"./AuthorizeUserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AuthorizeUserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AuthorizeUserApp.vue?vue&type=style&index=0&id=3b2fe9ed&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3b2fe9ed\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"oauth2-apps\" }\n\nimport { onUnmounted, toRefs } from 'vue'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const { user } = toRefs(props)\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(OAUTH2_STORE.MUTATIONS.SET_CLIENTS, [])\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_router_view, { authUser: _unref(user) }, null, 8, [\"authUser\"])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3a844fa2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"oauth2-app\",\n class: \"description-list\"\n}\nconst _hoisted_2 = { key: 1 }\nconst _hoisted_3 = {\n key: 0,\n class: \"info-box success-message\"\n}\nconst _hoisted_4 = [\"title\"]\nconst _hoisted_5 = { key: 0 }\nconst _hoisted_6 = {\n key: 1,\n class: \"app-secret\"\n}\nconst _hoisted_7 = [\"title\"]\nconst _hoisted_8 = { class: \"client-scopes\" }\nconst _hoisted_9 = { class: \"app-buttons\" }\nconst _hoisted_10 = { key: 2 }\nconst _hoisted_11 = { class: \"no-app\" }\n\nimport {\n ComputedRef,\n Ref,\n capitalize,\n computed,\n onBeforeMount,\n toRefs,\n ref,\n onUnmounted,\n withDefaults,\n watch,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IOAuth2Client } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n authUser: IAuthUserProfile\n afterCreation?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserApp',\n props: {\n authUser: null,\n afterCreation: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, afterCreation: boolean }\n\n \n const route = useRoute()\n const store = useStore()\n\n const { afterCreation, authUser } = toRefs(props)\n const client: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENT]\n )\n const revocationSuccessful: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.REVOCATION_SUCCESSFUL]\n )\n const displayModal: Ref = ref(false)\n const messageToDisplay: Ref = ref(null)\n const idCopied: Ref = ref(false)\n const secretCopied: Ref = ref(false)\n const clipboardSupport: Ref = ref(false)\n\n onBeforeMount(() => {\n loadClient()\n if (navigator.clipboard) {\n clipboardSupport.value = true\n }\n })\n\n function loadClient() {\n // after creation, client is already in store\n if (\n !afterCreation.value &&\n route.params.id &&\n typeof route.params.id === 'string'\n ) {\n store.dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_ID, +route.params.id)\n }\n }\n function updateMessageToDisplay(forDelete: boolean) {\n messageToDisplay.value = forDelete\n ? 'oauth2.APP_DELETION_CONFIRMATION'\n : 'oauth2.TOKENS_REVOCATION_CONFIRMATION'\n updateDisplayModal(true)\n }\n function updateDisplayModal(value: boolean) {\n displayModal.value = value\n if (!value) {\n messageToDisplay.value = null\n }\n }\n function confirmAction(clientId: number) {\n if (messageToDisplay.value === 'oauth2.APP_DELETION_CONFIRMATION') {\n store.dispatch(OAUTH2_STORE.ACTIONS.DELETE_CLIENT, clientId)\n } else {\n store.dispatch(OAUTH2_STORE.ACTIONS.REVOKE_ALL_TOKENS, clientId)\n }\n }\n function copyIdToClipboard() {\n navigator.clipboard.writeText(client.value.client_id)\n idCopied.value = true\n secretCopied.value = false\n setTimeout(() => {\n idCopied.value = false\n }, 3000)\n }\n function copySecretToClipboard() {\n if (client.value.client_secret) {\n navigator.clipboard.writeText(client.value.client_secret)\n secretCopied.value = true\n idCopied.value = false\n setTimeout(() => {\n secretCopied.value = false\n }, 3000)\n }\n }\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(OAUTH2_STORE.MUTATIONS.EMPTY_CLIENT)\n store.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, false)\n })\n\n watch(\n () => revocationSuccessful.value,\n (newValue) => {\n if (newValue) {\n updateDisplayModal(false)\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t(messageToDisplay.value),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (confirmAction(_unref(client).id))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(client) && _unref(client).client_id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (_unref(afterCreation) || _unref(revocationSuccessful))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\n _unref(afterCreation)\n ? 'oauth2.APP_CREATED_SUCCESSFULLY'\n : 'oauth2.TOKENS_REVOKED'\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.CLIENT_ID')) + \":\", 1),\n _createElementVNode(\"dd\", null, [\n _createTextVNode(_toDisplayString(_unref(client).client_id) + \" \", 1),\n (_unref(afterCreation) && clipboardSupport.value)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: _normalizeClass(`fa fa-${idCopied.value ? 'check' : 'copy'}`),\n \"aria-hidden\": \"true\",\n title: _ctx.$t('oauth2.COPY_TO_CLIPBOARD'),\n onClick: copyIdToClipboard\n }, null, 10, _hoisted_4))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(afterCreation) && _unref(client).client_secret)\n ? (_openBlock(), _createElementBlock(\"dt\", _hoisted_5, _toDisplayString(_ctx.$t('oauth2.APP.CLIENT_SECRET')) + \": \", 1))\n : _createCommentVNode(\"\", true),\n (_unref(afterCreation) && _unref(client).client_secret)\n ? (_openBlock(), _createElementBlock(\"dd\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_unref(client).client_secret) + \" \", 1),\n (clipboardSupport.value)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: _normalizeClass(`fa fa-${secretCopied.value ? 'check' : 'copy'}`),\n \"aria-hidden\": \"true\",\n title: _ctx.$t('oauth2.COPY_TO_CLIPBOARD'),\n onClick: copySecretToClipboard\n }, null, 10, _hoisted_7))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"dt\", null, _toDisplayString(capitalize(_ctx.$t('oauth2.APP.ISSUE_AT'))) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(formatDate)(\n _unref(client).issued_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.DESCRIPTION')) + \":\", 1),\n _createElementVNode(\"dd\", {\n class: _normalizeClass({ 'no-description': !_unref(client).client_description })\n }, _toDisplayString(_unref(client).client_description\n ? _unref(client).client_description\n : _ctx.$t('oauth2.NO_DESCRIPTION')), 3),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.URL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).website), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.REDIRECT_URL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).redirect_uris.length > 0 ? _unref(client).redirect_uris[0] : ''), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.SCOPE.LABEL')) + \":\", 1),\n _createElementVNode(\"dd\", _hoisted_8, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(client).scope.split(' '), (scope) => {\n return (_openBlock(), _createElementBlock(\"span\", {\n class: \"client-scope\",\n key: scope\n }, [\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]))\n }), 128))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (updateMessageToDisplay(false)))\n }, _toDisplayString(_ctx.$t('oauth2.REVOKE_ALL_TOKENS')), 1),\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateMessageToDisplay(true)))\n }, _toDisplayString(_ctx.$t('oauth2.DELETE_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [\n _createElementVNode(\"p\", _hoisted_11, _toDisplayString(_ctx.$t('oauth2.NO_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n ]))\n}\n}\n\n})","import script from \"./UserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserApp.vue?vue&type=style&index=0&id=3a844fa2&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3a844fa2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-efa45ea0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"oauth2-apps-list\" }\nconst _hoisted_2 = { class: \"apps-list\" }\nconst _hoisted_3 = { key: 0 }\nconst _hoisted_4 = { class: \"app-issued-at\" }\nconst _hoisted_5 = {\n key: 1,\n class: \"no-apps\"\n}\nconst _hoisted_6 = { class: \"app-list-buttons\" }\n\nimport { ComputedRef, computed, onBeforeMount, toRefs, watch } from 'vue'\n import { LocationQuery, useRoute } from 'vue-router'\n\n import Pagination from '@/components/Common/Pagination.vue'\n import { OAUTH2_STORE } from '@/store/constants'\n import { IPagination } from '@/types/api'\n import { IOAuth2Client, IOauth2ClientsPayload } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { defaultPage, getNumberQueryValue } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n authUser: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAppsList',\n props: {\n authUser: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n const route = useRoute()\n\n const { authUser } = toRefs(props)\n const clients: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENTS]\n )\n\n const pagination: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENTS_PAGINATION]\n )\n let query: IOauth2ClientsPayload = getClientsQuery(route.query)\n\n onBeforeMount(() => {\n loadClients(query)\n })\n\n function getClientsQuery(newQuery: LocationQuery): IOauth2ClientsPayload {\n const clientsQuery: IOauth2ClientsPayload = {}\n if (newQuery.page) {\n clientsQuery.page = getNumberQueryValue(newQuery.page, defaultPage)\n }\n return clientsQuery\n }\n function loadClients(payload: IOauth2ClientsPayload) {\n store.dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENTS, payload)\n }\n\n watch(\n () => route.query,\n async (newQuery) => {\n query = getClientsQuery(newQuery)\n loadClients(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"p\", _hoisted_2, _toDisplayString(_ctx.$t('oauth2.APPS_LIST')), 1),\n (_unref(clients).length > 0)\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(clients), (client) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: client.client_id\n }, [\n _createVNode(_component_router_link, {\n to: { name: 'UserApp', params: { id: client.id } }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(client.name), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('oauth2.APP.ISSUE_AT')) + \" \" + _toDisplayString(_unref(formatDate)(\n client.issued_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1)\n ]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('oauth2.NO_APPS')), 1)),\n (_unref(clients).length > 0)\n ? (_openBlock(), _createBlock(Pagination, {\n key: 2,\n pagination: _unref(pagination),\n path: \"/profile/apps\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"button\", {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/apps/new')))\n }, _toDisplayString(_ctx.$t('oauth2.NEW_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserAppsList.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAppsList.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAppsList.vue?vue&type=style&index=0&id=efa45ea0&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-efa45ea0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, withModifiers as _withModifiers, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createBlock as _createBlock, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74e52489\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-sport-preferences\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"responsive-table\"\n}\nconst _hoisted_3 = { class: \"mobile-display\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"profile-buttons mobile-display\"\n}\nconst _hoisted_5 = {\n key: 1,\n class: \"profile-buttons\"\n}\nconst _hoisted_6 = { class: \"text-left\" }\nconst _hoisted_7 = { key: 0 }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = [\"value\"]\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"disabled-message\"\n}\nconst _hoisted_12 = {\n key: 1,\n class: \"fa fa-refresh fa-spin fa-fw\"\n}\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"cell-heading\" }\nconst _hoisted_15 = [\"checked\"]\nconst _hoisted_16 = { class: \"cell-heading\" }\nconst _hoisted_17 = [\"value\"]\nconst _hoisted_18 = { key: 1 }\nconst _hoisted_19 = {\n key: 0,\n class: \"action-buttons\"\n}\nconst _hoisted_20 = { class: \"cell-heading\" }\nconst _hoisted_21 = [\"onClick\"]\nconst _hoisted_22 = {\n key: 1,\n class: \"edition-buttons\"\n}\nconst _hoisted_23 = [\"disabled\"]\nconst _hoisted_24 = [\"disabled\", \"onClick\"]\nconst _hoisted_25 = [\"disabled\"]\nconst _hoisted_26 = {\n key: 0,\n class: \"profile-buttons\"\n}\nconst _hoisted_27 = {\n key: 1,\n class: \"profile-buttons\"\n}\n\nimport { ComputedRef, computed, inject, reactive, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { AUTH_USER_STORE, ROOT_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IUserProfile, IUserSportPreferencesPayload } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n user: IUserProfile\n isEdition: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserSportPreferences',\n props: {\n user: null,\n isEdition: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n isEdition: boolean\n }\n\n \n\n const store = useStore()\n const { t } = useI18n()\n\n const { isEdition, user } = toRefs(props)\n const defaultColor = '#838383'\n const sportColors: Record | undefined = inject('sportColors')\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(sports.value, t, 'is_active', user.value.sports_list)\n )\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const sportPayload: IUserSportPreferencesPayload = reactive({\n sport_id: 0,\n color: null,\n is_active: true,\n stopped_speed_threshold: 1,\n })\n\n function updateSportInEdition(sport: ISport | null) {\n if (sport !== null) {\n sportPayload.sport_id = sport.id\n sportPayload.color = sport.color\n ? sport.color\n : sportColors\n ? sportColors[sport.label]\n : defaultColor\n sportPayload.is_active = sport.is_active_for_user\n sportPayload.stopped_speed_threshold = sport.stopped_speed_threshold\n } else {\n resetSportPayload()\n }\n }\n function isSportInEdition(sportId: number) {\n return sportPayload.sport_id === sportId\n }\n function updateColor(event: Event & { target: HTMLInputElement }) {\n sportPayload.color = event.target.value\n }\n function updateThreshold(event: Event & { target: HTMLInputElement }) {\n sportPayload.stopped_speed_threshold = parseFloat(event.target.value)\n }\n function updateIsActive(event: Event & { target: HTMLInputElement }) {\n sportPayload.is_active = event.target.checked\n }\n function resetSportPayload() {\n sportPayload.sport_id = 0\n sportPayload.color = null\n sportPayload.is_active = true\n sportPayload.stopped_speed_threshold = 1\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n }\n function updateSport(event: Event) {\n event.preventDefault()\n store.dispatch(\n AUTH_USER_STORE.ACTIONS.UPDATE_USER_SPORT_PREFERENCES,\n sportPayload\n )\n }\n function resetSport(event: Event, sportId: number) {\n event.preventDefault()\n store.dispatch(\n AUTH_USER_STORE.ACTIONS.RESET_USER_SPORT_PREFERENCES,\n sportId\n )\n }\n\n watch(\n () => loading.value,\n (newIsLoading) => {\n if (!newIsLoading && !errorMessages.value) {\n resetSportPayload()\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/sports')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/profile/edit/sports')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_SPORTS_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]),\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.COLOR')), 1),\n _createElementVNode(\"th\", _hoisted_6, _toDisplayString(_ctx.$t('workouts.SPORT', 0)), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('workouts.WORKOUT', 0)), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.IS_ACTIVE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD')), 1),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"th\", _hoisted_7, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.ACTION')), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: sport.id\n }, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.COLOR')), 1),\n (isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"sport-color\",\n type: \"color\",\n value: sportPayload.color,\n onInput: updateColor\n }, null, 40, _hoisted_9))\n : (_openBlock(), _createBlock(_component_SportImage, {\n key: 1,\n title: sport.translatedLabel,\n \"sport-label\": sport.label,\n color: sport.color ? sport.color : _unref(sportColors)[sport.label]\n }, null, 8, [\"title\", \"sport-label\", \"color\"]))\n ]),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"sport-label\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.LABEL')), 1),\n _createTextVNode(\" \" + _toDisplayString(sport.translatedLabel) + \" \", 1),\n (!sport.is_active)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, \" (\" + _toDisplayString(_ctx.$t('user.PROFILE.SPORT.DISABLED_BY_ADMIN')) + \") \", 1))\n : _createCommentVNode(\"\", true),\n (_unref(loading) && isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"i\", _hoisted_12))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages) && sportPayload.sport_id === sport.id)\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 2,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('workouts.WORKOUT', 0)), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${\n _unref(user).sports_list.includes(sport.id) ? '-check' : ''\n }`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.IS_ACTIVE')), 1),\n (isSportInEdition(sport.id) && sport.is_active)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n type: \"checkbox\",\n checked: sport.is_active_for_user,\n onChange: updateIsActive\n }, null, 40, _hoisted_15))\n : (_openBlock(), _createElementBlock(\"i\", {\n key: 1,\n class: _normalizeClass(`fa fa${sport.is_active_for_user ? '-check' : ''}`),\n \"aria-hidden\": \"true\"\n }, null, 2))\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD')), 1),\n (isSportInEdition(sport.id) && sport.is_active)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"threshold-input\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: sportPayload.stopped_speed_threshold,\n onInput: updateThreshold\n }, null, 40, _hoisted_17))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_18, _toDisplayString(sport.stopped_speed_threshold), 1))\n ], 2),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"td\", _hoisted_19, [\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.ACTION')), 1),\n (sportPayload.sport_id === 0)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n onClick: ($event: any) => (updateSportInEdition(sport))\n }, _toDisplayString(_ctx.$t('buttons.EDIT')), 9, _hoisted_21))\n : _createCommentVNode(\"\", true),\n (isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_22, [\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: updateSport\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_23),\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: (e) => resetSport(e, sport.id)\n }, _toDisplayString(_ctx.$t('buttons.RESET')), 9, _hoisted_24),\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateSportInEdition(null)))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_25)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n }), 128))\n ])\n ]),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_26, [\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/sports')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_27, [\n _createElementVNode(\"button\", {\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.$router.push('/profile/edit/sports')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_SPORTS_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./UserSportPreferences.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserSportPreferences.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserSportPreferences.vue?vue&type=style&index=0&id=74e52489&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74e52489\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74257266\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"about-text\" }\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-book fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = {\n href: \"https://samr1.github.io/FitTrackee/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-github fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_6 = {\n href: \"https://github.com/SamR1/FitTrackee\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-balance-scale fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://choosealicense.com/licenses/agpl-3.0/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}, \" AGPLv3 \", -1))\nconst _hoisted_9 = { key: 0 }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-envelope-o fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = [\"href\"]\n\nimport { ComputedRef, computed, capitalize } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'About',\n setup(__props) {\n\n const store = useStore()\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"p\", {\n class: \"error-message\",\n innerHTML: _ctx.$t('about.FITTRACKEE_DESCRIPTION')\n }, null, 8, _hoisted_2),\n _createElementVNode(\"p\", null, [\n _hoisted_3,\n _createElementVNode(\"a\", _hoisted_4, _toDisplayString(capitalize(_ctx.$t('common.DOCUMENTATION'))), 1)\n ]),\n _createElementVNode(\"p\", null, [\n _hoisted_5,\n _createElementVNode(\"a\", _hoisted_6, _toDisplayString(_ctx.$t('about.SOURCE_CODE')), 1)\n ]),\n _createElementVNode(\"p\", null, [\n _hoisted_7,\n _createVNode(_component_i18n_t, { keypath: \"about.FITTRACKEE_LICENSE\" }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n })\n ]),\n (_unref(appConfig).admin_contact)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _hoisted_10,\n _createElementVNode(\"a\", {\n href: `mailto:${_unref(appConfig).admin_contact}`\n }, _toDisplayString(_ctx.$t('about.CONTACT_ADMIN')), 9, _hoisted_11)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./About.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./About.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./About.vue?vue&type=style&index=0&id=74257266&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74257266\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./BikePic.vue?vue&type=template&id=795f7f5f&scoped=true\"\nconst script = {}\n\nimport \"./BikePic.vue?vue&type=style&index=0&id=795f7f5f&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-795f7f5f\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-bffb50d0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"about\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = { class: \"container-sub\" }\nconst _hoisted_4 = { class: \"container-sub about-details\" }\n\nimport About from '@/components/About.vue'\n import BikePic from '@/components/BikePic.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'AboutView',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(BikePic)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(About)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./AboutView.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./AboutView.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./AboutView.vue?vue&type=style&index=0&id=bffb50d0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-bffb50d0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-96abcc38\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"timeline-workout\" }\nconst _hoisted_2 = { class: \"box\" }\nconst _hoisted_3 = { class: \"workout-user-date\" }\nconst _hoisted_4 = { class: \"workout-user\" }\nconst _hoisted_5 = [\"title\"]\nconst _hoisted_6 = { key: 0 }\nconst _hoisted_7 = {\n key: 1,\n class: \"no-map\"\n}\nconst _hoisted_8 = { class: \"img\" }\nconst _hoisted_9 = { class: \"data\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-clock-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { key: 0 }\nconst _hoisted_12 = { class: \"data\" }\nconst _hoisted_13 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-road\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_14 = {\n key: 0,\n class: \"data elevation\"\n}\nconst _hoisted_15 = [\"alt\"]\nconst _hoisted_16 = { class: \"data-values\" }\nconst _hoisted_17 = {\n key: 1,\n class: \"data altitude\"\n}\nconst _hoisted_18 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-location-arrow\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_19 = { class: \"data-values\" }\n\nimport { Locale, formatDistance } from 'date-fns'\n import { ComputedRef, computed, toRefs, withDefaults } from 'vue'\n\n import StaticMap from '@/components/Common/StaticMap.vue'\n import UserPicture from '@/components/User/UserPicture.vue'\n import { ROOT_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkout } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n user: IUserProfile\n useImperialUnits: boolean\n workout?: IWorkout\n sport?: ISport\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutCard',\n props: {\n user: null,\n useImperialUnits: { type: Boolean },\n workout: { default: () => ({} as IWorkout) },\n sport: { default: () => ({} as ISport) }\n },\n setup(__props: any) {\n\nconst props = __props as { user: IUserProfile, useImperialUnits: boolean, workout: IWorkout, sport: ISport }\n\n \n\n const store = useStore()\n\n const { user, workout, sport, useImperialUnits } = toRefs(props)\n const locale: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LOCALE]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n (_unref(user).username)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"workout-user-name\",\n to: {\n name: 'User',\n params: { username: _unref(user).username },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(user).username), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"workout-title\",\n to: {\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(workout).title), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true),\n (_unref(workout).workout_date && _unref(user))\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"workout-date\",\n title: \n _unref(formatDate)(_unref(workout).workout_date, _unref(user).timezone, _unref(user).date_format)\n \n }, _toDisplayString(_unref(formatDistance)(new Date(_unref(workout).workout_date), new Date(), {\n addSuffix: true,\n locale: _unref(locale),\n })), 9, _hoisted_5))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-map\", { 'no-cursor': !_unref(workout) }]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _unref(workout).id\n ? _ctx.$router.push({\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n })\n : null\n ))\n }, [\n (_unref(workout))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n (_unref(workout).with_gpx)\n ? (_openBlock(), _createBlock(StaticMap, {\n key: 0,\n workout: _unref(workout)\n }, null, 8, [\"workout\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.NO_MAP')), 1))\n ]))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-data\", { 'without-gpx': _unref(workout) && !_unref(workout).with_gpx }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (\n _unref(workout).id\n ? _ctx.$router.push({\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n })\n : null\n ))\n }, [\n _createElementVNode(\"div\", _hoisted_8, [\n (_unref(sport).label)\n ? (_openBlock(), _createBlock(_component_SportImage, {\n key: 0,\n \"sport-label\": _unref(sport).label,\n color: _unref(sport).color\n }, null, 8, [\"sport-label\", \"color\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n (_unref(workout))\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, _toDisplayString(_unref(workout).moving), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _hoisted_13,\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).distance,\n digits: 3,\n unitFrom: \"km\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(workout) && _unref(workout).with_gpx)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n _createElementVNode(\"img\", {\n class: \"mountains\",\n src: \"/img/workouts/mountains.svg\",\n alt: _ctx.$t('workouts.ELEVATION')\n }, null, 8, _hoisted_15),\n _createElementVNode(\"div\", _hoisted_16, [\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).min_alt,\n unitFrom: \"m\",\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\"/ \"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 1,\n distance: _unref(workout).max_alt,\n unitFrom: \"m\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(workout) && _unref(workout).with_gpx)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _hoisted_18,\n _createElementVNode(\"div\", _hoisted_19, [\n _createTextVNode(\" +\"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).ascent,\n unitFrom: \"m\",\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\"/- \"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 1,\n distance: _unref(workout).descent,\n unitFrom: \"m\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./WorkoutCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutCard.vue?vue&type=style&index=0&id=96abcc38&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-96abcc38\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-35567bf2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"timeline\" }\nconst _hoisted_2 = { class: \"section-title\" }\nconst _hoisted_3 = { key: 0 }\nconst _hoisted_4 = { key: 1 }\nconst _hoisted_5 = {\n key: 1,\n class: \"more-workouts\"\n}\n\nimport { ComputedRef, computed, ref, onBeforeMount, toRefs } from 'vue'\n\n import WorkoutCard from '@/components/Workout/WorkoutCard.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkout } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n sports: ISport[]\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Timeline',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IUserProfile\n }\n\n \n\n const store = useStore()\n\n const { sports, user } = toRefs(props)\n const page = ref(1)\n const per_page = 5\n const initWorkoutsCount =\n props.user.nb_workouts >= per_page ? per_page : props.user.nb_workouts\n onBeforeMount(() => loadWorkouts())\n const workouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.TIMELINE_WORKOUTS]\n )\n const moreWorkoutsExist: ComputedRef = computed(() =>\n workouts.value.length > 0\n ? workouts.value[workouts.value.length - 1].previous_workout !== null\n : false\n )\n\n function loadWorkouts() {\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_TIMELINE_WORKOUTS, {\n page: page.value,\n per_page,\n ...defaultOrder,\n })\n }\n function loadMoreWorkouts() {\n page.value += 1\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_MORE_TIMELINE_WORKOUTS, {\n page: page.value,\n per_page,\n ...defaultOrder,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('workouts.LATEST_WORKOUTS')), 1),\n (_unref(user).nb_workouts > 0 && _unref(workouts).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList([...Array(_unref(initWorkoutsCount)).keys()], (index) => {\n return (_openBlock(), _createBlock(WorkoutCard, {\n user: _unref(user),\n useImperialUnits: _unref(user).imperial_units,\n key: index\n }, null, 8, [\"user\", \"useImperialUnits\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout) => {\n return (_openBlock(), _createBlock(WorkoutCard, {\n workout: workout,\n sport: \n _unref(workouts).length > 0\n ? _unref(sports).filter((s) => s.id === workout.sport_id)[0]\n : null\n ,\n user: _unref(user),\n useImperialUnits: _unref(user).imperial_units,\n key: workout.id\n }, null, 8, [\"workout\", \"sport\", \"user\", \"useImperialUnits\"]))\n }), 128)),\n (_unref(workouts).length === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true),\n (_unref(moreWorkoutsExist))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"button\", { onClick: loadMoreWorkouts }, _toDisplayString(_ctx.$t('workouts.LOAD_MORE_WORKOUT')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n}\n}\n\n})","import script from \"./Timeline.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Timeline.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Timeline.vue?vue&type=style&index=0&id=35567bf2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-35567bf2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = [\"title\"]\n\nimport { toRefs } from 'vue'\n\n import { IWorkout } from '@/types/workouts'\n interface Props {\n displayHARecord: boolean\n workout: IWorkout\n sportLabel: string\n sportColor: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkout',\n props: {\n displayHARecord: { type: Boolean },\n workout: null,\n sportLabel: null,\n sportColor: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n displayHARecord: boolean\n workout: IWorkout\n sportLabel: string\n sportColor: string | null\n }\n\n \n\n const { displayHARecord, workout, sportLabel, sportColor } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"calendar-workout\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _ctx.$router.push({ name: 'Workout', params: { workoutId: _unref(workout).id } })\n ))\n }, [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(sportLabel),\n title: _unref(workout).title,\n color: _unref(sportColor)\n }, null, 8, [\"sport-label\", \"title\", \"color\"]),\n _createElementVNode(\"sup\", null, [\n (_unref(workout).records.length > 0)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-trophy custom-fa-small\",\n \"aria-hidden\": \"true\",\n title: \n _unref(workout).records\n .filter((record) =>\n _unref(displayHARecord) ? true : record.record_type !== 'HA'\n )\n .map((record) => ` ${_ctx.$t(`workouts.RECORD_${record.record_type}`)}`)\n \n }, null, 8, _hoisted_1))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkout.vue?vue&type=style&index=0&id=331e1c8b&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"donut-chart\" }\nconst _hoisted_2 = {\n height: \"34\",\n width: \"34\",\n viewBox: \"0 0 34 34\"\n}\nconst _hoisted_3 = [\"stroke\", \"stroke-dashoffset\", \"transform\"]\n\nimport { toRefs } from 'vue'\n\n interface Props {\n colors: Record\n datasets: Record>\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'DonutChart',\n props: {\n colors: null,\n datasets: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n colors: Record\n datasets: Record>\n }\n\n \n\n const { colors, datasets } = toRefs(props)\n let angleOffset = -90\n const cx = 16\n const cy = 16\n const radius = 14\n const circumference = 2 * Math.PI * radius\n\n function calculateStrokeDashOffset(\n percentage: number,\n circumference: number\n ): number {\n return circumference - percentage * circumference\n }\n function returnCircleTransformValue(\n index: number,\n percentage: number\n ): string {\n const rotation = `rotate(${angleOffset}, ${cx}, ${cy})`\n angleOffset = percentage * 360 + angleOffset\n return rotation\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(Object.entries(_unref(datasets)), (data, index) => {\n return (_openBlock(), _createElementBlock(\"g\", { key: index }, [\n _createElementVNode(\"circle\", {\n cx: cx,\n cy: cy,\n r: radius,\n fill: \"transparent\",\n stroke: _unref(colors)[+data[0]],\n \"stroke-dashoffset\": \n calculateStrokeDashOffset(data[1].percentage, circumference)\n ,\n \"stroke-dasharray\": circumference,\n \"stroke-width\": \"3\",\n \"stroke-opacity\": \"0.8\",\n transform: returnCircleTransformValue(index, data[1].percentage)\n }, null, 8, _hoisted_3)\n ]))\n }), 128))\n ]))\n ]))\n}\n}\n\n})","import script from \"./DonutChart.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./DonutChart.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-52d4310a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"calendar-workouts-chart\" }\nconst _hoisted_2 = { class: \"workouts-count\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workouts-pane\"\n}\nconst _hoisted_4 = { class: \"more-workouts\" }\n\nimport { ref, toRefs } from 'vue'\n\n import CalendarWorkout from '@/components/Dashboard/UserCalendar/CalendarWorkout.vue'\n import DonutChart from '@/components/Dashboard/UserCalendar/DonutChart.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getSportColor, getSportLabel } from '@/utils/sports'\n\n interface Props {\n colors: Record\n datasets: Record>\n sports: ISport[]\n workouts: IWorkout[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkoutsChart',\n props: {\n colors: null,\n datasets: null,\n sports: null,\n workouts: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n colors: Record\n datasets: Record>\n sports: ISport[]\n workouts: IWorkout[]\n }\n\n \n\n const { colors, datasets, sports, workouts } = toRefs(props)\n const isHidden = ref(true)\n\n function togglePane(event: Event & { target: HTMLElement }) {\n event.stopPropagation()\n isHidden.value = !isHidden.value\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _directive_click_outside = _resolveDirective(\"click-outside\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"workouts-chart\",\n onClick: togglePane\n }, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_unref(workouts).length), 1),\n _createVNode(DonutChart, {\n datasets: _unref(datasets),\n colors: _unref(colors)\n }, null, 8, [\"datasets\", \"colors\"])\n ]),\n (!isHidden.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"i\", {\n class: \"fa fa-times calendar-more\",\n \"aria-hidden\": \"true\",\n onClick: togglePane\n }),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout, index) => {\n return (_openBlock(), _createBlock(CalendarWorkout, {\n key: index,\n workout: workout,\n sportLabel: _unref(getSportLabel)(workout, _unref(sports)),\n sportColor: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"workout\", \"sportLabel\", \"sportColor\"]))\n }), 128))\n ])), [\n [_directive_click_outside, togglePane]\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkoutsChart.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkoutsChart.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkoutsChart.vue?vue&type=style&index=0&id=52d4310a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-52d4310a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-workouts\" }\nconst _hoisted_2 = { class: \"desktop-display\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workouts-display\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"donut-display\"\n}\nconst _hoisted_5 = { class: \"mobile-display\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"donut-display\"\n}\n\nimport { computed, toRefs } from 'vue'\n\n import CalendarWorkout from '@/components/Dashboard/UserCalendar/CalendarWorkout.vue'\n import CalendarWorkoutsChart from '@/components/Dashboard/UserCalendar/CalendarWorkoutsChart.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getSportColor, getSportLabel, sportIdColors } from '@/utils/sports'\n import { getDonutDatasets } from '@/utils/workouts'\n\n interface Props {\n displayHARecord: boolean\n workouts: IWorkout[]\n sports: ISport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkouts',\n props: {\n displayHARecord: { type: Boolean },\n workouts: null,\n sports: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n displayHARecord: boolean\n workouts: IWorkout[]\n sports: ISport[]\n }\n\n \n\n const { displayHARecord, workouts, sports } = toRefs(props)\n const chartDatasets = computed(() => getDonutDatasets(props.workouts))\n const colors = computed(() => sportIdColors(props.sports))\n const displayedWorkoutCount = 6\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(workouts).length <= displayedWorkoutCount)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts).slice(0, displayedWorkoutCount), (workout, index) => {\n return (_openBlock(), _createBlock(CalendarWorkout, {\n key: index,\n displayHARecord: _unref(displayHARecord),\n workout: workout,\n sportLabel: _unref(getSportLabel)(workout, _unref(sports)),\n sportColor: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"displayHARecord\", \"workout\", \"sportLabel\", \"sportColor\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(CalendarWorkoutsChart, {\n workouts: _unref(workouts),\n sports: _unref(sports),\n datasets: _unref(chartDatasets),\n colors: _unref(colors)\n }, null, 8, [\"workouts\", \"sports\", \"datasets\", \"colors\"])\n ]))\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n (_unref(workouts).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(CalendarWorkoutsChart, {\n workouts: _unref(workouts),\n sports: _unref(sports),\n datasets: _unref(chartDatasets),\n colors: _unref(colors)\n }, null, 8, [\"workouts\", \"sports\", \"datasets\", \"colors\"])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkouts.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkouts.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkouts.vue?vue&type=style&index=0&id=5aab7455&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-cells\" }\nconst _hoisted_2 = { class: \"calendar-cell-day\" }\n\nimport { addDays, format, isSameDay, isSameMonth, isToday } from 'date-fns'\n import { Ref, ref, toRefs, watch, onMounted } from 'vue'\n\n import CalendarWorkouts from '@/components/Dashboard/UserCalendar/CalendarWorkouts.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getDateWithTZ } from '@/utils/dates'\n\n interface Props {\n currentDay: Date\n displayHARecord: boolean\n endDate: Date\n sports: ISport[]\n startDate: Date\n timezone: string\n weekStartingMonday: boolean\n workouts: IWorkout[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarCells',\n props: {\n currentDay: null,\n displayHARecord: { type: Boolean },\n endDate: null,\n sports: null,\n startDate: null,\n timezone: null,\n weekStartingMonday: { type: Boolean },\n workouts: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n currentDay: Date\n displayHARecord: boolean\n endDate: Date\n sports: ISport[]\n startDate: Date\n timezone: string\n weekStartingMonday: boolean\n workouts: IWorkout[]\n }\n\n \n\n const {\n currentDay,\n displayHARecord,\n endDate,\n sports,\n startDate,\n timezone,\n weekStartingMonday,\n workouts,\n } = toRefs(props)\n const rows: Ref = ref([])\n\n onMounted(() => getDays())\n\n function getDays() {\n rows.value = []\n let day = startDate.value\n while (day <= endDate.value) {\n const days: Date[] = []\n for (let i = 0; i < 7; i++) {\n days.push(day)\n day = addDays(day, 1)\n }\n rows.value.push(days)\n }\n }\n function isWeekEnd(day: number): boolean {\n return weekStartingMonday.value\n ? [5, 6].includes(day)\n : [0, 6].includes(day)\n }\n function filterWorkouts(day: Date, workouts: IWorkout[]) {\n if (workouts) {\n return workouts\n .filter((workout) =>\n isSameDay(getDateWithTZ(workout.workout_date, timezone.value), day)\n )\n .reverse()\n }\n return []\n }\n\n watch(\n () => props.currentDay,\n () => getDays()\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(rows.value, (row, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"calendar-row\",\n key: index\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(row, (day, i) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"calendar-cell\", {\n 'disabled-cell': !_unref(isSameMonth)(day, _unref(currentDay)),\n 'week-end': isWeekEnd(i),\n today: _unref(isToday)(day),\n }]),\n key: i\n }, [\n _createVNode(CalendarWorkouts, {\n workouts: filterWorkouts(day, _unref(workouts)),\n sports: _unref(sports),\n displayHARecord: _unref(displayHARecord)\n }, null, 8, [\"workouts\", \"sports\", \"displayHARecord\"]),\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_unref(format)(day, 'd')), 1)\n ], 2))\n }), 128))\n ]))\n }), 128))\n ]))\n}\n}\n\n})","import script from \"./CalendarCells.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarCells.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarCells.vue?vue&type=style&index=0&id=34b99f0e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-days\" }\n\nimport { Locale, format, addDays } from 'date-fns'\n\n interface Props {\n startDate: Date\n localeOptions: Locale\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarDays',\n props: {\n startDate: null,\n localeOptions: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n startDate: Date\n localeOptions: Locale\n }\n\n \n\n const days = []\n for (let i = 0; i < 7; i++) {\n days.push(addDays(props.startDate, i))\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(days, (day, index) => {\n return _createElementVNode(\"div\", {\n class: \"calendar-day\",\n key: index\n }, _toDisplayString(_unref(format)(day, 'EEE', { locale: __props.localeOptions })), 1)\n }), 64))\n ]))\n}\n}\n\n})","import script from \"./CalendarDays.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarDays.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarDays.vue?vue&type=style&index=0&id=4f3dc99e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, unref as _unref, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-header\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\nconst _hoisted_4 = { class: \"calendar-month\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_6 = [\n _hoisted_5\n]\n\nimport { Locale, format } from 'date-fns'\n import { toRefs } from 'vue'\n\n interface Props {\n day: Date\n localeOptions: Locale\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarHeader',\n props: {\n day: null,\n localeOptions: null\n },\n emits: ['displayNextMonth', 'displayPreviousMonth'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n day: Date\n localeOptions: Locale\n }\n\n \n\n \n\n const { day, localeOptions } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"calendar-arrow calendar-arrow-left\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('displayPreviousMonth')))\n }, _hoisted_3),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(format)(_unref(day), 'MMM yyyy', { locale: _unref(localeOptions) })), 1)\n ]),\n _createElementVNode(\"div\", {\n class: \"calendar-arrow calendar-arrow-right\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('displayNextMonth')))\n }, _hoisted_6)\n ]))\n}\n}\n\n})","import script from \"./CalendarHeader.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarHeader.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarHeader.vue?vue&type=style&index=0&id=79a65a70&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-calendar\" }\nconst _hoisted_2 = { class: \"calendar-card box\" }\n\nimport { Locale, addMonths, format, subMonths } from 'date-fns'\n import { ComputedRef, computed, ref, toRefs, onBeforeMount } from 'vue'\n\n import CalendarCells from '@/components/Dashboard/UserCalendar/CalendarCells.vue'\n import CalendarDays from '@/components/Dashboard/UserCalendar/CalendarDays.vue'\n import CalendarHeader from '@/components/Dashboard/UserCalendar/CalendarHeader.vue'\n import { ROOT_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkout, TWorkoutsPayload } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { getCalendarStartAndEnd } from '@/utils/dates'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const { sports, user } = toRefs(props)\n const dateFormat = 'yyyy-MM-dd'\n const day = ref(new Date())\n const calendarDates = ref(getCalendarStartAndEnd(day.value, props.user.weekm))\n const calendarWorkouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.CALENDAR_WORKOUTS]\n )\n const localeOptions: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LOCALE]\n )\n\n onBeforeMount(() => getCalendarWorkouts())\n\n function getCalendarWorkouts() {\n calendarDates.value = getCalendarStartAndEnd(day.value, props.user.weekm)\n const apiParams: TWorkoutsPayload = {\n from: format(calendarDates.value.start, dateFormat),\n to: format(calendarDates.value.end, dateFormat),\n page: 1,\n per_page: 100,\n ...defaultOrder,\n }\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_CALENDAR_WORKOUTS, apiParams)\n }\n function displayNextMonth() {\n day.value = addMonths(day.value, 1)\n getCalendarWorkouts()\n }\n function displayPreviousMonth() {\n day.value = subMonths(day.value, 1)\n getCalendarWorkouts()\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(CalendarHeader, {\n day: day.value,\n \"locale-options\": _unref(localeOptions),\n onDisplayNextMonth: displayNextMonth,\n onDisplayPreviousMonth: displayPreviousMonth\n }, null, 8, [\"day\", \"locale-options\"]),\n _createVNode(CalendarDays, {\n \"start-date\": calendarDates.value.start,\n \"locale-options\": _unref(localeOptions)\n }, null, 8, [\"start-date\", \"locale-options\"]),\n _createVNode(CalendarCells, {\n currentDay: day.value,\n displayHARecord: _unref(user).display_ascent,\n \"end-date\": calendarDates.value.end,\n sports: _unref(sports),\n \"start-date\": calendarDates.value.start,\n timezone: _unref(user).timezone,\n workouts: _unref(calendarWorkouts),\n weekStartingMonday: _unref(user).weekm\n }, null, 8, [\"currentDay\", \"displayHARecord\", \"end-date\", \"sports\", \"start-date\", \"timezone\", \"workouts\", \"weekStartingMonday\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=3e7444d9&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1bcddc12\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"user-month-stats\" }\n\nimport { endOfMonth, startOfMonth } from 'date-fns'\n import { toRefs } from 'vue'\n\n import StatChart from '@/components/Common/StatsChart/index.vue'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n\n interface Props {\n sports: ISport[]\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserMonthStats',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IUserProfile\n }\n\n \n\n const { sports, user } = toRefs(props)\n const date = new Date()\n const chartParams = {\n duration: 'week',\n start: startOfMonth(date),\n end: endOfMonth(date),\n }\n const selectedSportIds = props.sports.map((sport) => sport.id)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('dashboard.THIS_MONTH')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(StatChart, {\n sports: _unref(sports),\n user: _unref(user),\n \"chart-params\": chartParams,\n \"displayed-sport-ids\": _unref(selectedSportIds),\n \"hide-chart-if-no-data\": true\n }, null, 8, [\"sports\", \"user\", \"displayed-sport-ids\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./UserMonthStats.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserMonthStats.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserMonthStats.vue?vue&type=style&index=0&id=1bcddc12&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1bcddc12\"]])\n\nexport default __exports__","import createI18n from '@/i18n'\nimport { ITranslatedSport } from '@/types/sports'\nimport { TUnit } from '@/types/units'\nimport { ICardRecord, IRecord, IRecordsBySports } from '@/types/workouts'\nimport { formatDate, getDateFormat } from '@/utils/dates'\nimport { convertDistance, units } from '@/utils/units'\n\nconst { locale } = createI18n.global\n\nexport const formatRecord = (\n record: IRecord,\n tz: string,\n useImperialUnits: boolean,\n date_format: string\n): Record => {\n const distanceUnitFrom: TUnit = 'km'\n const distanceUnitTo: TUnit = useImperialUnits\n ? units[distanceUnitFrom].defaultTarget\n : distanceUnitFrom\n const ascentUnitFrom: TUnit = 'm'\n const ascentUnitTo: TUnit = useImperialUnits\n ? units[ascentUnitFrom].defaultTarget\n : ascentUnitFrom\n let value\n switch (record.record_type) {\n case 'AS':\n case 'MS':\n value = `${convertDistance(\n +record.value,\n distanceUnitFrom,\n distanceUnitTo,\n 2\n )} ${distanceUnitTo}/h`\n break\n case 'FD':\n value = `${convertDistance(\n +record.value,\n distanceUnitFrom,\n distanceUnitTo,\n 3\n )} ${distanceUnitTo}`\n break\n case 'HA':\n value = `${convertDistance(\n +record.value,\n ascentUnitFrom,\n ascentUnitTo,\n 2\n )} ${ascentUnitTo}`\n break\n case 'LD':\n value = record.value\n break\n default:\n throw new Error(\n `Invalid record type, expected: \"AS\", \"FD\", \"HA\", \"LD\", \"MD\", got: \"${record.record_type}\"`\n )\n }\n return {\n workout_date: formatDate(record.workout_date, tz, date_format, false),\n workout_id: record.workout_id,\n id: record.id,\n record_type: record.record_type,\n value: value,\n }\n}\n\nexport const sortRecords = (a: ICardRecord, b: ICardRecord): number => {\n const recordALabel = a.label.toLowerCase()\n const recordBLabel = b.label.toLowerCase()\n return recordALabel > recordBLabel ? 1 : recordALabel < recordBLabel ? -1 : 0\n}\n\nexport const getRecordsBySports = (\n records: IRecord[],\n translatedSports: ITranslatedSport[],\n tz: string,\n useImperialUnits: boolean,\n display_ascent: boolean,\n date_format: string\n): IRecordsBySports => {\n date_format = getDateFormat(date_format, locale.value)\n return records\n .filter((r) => (display_ascent ? true : r.record_type !== 'HA'))\n .reduce((sportList: IRecordsBySports, record) => {\n const sport = translatedSports.find((s) => s.id === record.sport_id)\n if (sport && sport.label) {\n if (sportList[sport.translatedLabel] === void 0) {\n sportList[sport.translatedLabel] = {\n label: sport.label,\n color: sport.color,\n records: [],\n }\n }\n sportList[sport.translatedLabel].records.push(\n formatRecord(record, tz, useImperialUnits, date_format)\n )\n }\n return sportList\n }, {})\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8d17c606\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"records-card\" }\nconst _hoisted_2 = { class: \"record-type\" }\nconst _hoisted_3 = { class: \"record-value\" }\nconst _hoisted_4 = { class: \"record-date\" }\n\nimport { toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ICardRecord, IRecord, IRecordsBySports } from '@/types/workouts'\n import { sortRecords } from '@/utils/records'\n\n interface Props {\n records: IRecordsBySports\n sportTranslatedLabel: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'RecordsCard',\n props: {\n records: null,\n sportTranslatedLabel: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n records: IRecordsBySports\n sportTranslatedLabel: string\n }\n\n \n\n const { records, sportTranslatedLabel } = toRefs(props)\n\n const { t } = useI18n()\n\n function getTranslatedRecords(records: IRecord[]): ICardRecord[] {\n const translatedRecords: ICardRecord[] = []\n records.map((record) => {\n translatedRecords.push({\n ...record,\n label: t(`workouts.RECORD_${record.record_type}`),\n })\n })\n return translatedRecords.sort(sortRecords)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(records).label,\n color: _unref(records).color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createTextVNode(\" \" + _toDisplayString(_unref(sportTranslatedLabel)), 1)\n ]),\n content: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(getTranslatedRecords(_unref(records).records), (record) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"record\",\n key: record.id\n }, [\n _createElementVNode(\"span\", _hoisted_2, _toDisplayString(record.label), 1),\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(record.value), 1),\n _createElementVNode(\"span\", _hoisted_4, [\n _createVNode(_component_router_link, {\n to: {\n name: 'Workout',\n params: { workoutId: record.workout_id },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(record.workout_date), 1)\n ]),\n _: 2\n }, 1032, [\"to\"])\n ])\n ]))\n }), 128))\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./RecordsCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RecordsCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./RecordsCard.vue?vue&type=style&index=0&id=8d17c606&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8d17c606\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-f0c85cb8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"user-records-section\" }\nconst _hoisted_2 = { class: \"section-title\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy custom-fa-small\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { class: \"user-records\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"no-records\"\n}\n\nimport { computed } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import RecordsCard from '@/components/Dashboard/UserRecords/RecordsCard.vue'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { getRecordsBySports } from '@/utils/records'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const recordsBySport = computed(() =>\n getRecordsBySports(\n props.user.records,\n translateSports(props.sports, t),\n props.user.timezone,\n props.user.imperial_units,\n props.user.display_ascent,\n props.user.date_format\n )\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.RECORD', 2)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n (Object.keys(_unref(recordsBySport)).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('workouts.NO_RECORDS')), 1))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(Object.keys(_unref(recordsBySport)).sort(), (sportTranslatedLabel) => {\n return (_openBlock(), _createBlock(RecordsCard, {\n sportTranslatedLabel: sportTranslatedLabel,\n records: _unref(recordsBySport)[sportTranslatedLabel],\n key: sportTranslatedLabel,\n useImperialUnits: __props.user.imperial_units\n }, null, 8, [\"sportTranslatedLabel\", \"records\", \"useImperialUnits\"]))\n }), 128))\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=f0c85cb8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-f0c85cb8\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-stats\" }\n\nimport { ComputedRef, computed, toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import StatCard from '@/components/Common/StatCard.vue'\n import { TUnit } from '@/types/units'\n import { IAuthUserProfile } from '@/types/user'\n import { convertDistance, units } from '@/utils/units'\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const { user } = toRefs(props)\n const userTotalDuration: ComputedRef = computed(\n () => props.user.total_duration\n )\n const totalDuration = computed(() => get_duration(userTotalDuration))\n const distanceUnitFrom: TUnit = 'km'\n const distanceUnitTo: TUnit = user.value.imperial_units\n ? units[distanceUnitFrom].defaultTarget\n : distanceUnitFrom\n const totalDistance: ComputedRef = computed(() =>\n user.value.imperial_units\n ? convertDistance(user.value.total_distance, distanceUnitFrom, distanceUnitTo, 2)\n : parseFloat(user.value.total_distance.toFixed(2)))\n const ascentUnitFrom: TUnit = 'm'\n const ascentUnitTo: TUnit = user.value.imperial_units\n ? units[ascentUnitFrom].defaultTarget\n : ascentUnitFrom\n const totalAscent: ComputedRef = computed(() =>\n user.value.imperial_units\n ? convertDistance(user.value.total_ascent, ascentUnitFrom, ascentUnitTo, 2)\n : parseFloat(user.value.total_ascent.toFixed(2)))\n\n\n function get_duration(total_duration: ComputedRef) {\n const duration = total_duration.value.match(/day/g)\n ? total_duration.value.split(', ')[1]\n : total_duration.value\n return {\n days: total_duration.value.match(/day/g)\n ? `${total_duration.value.split(' ')[0]} ${\n total_duration.value.match(/days/g)\n ? t('common.DAY', 2)\n : t('common.DAY', 1)\n }`\n : `0 ${t('common.DAY', 2)},`,\n duration: `${duration.split(':')[0]}h ${duration.split(':')[1]}min`,\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatCard, {\n icon: \"calendar\",\n value: _unref(user).nb_workouts,\n text: _ctx.$t('workouts.WORKOUT', _unref(user).nb_workouts)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"road\",\n value: _unref(totalDistance),\n text: _unref(distanceUnitTo) === 'mi' ? 'miles' : _unref(distanceUnitTo)\n }, null, 8, [\"value\", \"text\"]),\n (_unref(user).display_ascent)\n ? (_openBlock(), _createBlock(StatCard, {\n key: 0,\n icon: \"location-arrow\",\n value: _unref(totalAscent),\n text: _unref(ascentUnitTo) === 'ft' ? 'feet' : _unref(ascentUnitTo)\n }, null, 8, [\"value\", \"text\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(StatCard, {\n icon: \"clock-o\",\n value: _unref(totalDuration).days,\n text: _unref(totalDuration).duration\n }, null, 8, [\"value\", \"text\"]),\n (!_unref(user).display_ascent)\n ? (_openBlock(), _createBlock(StatCard, {\n key: 1,\n icon: \"tags\",\n value: _unref(user).nb_sports,\n text: _ctx.$t('workouts.SPORT', _unref(user).nb_sports)\n }, null, 8, [\"value\", \"text\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=22dcb990&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4c0893c1\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"dashboard\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container mobile-menu\" }\nconst _hoisted_3 = { class: \"box\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-calendar\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_5 = [\n _hoisted_4\n]\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-bar-chart\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = [\n _hoisted_6\n]\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-map-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_9 = [\n _hoisted_8\n]\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = [\n _hoisted_10\n]\nconst _hoisted_12 = { class: \"container\" }\nconst _hoisted_13 = { class: \"container dashboard-container\" }\nconst _hoisted_14 = { class: \"left-container dashboard-sub-container\" }\nconst _hoisted_15 = { class: \"right-container dashboard-sub-container\" }\nconst _hoisted_16 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\nconst _hoisted_17 = {\n key: 1,\n class: \"app-loading\"\n}\n\nimport { ComputedRef, Ref, computed, onBeforeMount, ref } from 'vue'\n\n import Timeline from '@/components/Dashboard/Timeline.vue'\n import UserCalendar from '@/components/Dashboard/UserCalendar/index.vue'\n import UserMonthStats from '@/components/Dashboard/UserMonthStats.vue'\n import UserRecords from '@/components/Dashboard/UserRecords/index.vue'\n import UserStatsCards from '@/components/Dashboard/UserStatsCards/index.vue'\n import { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Dashboard',\n setup(__props) {\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const isSelected: Ref = ref('calendar')\n\n onBeforeMount(() => store.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE))\n\n function updateDisplayColumn(target: string) {\n isSelected.value = target\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Loader = _resolveComponent(\"Loader\")!\n\n return (_unref(authUser).username && _unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'calendar' }]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (updateDisplayColumn('calendar')))\n }, _hoisted_5, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'chart' }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayColumn('chart')))\n }, _hoisted_7, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'timeline' }]),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (updateDisplayColumn('timeline')))\n }, _hoisted_9, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'records' }]),\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateDisplayColumn('records')))\n }, _hoisted_11, 2)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createVNode(UserStatsCards, { user: _unref(authUser) }, null, 8, [\"user\"])\n ]),\n _createElementVNode(\"div\", _hoisted_13, [\n _createElementVNode(\"div\", _hoisted_14, [\n _createVNode(UserMonthStats, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'chart') })\n }, null, 8, [\"sports\", \"user\", \"class\"]),\n _createVNode(UserRecords, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'records') })\n }, null, 8, [\"sports\", \"user\", \"class\"])\n ]),\n _createElementVNode(\"div\", _hoisted_15, [\n _createVNode(UserCalendar, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'calendar') })\n }, null, 8, [\"sports\", \"user\", \"class\"]),\n _createVNode(Timeline, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'timeline') })\n }, null, 8, [\"sports\", \"user\", \"class\"])\n ])\n ]),\n _hoisted_16\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createVNode(_component_Loader)\n ]))\n}\n}\n\n})","import script from \"./Dashboard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Dashboard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Dashboard.vue?vue&type=style&index=0&id=4c0893c1&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4c0893c1\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"not-found view\" }\n\nimport NotFound from '@/components/Common/NotFound.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'NotFoundView',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(NotFound)\n ]))\n}\n}\n\n})","import script from \"./NotFoundView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NotFoundView.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6a38125b\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"loginOrRegister\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = { class: \"container-sub\" }\nconst _hoisted_4 = { class: \"container-sub\" }\n\nimport { toRefs } from 'vue'\n\n import BikePic from '@/components/BikePic.vue'\n import LoginOrRegisterForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'LoginOrRegister',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(BikePic)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(LoginOrRegisterForm, { action: _unref(action) }, null, 8, [\"action\"])\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./LoginOrRegister.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./LoginOrRegister.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./LoginOrRegister.vue?vue&type=style&index=0&id=6a38125b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6a38125b\"]])\n\nexport default __exports__","import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'\n\nimport AdminApplication from '@/components/Administration/AdminApplication.vue'\nimport AdminMenu from '@/components/Administration/AdminMenu.vue'\nimport AdminSports from '@/components/Administration/AdminSports.vue'\nimport AdminUsers from '@/components/Administration/AdminUsers.vue'\nimport Profile from '@/components/User/ProfileDisplay/index.vue'\nimport UserInfos from '@/components/User/ProfileDisplay/UserInfos.vue'\nimport UserPreferences from '@/components/User/ProfileDisplay/UserPreferences.vue'\nimport ProfileEdition from '@/components/User/ProfileEdition/index.vue'\nimport UserAccountEdition from '@/components/User/ProfileEdition/UserAccountEdition.vue'\nimport UserInfosEdition from '@/components/User/ProfileEdition/UserInfosEdition.vue'\nimport UserPictureEdition from '@/components/User/ProfileEdition/UserPictureEdition.vue'\nimport UserPreferencesEdition from '@/components/User/ProfileEdition/UserPreferencesEdition.vue'\nimport AddUserApp from '@/components/User/UserApps/AddUserApp.vue'\nimport AuthorizeUserApp from '@/components/User/UserApps/AuthorizeUserApp.vue'\nimport UserApps from '@/components/User/UserApps/index.vue'\nimport UserApp from '@/components/User/UserApps/UserApp.vue'\nimport UserAppsList from '@/components/User/UserApps/UserAppsList.vue'\nimport UserSportPreferences from '@/components/User/UserSportPreferences.vue'\nimport store from '@/store'\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport AboutView from '@/views/AboutView.vue'\nimport Dashboard from '@/views/Dashboard.vue'\nimport NotFoundView from '@/views/NotFoundView.vue'\nimport LoginOrRegister from '@/views/user/LoginOrRegister.vue'\n\nconst getTabFromPath = (path: string): string => {\n const regex = /(\\/profile)(\\/edit)*(\\/*)/\n const tag = path.replace(regex, '').toUpperCase()\n return tag === '' ? 'PROFILE' : tag.toUpperCase()\n}\n\nconst routes: Array = [\n {\n path: '/',\n name: 'Dashboard',\n component: Dashboard,\n },\n {\n path: '/login',\n name: 'Login',\n component: LoginOrRegister,\n props: { action: 'login' },\n },\n {\n path: '/register',\n name: 'Register',\n component: LoginOrRegister,\n props: { action: 'register' },\n },\n {\n path: '/account-confirmation',\n name: 'AccountConfirmation',\n component: () =>\n import(\n /* webpackChunkName: 'profile' */ '@/views/user/AccountConfirmationView.vue'\n ),\n },\n {\n path: '/account-confirmation/resend',\n name: 'AccountConfirmationResend',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/AccountConfirmationResendView.vue'\n ),\n props: { action: 'account-confirmation-resend' },\n },\n {\n path: '/account-confirmation/email-sent',\n name: 'AccountConfirmationEmailSend',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/AccountConfirmationResendView.vue'\n ),\n props: { action: 'email-sent' },\n },\n {\n path: '/password-reset/sent',\n name: 'PasswordEmailSent',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'request-sent' },\n },\n {\n path: '/password-reset/request',\n name: 'PasswordResetRequest',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'reset-request' },\n },\n {\n path: '/password-reset/password-updated',\n name: 'PasswordUpdated',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'password-updated' },\n },\n {\n path: '/password-reset',\n name: 'PasswordReset',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'reset' },\n },\n {\n path: '/email-update',\n name: 'EmailUpdate',\n component: () =>\n import(\n /* webpackChunkName: 'profile' */ '@/views/user/EmailUpdateView.vue'\n ),\n },\n {\n path: '/profile',\n name: 'Profile',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/ProfileView.vue'),\n children: [\n {\n path: '',\n name: 'UserProfile',\n component: Profile,\n props: (route) => ({\n tab: getTabFromPath(route.path),\n }),\n children: [\n {\n path: '',\n name: 'UserInfos',\n component: UserInfos,\n },\n {\n path: 'preferences',\n name: 'UserPreferences',\n component: UserPreferences,\n },\n {\n path: 'sports',\n name: 'UserSportPreferences',\n component: UserSportPreferences,\n props: { isEdition: false },\n },\n {\n path: 'apps',\n name: 'UserApps',\n component: UserApps,\n children: [\n {\n path: '',\n name: 'UserAppsList',\n component: UserAppsList,\n },\n {\n path: ':id',\n name: 'UserApp',\n component: UserApp,\n },\n {\n path: ':id/created',\n name: 'CreatedUserApp',\n component: UserApp,\n props: { afterCreation: true },\n },\n {\n path: 'new',\n name: 'AddUserApp',\n component: AddUserApp,\n },\n {\n path: 'authorize',\n name: 'AuthorizeUserApp',\n component: AuthorizeUserApp,\n },\n ],\n },\n ],\n },\n {\n path: 'edit',\n name: 'UserProfileEdition',\n component: ProfileEdition,\n props: (route) => ({\n tab: getTabFromPath(route.path),\n }),\n children: [\n {\n path: '',\n name: 'UserInfosEdition',\n component: UserInfosEdition,\n },\n {\n path: 'account',\n name: 'UserAccountEdition',\n component: UserAccountEdition,\n },\n {\n path: 'picture',\n name: 'UserPictureEdition',\n component: UserPictureEdition,\n },\n {\n path: 'preferences',\n name: 'UserPreferencesEdition',\n component: UserPreferencesEdition,\n },\n {\n path: 'sports',\n name: 'UserSportPreferencesEdition',\n component: UserSportPreferences,\n props: { isEdition: true },\n },\n ],\n },\n ],\n },\n {\n path: '/statistics',\n name: 'Statistics',\n component: () =>\n import(/* webpackChunkName: 'statistics' */ '@/views/StatisticsView.vue'),\n },\n {\n path: '/users/:username',\n name: 'User',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/UserView.vue'),\n },\n {\n path: '/workouts',\n name: 'Workouts',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/WorkoutsView.vue'\n ),\n },\n {\n path: '/workouts/:workoutId',\n name: 'Workout',\n component: () =>\n import(/* webpackChunkName: 'workouts' */ '@/views/workouts/Workout.vue'),\n props: { displaySegment: false },\n },\n {\n path: '/workouts/:workoutId/edit',\n name: 'EditWorkout',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/EditWorkout.vue'\n ),\n },\n {\n path: '/workouts/:workoutId/segment/:segmentId',\n name: 'WorkoutSegment',\n component: () =>\n import(/* webpackChunkName: 'workouts' */ '@/views/workouts/Workout.vue'),\n props: { displaySegment: true },\n },\n {\n path: '/workouts/add',\n name: 'AddWorkout',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/AddWorkout.vue'\n ),\n },\n {\n path: '/admin',\n name: 'Administration',\n component: () =>\n import(/* webpackChunkName: 'admin' */ '@/views/AdminView.vue'),\n children: [\n {\n path: '',\n name: 'AdministrationMenu',\n component: AdminMenu,\n },\n {\n path: 'application',\n name: 'ApplicationAdministration',\n component: AdminApplication,\n },\n {\n path: 'application/edit',\n name: 'ApplicationAdministrationEdition',\n component: AdminApplication,\n props: { edition: true },\n },\n {\n path: 'sports',\n name: 'SportsAdministration',\n component: AdminSports,\n },\n {\n path: 'users/:username',\n name: 'UserFromAdmin',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/UserView.vue'),\n props: { fromAdmin: true },\n },\n {\n path: 'users',\n name: 'UsersAdministration',\n component: AdminUsers,\n },\n ],\n },\n {\n path: '/about',\n name: 'About',\n component: AboutView,\n },\n {\n path: '/:pathMatch(.*)*',\n name: 'not-found',\n component: NotFoundView,\n },\n]\n\nconst router = createRouter({\n history: createWebHistory(process.env.BASE_URL),\n routes,\n})\n\nconst pathsWithoutAuthentication = [\n '/login',\n '/password-reset',\n '/password-reset/password-updated',\n '/password-reset/request',\n '/password-reset/sent',\n '/register',\n '/account-confirmation',\n '/account-confirmation/resend',\n '/account-confirmation/email-sent',\n]\n\nconst pathsWithoutChecks = ['/email-update', '/about']\n\nrouter.beforeEach((to, from, next) => {\n store\n .dispatch(AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER)\n .then(() => {\n if (pathsWithoutChecks.includes(to.path)) {\n return next()\n }\n if (\n store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED] &&\n pathsWithoutAuthentication.includes(to.path)\n ) {\n return next('/')\n }\n if (\n !store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED] &&\n !pathsWithoutAuthentication.includes(to.path)\n ) {\n const path =\n to.path === '/'\n ? { path: '/login' }\n : { path: '/login', query: { from: to.fullPath } }\n next(path)\n } else {\n next()\n }\n })\n .catch((error) => {\n console.error(error)\n next()\n })\n})\n\nexport default router\n","export enum AuthUserActions {\n CHECK_AUTH_USER = 'CHECK_AUTH_USER',\n CONFIRM_ACCOUNT = 'CONFIRM_ACCOUNT',\n CONFIRM_EMAIL = 'CONFIRM_EMAIL',\n DELETE_ACCOUNT = 'DELETE_ACCOUNT',\n DELETE_PICTURE = 'DELETE_PICTURE',\n GET_USER_PROFILE = 'GET_USER_PROFILE',\n LOGIN_OR_REGISTER = 'LOGIN_OR_REGISTER',\n LOGOUT = 'LOGOUT',\n SEND_PASSWORD_RESET_REQUEST = 'SEND_PASSWORD_RESET_REQUEST',\n RESEND_ACCOUNT_CONFIRMATION_EMAIL = 'RESEND_ACCOUNT_CONFIRMATION_EMAIL',\n RESET_USER_PASSWORD = 'RESET_USER_PASSWORD',\n RESET_USER_SPORT_PREFERENCES = 'RESET_USER_SPORT_PREFERENCES',\n UPDATE_USER_ACCOUNT = 'UPDATE_USER_ACCOUNT',\n UPDATE_USER_PICTURE = 'UPDATE_USER_PICTURE',\n UPDATE_USER_PROFILE = 'UPDATE_USER_PROFILE',\n UPDATE_USER_PREFERENCES = 'UPDATE_USER_PREFERENCES',\n UPDATE_USER_SPORT_PREFERENCES = 'UPDATE_USER_SPORT_PREFERENCES',\n}\n\nexport enum AuthUserGetters {\n AUTH_TOKEN = 'AUTH_TOKEN',\n AUTH_USER_PROFILE = 'AUTH_USER_PROFILE',\n IS_ADMIN = 'IS_ADMIN',\n IS_AUTHENTICATED = 'IS_AUTHENTICATED',\n IS_SUCCESS = 'IS_SUCCESS',\n IS_REGISTRATION_SUCCESS = 'IS_REGISTRATION_SUCCESS',\n USER_LOADING = 'USER_LOADING',\n}\n\nexport enum AuthUserMutations {\n CLEAR_AUTH_USER_TOKEN = 'CLEAR_AUTH_USER_TOKEN',\n UPDATE_AUTH_TOKEN = 'UPDATE_AUTH_TOKEN',\n UPDATE_AUTH_USER_PROFILE = 'UPDATE_AUTH_USER_PROFILE',\n UPDATE_IS_SUCCESS = 'UPDATE_USER_IS_SUCCESS',\n UPDATE_IS_REGISTRATION_SUCCESS = 'UPDATE_IS_REGISTRATION_SUCCESS',\n UPDATE_USER_LOADING = 'UPDATE_USER_LOADING',\n}\n","export enum OAuth2Actions {\n AUTHORIZE_CLIENT = 'AUTHORIZE_CLIENT',\n CREATE_CLIENT = 'CREATE_CLIENT',\n DELETE_CLIENT = 'DELETE_CLIENT',\n GET_CLIENTS = 'GET_CLIENTS',\n GET_CLIENT_BY_CLIENT_ID = 'GET_CLIENT_BY_CLIENT_ID',\n GET_CLIENT_BY_ID = 'GET_CLIENT_BY_ID',\n REVOKE_ALL_TOKENS = 'REVOKE_ALL_TOKENS',\n}\n\nexport enum OAuth2Getters {\n CLIENT = 'CLIENT',\n CLIENTS = 'CLIENTS',\n CLIENTS_PAGINATION = 'CLIENTS_PAGINATION',\n REVOCATION_SUCCESSFUL = 'REVOCATION_SUCCESSFUL',\n}\n\nexport enum OAuth2Mutations {\n EMPTY_CLIENT = 'EMPTY_CLIENT',\n SET_CLIENT = 'SET_CLIENT',\n SET_CLIENTS = 'SET_CLIENTS',\n SET_CLIENTS_PAGINATION = 'SET_CLIENTS_PAGINATION',\n SET_REVOCATION_SUCCESSFUL = 'SET_REVOCATION_SUCCESSFUL',\n}\n","export enum RootActions {\n GET_APPLICATION_CONFIG = 'GET_APPLICATION_CONFIG',\n GET_APPLICATION_STATS = 'GET_APPLICATION_STATS',\n UPDATE_APPLICATION_CONFIG = 'UPDATE_APPLICATION_CONFIG',\n UPDATE_APPLICATION_LANGUAGE = 'UPDATE_APPLICATION_LANGUAGE',\n}\n\nexport enum RootGetters {\n APP_CONFIG = 'APP_CONFIG',\n APP_LOADING = 'APP_LOADING',\n APP_STATS = 'APP_STATS',\n ERROR_MESSAGES = 'ERROR_MESSAGES',\n LANGUAGE = 'LANGUAGE',\n LOCALE = 'LOCALE', // date-fns\n}\n\nexport enum RootMutations {\n EMPTY_ERROR_MESSAGES = 'EMPTY_ERROR_MESSAGES',\n SET_ERROR_MESSAGES = 'SET_ERROR_MESSAGES',\n UPDATE_APPLICATION_CONFIG = 'UPDATE_APPLICATION_CONFIG',\n UPDATE_APPLICATION_LOADING = 'UPDATE_APPLICATION_LOADING',\n UPDATE_APPLICATION_STATS = 'UPDATE_APPLICATION_STATS',\n UPDATE_LANG = 'UPDATE_LANG',\n}\n","export enum SportsActions {\n GET_SPORTS = 'GET_SPORTS',\n UPDATE_SPORTS = 'UPDATE_SPORTS',\n}\n\nexport enum SportsGetters {\n SPORTS = 'SPORTS',\n}\n\nexport enum SportsMutation {\n SET_SPORTS = 'SET_SPORTS',\n}\n","export enum StatisticsActions {\n GET_USER_STATS = 'GET_USER_STATS',\n}\n\nexport enum StatisticsGetters {\n USER_STATS = 'USER_STATS',\n}\n\nexport enum StatisticsMutations {\n EMPTY_USER_STATS = 'EMPTY_USER_STATS',\n UPDATE_USER_STATS = 'UPDATE_USER_STATS',\n}\n","export enum UsersActions {\n EMPTY_USER = 'EMPTY_USER',\n EMPTY_USERS = 'EMPTY_USERS',\n GET_USER = 'GET_USER',\n GET_USERS = 'GET_USERS',\n UPDATE_USER = 'UPDATE_USER',\n DELETE_USER_ACCOUNT = 'DELETE_USER_ACCOUNT',\n}\n\nexport enum UsersGetters {\n USER = 'USER',\n USERS = 'USERS',\n USERS_IS_SUCCESS = 'USERS_IS_SUCCESS',\n USERS_LOADING = 'USERS_LOADING',\n USERS_PAGINATION = 'USERS_PAGINATION',\n}\n\nexport enum UsersMutations {\n UPDATE_USER = 'UPDATE_USER',\n UPDATE_USER_IN_USERS = 'UPDATE_USER_IN_USERS',\n UPDATE_USERS = 'UPDATE_USERS',\n UPDATE_USERS_LOADING = 'UPDATE_USERS_LOADING',\n UPDATE_USERS_PAGINATION = 'UPDATE_USERS_PAGINATION',\n UPDATE_IS_SUCCESS = 'UPDATE_IS_SUCCESS',\n}\n","import {\n AuthUserActions,\n AuthUserGetters,\n AuthUserMutations,\n} from '@/store/modules/authUser/enums'\nimport {\n OAuth2Actions,\n OAuth2Getters,\n OAuth2Mutations,\n} from '@/store/modules/oauth2/enums'\nimport {\n RootActions,\n RootGetters,\n RootMutations,\n} from '@/store/modules/root/enums'\nimport {\n SportsActions,\n SportsGetters,\n SportsMutation,\n} from '@/store/modules/sports/enums'\nimport {\n StatisticsActions,\n StatisticsGetters,\n StatisticsMutations,\n} from '@/store/modules/statistics/enums'\nimport {\n UsersActions,\n UsersGetters,\n UsersMutations,\n} from '@/store/modules/users/enums'\nimport {\n WorkoutsActions,\n WorkoutsGetters,\n WorkoutsMutations,\n} from '@/store/modules/workouts/enums'\n\nexport const ROOT_STORE = {\n ACTIONS: RootActions,\n GETTERS: RootGetters,\n MUTATIONS: RootMutations,\n}\n\nexport const SPORTS_STORE = {\n ACTIONS: SportsActions,\n GETTERS: SportsGetters,\n MUTATIONS: SportsMutation,\n}\n\nexport const STATS_STORE = {\n ACTIONS: StatisticsActions,\n GETTERS: StatisticsGetters,\n MUTATIONS: StatisticsMutations,\n}\n\nexport const AUTH_USER_STORE = {\n ACTIONS: AuthUserActions,\n GETTERS: AuthUserGetters,\n MUTATIONS: AuthUserMutations,\n}\nexport const OAUTH2_STORE = {\n ACTIONS: OAuth2Actions,\n GETTERS: OAuth2Getters,\n MUTATIONS: OAuth2Mutations,\n}\n\nexport const USERS_STORE = {\n ACTIONS: UsersActions,\n GETTERS: UsersGetters,\n MUTATIONS: UsersMutations,\n}\n\nexport const WORKOUTS_STORE = {\n ACTIONS: WorkoutsActions,\n GETTERS: WorkoutsGetters,\n MUTATIONS: WorkoutsMutations,\n}\n","import axios from 'axios'\n\nimport { pendingRequests, removeRequestIfPending } from '@/api/pending'\nimport { getApiUrl } from '@/utils'\n\nconst api = axios.create({\n baseURL: getApiUrl(),\n})\n\napi.interceptors.request.use(\n (config) => {\n const controller = new AbortController()\n config.signal = controller.signal\n const requestKey = removeRequestIfPending(config)\n pendingRequests.set(requestKey, controller)\n return config\n },\n (error) => Promise.reject(error)\n)\n\napi.interceptors.response.use(\n (response) => {\n removeRequestIfPending(response.config)\n return response\n },\n (error) => {\n if (error.message !== 'canceled') {\n removeRequestIfPending(error.response.config)\n }\n return Promise.reject(error)\n }\n)\n\nexport default api\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { IUsersActions, IUsersState } from '@/store/modules/users/types'\nimport { TPaginationPayload } from '@/types/api'\nimport { IAdminUserPayload, IUserDeletionPayload } from '@/types/user'\nimport { handleError } from '@/utils'\n\nexport const deleteUserAccount = (\n context:\n | ActionContext\n | ActionContext,\n payload: IUserDeletionPayload\n): void => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .delete(`users/${payload.username}`)\n .then((res) => {\n if (res.status === 204) {\n if (payload.fromAdmin) {\n router.push('/admin/users')\n } else {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.LOGOUT)\n .then(() => router.push('/'))\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree & IUsersActions = {\n [USERS_STORE.ACTIONS.EMPTY_USER](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USER, {})\n },\n [USERS_STORE.ACTIONS.EMPTY_USERS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS, [])\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION, {})\n },\n [USERS_STORE.ACTIONS.GET_USER](\n context: ActionContext,\n username: string\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, true)\n authApi\n .get(`users/${username}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER,\n res.data.data.users[0]\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.GET_USERS](\n context: ActionContext,\n payload: TPaginationPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, true)\n authApi\n .get('users', { params: payload })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USERS,\n res.data.data.users\n )\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION,\n res.data.pagination\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.UPDATE_USER](\n context: ActionContext,\n payload: IAdminUserPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n const data: Record = {}\n if (payload.admin !== undefined) {\n data.admin = payload.admin\n }\n if (payload.resetPassword) {\n data.reset_password = payload.resetPassword\n }\n if (payload.activate) {\n data.activate = payload.activate\n }\n if (payload.new_email !== undefined) {\n data.new_email = payload.new_email\n }\n authApi\n .patch(`users/${payload.username}`, data)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER_IN_USERS,\n res.data.data.users[0]\n )\n if (payload.resetPassword || payload.new_email) {\n context.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n }\n if (payload.activate || payload.new_email) {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER,\n res.data.data.users[0]\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.DELETE_USER_ACCOUNT](\n context: ActionContext,\n payload: IUserDeletionPayload\n ): void {\n deleteUserAccount(context, {\n username: payload.username,\n fromAdmin: true,\n })\n },\n}\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport api from '@/api/defaultApi'\nimport router from '@/router'\nimport {\n AUTH_USER_STORE,\n ROOT_STORE,\n SPORTS_STORE,\n STATS_STORE,\n USERS_STORE,\n WORKOUTS_STORE,\n} from '@/store/constants'\nimport {\n IAuthUserActions,\n IAuthUserState,\n} from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { deleteUserAccount } from '@/store/modules/users/actions'\nimport {\n ILoginOrRegisterData,\n IUserAccountPayload,\n IUserDeletionPayload,\n IUserAccountUpdatePayload,\n IUserEmailPayload,\n IUserPasswordResetPayload,\n IUserPayload,\n IUserPicturePayload,\n IUserPreferencesPayload,\n IUserSportPreferencesPayload,\n} from '@/types/user'\nimport { handleError } from '@/utils'\n\nconst removeAuthUserData = (\n context: ActionContext\n) => {\n localStorage.removeItem('authToken')\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(STATS_STORE.MUTATIONS.EMPTY_USER_STATS)\n context.commit(AUTH_USER_STORE.MUTATIONS.CLEAR_AUTH_USER_TOKEN)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS, [])\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUTS)\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n router.push('/login')\n}\n\nexport const actions: ActionTree &\n IAuthUserActions = {\n [AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER](\n context: ActionContext\n ): void {\n if (\n window.localStorage.authToken &&\n !context.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n ) {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN,\n window.localStorage.authToken\n )\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n }\n // after logout in another tab\n if (\n !window.localStorage.authToken &&\n context.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n ) {\n removeAuthUserData(context)\n }\n },\n [AUTH_USER_STORE.ACTIONS.CONFIRM_ACCOUNT](\n context: ActionContext,\n payload: IUserAccountUpdatePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/account/confirm', { token: payload.token })\n .then((res) => {\n if (res.data.status === 'success') {\n const token = res.data.auth_token\n window.localStorage.setItem('authToken', token)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN, token)\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n },\n [AUTH_USER_STORE.ACTIONS.CONFIRM_EMAIL](\n context: ActionContext,\n payload: IUserAccountUpdatePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n api\n .post('/auth/email/update', { token: payload.token })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n if (payload.refreshUser) {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => {\n return router.push('/profile/edit/account')\n })\n }\n router.push('/profile/edit/account')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n },\n [AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('auth/profile')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n if (res.data.data.language) {\n context.dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n res.data.data.language\n )\n }\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n removeAuthUserData(context)\n }\n })\n .catch((error) => {\n if (error.message !== 'canceled') {\n handleError(context, error)\n removeAuthUserData(context)\n }\n })\n },\n [AUTH_USER_STORE.ACTIONS.LOGIN_OR_REGISTER](\n context: ActionContext,\n data: ILoginOrRegisterData\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n false\n )\n api\n .post(`/auth/${data.actionType}`, data.formData)\n .then((res) => {\n if (res.data.status === 'success') {\n if (data.actionType === 'login') {\n const token = res.data.auth_token\n window.localStorage.setItem('authToken', token)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN, token)\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() =>\n router.push(\n typeof data.redirectUrl === 'string' ? data.redirectUrl : '/'\n )\n )\n } else {\n router\n .push('/login')\n .then(() =>\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n true\n )\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.LOGOUT](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .post('auth/logout')\n .then((res) => {\n if (res.data.status === 'success') {\n removeAuthUserData(context)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PROFILE](\n context: ActionContext,\n payload: IUserPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n router.push('/profile')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_ACCOUNT](\n context: ActionContext,\n payload: IUserAccountPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n authApi\n .patch('auth/profile/edit/account', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PREFERENCES](\n context: ActionContext,\n payload: IUserPreferencesPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit/preferences', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n context\n .dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n res.data.data.language\n )\n .then(() => router.push('/profile/preferences'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.RESET_USER_SPORT_PREFERENCES](\n context: ActionContext,\n sportId: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .delete(`auth/profile/reset/sports/${sportId}`)\n .then((res) => {\n if (res.status === 204) {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n })\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_SPORT_PREFERENCES](\n context: ActionContext,\n payload: IUserSportPreferencesPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit/sports', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n })\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PICTURE](\n context: ActionContext,\n payload: IUserPicturePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n if (!payload.picture) {\n throw new Error('No file part')\n }\n const form = new FormData()\n form.append('file', payload.picture)\n authApi\n .post('auth/picture', form, {\n headers: {\n 'content-type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/profile'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.DELETE_ACCOUNT](\n context: ActionContext,\n payload: IUserDeletionPayload\n ): void {\n deleteUserAccount(context, payload)\n },\n [AUTH_USER_STORE.ACTIONS.DELETE_PICTURE](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .delete(`auth/picture`)\n .then((res) => {\n if (res.status === 204) {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/profile'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.SEND_PASSWORD_RESET_REQUEST](\n context: ActionContext,\n payload: IUserEmailPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/password/reset-request', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/password-reset/sent')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL](\n context: ActionContext,\n payload: IUserEmailPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/account/resend-confirmation', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/account-confirmation/email-sent')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.RESET_USER_PASSWORD](\n context: ActionContext,\n payload: IUserPasswordResetPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/password/update', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/password-reset/password-updated')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport {\n IAuthUserGetters,\n IAuthUserState,\n} from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree &\n IAuthUserGetters = {\n [AUTH_USER_STORE.GETTERS.AUTH_TOKEN]: (state: IAuthUserState) => {\n return state.authToken\n },\n [AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]: (state: IAuthUserState) => {\n return state.authUserProfile\n },\n [AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]: (state: IAuthUserState) => {\n return state.authToken !== null\n },\n [AUTH_USER_STORE.GETTERS.IS_ADMIN]: (state: IAuthUserState) => {\n return state.authUserProfile && state.authUserProfile.admin\n },\n [AUTH_USER_STORE.GETTERS.IS_REGISTRATION_SUCCESS]: (\n state: IAuthUserState\n ) => {\n return state.isRegistrationSuccess\n },\n [AUTH_USER_STORE.GETTERS.IS_SUCCESS]: (state: IAuthUserState) => {\n return state.isSuccess\n },\n [AUTH_USER_STORE.GETTERS.USER_LOADING]: (state: IAuthUserState) => {\n return state.loading\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport {\n IAuthUserState,\n TAuthUserMutations,\n} from '@/store/modules/authUser/types'\nimport { IAuthUserProfile } from '@/types/user'\n\nexport const mutations: MutationTree & TAuthUserMutations = {\n [AUTH_USER_STORE.MUTATIONS.CLEAR_AUTH_USER_TOKEN](state: IAuthUserState) {\n state.authToken = null\n state.authUserProfile = {}\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN](\n state: IAuthUserState,\n authToken: string\n ) {\n state.authToken = authToken\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE](\n state: IAuthUserState,\n authUserProfile: IAuthUserProfile\n ) {\n state.authUserProfile = authUserProfile\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS](\n state: IAuthUserState,\n isRegistrationSuccess: boolean\n ) {\n state.isRegistrationSuccess = isRegistrationSuccess\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS](\n state: IAuthUserState,\n isSuccess: boolean\n ) {\n state.isSuccess = isSuccess\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING](\n state: IAuthUserState,\n loading: boolean\n ) {\n state.loading = loading\n },\n}\n","import { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IAuthUserProfile } from '@/types/user'\n\nexport const authUserState: IAuthUserState = {\n authToken: null,\n authUserProfile: {},\n isSuccess: false,\n isRegistrationSuccess: false,\n loading: false,\n}\n","import { Module } from 'vuex'\n\nimport { actions } from '@/store/modules/authUser/actions'\nimport { getters } from '@/store/modules/authUser/getters'\nimport { mutations } from '@/store/modules/authUser/mutations'\nimport { authUserState } from '@/store/modules/authUser/state'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst authUser: Module = {\n state: authUserState,\n actions,\n getters,\n mutations,\n}\n\nexport default authUser\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\nimport { IOAuth2Actions, IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IOauth2ClientsPayload,\n IOAuth2ClientPayload,\n IOAuth2ClientAuthorizePayload,\n} from '@/types/oauth'\nimport { handleError } from '@/utils'\n\nconst get_client = (\n context: ActionContext,\n url: string\n) => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get(url)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(OAUTH2_STORE.MUTATIONS.SET_CLIENT, res.data.data.client)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree & IOAuth2Actions = {\n [OAUTH2_STORE.ACTIONS.AUTHORIZE_CLIENT](\n context: ActionContext,\n payload: IOAuth2ClientAuthorizePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n const form = new FormData()\n form.set('client_id', payload.client_id)\n form.set('response_type', payload.response_type)\n form.set('scope', payload.scope)\n form.set('confirm', 'true')\n if (payload.state) {\n form.set('state', payload.state)\n }\n if (payload.code_challenge) {\n form.set('code_challenge', payload.code_challenge)\n }\n if (payload.code_challenge_method) {\n form.set('code_challenge_method', payload.code_challenge_method)\n }\n\n authApi\n .post('oauth/authorize', form, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.status == 200 && res.data.redirect_url) {\n window.location.href = res.data.redirect_url\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.CREATE_CLIENT](\n context: ActionContext,\n payload: IOAuth2ClientPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .post('oauth/apps', payload)\n .then((res) => {\n if (res.data.status === 'created') {\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENT,\n res.data.data.client\n )\n router.push(`/profile/apps/${res.data.data.client.id}/created`)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.DELETE_CLIENT](\n context: ActionContext,\n id: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .delete(`oauth/apps/${id}`)\n .then((res) => {\n if (res.status === 204) {\n context\n .dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENTS)\n .then(() => router.push('/profile/apps'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_CLIENT_ID](\n context: ActionContext,\n client_id: string\n ): void {\n get_client(context, `oauth/apps/${client_id}`)\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_ID](\n context: ActionContext,\n id: number\n ): void {\n get_client(context, `oauth/apps/${id}/by_id`)\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENTS](\n context: ActionContext,\n payload: IOauth2ClientsPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('oauth/apps', {\n params: payload,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENTS,\n res.data.data.clients\n )\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENTS_PAGINATION,\n res.data.pagination\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.REVOKE_ALL_TOKENS](\n context: ActionContext,\n id: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, false)\n authApi\n .post(`oauth/apps/${id}/revoke`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, true)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { OAUTH2_STORE } from '@/store/constants'\nimport { IOAuth2Getters, IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree & IOAuth2Getters = {\n [OAUTH2_STORE.GETTERS.CLIENT]: (state: IOAuth2State) => state.client,\n [OAUTH2_STORE.GETTERS.CLIENTS]: (state: IOAuth2State) => state.clients,\n [OAUTH2_STORE.GETTERS.CLIENTS_PAGINATION]: (state: IOAuth2State) =>\n state.pagination,\n [OAUTH2_STORE.GETTERS.REVOCATION_SUCCESSFUL]: (state: IOAuth2State) =>\n state.revocationSuccessful,\n}\n","import { MutationTree } from 'vuex'\n\nimport { OAUTH2_STORE } from '@/store/constants'\nimport { IOAuth2State, TOAuth2Mutations } from '@/store/modules/oauth2/types'\nimport { IPagination } from '@/types/api'\nimport { IOAuth2Client } from '@/types/oauth'\n\nexport const mutations: MutationTree & TOAuth2Mutations = {\n [OAUTH2_STORE.MUTATIONS.SET_CLIENT](\n state: IOAuth2State,\n client: IOAuth2Client\n ) {\n state.client = client\n },\n [OAUTH2_STORE.MUTATIONS.EMPTY_CLIENT](state: IOAuth2State) {\n state.client = {}\n },\n [OAUTH2_STORE.MUTATIONS.SET_CLIENTS](\n state: IOAuth2State,\n clients: IOAuth2Client[]\n ) {\n state.clients = clients\n },\n [OAUTH2_STORE.MUTATIONS.SET_CLIENTS_PAGINATION](\n state: IOAuth2State,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL](\n state: IOAuth2State,\n revocationSuccessful: boolean\n ) {\n state.revocationSuccessful = revocationSuccessful\n },\n}\n","import { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IPagination } from '@/types/api'\nimport { IOAuth2Client } from '@/types/oauth'\n\nexport const oAuth2State: IOAuth2State = {\n client: {},\n clients: [],\n pagination: {},\n revocationSuccessful: false,\n}\n","import { Module } from 'vuex'\n\nimport { actions } from '@/store/modules/oauth2/actions'\nimport { getters } from '@/store/modules/oauth2/getters'\nimport { mutations } from '@/store/modules/oauth2/mutations'\nimport { oAuth2State } from '@/store/modules/oauth2/state'\nimport { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst oauth2: Module = {\n state: oAuth2State,\n actions,\n getters,\n mutations,\n}\n\nexport default oauth2\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport createI18n from '@/i18n'\nimport router from '@/router'\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootActions, IRootState } from '@/store/modules/root/types'\nimport { TAppConfigForm } from '@/types/application'\nimport { handleError } from '@/utils'\n\nconst { locale } = createI18n.global\n\nexport const actions: ActionTree & IRootActions = {\n [ROOT_STORE.ACTIONS.GET_APPLICATION_CONFIG](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING, true)\n authApi\n .get('config')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG,\n res.data.data\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING, false)\n )\n },\n [ROOT_STORE.ACTIONS.GET_APPLICATION_STATS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('stats/all')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_STATS,\n res.data.data\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [ROOT_STORE.ACTIONS.UPDATE_APPLICATION_CONFIG](\n context: ActionContext,\n payload: TAppConfigForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .patch('config', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG,\n res.data.data\n )\n router.push('/admin/application')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE](\n context: ActionContext,\n language: string\n ): void {\n document.querySelector('html')?.setAttribute('lang', language)\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_LANG, language)\n locale.value = language\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootGetters, IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree & IRootGetters = {\n [ROOT_STORE.GETTERS.APP_CONFIG]: (state: IRootState) => {\n return state.application.config\n },\n [ROOT_STORE.GETTERS.APP_LOADING]: (state: IRootState) => {\n return state.appLoading\n },\n [ROOT_STORE.GETTERS.APP_STATS]: (state: IRootState) => {\n return state.application.statistics\n },\n [ROOT_STORE.GETTERS.ERROR_MESSAGES]: (state: IRootState) => {\n return state.errorMessages\n },\n [ROOT_STORE.GETTERS.LANGUAGE]: (state: IRootState) => {\n return state.language\n },\n [ROOT_STORE.GETTERS.LOCALE]: (state: IRootState) => {\n return state.locale\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootState, TRootMutations } from '@/store/modules/root/types'\nimport { TAppConfig, IAppStatistics } from '@/types/application'\nimport { localeFromLanguage } from '@/utils/locales'\n\nexport const mutations: MutationTree & TRootMutations = {\n [ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES](state: IRootState) {\n state.errorMessages = null\n },\n [ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES](\n state: IRootState,\n errorMessages: string\n ) {\n state.errorMessages = errorMessages\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG](\n state: IRootState,\n config: TAppConfig\n ) {\n state.application.config = config\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING](\n state: IRootState,\n loading: boolean\n ) {\n state.appLoading = loading\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_STATS](\n state: IRootState,\n statistics: IAppStatistics\n ) {\n state.application.statistics = statistics\n },\n [ROOT_STORE.MUTATIONS.UPDATE_LANG](state: IRootState, language: string) {\n state.language = language\n state.locale = localeFromLanguage[language]\n },\n}\n","import { enUS } from 'date-fns/locale'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { IApplication } from '@/types/application'\n\nexport const state: IRootState = {\n root: true,\n language: 'en',\n locale: enUS,\n errorMessages: null,\n application: {\n statistics: {\n sports: 0,\n uploads_dir_size: 0,\n users: 0,\n workouts: 0,\n },\n },\n appLoading: false,\n}\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport { AUTH_USER_STORE, ROOT_STORE, SPORTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsActions, ISportsState } from '@/store/modules/sports/types'\nimport { ISportPayload } from '@/types/sports'\nimport { handleError } from '@/utils'\n\nexport const actions: ActionTree & ISportsActions = {\n [SPORTS_STORE.ACTIONS.GET_SPORTS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('sports')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n SPORTS_STORE.MUTATIONS.SET_SPORTS,\n res.data.data.sports\n )\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [SPORTS_STORE.ACTIONS.UPDATE_SPORTS](\n context: ActionContext,\n payload: ISportPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .patch(`sports/${payload.id}`, { is_active: payload.isActive })\n .then((res) => {\n if (res.data.status === 'success') {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { SPORTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsGetters, ISportsState } from '@/store/modules/sports/types'\n\nexport const getters: GetterTree & ISportsGetters = {\n [SPORTS_STORE.GETTERS.SPORTS]: (state: ISportsState) => state.sports,\n}\n","import { MutationTree } from 'vuex'\n\nimport { SPORTS_STORE } from '@/store/constants'\nimport { ISportsState, TSportsMutations } from '@/store/modules/sports/types'\nimport { ISport } from '@/types/sports'\n\nexport const mutations: MutationTree & TSportsMutations = {\n [SPORTS_STORE.MUTATIONS.SET_SPORTS](state: ISportsState, sports: ISport[]) {\n state.sports = sports\n },\n}\n","import { ISportsState } from '@/store/modules/sports/types'\n\nexport const sportsState: ISportsState = {\n sports: [],\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/sports/actions'\nimport { getters } from '@/store/modules/sports/getters'\nimport { mutations } from '@/store/modules/sports/mutations'\nimport { sportsState } from '@/store/modules/sports/state'\nimport { ISportsState } from '@/store/modules/sports/types'\n\nconst sports: Module = {\n state: sportsState,\n actions,\n getters,\n mutations,\n}\n\nexport default sports\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport { STATS_STORE, ROOT_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IStatisticsActions,\n IStatisticsState,\n} from '@/store/modules/statistics/types'\nimport { IUserStatisticsPayload } from '@/types/statistics'\nimport { handleError } from '@/utils'\n\nexport const actions: ActionTree &\n IStatisticsActions = {\n [STATS_STORE.ACTIONS.GET_USER_STATS](\n context: ActionContext,\n payload: IUserStatisticsPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get(`stats/${payload.username}/${payload.filterType}`, {\n params: payload.params,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n STATS_STORE.MUTATIONS.UPDATE_USER_STATS,\n res.data.data.statistics\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { STATS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IStatisticsGetters,\n IStatisticsState,\n} from '@/store/modules/statistics/types'\n\nexport const getters: GetterTree &\n IStatisticsGetters = {\n [STATS_STORE.GETTERS.USER_STATS]: (state: IStatisticsState) => {\n return state.statistics\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { STATS_STORE } from '@/store/constants'\nimport {\n IStatisticsState,\n TStatisticsMutations,\n} from '@/store/modules/statistics/types'\nimport { TStatisticsFromApi } from '@/types/statistics'\n\nexport const mutations: MutationTree & TStatisticsMutations =\n {\n [STATS_STORE.MUTATIONS.UPDATE_USER_STATS](\n state: IStatisticsState,\n statistics: TStatisticsFromApi\n ) {\n state.statistics = statistics\n },\n [STATS_STORE.MUTATIONS.EMPTY_USER_STATS](state: IStatisticsState) {\n state.statistics = {}\n },\n }\n","import { IStatisticsState } from '@/store/modules/statistics/types'\nimport { TStatisticsFromApi } from '@/types/statistics'\n\nexport const statisticsState: IStatisticsState = {\n statistics: {},\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/statistics/actions'\nimport { getters } from '@/store/modules/statistics/getters'\nimport { mutations } from '@/store/modules/statistics/mutations'\nimport { statisticsState } from '@/store/modules/statistics/state'\nimport { IStatisticsState } from '@/store/modules/statistics/types'\n\nconst statistics: Module = {\n state: statisticsState,\n actions,\n getters,\n mutations,\n}\n\nexport default statistics\n","import { GetterTree } from 'vuex'\n\nimport { USERS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { IUsersGetters, IUsersState } from '@/store/modules/users/types'\n\nexport const getters: GetterTree & IUsersGetters = {\n [USERS_STORE.GETTERS.USER]: (state: IUsersState) => {\n return state.user\n },\n [USERS_STORE.GETTERS.USERS]: (state: IUsersState) => {\n return state.users\n },\n [USERS_STORE.GETTERS.USERS_IS_SUCCESS]: (state: IUsersState) => {\n return state.isSuccess\n },\n [USERS_STORE.GETTERS.USERS_LOADING]: (state: IUsersState) => {\n return state.loading\n },\n [USERS_STORE.GETTERS.USERS_PAGINATION]: (state: IUsersState) => {\n return state.pagination\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { USERS_STORE } from '@/store/constants'\nimport { IUsersState, TUsersMutations } from '@/store/modules/users/types'\nimport { IPagination } from '@/types/api'\nimport { IUserProfile } from '@/types/user'\n\nexport const mutations: MutationTree & TUsersMutations = {\n [USERS_STORE.MUTATIONS.UPDATE_USER](state: IUsersState, user: IUserProfile) {\n state.user = user\n },\n [USERS_STORE.MUTATIONS.UPDATE_USER_IN_USERS](\n state: IUsersState,\n updatedUser: IUserProfile\n ) {\n state.users = state.users.map((user) => {\n if (user.username === updatedUser.username) {\n return updatedUser\n }\n return user\n })\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS](\n state: IUsersState,\n users: IUserProfile[]\n ) {\n state.users = users\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING](\n state: IUsersState,\n loading: boolean\n ) {\n state.loading = loading\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION](\n state: IUsersState,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS](\n state: IUsersState,\n isSuccess: boolean\n ) {\n state.isSuccess = isSuccess\n },\n}\n","import { IUsersState } from '@/store/modules/users/types'\nimport { IPagination } from '@/types/api'\nimport { IUserProfile } from '@/types/user'\n\nexport const usersState: IUsersState = {\n user: {},\n users: [],\n loading: false,\n isSuccess: false,\n pagination: {},\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/users/actions'\nimport { getters } from '@/store/modules/users/getters'\nimport { mutations } from '@/store/modules/users/mutations'\nimport { usersState } from '@/store/modules/users/state'\nimport { IUsersState } from '@/store/modules/users/types'\n\nconst users: Module = {\n state: usersState,\n actions,\n getters,\n mutations,\n}\n\nexport default users\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { ROOT_STORE, AUTH_USER_STORE, WORKOUTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { WorkoutsMutations } from '@/store/modules/workouts/enums'\nimport {\n IWorkoutsActions,\n IWorkoutsState,\n} from '@/store/modules/workouts/types'\nimport {\n IWorkout,\n IWorkoutForm,\n IWorkoutPayload,\n TWorkoutsPayload,\n} from '@/types/workouts'\nimport { handleError } from '@/utils'\n\nconst getWorkouts = (\n context: ActionContext,\n payload: TWorkoutsPayload,\n target: WorkoutsMutations\n): void => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('workouts', {\n params: payload,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(WORKOUTS_STORE.MUTATIONS[target], res.data.data.workouts)\n if (target === WorkoutsMutations['SET_USER_WORKOUTS']) {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUTS_PAGINATION,\n res.data.pagination\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree &\n IWorkoutsActions = {\n [WORKOUTS_STORE.ACTIONS.GET_CALENDAR_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_CALENDAR_WORKOUTS)\n getWorkouts(context, payload, WorkoutsMutations['SET_CALENDAR_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_USER_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['SET_USER_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_TIMELINE_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['SET_TIMELINE_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_MORE_TIMELINE_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['ADD_TIMELINE_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n const segmentUrl = payload.segmentId ? `/segment/${payload.segmentId}` : ''\n authApi\n .get(`workouts/${payload.workoutId}`)\n .then((res) => {\n const workout: IWorkout = res.data.data.workouts[0]\n if (res.data.status === 'success') {\n if (\n payload.segmentId &&\n (workout.segments.length === 0 ||\n !workout.segments[+payload.segmentId - 1])\n ) {\n throw new Error('WORKOUT_NOT_FOUND')\n }\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT,\n res.data.data.workouts[0]\n )\n if (res.data.data.workouts[0].with_gpx) {\n authApi\n .get(`workouts/${payload.workoutId}/chart_data${segmentUrl}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_CHART_DATA,\n res.data.data.chart_data\n )\n }\n })\n authApi\n .get(`workouts/${payload.workoutId}/gpx${segmentUrl}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_GPX,\n res.data.data.gpx\n )\n }\n })\n }\n } else {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n handleError(context, null)\n }\n })\n .catch((error) => {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.DELETE_WORKOUT](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .delete(`workouts/${payload.workoutId}`)\n .then(() => {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n router.push('/')\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.EDIT_WORKOUT](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .patch(`workouts/${payload.workoutId}`, payload.data)\n .then(() => {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n context\n .dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, {\n workoutId: payload.workoutId,\n })\n .then(() => {\n router.push({\n name: 'Workout',\n params: { workoutId: payload.workoutId },\n })\n })\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.ADD_WORKOUT](\n context: ActionContext,\n payload: IWorkoutForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n if (!payload.file) {\n throw new Error('No file part')\n }\n const form = new FormData()\n form.append('file', payload.file)\n form.append(\n 'data',\n `{\"sport_id\": ${payload.sport_id}, \"notes\": \"${payload.notes}\"}`\n )\n authApi\n .post('workouts', form, {\n headers: {\n 'content-type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.data.status === 'created') {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n const workout: IWorkout = res.data.data.workouts[0]\n router.push(\n res.data.data.workouts.length === 1\n ? `/workouts/${workout.id}`\n : '/'\n )\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX](\n context: ActionContext,\n payload: IWorkoutForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .post('workouts/no_gpx', payload)\n .then((res) => {\n if (res.data.status === 'created') {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n const workout: IWorkout = res.data.data.workouts[0]\n router.push(`/workouts/${workout.id}`)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { WORKOUTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IWorkoutsGetters,\n IWorkoutsState,\n} from '@/store/modules/workouts/types'\n\nexport const getters: GetterTree &\n IWorkoutsGetters = {\n [WORKOUTS_STORE.GETTERS.CALENDAR_WORKOUTS]: (state: IWorkoutsState) => {\n return state.calendar_workouts\n },\n [WORKOUTS_STORE.GETTERS.TIMELINE_WORKOUTS]: (state: IWorkoutsState) => {\n return state.timeline_workouts\n },\n [WORKOUTS_STORE.GETTERS.USER_WORKOUTS]: (state: IWorkoutsState) => {\n return state.user_workouts\n },\n [WORKOUTS_STORE.GETTERS.WORKOUT_DATA]: (state: IWorkoutsState) => {\n return state.workoutData\n },\n [WORKOUTS_STORE.GETTERS.WORKOUTS_PAGINATION]: (state: IWorkoutsState) => {\n return state.pagination\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { WORKOUTS_STORE } from '@/store/constants'\nimport {\n IWorkoutsState,\n TWorkoutsMutations,\n} from '@/store/modules/workouts/types'\nimport { IPagination } from '@/types/api'\nimport { IWorkout, IWorkoutApiChartData } from '@/types/workouts'\n\nexport const mutations: MutationTree & TWorkoutsMutations = {\n [WORKOUTS_STORE.MUTATIONS.ADD_TIMELINE_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.timeline_workouts = state.timeline_workouts.concat(workouts)\n },\n [WORKOUTS_STORE.MUTATIONS.SET_CALENDAR_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.calendar_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_TIMELINE_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.timeline_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_USER_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.user_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUTS_PAGINATION](\n state: IWorkoutsState,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT](\n state: IWorkoutsState,\n workout: IWorkout\n ) {\n state.workoutData.workout = workout\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_CHART_DATA](\n state: IWorkoutsState,\n chartData: IWorkoutApiChartData[]\n ) {\n state.workoutData.chartData = chartData\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_GPX](\n state: IWorkoutsState,\n gpx: string\n ) {\n state.workoutData.gpx = gpx\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING](\n state: IWorkoutsState,\n loading: boolean\n ) {\n state.workoutData.loading = loading\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_CALENDAR_WORKOUTS](state: IWorkoutsState) {\n state.calendar_workouts = []\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUTS](state: IWorkoutsState) {\n state.calendar_workouts = []\n state.user_workouts = []\n state.timeline_workouts = []\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT](state: IWorkoutsState) {\n state.workoutData = {\n gpx: '',\n loading: false,\n workout: {},\n chartData: [],\n }\n },\n}\n","import { IWorkoutsState } from '@/store/modules/workouts/types'\nimport { IPagination } from '@/types/api'\nimport { IWorkout } from '@/types/workouts'\n\nexport const workoutsState: IWorkoutsState = {\n calendar_workouts: [],\n timeline_workouts: [],\n pagination: {},\n user_workouts: [],\n workoutData: {\n gpx: '',\n loading: false,\n workout: {},\n chartData: [],\n },\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/workouts/actions'\nimport { getters } from '@/store/modules/workouts/getters'\nimport { mutations } from '@/store/modules/workouts/mutations'\nimport { workoutsState } from '@/store/modules/workouts/state'\nimport { IWorkoutsState } from '@/store/modules/workouts/types'\n\nconst workouts: Module = {\n state: workoutsState,\n actions,\n getters,\n mutations,\n}\n\nexport default workouts\n","import { Module, ModuleTree } from 'vuex'\n\nimport authUserModule from '@/store/modules/authUser'\nimport oAuthModule from '@/store/modules/oauth2'\nimport { actions } from '@/store/modules/root/actions'\nimport { getters } from '@/store/modules/root/getters'\nimport { mutations } from '@/store/modules/root/mutations'\nimport { state } from '@/store/modules/root/state'\nimport { IRootState } from '@/store/modules/root/types'\nimport sportsModule from '@/store/modules/sports'\nimport statsModule from '@/store/modules/statistics'\nimport usersModule from '@/store/modules/users'\nimport workoutsModule from '@/store/modules/workouts'\n\nconst modules: ModuleTree = {\n authUserModule,\n oAuthModule,\n sportsModule,\n statsModule,\n usersModule,\n workoutsModule,\n}\n\nconst root: Module = {\n state,\n actions,\n getters,\n mutations,\n modules,\n}\n\nexport default root\n","import { createStore } from 'vuex'\n\nimport root from '@/store/modules/root'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst store = createStore(root)\n\nexport default store\n","export enum WorkoutsActions {\n ADD_WORKOUT = 'ADD_WORKOUT',\n ADD_WORKOUT_WITHOUT_GPX = 'ADD_WORKOUT_WITHOUT_GPX',\n DELETE_WORKOUT = 'DELETE_WORKOUT',\n EDIT_WORKOUT = 'EDIT_WORKOUT',\n GET_CALENDAR_WORKOUTS = 'GET_CALENDAR_WORKOUTS',\n GET_USER_WORKOUTS = 'GET_USER_WORKOUTS',\n GET_TIMELINE_WORKOUTS = 'GET_TIMELINE_WORKOUTS',\n GET_MORE_TIMELINE_WORKOUTS = 'GET_MORE_TIMELINE_WORKOUTS',\n GET_WORKOUT_DATA = 'GET_WORKOUT_DATA',\n}\n\nexport enum WorkoutsGetters {\n CALENDAR_WORKOUTS = 'CALENDAR_WORKOUTS',\n TIMELINE_WORKOUTS = 'TIMELINE_WORKOUTS',\n USER_WORKOUTS = 'USER_WORKOUTS',\n WORKOUT_DATA = 'WORKOUT_DATA',\n WORKOUTS_PAGINATION = 'WORKOUTS_PAGINATION',\n}\n\nexport enum WorkoutsMutations {\n ADD_TIMELINE_WORKOUTS = 'ADD_TIMELINE_WORKOUTS',\n EMPTY_WORKOUTS = 'EMPTY_WORKOUTS',\n EMPTY_CALENDAR_WORKOUTS = 'EMPTY_CALENDAR_WORKOUTS',\n EMPTY_WORKOUT = 'EMPTY_WORKOUT',\n SET_CALENDAR_WORKOUTS = 'SET_CALENDAR_WORKOUTS',\n SET_TIMELINE_WORKOUTS = 'SET_TIMELINE_WORKOUTS',\n SET_USER_WORKOUTS = 'SET_USER_WORKOUTS',\n SET_WORKOUT = 'SET_WORKOUT',\n SET_WORKOUT_GPX = 'SET_WORKOUT_GPX',\n SET_WORKOUT_CHART_DATA = 'SET_WORKOUT_CHART_DATA',\n SET_WORKOUT_LOADING = 'SET_WORKOUT_LOADING',\n SET_WORKOUTS_PAGINATION = 'SET_WORKOUTS_PAGINATION',\n}\n","import { useStore as VuexStore } from 'vuex'\n\nimport { Store } from '@/store/types'\n\nexport function useStore(): Store {\n return VuexStore() as Store\n}\n","import { LocationQuery } from 'vue-router'\n\nimport { IQueryOptions, TPaginationPayload } from '@/types/api'\n\nexport const sortList: string[] = ['asc', 'desc']\nexport const defaultPage = 1\nexport const defaultPerPage = 10\n\nexport const getNumberQueryValue = (\n queryValue: string | (string | null)[] | null,\n defaultValue: number\n): number => {\n return queryValue && typeof queryValue === 'string' && +queryValue > 0\n ? +queryValue\n : defaultValue\n}\n\nexport const getStringQueryValue = (\n queryValue: string | (string | null)[] | null,\n availableValues: string[],\n defaultValue: string\n): string => {\n return queryValue &&\n typeof queryValue === 'string' &&\n availableValues.includes(queryValue)\n ? queryValue\n : defaultValue\n}\n\nexport const getQuery = (\n locationQuery: LocationQuery,\n orderByList: string[],\n defaultOrderBy: string,\n options?: IQueryOptions\n): TPaginationPayload => {\n const queryOptions = options || {}\n const defaultSort = queryOptions.defaultSort || 'asc'\n const query = {}\n\n query.page = getNumberQueryValue(locationQuery.page, defaultPage)\n query.per_page = getNumberQueryValue(locationQuery.per_page, defaultPerPage)\n query.order = getStringQueryValue(locationQuery.order, sortList, defaultSort)\n query.order_by = getStringQueryValue(\n locationQuery.order_by,\n orderByList,\n defaultOrderBy\n )\n if (typeof locationQuery.q === 'string') {\n query.q = locationQuery.q\n } else {\n delete query.q\n }\n\n return query\n}\n\nexport const workoutsPayloadKeys = [\n 'from',\n 'to',\n 'ave_speed_from',\n 'ave_speed_to',\n 'max_speed_from',\n 'max_speed_to',\n 'distance_from',\n 'distance_to',\n 'duration_from',\n 'duration_to',\n 'sport_id',\n]\n\nconst getRange = (stop: number, start = 1): number[] => {\n return Array.from({ length: stop - start + 1 }, (_, i) => start + i)\n}\n\nexport const rangePagination = (\n pages: number,\n currentPage: number\n): (string | number)[] => {\n if (pages < 0) {\n return []\n }\n\n if (pages < 9) {\n return getRange(pages)\n }\n\n let pagination: (string | number)[] = [1, 2]\n if (currentPage < 4) {\n pagination = pagination.concat([3, 4, 5])\n } else if (currentPage < 6) {\n pagination = pagination.concat(getRange(currentPage + 2, 3))\n } else {\n pagination = pagination.concat(['...'])\n if (currentPage < pages - 2) {\n pagination = pagination.concat(getRange(currentPage + 2, currentPage - 2))\n }\n }\n if (currentPage + 2 <= pages - 2) {\n pagination = pagination.concat(['...'])\n pagination = pagination.concat(getRange(pages, pages - 1))\n } else {\n if (\n pagination[pagination.length - 1] !== '...' &&\n pagination[pagination.length - 1] >= pages - 2 &&\n pagination[pagination.length - 1] < pages\n ) {\n pagination = pagination.concat(\n getRange(pages, +pagination[pagination.length - 1] + 1)\n )\n } else {\n pagination = pagination.concat(\n getRange(\n pages,\n currentPage < pages - 3 ? currentPage + 3 : currentPage - 5\n )\n )\n }\n }\n\n return pagination\n}\n","import {\n addDays,\n addMonths,\n addYears,\n endOfMonth,\n endOfWeek,\n format,\n startOfMonth,\n startOfWeek,\n startOfYear,\n} from 'date-fns'\nimport { utcToZonedTime } from 'date-fns-tz'\n\nimport createI18n from '@/i18n'\nimport { localeFromLanguage } from '@/utils/locales'\n\nconst { locale } = createI18n.global\n\nexport const getStartDate = (\n duration: string,\n day: Date,\n weekStartingMonday: boolean\n): Date => {\n switch (duration) {\n case 'week':\n return startOfWeek(day, { weekStartsOn: weekStartingMonday ? 1 : 0 })\n case 'year':\n return startOfYear(day)\n case 'month':\n return startOfMonth(day)\n default:\n throw new Error(\n `Invalid duration, expected: \"week\", \"month\", \"year\", got: \"${duration}\"`\n )\n }\n}\n\nexport const incrementDate = (duration: string, day: Date): Date => {\n switch (duration) {\n case 'week':\n return addDays(day, 7)\n case 'year':\n return addYears(day, 1)\n case 'month':\n return addMonths(day, 1)\n default:\n throw new Error(\n `Invalid duration, expected: \"week\", \"month\", \"year\", got: \"${duration}\"`\n )\n }\n}\n\nexport const getDateWithTZ = (dateInUTC: string, tz: string): Date => {\n return utcToZonedTime(new Date(dateInUTC), tz)\n}\n\nexport const getCalendarStartAndEnd = (\n date: Date,\n weekStartingMonday: boolean\n): Record => {\n const monthStart = startOfMonth(date)\n const monthEnd = endOfMonth(date)\n const weekStartsOn = weekStartingMonday ? 1 : 0\n return {\n start: startOfWeek(monthStart, { weekStartsOn }),\n end: endOfWeek(monthEnd, { weekStartsOn }),\n }\n}\n\nexport const formatWorkoutDate = (\n dateTime: Date,\n dateFormat: string | null = null,\n timeFormat: string | null = null\n): Record => {\n if (!dateFormat) {\n dateFormat = 'yyyy/MM/dd'\n }\n dateFormat = getDateFormat(dateFormat, locale.value)\n if (!timeFormat) {\n timeFormat = 'HH:mm'\n }\n return {\n workout_date: format(dateTime, dateFormat, {\n locale: localeFromLanguage[locale.value],\n }),\n workout_time: format(dateTime, timeFormat),\n }\n}\n\nconst availableDateFormats = [\n 'MM/dd/yyyy',\n 'dd/MM/yyyy',\n 'yyyy-MM-dd',\n 'date_string',\n]\nconst dateStringFormats: Record = {\n de: 'do MMM yyyy',\n en: 'MMM. do, yyyy',\n fr: 'd MMM yyyy',\n // nb: 'do MMM yyyy',\n}\n\nexport const getDateFormat = (dateFormat: string, language: string): string => {\n return dateFormat === 'date_string' ? dateStringFormats[language] : dateFormat\n}\n\nexport const formatDate = (\n dateString: string,\n timezone: string,\n dateFormat: string,\n withTime = true,\n language: string | null = null\n): string => {\n if (!language) {\n language = locale.value\n }\n return format(\n getDateWithTZ(dateString, timezone),\n `${getDateFormat(dateFormat, language)}${withTime ? ' HH:mm' : ''}`,\n { locale: localeFromLanguage[language] }\n )\n}\n\nexport const availableDateFormatOptions = (\n inputDate: string,\n timezone: string,\n language: string | null = null\n) => {\n const l: string = language ? language : locale.value\n const options: Record[] = []\n availableDateFormats.map((df) => {\n const dateFormat = getDateFormat(df, l)\n options.push({\n label: `${dateFormat} - ${formatDate(\n inputDate,\n timezone,\n dateFormat,\n false,\n l\n )}`,\n value: df,\n })\n })\n return options\n}\n","const suffixes = ['bytes', 'KB', 'MB', 'GB', 'TB']\n\nexport const getReadableFileSize = (\n fileSize: number,\n asText = true\n): string | Record => {\n const i = Math.floor(Math.log(fileSize) / Math.log(1024))\n if (!fileSize) {\n return asText ? '0 bytes' : { size: '0', suffix: 'bytes' }\n }\n const size = (fileSize / Math.pow(1024, i)).toFixed(1)\n const suffix = suffixes[i]\n return asText ? `${size}${suffix}` : { size, suffix }\n}\n\nexport const getFileSizeInMB = (fileSize: number): number => {\n const value = fileSize / 1048576\n return (!fileSize && 0) || +value.toFixed(2)\n}\n","import { AxiosError } from 'axios'\nimport { ActionContext } from 'vuex'\n\nimport { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsState } from '@/store/modules/sports/types'\nimport { IStatisticsState } from '@/store/modules/statistics/types'\nimport { IUsersState } from '@/store/modules/users/types'\nimport { IWorkoutsState } from '@/store/modules/workouts/types'\n\nexport const getApiUrl = (): string => {\n return process.env.NODE_ENV === 'production'\n ? '/api/'\n : `${process.env.VUE_APP_API_URL}/api/`\n}\n\nexport const handleError = (\n context:\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext,\n error: AxiosError | null,\n msg = 'UNKNOWN'\n): void => {\n // if request is cancelled, no error to display\n if (error && error.message === 'canceled') {\n return\n }\n\n // if stored token is blacklisted, disconnect user\n if (\n error?.response?.status === 401 &&\n error.response.data.error === 'invalid_token'\n ) {\n localStorage.removeItem('authToken')\n context.dispatch(AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER)\n return\n }\n\n const errorMessages = !error\n ? msg\n : error.response\n ? error.response.status === 413\n ? 'file size is greater than the allowed size'\n : error.response.data.message\n ? error.response.data.message\n : msg\n : error.message\n ? error.message\n : msg\n context.commit(\n ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES,\n errorMessages.includes('\\n')\n ? errorMessages\n .split('\\n')\n .filter((m: string) => m !== '')\n .map((m: string) => `api.ERROR.${m}`)\n : `api.ERROR.${errorMessages}`\n )\n}\n","/* eslint-disable import/no-duplicates */\nimport { Locale } from 'date-fns'\nimport { de, enUS, fr } from 'date-fns/locale'\n\nimport createI18n from '@/i18n'\n\nexport const localeFromLanguage: Record = {\n de: de,\n en: enUS,\n fr: fr,\n // nb: nb, // disabled for now\n}\n\nexport const languageLabels: Record = {\n de: 'Deutsch',\n en: 'English',\n fr: 'Français',\n // nb: 'Norsk bokmål', // disabled for now\n}\n\nconst { availableLocales } = createI18n.global\nexport const availableLanguages = availableLocales.map((l) => {\n return { label: languageLabels[l], value: l }\n})\n","import { ISport, ITranslatedSport, TActiveStatus } from '@/types/sports'\nimport { IWorkout } from '@/types/workouts'\n\nexport const sportColors: Record = {\n 'Cycling (Sport)': '#4c9792',\n 'Cycling (Transport)': '#88af98',\n 'Cycling (Virtual)': '#64a360',\n Hiking: '#bb757c',\n 'Mountain Biking': '#d4b371',\n 'Mountain Biking (Electric)': '#fc9d6f',\n Rowing: '#fcce72',\n Running: '#835b83',\n 'Skiing (Alpine)': '#67a4bd',\n 'Skiing (Cross Country)': '#9498d0',\n Snowshoes: '#5780a8',\n Trail: '#09a98a',\n Walking: '#838383',\n}\n\nexport const sportIdColors = (sports: ISport[]): Record => {\n const colors: Record = {}\n sports.map(\n (sport) =>\n (colors[sport.id] = sport.color ? sport.color : sportColors[sport.label])\n )\n return colors\n}\n\nconst sortSports = (a: ITranslatedSport, b: ITranslatedSport): number => {\n const sportATranslatedLabel = a.translatedLabel.toLowerCase()\n const sportBTranslatedLabel = b.translatedLabel.toLowerCase()\n return sportATranslatedLabel > sportBTranslatedLabel\n ? 1\n : sportATranslatedLabel < sportBTranslatedLabel\n ? -1\n : 0\n}\n\nexport const translateSports = (\n sports: ISport[],\n t: CallableFunction,\n activeStatus: TActiveStatus = 'all',\n sportsToInclude: number[] = []\n): ITranslatedSport[] =>\n sports\n .filter((sport) =>\n activeStatus === 'all'\n ? true\n : sportsToInclude.includes(sport.id) || sport[activeStatus]\n )\n .map((sport) => ({\n ...sport,\n translatedLabel: t(`sports.${sport.label}.LABEL`),\n }))\n .sort(sortSports)\n\nexport const getSportLabel = (workout: IWorkout, sports: ISport[]): string => {\n return sports\n .filter((sport) => sport.id === workout.sport_id)\n .map((sport) => sport.label)[0]\n}\n\nexport const getSportColor = (\n workout: IWorkout,\n sports: ISport[]\n): string | null => {\n return sports\n .filter((sport) => sport.id === workout.sport_id)\n .map((sport) => sport.color)[0]\n}\n","import {\n addMonths,\n addWeeks,\n addYears,\n endOfMonth,\n endOfWeek,\n endOfYear,\n format,\n startOfMonth,\n startOfWeek,\n startOfYear,\n subMonths,\n subWeeks,\n subYears,\n} from 'date-fns'\n\nimport createI18n from '@/i18n'\nimport { IChartDataset } from '@/types/chart'\nimport { ISport } from '@/types/sports'\nimport {\n IStatisticsChartData,\n IStatisticsDateParams,\n TStatisticsDatasetKeys,\n TStatisticsDatasets,\n TStatisticsFromApi,\n} from '@/types/statistics'\nimport { incrementDate, getStartDate, getDateFormat } from '@/utils/dates'\nimport { localeFromLanguage } from '@/utils/locales'\nimport { sportColors } from '@/utils/sports'\nimport { convertStatsDistance } from '@/utils/units'\n\nconst { locale } = createI18n.global\n\nconst dateFormats: Record> = {\n week: {\n api: 'yyyy-MM-dd',\n chart: 'MM/dd/yyyy',\n },\n month: {\n api: 'yyyy-MM',\n chart: 'MM/yyyy',\n },\n year: {\n api: 'yyyy',\n chart: 'yyyy',\n },\n}\n\nexport const datasetKeys: TStatisticsDatasetKeys[] = [\n 'average_speed',\n 'nb_workouts',\n 'total_duration',\n 'total_distance',\n 'total_ascent',\n 'total_descent',\n]\n\nexport const getDateKeys = (\n params: IStatisticsDateParams,\n weekStartingMonday: boolean\n): Date[] => {\n const days = []\n for (\n let day = getStartDate(params.duration, params.start, weekStartingMonday);\n day <= params.end;\n day = incrementDate(params.duration, day)\n ) {\n days.push(day)\n }\n return days\n}\n\nconst getStatisticsChartDataset = (\n sportLabel: string,\n color: string,\n isLineChart = false\n): IChartDataset => {\n const dataset: IChartDataset = {\n label: sportLabel,\n backgroundColor: [color],\n data: [],\n }\n if (isLineChart) {\n dataset.type = 'line'\n dataset.borderColor = [color]\n dataset.spanGaps = true\n }\n return dataset\n}\n\nexport const getDatasets = (displayedSports: ISport[]): TStatisticsDatasets => {\n const datasets: TStatisticsDatasets = {\n average_speed: [],\n nb_workouts: [],\n total_distance: [],\n total_duration: [],\n total_ascent: [],\n total_descent: [],\n }\n displayedSports.map((sport) => {\n const color = sport.color ? sport.color : sportColors[sport.label]\n datasets.average_speed.push(\n getStatisticsChartDataset(sport.label, color, true)\n )\n datasets.nb_workouts.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_distance.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_duration.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_ascent.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_descent.push(getStatisticsChartDataset(sport.label, color))\n })\n return datasets\n}\n\nexport const convertStatsValue = (\n datasetKey: TStatisticsDatasetKeys,\n value: number,\n useImperialUnits: boolean\n): number => {\n switch (datasetKey) {\n case 'average_speed':\n case 'total_distance':\n case 'total_ascent':\n case 'total_descent':\n return convertStatsDistance(\n ['average_speed', 'total_distance'].includes(datasetKey) ? 'km' : 'm',\n value,\n useImperialUnits\n )\n default:\n case 'nb_workouts':\n case 'total_duration':\n return value\n }\n}\n\nexport const formatStats = (\n params: IStatisticsDateParams,\n weekStartingMonday: boolean,\n sports: ISport[],\n displayedSportsId: number[],\n apiStats: TStatisticsFromApi,\n useImperialUnits: boolean,\n userDateFormat: string\n): IStatisticsChartData => {\n const dayKeys = getDateKeys(params, weekStartingMonday)\n const dateFormat = dateFormats[params.duration]\n const displayedSports = sports.filter((sport) =>\n displayedSportsId.includes(sport.id)\n )\n const labels: string[] = []\n const datasets = getDatasets(displayedSports)\n const sportsId: Record = {}\n displayedSports.map(\n (displayedSport) => (sportsId[displayedSport.label] = displayedSport.id)\n )\n\n dayKeys.map((key) => {\n const date: string = format(key, dateFormat.api)\n const label: string = format(\n key,\n params.duration === 'week'\n ? getDateFormat(userDateFormat, locale.value)\n : dateFormat.chart,\n { locale: localeFromLanguage[locale.value] }\n )\n labels.push(label)\n datasetKeys.map((datasetKey) => {\n datasets[datasetKey].map((dataset) => {\n dataset.data.push(\n date in apiStats && sportsId[dataset.label] in apiStats[date]\n ? convertStatsValue(\n datasetKey,\n apiStats[date][sportsId[dataset.label]][datasetKey],\n useImperialUnits\n )\n : datasetKey === 'average_speed'\n ? null\n : 0\n )\n })\n })\n })\n return {\n labels,\n datasets,\n }\n}\n\nexport const getStatsDateParams = (\n date: Date,\n timeFrame: string,\n weekStartingMonday: boolean\n): IStatisticsDateParams => {\n const weekStartsOn = weekStartingMonday ? 1 : 0\n const start =\n timeFrame === 'year'\n ? startOfYear(subYears(date, 9))\n : timeFrame === 'week'\n ? startOfWeek(subMonths(date, 2), { weekStartsOn })\n : startOfMonth(subMonths(date, 11)) // month\n const end =\n timeFrame === 'year'\n ? endOfYear(date)\n : timeFrame === 'week'\n ? endOfWeek(date, { weekStartsOn })\n : endOfMonth(date) // month\n return {\n duration: timeFrame,\n end,\n start,\n }\n}\n\nexport const updateChartParams = (\n chartParams: IStatisticsDateParams,\n backward: boolean,\n weekStartingMonday: boolean\n): IStatisticsDateParams => {\n const { duration, start, end } = chartParams\n const weekStartsOn = weekStartingMonday ? 1 : 0\n return {\n duration,\n end:\n duration === 'year'\n ? endOfYear(backward ? subYears(end, 1) : addYears(end, 1))\n : duration === 'week'\n ? endOfWeek(backward ? subWeeks(end, 1) : addWeeks(end, 1), {\n weekStartsOn,\n })\n : endOfMonth(backward ? subMonths(end, 1) : addMonths(end, 1)),\n start:\n duration === 'year'\n ? startOfYear(backward ? subYears(start, 1) : addYears(start, 1))\n : duration === 'week'\n ? startOfWeek(backward ? subWeeks(start, 1) : addWeeks(start, 1), {\n weekStartsOn,\n })\n : startOfMonth(backward ? subMonths(start, 1) : addMonths(start, 1)),\n }\n}\n","import { IUnit, TFactor, TUnit } from '@/types/units'\n\nexport const units: Record = {\n ft: {\n unit: 'ft',\n system: 'imperial',\n multiplier: 1,\n defaultTarget: 'm',\n },\n mi: {\n unit: 'mi',\n system: 'imperial',\n multiplier: 5280,\n defaultTarget: 'km',\n },\n m: {\n unit: 'm',\n system: 'metric',\n multiplier: 1,\n defaultTarget: 'ft',\n },\n km: {\n unit: 'm',\n system: 'metric',\n multiplier: 1000,\n defaultTarget: 'mi',\n },\n}\n\nconst factors: TFactor = {\n metric: {\n imperial: 3.280839895,\n metric: 1,\n },\n imperial: {\n metric: 1 / 3.280839895,\n imperial: 1,\n },\n}\n\nexport const convertDistance = (\n distance: number,\n from: TUnit,\n to: TUnit,\n digits: number | null = 3\n): number => {\n const unitFrom = units[from]\n const unitTo = units[to]\n const convertedDistance =\n (distance * unitFrom.multiplier * factors[unitFrom.system][unitTo.system]) /\n unitTo.multiplier\n if (digits !== null) {\n return parseFloat(convertedDistance.toFixed(digits))\n }\n return convertedDistance\n}\n\nexport const convertStatsDistance = (\n unitFrom: TUnit,\n value: number,\n useImperialUnits: boolean\n): number => {\n const unitTo = useImperialUnits ? units[unitFrom].defaultTarget : unitFrom\n return useImperialUnits ? convertDistance(value, unitFrom, unitTo, 2) : value\n}\n","import {\n IWorkout,\n IWorkoutApiChartData,\n IWorkoutChartData,\n TCoordinates,\n TWorkoutDatasets,\n} from '@/types/workouts'\nimport { convertStatsDistance } from '@/utils/units'\n\nexport const getDatasets = (\n chartData: IWorkoutApiChartData[],\n t: CallableFunction,\n useImperialUnits: boolean\n): IWorkoutChartData => {\n const datasets: TWorkoutDatasets = {\n speed: {\n label: t('workouts.SPEED'),\n backgroundColor: ['#FFFFFF'],\n borderColor: ['#8884d8'],\n borderWidth: 2,\n data: [],\n yAxisID: 'ySpeed',\n },\n elevation: {\n label: t('workouts.ELEVATION'),\n backgroundColor: ['#e5e5e5'],\n borderColor: ['#cccccc'],\n borderWidth: 1,\n fill: true,\n data: [],\n yAxisID: 'yElevation',\n },\n }\n const distance_labels: unknown[] = []\n const duration_labels: unknown[] = []\n const coordinates: TCoordinates[] = []\n\n chartData.map((data) => {\n distance_labels.push(data.distance)\n duration_labels.push(data.duration)\n datasets.speed.data.push(\n convertStatsDistance('km', data.speed, useImperialUnits)\n )\n datasets.elevation.data.push(\n convertStatsDistance('m', data.elevation, useImperialUnits)\n )\n coordinates.push({ latitude: data.latitude, longitude: data.longitude })\n })\n\n return { distance_labels, duration_labels, datasets, coordinates }\n}\n\nexport const getDonutDatasets = (\n workouts: IWorkout[]\n): Record> => {\n const total = workouts.length\n if (total === 0) {\n return {}\n }\n\n const datasets: Record> = {}\n workouts.map((workout) => {\n if (!datasets[workout.sport_id]) {\n datasets[workout.sport_id] = {\n count: 0,\n percentage: 0,\n }\n }\n datasets[workout.sport_id].count += 1\n datasets[workout.sport_id].percentage =\n datasets[workout.sport_id].count / total\n })\n\n return datasets\n}\n\nexport const defaultOrder = {\n order: 'desc',\n order_by: 'workout_date',\n}\n","\n\n\n","import { render } from \"./Card.vue?vue&type=template&id=ad374c24\"\nconst script = {}\n\nimport \"./Card.vue?vue&type=style&index=0&id=ad374c24&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-72463173\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"table-selects\" }\nconst _hoisted_2 = [\"value\"]\nconst _hoisted_3 = [\"value\"]\nconst _hoisted_4 = [\"value\"]\nconst _hoisted_5 = [\"value\"]\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = [\"value\"]\n\nimport { toRefs } from 'vue'\n\n import { TPaginationPayload } from '@/types/api'\n\n interface Props {\n order_by: string[]\n query: TPaginationPayload\n sort: string[]\n message: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'FilterSelects',\n props: {\n order_by: null,\n query: null,\n sort: null,\n message: null\n },\n emits: ['updateSelect'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n order_by: string[]\n query: TPaginationPayload\n sort: string[]\n message: string\n }\n\n \n\n \n\n const { order_by, query, sort, message } = toRefs(props)\n const perPage = [10, 25, 50, 100]\n\n function onSelectUpdate(event: Event & { target: HTMLInputElement }) {\n emit('updateSelect', event.target.id, event.target.value)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.ORDER_BY.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"order_by\",\n id: \"order_by\",\n value: _unref(query).order_by,\n onChange: onSelectUpdate\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(order_by), (order) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: order,\n key: order\n }, _toDisplayString(_ctx.$t(`${_unref(message)}.${order.toUpperCase()}`)), 9, _hoisted_3))\n }), 128))\n ], 40, _hoisted_2)\n ]),\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.ORDER.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"order\",\n id: \"order\",\n value: _unref(query).order,\n onChange: onSelectUpdate\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(sort), (order) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: order,\n key: order\n }, _toDisplayString(_ctx.$t(`common.SELECTS.ORDER.${order.toUpperCase()}`)), 9, _hoisted_5))\n }), 128))\n ], 40, _hoisted_4)\n ]),\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.PER_PAGE.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"per_page\",\n id: \"per_page\",\n value: _unref(query).per_page,\n onChange: onSelectUpdate\n }, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(perPage, (nb) => {\n return _createElementVNode(\"option\", {\n value: nb,\n key: nb\n }, _toDisplayString(nb), 9, _hoisted_7)\n }), 64))\n ], 40, _hoisted_6)\n ])\n ]))\n}\n}\n\n})","import script from \"./FilterSelects.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./FilterSelects.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./FilterSelects.vue?vue&type=style&index=0&id=72463173&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-72463173\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./ErrorImg.vue?vue&type=template&id=e620aed4\"\nimport script from \"./ErrorImg.vue?vue&type=script&lang=js\"\nexport * from \"./ErrorImg.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-b60bfa80\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"error\" }\nconst _hoisted_2 = { class: \"error-content\" }\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n title: string\n message: string\n buttonText: string\n path?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Error',\n props: {\n title: null,\n message: null,\n buttonText: null,\n path: { default: '/' }\n },\n setup(__props: any) {\n\nconst props = __props as { title: string, message: string, buttonText: string, path: string }\n\n \n const { buttonText, title, message, path } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"h1\", null, _toDisplayString(_unref(title)), 1),\n _createElementVNode(\"p\", null, _toDisplayString(_unref(message)), 1),\n (_unref(buttonText))\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push(_unref(path)))),\n class: \"upper\"\n }, _toDisplayString(_unref(buttonText)), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./Error.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Error.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Error.vue?vue&type=style&index=0&id=b60bfa80&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b60bfa80\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nimport { Ref, onMounted, ref, toRefs, withDefaults, onUnmounted } from 'vue'\n\n import Error from '@/components/Common/Error.vue'\n interface Props {\n target?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'NotFound',\n props: {\n target: { default: 'PAGE' }\n },\n setup(__props: any) {\n\nconst props = __props as { target: string }\n\n \n const { target } = toRefs(props)\n const timer = ref()\n const errorDisplayed: Ref = ref(false)\n\n onMounted(() => displayError())\n\n function displayError() {\n timer.value = setTimeout(() => {\n errorDisplayed.value = true\n }, 500)\n }\n\n onUnmounted(() => {\n if (timer.value) {\n clearTimeout(timer.value)\n }\n })\n\nreturn (_ctx: any,_cache: any) => {\n return (errorDisplayed.value)\n ? (_openBlock(), _createBlock(Error, {\n key: 0,\n title: \"404\",\n message: _ctx.$t(`error.NOT_FOUND.${_unref(target)}`),\n \"button-text\": _ctx.$t('common.HOME')\n }, null, 8, [\"message\", \"button-text\"]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./NotFound.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NotFound.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderSlot as _renderSlot, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3a9a4a65\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n class: \"pagination-center\",\n \"aria-label\": \"navigation\"\n}\nconst _hoisted_2 = { class: \"pagination\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { toRefs } from 'vue'\n\n import { IPagination, TPaginationPayload } from '@/types/api'\n import { IOauth2ClientsPayload } from '@/types/oauth'\n import { TWorkoutsPayload } from '@/types/workouts'\n import { rangePagination } from '@/utils/api'\n\n interface Props {\n pagination: IPagination\n path: string\n query: TWorkoutsPayload | TPaginationPayload | IOauth2ClientsPayload\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Pagination',\n props: {\n pagination: null,\n path: null,\n query: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n pagination: IPagination\n path: string\n query: TWorkoutsPayload | TPaginationPayload | IOauth2ClientsPayload\n }\n\n \n\n const { pagination, path, query } = toRefs(props)\n\n function getQuery(\n page: number,\n cursor?: number\n ): TPaginationPayload | IOauth2ClientsPayload {\n const newQuery = Object.assign({}, query.value)\n newQuery.page = cursor ? page + cursor : page\n return newQuery\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"nav\", _hoisted_1, [\n _createElementVNode(\"ul\", _hoisted_2, [\n _createElementVNode(\"li\", {\n class: _normalizeClass([\"page-prev\", { disabled: !_unref(pagination).has_prev }])\n }, [\n _createVNode(_component_router_link, {\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(_unref(pagination).page, -1) },\n disabled: !_unref(pagination).has_prev\n }, {\n default: _withCtx(({ navigate }) => [\n _renderSlot(_ctx.$slots, \"default\", {\n onClick: ($event: any) => (_unref(pagination).has_next ? navigate : null)\n }, () => [\n _createTextVNode(_toDisplayString(_ctx.$t('api.PAGINATION.PREVIOUS')) + \" \", 1),\n _hoisted_3\n ])\n ]),\n _: 3\n }, 8, [\"to\", \"disabled\"])\n ], 2),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(rangePagination)(_unref(pagination).pages, _unref(pagination).page), (page) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: page,\n class: _normalizeClass([\"page\", { active: page === _unref(pagination).page }])\n }, [\n (page === '...')\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, \" ... \"))\n : (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(+page) }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(page), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]))\n ], 2))\n }), 128)),\n _createElementVNode(\"li\", {\n class: _normalizeClass([\"page-next\", { disabled: !_unref(pagination).has_next }])\n }, [\n _createVNode(_component_router_link, {\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(_unref(pagination).page, 1) },\n disabled: !_unref(pagination).has_next\n }, {\n default: _withCtx(({ navigate }) => [\n _renderSlot(_ctx.$slots, \"default\", {\n onClick: ($event: any) => (_unref(pagination).has_next ? navigate : null)\n }, () => [\n _createTextVNode(_toDisplayString(_ctx.$t('api.PAGINATION.NEXT')) + \" \", 1),\n _hoisted_5\n ])\n ]),\n _: 3\n }, 8, [\"to\", \"disabled\"])\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./Pagination.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Pagination.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Pagination.vue?vue&type=style&index=0&id=3a9a4a65&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3a9a4a65\"]])\n\nexport default __exports__","import { zxcvbnOptions } from '@zxcvbn-ts/core'\n\nexport const setZxcvbnOptions = async (language: string) => {\n const zxcvbnCommonPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-common'\n )\n const zxcvbnEnPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-en'\n )\n const zxcvbnFrPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-fr'\n )\n const zxcvbnDePackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-de'\n )\n const zxcvbnLangPackages: Record = {\n de: zxcvbnDePackage,\n en: zxcvbnEnPackage,\n fr: zxcvbnFrPackage,\n // no package available for norwegian bokmal, fallback on english\n nb: zxcvbnEnPackage,\n }\n const zxcvbnPackage = zxcvbnLangPackages[language]\n const options = {\n graphs: zxcvbnCommonPackage.default.adjacencyGraphs,\n dictionary: {\n ...zxcvbnCommonPackage.default.dictionary,\n ...zxcvbnPackage.default.dictionary,\n },\n }\n zxcvbnOptions.setOptions(options)\n}\n\nexport const getPasswordStrength = (strength: number): string => {\n switch (strength) {\n case 2:\n return 'AVERAGE'\n case 3:\n return 'GOOD'\n case 4:\n return 'STRONG'\n default:\n return 'WEAK'\n }\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74e71df5\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"password-strength\" }\nconst _hoisted_2 = [\"value\"]\nconst _hoisted_3 = {\n key: 0,\n class: \"password-strength-details\"\n}\nconst _hoisted_4 = { class: \"password-strength-value\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"info-box\"\n}\nconst _hoisted_6 = { class: \"password-feedback\" }\n\nimport { zxcvbn } from '@zxcvbn-ts/core'\n import {\n ComputedRef,\n Ref,\n computed,\n ref,\n onBeforeMount,\n toRefs,\n watch,\n } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { useStore } from '@/use/useStore'\n import { getPasswordStrength, setZxcvbnOptions } from '@/utils/password'\n\n interface Props {\n password: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordStength',\n props: {\n password: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n password: string\n }\n\n \n const { password } = toRefs(props)\n\n const store = useStore()\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const passwordScore: Ref = ref(0)\n const passwordStrength: Ref = ref('')\n const passwordSuggestions: Ref = ref([])\n const backgroundSize = ref('0% 100%')\n\n onBeforeMount(async () => await setZxcvbnOptions(language.value))\n\n function calculatePasswordStrength(password: string) {\n const zxcvbnResult = zxcvbn(password)\n passwordScore.value = zxcvbnResult.score\n passwordStrength.value = getPasswordStrength(passwordScore.value)\n passwordSuggestions.value = zxcvbnResult.feedback.suggestions\n backgroundSize.value = (passwordScore.value * 100) / 4 + '% 100%'\n }\n\n watch(\n () => language.value,\n async (newLanguageValue) => {\n await setZxcvbnOptions(newLanguageValue)\n }\n )\n watch(\n () => password.value,\n async (newPassword) => {\n if (isSuccess.value) {\n passwordStrength.value = ''\n } else {\n calculatePasswordStrength(newPassword)\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"input\", {\n class: _normalizeClass([\"password-slider\", `strength-${passwordScore.value}`]),\n style: _normalizeStyle({ backgroundSize: backgroundSize.value }),\n type: \"range\",\n value: passwordScore.value,\n min: \"0\",\n max: \"4\",\n step: \"1\"\n }, null, 14, _hoisted_2),\n (passwordStrength.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('user.PASSWORD_STRENGTH.LABEL')) + \": \" + _toDisplayString(_ctx.$t(`user.PASSWORD_STRENGTH.${passwordStrength.value}`)), 1),\n (passwordSuggestions.value.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"ul\", _hoisted_6, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(passwordSuggestions.value, (suggestion) => {\n return (_openBlock(), _createElementBlock(\"li\", { key: suggestion }, _toDisplayString(_ctx.$t(`user.PASSWORD_STRENGTH.SUGGESTIONS.${suggestion}`)), 1))\n }), 128))\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./PasswordStength.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordStength.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordStength.vue?vue&type=style&index=0&id=74e71df5&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74e71df5\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, vModelDynamic as _vModelDynamic, createElementVNode as _createElementVNode, withDirectives as _withDirectives, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5a126514\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"password-input\" }\nconst _hoisted_2 = [\"id\", \"disabled\", \"placeholder\", \"required\", \"type\"]\nconst _hoisted_3 = {\n key: 0,\n class: \"form-info\"\n}\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { Ref, ref, toRefs, watch, withDefaults } from 'vue'\n\n import PasswordStrength from '@/components/Common/PasswordStength.vue'\n\n interface Props {\n checkStrength?: boolean\n disabled?: boolean\n id?: string\n password?: string\n placeholder?: string\n required?: boolean\n }\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordInput',\n props: {\n checkStrength: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n id: { default: 'password' },\n password: { default: '' },\n placeholder: null,\n required: { type: Boolean, default: false }\n },\n emits: ['updatePassword', 'passwordError'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { checkStrength: boolean, disabled: boolean, id: string, password: string, placeholder?: string, required: boolean }\n\n \n const { checkStrength, disabled, id, password, placeholder, required } =\n toRefs(props)\n\n const showPassword: Ref = ref(false)\n const passwordValue: Ref = ref('')\n\n \n\n function togglePassword() {\n showPassword.value = !showPassword.value\n }\n function updatePassword(event: Event & { target: HTMLInputElement }) {\n emit('updatePassword', event.target.value)\n }\n function invalidPassword() {\n emit('passwordError')\n }\n\n watch(\n () => password.value,\n (newPassword) => {\n if (newPassword === '') {\n passwordValue.value = ''\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _withDirectives(_createElementVNode(\"input\", {\n id: _unref(id),\n disabled: _unref(disabled),\n placeholder: _unref(placeholder),\n required: _unref(required),\n type: showPassword.value ? 'text' : 'password',\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((passwordValue).value = $event)),\n minlength: \"8\",\n onInput: updatePassword,\n onInvalid: invalidPassword\n }, null, 40, _hoisted_2), [\n [_vModelDynamic, passwordValue.value]\n ]),\n _createElementVNode(\"div\", {\n class: \"show-password\",\n onClick: togglePassword\n }, [\n _createTextVNode(_toDisplayString(_ctx.$t(`user.${showPassword.value ? 'HIDE' : 'SHOW'}_PASSWORD`)) + \" \", 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa\", `fa-eye${showPassword.value ? '-slash' : ''}`]),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n (_unref(checkStrength))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _hoisted_4,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.PASSWORD_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(checkStrength))\n ? (_openBlock(), _createBlock(PasswordStrength, {\n key: 1,\n password: passwordValue.value\n }, null, 8, [\"password\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./PasswordInput.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordInput.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordInput.vue?vue&type=style&index=0&id=5a126514&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5a126514\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"map-attribution\" }, [\n /*#__PURE__*/_createElementVNode(\"span\", { class: \"map-attribution-text\" }, \"©\"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n class: \"map-attribution-text\",\n href: \"https://www.openstreetmap.org/copyright\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \" OpenStreetMap \")\n], -1)\n\nimport { toRefs, withDefaults } from 'vue'\n\n import { IWorkout } from '@/types/workouts'\n import { getApiUrl } from '@/utils'\n\n interface Props {\n workout: IWorkout\n displayHover?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StaticMap',\n props: {\n workout: null,\n displayHover: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { workout: IWorkout, displayHover: boolean }\n\n \n const { displayHover } = toRefs(props)\n const imageUrl = `${getApiUrl()}workouts/map/${props.workout.map}`\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"static-map\", { 'display-hover': _unref(displayHover) }])\n }, [\n (_unref(displayHover))\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: imageUrl,\n alt: \"\"\n }))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"bg-map-image\",\n style: _normalizeStyle({\n backgroundImage: `url(${imageUrl})`,\n })\n }, null, 4)),\n _hoisted_1\n ], 2))\n}\n}\n\n})","import script from \"./StaticMap.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StaticMap.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StaticMap.vue?vue&type=style&index=0&id=6b7e4baf&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-d5e9b348\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"start-chart\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { key: 1 }\nconst _hoisted_4 = { class: \"chart-radio\" }\nconst _hoisted_5 = [\"checked\"]\nconst _hoisted_6 = [\"checked\"]\nconst _hoisted_7 = [\"checked\"]\nconst _hoisted_8 = { key: 0 }\nconst _hoisted_9 = [\"checked\"]\nconst _hoisted_10 = { key: 1 }\nconst _hoisted_11 = [\"checked\"]\nconst _hoisted_12 = { key: 2 }\nconst _hoisted_13 = [\"checked\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Chart = _resolveComponent(\"Chart\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.hideChartIfNoData && _ctx.emptyStats)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('workouts.NO_WORKOUTS')), 1))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_distance\",\n checked: _ctx.displayedData === 'total_distance',\n onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_5),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_duration\",\n checked: _ctx.displayedData === 'total_duration',\n onClick: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_6),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DURATION')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"nb_workouts\",\n checked: _ctx.displayedData === 'nb_workouts',\n onClick: _cache[2] || (_cache[2] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_7),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.WORKOUT', 2)), 1)\n ]),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_8, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"average_speed\",\n checked: _ctx.displayedData === 'average_speed',\n onClick: _cache[3] || (_cache[3] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_9),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.AVERAGE_SPEED')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_10, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_ascent\",\n checked: _ctx.displayedData === 'total_ascent',\n onClick: _cache[4] || (_cache[4] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_11),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.ASCENT')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_12, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_descent\",\n checked: _ctx.displayedData === 'total_descent',\n onClick: _cache[5] || (_cache[5] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_13),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DESCENT')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n (_ctx.labels.length > 0)\n ? (_openBlock(), _createBlock(_component_Chart, {\n key: 0,\n datasets: _ctx.datasets,\n labels: _ctx.labels,\n displayedData: _ctx.displayedData,\n displayedSportIds: _ctx.displayedSportIds,\n fullStats: _ctx.fullStats,\n useImperialUnits: _ctx.user.imperial_units\n }, null, 8, [\"datasets\", \"labels\", \"displayedData\", \"displayedSportIds\", \"fullStats\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n}","import { resolveComponent as _resolveComponent, mergeProps as _mergeProps, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"chart\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BarChart = _resolveComponent(\"BarChart\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_BarChart, _mergeProps(_ctx.barChartProps, { class: \"bar-chart\" }), null, 16)\n ]))\n}","export const formatDuration = (\n totalSeconds: number,\n formatWithUnits = false\n): string => {\n let days = '0'\n if (formatWithUnits) {\n days = String(Math.floor(totalSeconds / 86400))\n totalSeconds %= 86400\n }\n const hours = String(Math.floor(totalSeconds / 3600)).padStart(2, '0')\n totalSeconds %= 3600\n const minutes = String(Math.floor(totalSeconds / 60)).padStart(2, '0')\n const seconds = String(totalSeconds % 60).padStart(2, '0')\n if (formatWithUnits) {\n return `${days === '0' ? '' : `${days}d `}${\n hours === '00' ? '' : `${hours}h `\n }${minutes}m ${seconds}s`\n }\n return `${hours === '00' ? '' : `${hours}:`}${minutes}:${seconds}`\n}\n","import { TStatisticsDatasetKeys } from '@/types/statistics'\nimport { formatDuration } from '@/utils/duration'\nimport { units } from '@/utils/units'\n\nexport const formatTooltipValue = (\n displayedData: TStatisticsDatasetKeys,\n value: number,\n useImperialUnits: boolean,\n formatWithUnits = true,\n unitFrom = 'km'\n): string => {\n const unitTo = useImperialUnits ? units[unitFrom].defaultTarget : unitFrom\n switch (displayedData) {\n case 'average_speed':\n return `${value.toFixed(2)} ${unitTo}/h`\n case 'total_duration':\n return formatDuration(value, formatWithUnits)\n case 'total_distance':\n case 'total_ascent':\n case 'total_descent':\n return `${value.toFixed(2)} ${unitTo}`\n default:\n return value.toString()\n }\n}\n","\n import { ChartData, ChartOptions, LayoutItem } from 'chart.js'\n import { ComputedRef, PropType, computed, defineComponent } from 'vue'\n import { BarChart, useBarChart } from 'vue-chart-3'\n import { useI18n } from 'vue-i18n'\n\n import { IChartDataset } from '@/types/chart'\n import { TStatisticsDatasetKeys } from '@/types/statistics'\n import { formatTooltipValue } from '@/utils/tooltip'\n\n export default defineComponent({\n name: 'Chart',\n components: {\n BarChart,\n },\n props: {\n datasets: {\n type: Object as PropType,\n required: true,\n },\n labels: {\n type: Object as PropType,\n required: true,\n },\n displayedData: {\n type: String as PropType,\n required: true,\n },\n displayedSportIds: {\n type: Array as PropType,\n required: true,\n },\n fullStats: {\n type: Boolean,\n required: true,\n },\n useImperialUnits: {\n type: Boolean,\n required: true,\n },\n },\n setup(props) {\n const { t } = useI18n()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function getNumber(value: any): number {\n return isNaN(value) ? 0 : +value\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function getSum(total: any, value: any): number {\n return getNumber(total) + getNumber(value)\n }\n function getUnit(displayedData: string) {\n return ['total_ascent', 'total_descent'].includes(displayedData)\n ? 'm'\n : 'km'\n }\n const chartData: ComputedRef> = computed(() => ({\n labels: props.labels,\n // workaround to avoid dataset modification\n datasets: JSON.parse(JSON.stringify(props.datasets)),\n }))\n const options = computed>(() => ({\n responsive: true,\n maintainAspectRatio: true,\n animation: false,\n layout: {\n padding: {\n top: props.fullStats ? 40 : 22,\n },\n },\n scales: {\n x: {\n stacked: true,\n grid: {\n drawOnChartArea: false,\n },\n },\n y: {\n stacked: props.displayedData !== 'average_speed',\n grid: {\n drawOnChartArea: false,\n },\n ticks: {\n maxTicksLimit: 6,\n callback: function (value) {\n return formatTooltipValue(\n props.displayedData,\n +value,\n props.useImperialUnits,\n false,\n getUnit(props.displayedData)\n )\n },\n },\n afterFit: function (scale: LayoutItem) {\n scale.width = props.fullStats ? 90 : 60\n },\n },\n },\n plugins: {\n datalabels: {\n anchor: 'end',\n align: 'end',\n color: function (context) {\n return props.displayedData === 'average_speed' &&\n context.dataset.backgroundColor\n ? // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n context.dataset.backgroundColor[0]\n : '#666666'\n },\n rotation: function (context) {\n return props.fullStats && context.chart.chartArea.width < 580\n ? 310\n : 0\n },\n display: function (context) {\n return props.fullStats && context.chart.chartArea.width < 300\n ? false\n : props.displayedData === 'average_speed'\n ? props.displayedSportIds.length == 1\n ? 'auto'\n : false\n : true\n },\n formatter: function (value, context) {\n if (props.displayedData === 'average_speed') {\n return formatTooltipValue(\n props.displayedData,\n value,\n props.useImperialUnits,\n false\n )\n } else {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const total: number = context.chart.data.datasets\n .map((d) => d.data[context.dataIndex])\n .reduce((total, value) => getSum(total, value), 0)\n return context.datasetIndex ===\n props.displayedSportIds.length - 1 && total > 0\n ? formatTooltipValue(\n props.displayedData,\n total,\n props.useImperialUnits,\n false,\n getUnit(props.displayedData)\n )\n : null\n }\n },\n },\n legend: {\n display: false,\n },\n tooltip: {\n interaction: {\n intersect: true,\n mode: 'index',\n position:\n props.displayedData === 'average_speed' ? 'nearest' : 'average',\n },\n filter: function (tooltipItem) {\n return tooltipItem.formattedValue !== '0'\n },\n callbacks: {\n label: function (context) {\n let label = t(`sports.${context.dataset.label}.LABEL`) || ''\n if (label) {\n label += ': '\n }\n if (context.parsed.y !== null) {\n label += formatTooltipValue(\n props.displayedData,\n context.parsed.y,\n props.useImperialUnits,\n true,\n getUnit(props.displayedData)\n )\n }\n return label\n },\n footer: function (tooltipItems) {\n if (props.displayedData === 'average_speed') {\n return ''\n }\n let sum = 0\n tooltipItems.map((tooltipItem) => {\n sum += tooltipItem.parsed.y\n })\n return (\n `${t('common.TOTAL')}: ` +\n formatTooltipValue(\n props.displayedData,\n sum,\n props.useImperialUnits,\n true,\n getUnit(props.displayedData)\n )\n )\n },\n },\n },\n },\n }))\n const { barChartProps } = useBarChart({\n chartData,\n options,\n })\n return { barChartProps }\n },\n })\n","import { render } from \"./Chart.vue?vue&type=template&id=6c8b76cd&ts=true\"\nimport script from \"./Chart.vue?vue&type=script&lang=ts\"\nexport * from \"./Chart.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n import { format } from 'date-fns'\n import {\n ComputedRef,\n PropType,\n Ref,\n computed,\n defineComponent,\n ref,\n watch,\n onBeforeMount,\n } from 'vue'\n\n import Chart from '@/components/Common/StatsChart/Chart.vue'\n import { STATS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import {\n IStatisticsChartData,\n TStatisticsDatasetKeys,\n IStatisticsDateParams,\n TStatisticsFromApi,\n IStatisticsParams,\n } from '@/types/statistics'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatStats } from '@/utils/statistics'\n\n export default defineComponent({\n name: 'UserMonthStats',\n components: {\n Chart,\n },\n props: {\n sports: {\n type: Object as PropType,\n required: true,\n },\n user: {\n type: Object as PropType,\n required: true,\n },\n chartParams: {\n type: Object as PropType,\n required: true,\n },\n displayedSportIds: {\n type: Array as PropType,\n default: () => [],\n },\n fullStats: {\n type: Boolean,\n default: false,\n },\n hideChartIfNoData: {\n type: Boolean,\n default: false,\n },\n },\n setup(props) {\n const store = useStore()\n\n const displayedData: Ref = ref('total_distance')\n const statistics: ComputedRef = computed(\n () => store.getters[STATS_STORE.GETTERS.USER_STATS]\n )\n const formattedStats: ComputedRef = computed(() =>\n formatStats(\n props.chartParams,\n props.user.weekm,\n props.sports,\n props.displayedSportIds,\n statistics.value,\n props.user.imperial_units,\n props.user.date_format\n )\n )\n\n onBeforeMount(() =>\n getStatistics(getApiParams(props.chartParams, props.user))\n )\n\n function getStatistics(apiParams: IStatisticsParams) {\n store.dispatch(STATS_STORE.ACTIONS.GET_USER_STATS, {\n username: props.user.username,\n filterType: 'by_time',\n params: apiParams,\n })\n }\n function updateDisplayData(\n event: Event & {\n target: HTMLInputElement & { name: TStatisticsDatasetKeys }\n }\n ) {\n displayedData.value = event.target.name\n }\n function getApiParams(\n chartParams: IStatisticsDateParams,\n user: IAuthUserProfile\n ): IStatisticsParams {\n return {\n from: format(chartParams.start, 'yyyy-MM-dd'),\n to: format(chartParams.end, 'yyyy-MM-dd'),\n time:\n chartParams.duration === 'week'\n ? `week${user.weekm ? 'm' : ''}`\n : chartParams.duration,\n }\n }\n\n watch(\n () => props.chartParams,\n async (newParams) => {\n getStatistics(getApiParams(newParams, props.user))\n }\n )\n\n return {\n datasets: computed(\n () => formattedStats.value.datasets[displayedData.value]\n ),\n labels: computed(() => formattedStats.value.labels),\n emptyStats: computed(() => Object.keys(statistics.value).length === 0),\n displayedData,\n updateDisplayData,\n }\n },\n })\n","import { render } from \"./index.vue?vue&type=template&id=d5e9b348&scoped=true&ts=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=d5e9b348&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-d5e9b348\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-20291951\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"box user-header\" }\nconst _hoisted_2 = { class: \"user-details\" }\nconst _hoisted_3 = { class: \"user-name\" }\nconst _hoisted_4 = { class: \"user-stats\" }\nconst _hoisted_5 = { class: \"user-stat\" }\nconst _hoisted_6 = { class: \"stat-number\" }\nconst _hoisted_7 = { class: \"stat-label\" }\nconst _hoisted_8 = { class: \"user-stat\" }\nconst _hoisted_9 = { class: \"stat-label\" }\nconst _hoisted_10 = { class: \"user-stat hide-small\" }\nconst _hoisted_11 = { class: \"stat-number\" }\nconst _hoisted_12 = { class: \"stat-label\" }\n\nimport { computed, ComputedRef, toRefs } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE } from '@/store/constants'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserHeader',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const { user } = toRefs(props)\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_unref(user).username), 1),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"span\", _hoisted_6, _toDisplayString(_unref(user).nb_workouts), 1),\n _createElementVNode(\"span\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.WORKOUT', _unref(user).nb_workouts)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createVNode(_component_Distance, {\n distance: _unref(user).total_distance,\n unitFrom: \"km\",\n digits: 0,\n displayUnit: false,\n useImperialUnits: _unref(authUser).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_unref(authUser).imperial_units ? 'miles' : 'km'), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_unref(user).nb_sports), 1),\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('workouts.SPORT', _unref(user).nb_sports)), 1)\n ])\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./UserHeader.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserHeader.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserHeader.vue?vue&type=style&index=0&id=20291951&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-20291951\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-217519af\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"user-infos\",\n class: \"description-list\"\n}\nconst _hoisted_2 = {\n key: 1,\n class: \"info-box success-message\"\n}\nconst _hoisted_3 = {\n key: 4,\n class: \"email-form form-box\"\n}\nconst _hoisted_4 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_5 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_6 = { class: \"form-buttons\" }\nconst _hoisted_7 = {\n class: \"confirm\",\n type: \"submit\"\n}\nconst _hoisted_8 = [\"onClick\"]\nconst _hoisted_9 = { key: 5 }\nconst _hoisted_10 = { class: \"user-bio\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"profile-buttons\"\n}\nconst _hoisted_12 = [\"onClick\"]\nconst _hoisted_13 = {\n key: 1,\n class: \"profile-buttons\"\n}\n\nimport { format } from 'date-fns'\n import {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n withDefaults,\n watch,\n onUnmounted,\n } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate, getDateFormat } from '@/utils/dates'\n import { localeFromLanguage } from '@/utils/locales'\n\n interface Props {\n user: IUserProfile\n fromAdmin?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserInfos',\n props: {\n user: null,\n fromAdmin: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { user: IUserProfile, fromAdmin: boolean }\n\n \n\n const store = useStore()\n\n const { user, fromAdmin } = toRefs(props)\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const registrationDate = computed(() =>\n props.user.created_at\n ? formatDate(\n props.user.created_at,\n authUser.value.timezone,\n authUser.value.date_format\n )\n : ''\n )\n const birthDate = computed(() =>\n props.user.birth_date\n ? format(\n new Date(props.user.birth_date),\n `${getDateFormat(authUser.value.date_format, language.value)}`,\n { locale: localeFromLanguage[language.value] }\n )\n : ''\n )\n const isSuccess = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS_IS_SUCCESS]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const displayModal: Ref = ref('')\n const formErrors = ref(false)\n const displayUserEmailForm: Ref = ref(false)\n const newUserEmail: Ref = ref('')\n const currentAction: Ref = ref('')\n\n function updateDisplayModal(value: string) {\n displayModal.value = value\n if (value !== '') {\n store.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n }\n }\n function deleteUserAccount(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.DELETE_USER_ACCOUNT, { username })\n }\n function resetUserPassword(username: string) {\n currentAction.value = 'password-reset'\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n resetPassword: true,\n })\n }\n function confirmUserAccount(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n activate: true,\n })\n }\n function displayEmailForm() {\n resetErrorsAndSuccess()\n newUserEmail.value = user.value.email_to_confirm\n ? user.value.email_to_confirm\n : ''\n displayUserEmailForm.value = true\n currentAction.value = 'email-update'\n }\n function hideEmailForm() {\n newUserEmail.value = ''\n displayUserEmailForm.value = false\n }\n function updateUserEmail(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n new_email: newUserEmail.value,\n })\n }\n function resetErrorsAndSuccess() {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n currentAction.value = ''\n }\n\n onUnmounted(() => resetErrorsAndSuccess())\n\n watch(\n () => isSuccess.value,\n (newIsSuccess) => {\n if (newIsSuccess) {\n updateDisplayModal('')\n hideEmailForm()\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_AlertMessage = _resolveComponent(\"AlertMessage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: \n displayModal.value === 'delete'\n ? 'admin.CONFIRM_USER_ACCOUNT_DELETION'\n : 'admin.CONFIRM_USER_PASSWORD_RESET'\n ,\n strongMessage: _unref(user).username,\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (\n displayModal.value === 'delete'\n ? deleteUserAccount(_unref(user).username)\n : resetUserPassword(_unref(user).username)\n )),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal('')))\n }, null, 8, [\"title\", \"message\", \"strongMessage\"]))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\n `admin.${\n currentAction.value === 'password-reset'\n ? 'PASSWORD_RESET'\n : 'USER_EMAIL_UPDATE'\n }_SUCCESSFUL`\n )), 1))\n : _createCommentVNode(\"\", true),\n (!_unref(user).is_active)\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 2,\n message: \"user.THIS_USER_ACCOUNT_IS_INACTIVE\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 3,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (displayUserEmailForm.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (updateUserEmail(_unref(user).username)), [\"prevent\"]))\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.CURRENT_EMAIL')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"email\",\n type: \"email\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_unref(user).email) = $event)),\n disabled: \"\"\n }, null, 512), [\n [_vModelText, _unref(user).email]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_5, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.NEW_EMAIL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"new-email\",\n type: \"email\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((newUserEmail).value = $event))\n }, null, 512), [\n [_vModelText, newUserEmail.value]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"button\", _hoisted_7, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(hideEmailForm, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_8)\n ])\n ], 34)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(registrationDate)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).first_name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LAST_NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).last_name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.BIRTH_DATE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(birthDate)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LOCATION')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).location), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.BIO')) + \":\", 1),\n _createElementVNode(\"dd\", _hoisted_10, _toDisplayString(_unref(user).bio), 1)\n ]),\n (_unref(fromAdmin))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n (_unref(authUser).username !== _unref(user).username)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"danger\",\n onClick: _cache[5] || (_cache[5] = _withModifiers(($event: any) => (updateDisplayModal('delete')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.DELETE_USER')), 1))\n : _createCommentVNode(\"\", true),\n (!_unref(user).is_active)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 1,\n onClick: _cache[6] || (_cache[6] = _withModifiers(($event: any) => (confirmUserAccount(_unref(user).username)), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.ACTIVATE_USER_ACCOUNT')), 1))\n : _createCommentVNode(\"\", true),\n (_unref(authUser).username !== _unref(user).username)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 2,\n onClick: _withModifiers(displayEmailForm, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('admin.UPDATE_USER_EMAIL')), 9, _hoisted_12))\n : _createCommentVNode(\"\", true),\n (\n _unref(authUser).username !== _unref(user).username &&\n _unref(appConfig).is_email_sending_enabled\n )\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 3,\n onClick: _cache[7] || (_cache[7] = _withModifiers(($event: any) => (updateDisplayModal('reset')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.RESET_USER_PASSWORD')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.$router.go(-1)))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createElementVNode(\"button\", {\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.$router.push('/profile/edit')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]))\n ]))\n}\n}\n\n})","import script from \"./UserInfos.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserInfos.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserInfos.vue?vue&type=style&index=0&id=217519af&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-217519af\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, withDirectives as _withDirectives, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-b3c885de\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-form\" }\nconst _hoisted_2 = {\n key: 2,\n class: \"info-box success-message\"\n}\nconst _hoisted_3 = { class: \"form-items\" }\nconst _hoisted_4 = [\"disabled\", \"placeholder\"]\nconst _hoisted_5 = {\n key: 1,\n class: \"form-info\"\n}\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = [\"disabled\", \"placeholder\"]\nconst _hoisted_8 = {\n key: 3,\n class: \"form-info\"\n}\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = { key: 3 }\nconst _hoisted_12 = { key: 0 }\nconst _hoisted_13 = { key: 4 }\nconst _hoisted_14 = { class: \"account\" }\nconst _hoisted_15 = { key: 5 }\n\nimport {\n ComputedRef,\n computed,\n onUnmounted,\n reactive,\n ref,\n toRefs,\n watch,\n withDefaults,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import PasswordInput from '@/components/Common/PasswordInput.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { ILoginRegisterFormData } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n action: string\n token?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAuthForm',\n props: {\n action: null,\n token: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { action: string, token: string }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { action } = toRefs(props)\n const formData: ILoginRegisterFormData = reactive({\n username: '',\n email: '',\n password: '',\n })\n const buttonText: ComputedRef = computed(() =>\n getButtonText(props.action)\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const isRegistrationSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_REGISTRATION_SUCCESS]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const registration_disabled: ComputedRef = computed(\n () =>\n props.action === 'register' && !appConfig.value.is_registration_enabled\n )\n const sendingEmailDisabled: ComputedRef = computed(\n () =>\n ['reset-request', 'account-confirmation-resend'].includes(props.action) &&\n !appConfig.value.is_email_sending_enabled\n )\n const formErrors = ref(false)\n\n function getButtonText(action: string): string {\n switch (action) {\n case 'reset-request':\n case 'reset':\n return 'buttons.SUBMIT'\n default:\n return `buttons.${props.action.toUpperCase()}`\n }\n }\n function invalidateForm() {\n formErrors.value = true\n }\n function updatePassword(password: string) {\n formData.password = password\n }\n function onSubmit(actionType: string) {\n switch (actionType) {\n case 'reset':\n if (!props.token) {\n return store.commit(\n ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES,\n 'user.INVALID_TOKEN'\n )\n }\n return store.dispatch(AUTH_USER_STORE.ACTIONS.RESET_USER_PASSWORD, {\n password: formData.password,\n token: props.token,\n })\n case 'reset-request':\n return store.dispatch(\n AUTH_USER_STORE.ACTIONS.SEND_PASSWORD_RESET_REQUEST,\n {\n email: formData.email,\n }\n )\n case 'account-confirmation-resend':\n return store.dispatch(\n AUTH_USER_STORE.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL,\n {\n email: formData.email,\n }\n )\n default:\n formData['language'] = language.value\n store.dispatch(AUTH_USER_STORE.ACTIONS.LOGIN_OR_REGISTER, {\n actionType,\n formData,\n redirectUrl: route.query.from,\n })\n }\n }\n function resetFormData() {\n formData.username = ''\n formData.email = ''\n formData.password = ''\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\n watch(\n () => route.path,\n async () => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n store.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n false\n )\n formErrors.value = false\n resetFormData()\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_AlertMessage = _resolveComponent(\"AlertMessage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n id: \"user-auth-form\",\n class: _normalizeClass(`${\n ['reset', 'reset-request'].includes(_unref(action)) ? _unref(action) : 'user-form'\n }`)\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"form-box\", {\n disabled: _unref(registration_disabled),\n }])\n }, [\n (_unref(registration_disabled))\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 0,\n message: \"user.REGISTER_DISABLED\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(sendingEmailDisabled))\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 1,\n message: \"admin.EMAIL_SENDING_DISABLED\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess) || _unref(isRegistrationSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\n `user.PROFILE.SUCCESSFUL_${\n _unref(isRegistrationSuccess)\n ? `REGISTRATION${\n _unref(appConfig).is_email_sending_enabled ? '_WITH_EMAIL' : ''\n }`\n : 'UPDATE'\n }`\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (onSubmit(_unref(action))), [\"prevent\"]))\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(action) === 'register')\n ? _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n id: \"username\",\n disabled: _unref(registration_disabled),\n required: \"\",\n pattern: \"[a-zA-Z0-9_]+\",\n minlength: \"3\",\n maxlength: \"30\",\n onInvalid: invalidateForm,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((formData.username) = $event)),\n placeholder: _ctx.$t('user.USERNAME')\n }, null, 40, _hoisted_4)), [\n [_vModelText, formData.username]\n ])\n : _createCommentVNode(\"\", true),\n (_unref(action) === 'register')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _hoisted_6,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.USERNAME_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(action) !== 'reset')\n ? _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 2,\n id: \"email\",\n disabled: _unref(registration_disabled) || _unref(sendingEmailDisabled),\n required: \"\",\n onInvalid: invalidateForm,\n type: \"email\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((formData.email) = $event)),\n placeholder: _ctx.$t('user.EMAIL')\n }, null, 40, _hoisted_7)), [\n [_vModelText, formData.email]\n ])\n : _createCommentVNode(\"\", true),\n (\n [\n 'reset-request',\n 'register',\n 'account-confirmation-resend',\n ].includes(_unref(action))\n )\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _hoisted_9,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.EMAIL_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (\n !['account-confirmation-resend', 'reset-request'].includes(\n _unref(action)\n )\n )\n ? (_openBlock(), _createBlock(PasswordInput, {\n key: 4,\n disabled: _unref(registration_disabled),\n required: true,\n placeholder: \n _unref(action) === 'reset'\n ? _ctx.$t('user.ENTER_PASSWORD')\n : _ctx.$t('user.PASSWORD')\n ,\n password: formData.password,\n checkStrength: ['reset', 'register'].includes(_unref(action)),\n onUpdatePassword: updatePassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"placeholder\", \"password\", \"checkStrength\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"button\", {\n type: \"submit\",\n disabled: _unref(registration_disabled) || _unref(sendingEmailDisabled)\n }, _toDisplayString(_ctx.$t(_unref(buttonText))), 9, _hoisted_10)\n ], 34),\n (_unref(action) === 'login')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/register\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.REGISTER')), 1)\n ]),\n _: 1\n }),\n (_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_12, \"-\"))\n : _createCommentVNode(\"\", true),\n (_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n class: \"links\",\n to: \"/password-reset/request\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PASSWORD_FORGOTTEN')), 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(action) === 'register')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('user.ALREADY_HAVE_ACCOUNT')), 1),\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/login\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.LOGIN')), 1)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (\n ['login', 'register'].includes(_unref(action)) &&\n _unref(appConfig).is_email_sending_enabled\n )\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/account-confirmation/resend\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.ACCOUNT_CONFIRMATION_NOT_RECEIVED')), 1)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 6,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ])\n ], 2))\n}\n}\n\n})","import script from \"./UserAuthForm.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAuthForm.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAuthForm.vue?vue&type=style&index=0&id=b3c885de&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b3c885de\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"user-picture\" }\nconst _hoisted_2 = [\"alt\", \"src\"]\nconst _hoisted_3 = {\n key: 1,\n class: \"no-picture\"\n}\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-user-circle-o\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_5 = [\n _hoisted_4\n]\n\nimport { computed } from 'vue'\n\n import { IUserProfile } from '@/types/user'\n import { getApiUrl } from '@/utils'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPicture',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const authUserPictureUrl = computed(() =>\n props.user.picture\n ? `${getApiUrl()}users/${props.user.username}/picture?${Date.now()}`\n : ''\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(authUserPictureUrl) !== '')\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n class: \"profile-user-img\",\n alt: _ctx.$t('user.USER_PICTURE'),\n src: _unref(authUserPictureUrl)\n }, null, 8, _hoisted_2))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _hoisted_5))\n ]))\n}\n}\n\n})","import script from \"./UserPicture.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPicture.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPicture.vue?vue&type=style&index=0&id=26bea286&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","\n\n\n","import { render } from \"./NoWorkouts.vue?vue&type=template&id=4b4d15fb&scoped=true\"\nconst script = {}\n\nimport \"./NoWorkouts.vue?vue&type=style&index=0&id=4b4d15fb&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4b4d15fb\"]])\n\nexport default __exports__","var map = {\n\t\"./de/de.ts\": 9923,\n\t\"./en/en.ts\": 8757,\n\t\"./fr/fr.ts\": 6625,\n\t\"./nb/nb.ts\": 8891\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 4612;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + ({\"24\":\"reset\",\"193\":\"statistics\",\"328\":\"admin\",\"401\":\"workouts\",\"845\":\"profile\",\"881\":\"password\"}[chunkId] || chunkId) + \".\" + {\"24\":\"f6540a23\",\"93\":\"02cf293c\",\"193\":\"faaccb1e\",\"243\":\"e551248f\",\"328\":\"c8949458\",\"401\":\"f1d6cc45\",\"431\":\"e5102e07\",\"633\":\"81a8ddc8\",\"845\":\"ff8ee2f9\",\"858\":\"3f2a93f2\",\"881\":\"43430dfc\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/css/\" + {\"24\":\"reset\",\"193\":\"statistics\",\"328\":\"admin\",\"401\":\"workouts\",\"845\":\"profile\"}[chunkId] + \".\" + {\"24\":\"e2527ec6\",\"193\":\"40e24e75\",\"328\":\"73df498d\",\"401\":\"41709693\",\"845\":\"203e78e2\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"fittrackee_client:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"24\":1,\"193\":1,\"328\":1,\"401\":1,\"845\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkfittrackee_client\"] = self[\"webpackChunkfittrackee_client\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(4970); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["authApi","axios","baseURL","getApiUrl","interceptors","request","use","config","controller","AbortController","signal","requestKey","removeRequestIfPending","pendingRequests","authToken","store","AUTH_USER_STORE","auth","headers","Authorization","error","Promise","reject","response","message","Map","generateRequestKey","method","url","params","data","JSON","stringify","join","has","get","abort","delete","disabledLanguages","loadLocaleMessages","locales","require","messages","keys","forEach","key","matched","match","length","includes","locale","default","createI18n","legacy","fallbackLocale","globalInjection","ctx","normalize","_normalize","interpolate","_interpolate","list","_list","plural","_plural","about","AboutTranslations","admin","AdministrationTranslations","api","ApiTranslations","buttons","ButtonsTranslations","common","CommonTranslations","dashboard","DashboardTranslations","ErrorTranslations","oauth2","OAuth2Translations","sports","SportsTranslations","statistics","StatisticsTranslations","user","UserTranslations","workouts","WorkoutsTranslations","register","ready","console","log","registered","cached","updatefound","updated","offline","_withScopeId","n","_pushScopeId","_popScopeId","_hoisted_1","id","_hoisted_2","class","_hoisted_3","_hoisted_4","_createElementVNode","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","href","target","rel","_defineComponent","__name","props","version","adminContact","setup","__props","toRefs","_ctx","_cache","_component_router_link","_resolveComponent","_openBlock","_createElementBlock","_createTextVNode","_toDisplayString","_unref","_createVNode","to","_withCtx","$t","_","_createCommentVNode","__exports__","emits","emit","useStore","authUser","computed","getters","isAuthenticated","language","ROOT_STORE","isMenuOpen","ref","openMenu","value","closeMenu","updateLanguage","option","dispatch","toString","logout","_component_Dropdown","onClick","$event","$router","push","_normalizeClass","capitalize","_createBlock","UserPicture","username","availableLanguages","options","selected","onSelected","ErrorImg","innerHTML","appConfig","appLoading","hideScrollBar","displayScrollButton","updateHideScrollBar","isScrolledToBottom","element","getBoundingClientRect","top","window","innerHeight","bottom","scroll","onscroll","document","querySelector","scrollToTop","scrollTo","behavior","setTimeout","initLanguage","navigatorLanguage","navigator","split","localeFromLanguage","e","onBeforeMount","onMounted","_component_Loader","_component_router_view","_Fragment","NavBar","onMenuInteraction","NoConfig","Footer","admin_contact","name","charLimit","disabled","type","Boolean","input","text","updateText","event","watch","_withDirectives","maxLenght","onInput","_vModelText","distance","unitFrom","useImperialUnits","digits","displayUnit","speed","strong","unitTo","units","defaultTarget","convertedDistance","convertDistance","parseFloat","toFixed","route","useRoute","isOpen","dropdownOptions","map","toggleDropdown","updateSelected","path","_renderSlot","$slots","_renderList","index","label","Array","isArray","subMessage","xmlns","x","y","viewBox","style","d","render","cx","cy","r","sportLabel","color","title","sportColors","inject","_normalizeStyle","fill","CyclingSport","CyclingTransport","CyclingVirtual","Hiking","MountainBiking","MountainBikingElectric","Rowing","Running","SkiingAlpine","SkiingCrossCountry","Snowshoes","Trail","Walking","script","strongMessage","errorMessages","onUnmounted","commit","_component_i18n_t","_component_ErrorMessage","_component_Card","content","keypath","customComponents","AlertMessage","Card","CustomTextArea","Distance","Dropdown","ErrorMessage","Loader","Modal","SportImage","clickOutsideDirective","mounted","binding","clickOutsideEvent","contains","body","addEventListener","unmounted","removeEventListener","undefined","Chart","BarElement","LineElement","PointElement","Legend","Title","Tooltip","Filler","BarController","CategoryScale","LineController","LinearScale","ChartDataLabels","app","createApp","App","provide","i18n","router","VueFullscreen","directive","component","mount","for","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","edition","useRouter","appData","reactive","max_users","max_single_file_size","max_zip_file_size","gpx_limit_import","updateForm","Object","getFileSizeInMB","onCancel","onSubmit","formData","assign","_withModifiers","min","step","icon","appStatistics","uploadDirSize","getReadableFileSize","uploads_dir_size","StatCard","users","size","suffix","AppStatsCards","is_registration_enabled","is_email_sending_enabled","t","useI18n","translatedSports","translateSports","SPORTS_STORE","updateSportStatus","isActive","_component_SportImage","sport","translatedLabel","is_active","danger","has_workouts","query","q","searchUsers","resetFilter","onKeyup","_withKeys","placeholder","trim","orderByList","defaultOrderBy","getQuery","USERS_STORE","pagination","loadUsers","queryParams","reloadUsers","updateUser","queryParam","queryValue","page","newQuery","UsersNameFilter","onFilterOnUsername","FilterSelects","sort","sortList","order_by","onUpdateSelect","email","formatDate","created_at","timezone","date_format","nb_workouts","Pagination","tabs","selectedTab","getPath","tab","toLocaleLowerCase","checked","UserHeader","UserProfileTabs","appLanguage","userLanguage","languageLabels","fistDayOfWeek","weekm","display_ascent","getDateFormat","imperial_units","loading","userForm","password","new_password","isSuccess","emailUpdate","formErrors","displayModal","invalidateForm","updateUserForm","updatePassword","updateNewPassword","updateProfile","payload","updateDisplayModal","deleteAccount","async","isSuccessValue","_component_Modal","onConfirmAction","onCancelAction","errors","required","onInvalid","PasswordInput","onUpdatePassword","onPasswordError","checkStrength","first_name","last_name","birth_date","location","bio","registrationDate","format","Date","updateBio","_component_CustomTextArea","onUpdateValue","fileSizeLimit","pictureFile","deleteUserPicture","updatePictureFile","files","updateUserPicture","picture","accept","timeZones","tzList","focusItemIndex","matchTimezone","toLowerCase","onMouseOver","onUpdateTimezone","onEnter","preventDefault","firstElementChild","openDropdown","onKeydown","ref_key","filter","tz","focus","onMouseover","autofocus","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","weekStart","imperialUnits","ascentData","dateFormatOptions","availableDateFormatOptions","toUTCString","updateTZ","updateAscentDisplay","updateImperialUnit","updateWeekM","lang","_vModelSelect","TimezoneDropdown","dateFormat","start","unit","status","oauth2_scopes","admin_oauth2_scopes","appForm","client_name","client_uri","client_description","redirect_uri","scopes","filtered_scopes","getScopes","redirect_uris","scope","OAUTH2_STORE","updateDescription","updateScopes","indexOf","splice","admin_scopes","description","onChange","client","loadApp","client_id","authorizeApp","response_type","state","code_challenge","code_challenge_method","afterCreation","revocationSuccessful","messageToDisplay","idCopied","secretCopied","clipboardSupport","loadClient","updateMessageToDisplay","forDelete","confirmAction","clientId","copyIdToClipboard","clipboard","writeText","copySecretToClipboard","client_secret","newValue","issued_at","website","clients","getClientsQuery","clientsQuery","getNumberQueryValue","defaultPage","loadClients","isEdition","defaultColor","sports_list","sportPayload","sport_id","stopped_speed_threshold","updateSportInEdition","is_active_for_user","resetSportPayload","isSportInEdition","sportId","updateColor","updateThreshold","updateIsActive","updateSport","resetSport","newIsLoading","src","alt","BikePic","About","workout","_component_Distance","workoutId","workout_date","formatDistance","addSuffix","with_gpx","StaticMap","moving","min_alt","max_alt","ascent","descent","per_page","initWorkoutsCount","loadWorkouts","WORKOUTS_STORE","moreWorkoutsExist","previous_workout","defaultOrder","loadMoreWorkouts","WorkoutCard","s","NoWorkouts","displayHARecord","sportColor","records","record","record_type","height","width","colors","datasets","angleOffset","radius","circumference","Math","PI","calculateStrokeDashOffset","percentage","returnCircleTransformValue","rotation","entries","stroke","transform","isHidden","togglePane","stopPropagation","_directive_click_outside","_resolveDirective","DonutChart","CalendarWorkout","getSportLabel","getSportColor","chartDatasets","getDonutDatasets","sportIdColors","displayedWorkoutCount","slice","CalendarWorkoutsChart","currentDay","endDate","startDate","weekStartingMonday","rows","getDays","day","days","i","addDays","isWeekEnd","filterWorkouts","isSameDay","getDateWithTZ","reverse","row","isSameMonth","today","isToday","CalendarWorkouts","localeOptions","calendarDates","getCalendarStartAndEnd","calendarWorkouts","getCalendarWorkouts","apiParams","from","end","displayNextMonth","addMonths","displayPreviousMonth","subMonths","CalendarHeader","onDisplayNextMonth","onDisplayPreviousMonth","CalendarDays","CalendarCells","date","chartParams","duration","startOfMonth","endOfMonth","selectedSportIds","StatChart","formatRecord","distanceUnitFrom","distanceUnitTo","ascentUnitFrom","ascentUnitTo","Error","workout_id","sortRecords","a","b","recordALabel","recordBLabel","getRecordsBySports","reduce","sportList","find","sportTranslatedLabel","getTranslatedRecords","translatedRecords","recordsBySport","RecordsCard","userTotalDuration","total_duration","totalDuration","get_duration","totalDistance","total_distance","totalAscent","total_ascent","nb_sports","isSelected","updateDisplayColumn","UserStatsCards","UserMonthStats","UserRecords","UserCalendar","Timeline","NotFound","action","LoginOrRegisterForm","getTabFromPath","regex","tag","replace","toUpperCase","routes","Dashboard","LoginOrRegister","children","Profile","UserInfos","UserPreferences","UserSportPreferences","UserApps","UserAppsList","UserApp","AddUserApp","AuthorizeUserApp","ProfileEdition","UserInfosEdition","UserAccountEdition","UserPictureEdition","UserPreferencesEdition","displaySegment","AdminMenu","AdminApplication","AdminSports","fromAdmin","AdminUsers","AboutView","NotFoundView","createRouter","history","createWebHistory","process","pathsWithoutAuthentication","pathsWithoutChecks","beforeEach","next","then","fullPath","catch","AuthUserActions","AuthUserGetters","AuthUserMutations","OAuth2Actions","OAuth2Getters","OAuth2Mutations","RootActions","RootGetters","RootMutations","SportsActions","SportsGetters","SportsMutation","StatisticsActions","StatisticsGetters","StatisticsMutations","UsersActions","UsersGetters","UsersMutations","ACTIONS","GETTERS","MUTATIONS","STATS_STORE","WorkoutsActions","WorkoutsGetters","WorkoutsMutations","deleteUserAccount","context","res","handleError","actions","finally","resetPassword","reset_password","activate","new_email","removeAuthUserData","localStorage","removeItem","token","auth_token","setItem","refreshUser","actionType","redirectUrl","form","FormData","append","authUserProfile","isRegistrationSuccess","mutations","authUserState","get_client","set","redirect_url","oAuth2State","setAttribute","application","root","enUS","sportsState","filterType","statisticsState","updatedUser","usersState","getWorkouts","segmentUrl","segmentId","segments","chart_data","gpx","file","notes","calendar_workouts","timeline_workouts","user_workouts","workoutData","concat","chartData","workoutsState","modules","authUserModule","oAuthModule","sportsModule","statsModule","usersModule","workoutsModule","createStore","VuexStore","defaultPerPage","defaultValue","getStringQueryValue","availableValues","locationQuery","queryOptions","defaultSort","order","workoutsPayloadKeys","getRange","stop","rangePagination","pages","currentPage","getStartDate","startOfWeek","weekStartsOn","startOfYear","incrementDate","addYears","dateInUTC","utcToZonedTime","monthStart","monthEnd","endOfWeek","formatWorkoutDate","dateTime","timeFormat","workout_time","availableDateFormats","dateStringFormats","de","en","fr","dateString","withTime","inputDate","l","df","suffixes","fileSize","asText","floor","pow","msg","m","availableLocales","sortSports","sportATranslatedLabel","sportBTranslatedLabel","activeStatus","sportsToInclude","dateFormats","week","chart","month","year","datasetKeys","getDateKeys","getStatisticsChartDataset","isLineChart","dataset","backgroundColor","borderColor","spanGaps","getDatasets","displayedSports","average_speed","total_descent","convertStatsValue","datasetKey","convertStatsDistance","formatStats","displayedSportsId","apiStats","userDateFormat","dayKeys","labels","sportsId","displayedSport","getStatsDateParams","timeFrame","subYears","endOfYear","updateChartParams","backward","subWeeks","addWeeks","ft","system","multiplier","mi","km","factors","metric","imperial","borderWidth","yAxisID","elevation","distance_labels","duration_labels","coordinates","latitude","longitude","total","count","perPage","onSelectUpdate","nb","buttonText","timer","errorDisplayed","displayError","clearTimeout","cursor","has_prev","navigate","has_next","active","setZxcvbnOptions","zxcvbnCommonPackage","zxcvbnEnPackage","zxcvbnFrPackage","zxcvbnDePackage","zxcvbnLangPackages","zxcvbnPackage","graphs","adjacencyGraphs","dictionary","zxcvbnOptions","getPasswordStrength","strength","passwordScore","passwordStrength","passwordSuggestions","backgroundSize","calculatePasswordStrength","zxcvbnResult","zxcvbn","score","feedback","suggestions","newLanguageValue","newPassword","max","suggestion","showPassword","passwordValue","togglePassword","invalidPassword","minlength","_vModelDynamic","PasswordStrength","displayHover","imageUrl","backgroundImage","$props","$setup","$data","$options","_component_Chart","hideChartIfNoData","emptyStats","displayedData","args","updateDisplayData","fullStats","displayedSportIds","_component_BarChart","_mergeProps","barChartProps","formatDuration","totalSeconds","formatWithUnits","String","hours","padStart","minutes","seconds","formatTooltipValue","defineComponent","components","BarChart","getNumber","isNaN","getSum","getUnit","parse","responsive","maintainAspectRatio","animation","layout","padding","scales","stacked","grid","drawOnChartArea","ticks","maxTicksLimit","callback","afterFit","scale","plugins","datalabels","anchor","align","chartArea","display","formatter","dataIndex","datasetIndex","legend","tooltip","interaction","intersect","mode","position","tooltipItem","formattedValue","callbacks","parsed","footer","tooltipItems","sum","useBarChart","formattedStats","getStatistics","getApiParams","time","newParams","birthDate","displayUserEmailForm","newUserEmail","currentAction","resetUserPassword","confirmUserAccount","displayEmailForm","resetErrorsAndSuccess","email_to_confirm","hideEmailForm","updateUserEmail","newIsSuccess","_component_AlertMessage","go","getButtonText","registration_disabled","sendingEmailDisabled","resetFormData","pattern","maxlength","authUserPictureUrl","now","webpackContext","req","webpackContextResolve","__webpack_require__","o","code","resolve","module","exports","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","call","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","getter","__esModule","leafPrototypes","getProto","getPrototypeOf","obj","__proto__","this","ns","create","def","current","getOwnPropertyNames","definition","defineProperty","enumerable","f","chunkId","all","promises","u","miniCssF","g","globalThis","Function","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","done","needAttach","scripts","getElementsByTagName","getAttribute","createElement","charset","timeout","nc","onScriptComplete","prev","onerror","onload","doneFns","parentNode","removeChild","bind","head","appendChild","Symbol","toStringTag","p","createStylesheet","fullhref","linkTag","onLinkComplete","errorType","realHref","err","findStylesheet","existingLinkTags","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","promise","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/app.1f6c95cb.js","mappings":"oHAOA,MAAMA,EAAUC,IAAAA,OAAa,CAC3BC,SAASC,EAAAA,EAAAA,OAGXH,EAAQI,aAAaC,QAAQC,KAC1BC,IACC,MAAMC,EAAa,IAAIC,gBACvBF,EAAOG,OAASF,EAAWE,OAC3B,MAAMC,GAAaC,EAAAA,EAAAA,GAAuBL,GAC1CM,EAAAA,EAAAA,IAAoBF,EAAYH,GAEhC,MAAMM,EAAYC,EAAAA,EAAAA,QAAcC,EAAAA,GAAAA,QAAAA,YAChC,GAAIF,EAAW,CACb,MAAMG,EAAO,UAAUH,IACnBP,EAAOW,SAAWX,EAAOW,QAAQC,gBAAkBF,IACrDV,EAAOW,QAAQC,cAAgB,UAAUL,I,CAG7C,OAAOP,CAAM,IAEda,GAAUC,QAAQC,OAAOF,KAG5BpB,EAAQI,aAAamB,SAASjB,KAC3BiB,KACCX,EAAAA,EAAAA,GAAuBW,EAAShB,QACzBgB,KAERH,IACuB,aAAlBA,EAAMI,UACRZ,EAAAA,EAAAA,GAAuBQ,EAAMG,SAAShB,QAEjCc,QAAQC,OAAOF,MAI1B,Q,2FCzCO,MAAMP,EAAkB,IAAIY,IAE7BC,EAAsBnB,IAC1B,MAAM,OAAEoB,EAAM,IAAEC,EAAG,OAAEC,EAAS,CAAC,EAAC,KAAEC,EAAO,CAAC,GAAMvB,EAChD,MAAO,CAACoB,EAAQC,EAAKG,KAAKC,UAAUH,GAASE,KAAKC,UAAUF,IAAOG,KAAK,GAAG,EAGhErB,EAA0BL,IACrC,MAAMI,EAAae,EAAmBnB,GACtC,GAAIM,EAAgBqB,IAAIvB,GAAa,CACnC,MAAMH,EAAaK,EAAgBsB,IAAIxB,IAAe,CAAC,EACvDH,GAAY4B,QACZvB,EAAgBwB,OAAO1B,E,CAEzB,OAAOA,CAAU,C,kDCRnB,MAAM2B,EAAoB,CAAC,MAE3B,SAASC,IACP,MAAMC,EAAUC,EAAAA,MACVC,EAA2D,CAAC,EAYlE,OAXAF,EAAQG,OAAOC,SAASC,IACtB,MAAMC,EAAUD,EAAIE,MAAM,uBAC1B,GACED,GACAA,EAAQE,OAAS,IAChBV,EAAkBW,SAASH,EAAQ,IACpC,CACA,MAAMI,EAASJ,EAAQ,GACvBJ,EAASQ,GAAUV,EAAQK,GAAKM,O,KAG7BT,CACT,CAEA,QAAeU,EAAAA,EAAAA,GAAW,CACxBC,QAAQ,EACRH,OAAQ,KACRI,eAAgB,KAChBC,iBAAiB,EACjBb,SAAUH,K,iFChCZ,OACE,cAAkBiB,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iCAAgC,EACpH,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qFAAoF,EACjL,mBAAuBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,SAAUE,EAAaE,EAAM,IAAK,YAAW,EAC9K,YAAgBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,GCJhG,GACE,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EAC9G,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACrF,iCAAqCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sEAAqE,EAC5K,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACtG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC9F,WAAc,CACZ,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qCAAoC,EACxH,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,EACnH,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qDAAoD,EACzI,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kCAAiC,EAC9H,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EAC9G,6BAAiCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gDAA+C,EAClJ,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EACtG,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uCAAsC,GAExI,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACtG,8BAAkCF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,4BAA6BE,EAAaE,EAAM,IAAK,oGAAmG,EACpS,4BAAgCN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,4BAA6BE,EAAaE,EAAM,IAAK,2BAA0B,EACzN,cAAkBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACtG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EAClG,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mCAAkC,EAC/H,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2CAA0C,EACtI,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAC9F,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qCAAoC,EACpI,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0CAAyC,EACrI,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wCAAuC,EAClI,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EAClH,OAAU,CACR,MAAS,CACP,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACrF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EAC1G,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACnF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,GAEtF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,GAE1G,+BAAmCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yGAAwG,EAC7M,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAC9G,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACpF,6BAAiCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0CAAyC,EAC5I,MAAS,CACP,MAAS,CACP,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kCAAiC,EACxH,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iCAAgC,GAE5H,QAAW,CACT,SAAY,CACV,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAC1F,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EACvG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EAChG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC5F,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,MCtD/G,GACE,MAAS,CACP,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wEAAuE,EACrJ,sCAAwCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sDAAqD,EAC/J,8BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oCAAmC,EACrI,gCAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sCAAqC,EACzI,iCAAmCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0CAAyC,EAC9I,oCAAsCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+CAA8C,EACtJ,uDAAyDF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wEAAuE,EAClM,kCAAoCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8CAA6C,EACnJ,6BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uCAAsC,EACvI,6CAA+CF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qCAAoC,EACrJ,sBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EACpH,kBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6CAA4C,EAClI,qCAAuCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4CAA2C,EACpJ,4CAA8CF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4CAA2C,EAC3J,gBAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACtG,gDAAkDF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oEAAmE,EACvL,eAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0BAAyB,EAC5G,mBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EACjH,4DAA8DF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qEAAoE,EACpM,6BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iDAAgD,EACjJ,wCAA0CF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yDAAwD,EACpK,uBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,EACvH,yCAA2CF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4DAA2D,EACxK,0BAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,EAC3H,sBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+BAA8B,EACxH,iDAAmDF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2FAA0F,EAC/M,kEAAoEF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+FAA8F,EACpO,8BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+BAA8B,GAElI,WAAc,CACZ,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EAC/F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,ICjCzF,GACE,8BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qCAAoC,EACtI,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC/F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACpF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACzF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACpG,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EAC7G,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC7F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EACxF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC1F,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACvF,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAChF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC9F,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC3F,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACzF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,GChBjF,GACE,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACnF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EACjG,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACxF,IAAQF,IAAS,MAAQC,UAAWC,EAAYK,OAAQC,GAAYR,EAAI,OAAOQ,EAAQ,CAACN,EAAW,CAAC,QAASA,EAAW,CAAC,UAAS,EAClI,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC5F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EACzG,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACzF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EACxF,QAAW,CACT,SAAY,CACV,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,GAE9F,MAAS,CACP,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACxF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EACxF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,GAE1F,SAAY,CACV,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,IAG5F,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,GCvB1F,GACE,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC5F,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,GCFlG,GACE,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wEAAuE,EACrJ,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iJAAgJ,EAChO,UAAa,CACX,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EAClG,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,GAE1G,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,GCP5G,GACE,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yCAAwC,EAC5H,IAAO,CACL,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACrF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAChG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0BAAyB,EAC3G,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAC7F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EAC5F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EACxG,MAAS,CACP,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EAC9F,4BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0DAAyD,EACzJ,2BAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uDAAsD,EACrJ,yBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wDAAuD,EACpJ,0BAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2DAA0D,EACxJ,4BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2DAA0D,EAC1J,6BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8DAA6D,EAC9J,gCAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0DAAyD,GAE/J,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,GAE7F,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sHAAqH,EACpN,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kDAAiD,EACjJ,sBAA0BF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,iBAAkBE,EAAaE,EAAM,IAAK,cAAa,EAC3L,UAAcN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EACrG,cAAkBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAACE,EAAaE,EAAM,IAAK,6CAA4C,EAChM,kBAAsBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,EACrH,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACrG,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EACrG,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mCAAkC,EAC/G,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAClG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EAC1G,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EAClH,+BAAmCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6DAA4D,EACjK,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+DAA8D,GClCrJ,GACE,kBAAmB,CACjB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,GAElG,sBAAuB,CACrB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,GAEpG,oBAAqB,CACnB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,GAErG,OAAU,CACR,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,GAExF,kBAAmB,CACjB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,GAE9F,6BAA8B,CAC5B,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,GAE3G,OAAU,CACR,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,GAEvF,QAAW,CACT,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,GAEvF,kBAAmB,CACjB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,GAElG,yBAA0B,CACxB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,GAErG,UAAa,CACX,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,GAE7F,MAAS,CACP,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,GAEtF,QAAW,CACT,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,ICtCxF,GACE,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC7F,YAAe,CACb,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACnF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,ICLtF,GACE,kCAAsCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uCAAsC,EAC9I,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gGAA+F,EAC/L,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,EACxH,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4HAA2H,EAC1N,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EAC5G,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACrF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wCAAuC,EACxH,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EAC7G,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,EACtH,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EACzG,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2DAA0D,EAC9I,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACzF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACxF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACxF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACxF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACpG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0BAAyB,EAC9G,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2CAA0C,EAC9H,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAC/G,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EAC7G,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wJAAuJ,EACtP,kBAAqB,CACnB,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACrF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACvF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACjF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACrF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EAC7F,YAAe,CACb,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oDAAqD,IAAK,WAAU,EAC/I,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4DAA2D,EAC9I,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qDAAoD,EACvI,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qDAAoD,EACzI,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+EAA8E,EAC1J,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6CAA4C,EAC9H,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qEAAoE,EAC1J,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yCAAwC,EACxH,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oDAAmD,EAClI,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4EAA2E,EACvK,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oDAAmD,EACrI,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wEAAuE,EACtJ,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kGAAiG,EAC9K,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+EAA8E,IAG9J,iBAAqBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,4CAA6CE,EAAaE,EAAM,IAAK,wBAAuB,EAC3N,QAAW,CACT,gBAAoBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EACrG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+CAA8C,EAChI,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC1G,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EACvF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAChG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EACxG,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC/F,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EAC9G,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uCAAsC,EACpI,qBAAyBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,SAAUE,EAAaE,EAAM,IAAK,kFAAiF,EACtP,WAAeN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC3F,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EAC/G,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACzF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC3F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACrF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACrF,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EACpG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EAC1G,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACtG,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAChH,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACvG,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC5G,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kCAAiC,EACtH,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,KAAQ,CACN,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACtF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EACzF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACrF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EAClG,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACvF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,GAE5F,MAAS,CACP,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EAChH,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACxF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2CAA0C,GAE1I,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iHAAgH,EAC9M,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0CAAyC,EACvI,mCAAuCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yFAAwF,EACjM,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8CAA6C,EACrI,MAAS,CACP,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,EACxG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,EAC5G,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,GAE3G,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,GAE5F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC9F,4BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6CAA4C,EAC9I,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sDAAqD,EAC7I,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EAC7G,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACxG,8BAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+BAA8B,EAClI,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAClG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC5F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uGAAsG,GC7G5L,GACE,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EACxG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACzF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACxF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,EAC7G,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gCAA+B,EACnH,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAC5G,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACnF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACxF,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EACrG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC5F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACvF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EACzG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACvF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACjF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACjF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC5F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACrG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACzG,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAC9G,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EACnG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EACvG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC9F,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EACvG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EACnG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACtG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACvG,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mCAAkC,EACzH,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EAC/G,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EACxG,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAC3F,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EAC9G,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0BAAyB,EAC/G,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACnG,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EACpH,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4BAA2B,EACrH,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EACzG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACrG,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAC1F,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EAC5G,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAC7G,OAAWF,IAAS,MAAQC,UAAWC,EAAYK,OAAQC,GAAYR,EAAI,OAAOQ,EAAQ,CAACN,EAAW,CAAC,iBAAkBA,EAAW,CAAC,oBAAmB,EACxJ,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,EAC7G,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EACtG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACnG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EAChG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EACvG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EAC7G,QAAYF,IAAS,MAAQC,UAAWC,EAAYK,OAAQC,GAAYR,EAAI,OAAOQ,EAAQ,CAACN,EAAW,CAAC,YAAaA,EAAW,CAAC,cAAa,EAC9I,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EAC9F,MAAUF,IAAS,MAAQC,UAAWC,EAAYK,OAAQC,GAAYR,EAAI,OAAOQ,EAAQ,CAACN,EAAW,CAAC,aAAcA,EAAW,CAAC,gBAAe,EAC/I,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACxG,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+BAA8B,EAC5H,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAC/E,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EACnG,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+BAA8B,EACzH,QAAW,CACT,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAClG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC/F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,gBAAmB,CACjB,EAAMF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EAC5E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC9E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,EAAMF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EAC5E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC9E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,EAAMF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EAC5E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC9E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,EAAMF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EAC5E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC9E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,GAElF,SAAY,CACV,YAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC7F,cAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAChG,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EAClF,oBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EAClH,sBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4BAA2B,EACrH,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACnF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAC1F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACpF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,IAGtF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EAChG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACpG,QAAYF,IAAS,MAAQC,UAAWC,EAAYK,OAAQC,GAAYR,EAAI,OAAOQ,EAAQ,CAACN,EAAW,CAAC,aAAcA,EAAW,CAAC,eAAc,EAChJ,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACpG,8BAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6DAA4D,EAChK,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC/F,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oCAAmC,GCvFnI,GACEO,MAAOC,EACPC,MAAOC,EACPC,IAAKC,EACLC,QAASC,EACTC,OAAQC,EACRC,UAAWC,EACXxD,MAAOyD,EACPC,OAAQC,EACRC,OAAQC,EACRC,WAAYC,EACZC,KAAMC,EACNC,SAAUC,E,iFCzBZ,OACE,cAAkB/B,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,EAChH,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0EAAyE,EACtK,mBAAuBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,SAAUE,EAAaE,EAAM,IAAK,aAAY,EAC/K,YAAgBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,GCJlG,GACE,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAC/G,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,iCAAqCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iDAAgD,EACvJ,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACtG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAChG,WAAc,CACZ,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mCAAkC,EACtH,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+BAA8B,EACpH,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wCAAuC,EAC5H,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,EACzH,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAC1G,6BAAiCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uCAAsC,EACzI,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,EACxG,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oCAAmC,GAErI,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EACpG,8BAAkCF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,mCAAoCE,EAAaE,EAAM,IAAK,8DAA6D,EACrQ,4BAAgCN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,kCAAmCE,EAAaE,EAAM,IAAK,cAAa,EAClN,cAAkBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EACpG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAChG,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,EAC1H,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0BAAyB,EACrH,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC5F,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gCAA+B,EAC/H,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uCAAsC,EAClI,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sCAAqC,EAChI,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EAC3G,OAAU,CACR,MAAS,CACP,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACpG,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,GAEtF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,GAEtG,+BAAmCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8FAA6F,EAClM,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EACvG,KAASF,IAAS,MAAQC,UAAWC,EAAYK,OAAQC,GAAYR,EAAI,OAAOQ,EAAQ,CAACN,EAAW,CAAC,SAAUA,EAAW,CAAC,WAAU,EACrI,6BAAiCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uCAAsC,EACzI,MAAS,CACP,MAAS,CACP,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAC1G,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,GAElH,QAAW,CACT,SAAY,CACV,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC3F,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACrG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACjG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,MCtD7G,GACE,MAAS,CACP,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yDAAwD,EACtI,gFAAkFF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kFAAiF,EACrO,sCAAwCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wCAAuC,EACjJ,8BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gCAA+B,EACjI,gCAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kCAAiC,EACrI,iCAAmCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mCAAkC,EACvI,oCAAsCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qCAAoC,EAC5I,uDAAyDF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yDAAwD,EACnL,kCAAoCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oCAAmC,EACzI,6BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+BAA8B,EAC/H,6CAA+CF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+CAA8C,EAC/J,sBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EACjH,kBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,EACnH,qCAAuCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uCAAsC,EAC/I,4CAA8CF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uCAAsC,EACtJ,gBAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACrG,gDAAkDF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qDAAoD,EACxK,eAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACvG,mBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC3G,uDAAyDF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yDAAwD,EACnL,4DAA8DF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6DAA4D,EAC5L,6BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+BAA8B,EAC/H,wCAA0CF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0CAAyC,EACrJ,uBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EACnH,yCAA2CF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2CAA0C,EACvJ,0BAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4BAA2B,EACzH,sBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EACjH,iDAAmDF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4DAA2D,EAChL,kEAAoEF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oEAAmE,EACzM,8BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gCAA+B,GAEnI,WAAc,CACZ,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,ICnCtF,GACE,8BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,EAC9H,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC5F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EACnG,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC5G,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACxF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACrF,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC9E,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,GChBlF,GACE,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAClG,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACxF,IAAQF,IAAS,MAAQC,UAAWC,EAAYK,OAAQC,GAAYR,EAAI,OAAOQ,EAAQ,CAACN,EAAW,CAAC,QAASA,EAAW,CAAC,UAAS,EAClI,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC5F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EACpG,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,QAAW,CACT,SAAY,CACV,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,GAEzF,MAAS,CACP,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACnF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACtF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,GAE1F,SAAY,CACV,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,IAG3F,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,GCvBtF,GACE,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC5F,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,GCFhG,GACE,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yDAAwD,EACtI,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oHAAmH,EACnM,UAAa,CACX,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EAC5F,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,GAEpG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,GCP/G,GACE,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gCAA+B,EACnH,IAAO,CACL,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EACrF,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC7F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EAC5G,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAC9F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAClG,MAAS,CACP,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,gCAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qDAAoD,EACxJ,2BAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sDAAqD,EACpJ,4BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uDAAsD,EACtJ,yBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wDAAuD,EACpJ,0BAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wDAAuD,EACrJ,4BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0DAAyD,EACzJ,6BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2DAA0D,GAE7J,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,GAE9F,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+FAA8F,EAC7L,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6CAA4C,EAC5I,sBAA0BF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,mBAAoBE,EAAaE,EAAM,IAAK,mBAAkB,EAClM,UAAcN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EACtG,cAAkBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,aAAcE,EAAaE,EAAM,IAAK,yBAAwB,EAC1L,kBAAsBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EAChH,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EACtG,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EACnG,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0BAAyB,EACtG,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EAChG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACtG,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC5G,+BAAmCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+CAA8C,EACnJ,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qDAAoD,GClC3I,GACE,kBAAmB,CACjB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,GAEhG,sBAAuB,CACrB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,GAEpG,oBAAqB,CACnB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,GAElG,OAAU,CACR,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,GAEvF,kBAAmB,CACjB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,GAEhG,6BAA8B,CAC5B,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,GAE3G,OAAU,CACR,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,GAEvF,QAAW,CACT,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,GAExF,kBAAmB,CACjB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,GAEhG,yBAA0B,CACxB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0BAAyB,GAEvG,UAAa,CACX,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,GAE1F,MAAS,CACP,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,GAEtF,QAAW,CACT,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,ICtC1F,GACE,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC9F,YAAe,CACb,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,ICLtF,GACE,kCAAsCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iCAAgC,EACxI,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qFAAoF,EACpL,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4BAA2B,EACtH,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iGAAgG,EAC/L,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAC1G,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gCAA+B,EAChH,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACxG,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EAC9G,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EACpG,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uDAAsD,EAC1I,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAClG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACvG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mCAAkC,EACtH,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAC5G,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACtG,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sHAAqH,EACpN,kBAAqB,CACnB,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACxF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAChG,YAAe,CACb,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+CAAgD,IAAK,WAAU,EAC1I,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6CAA4C,EAC/H,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yCAAwC,EAC3H,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0CAAyC,EAC9H,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uDAAsD,EAClI,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EACxG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6CAA4C,EAClI,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qCAAoC,EACpH,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wCAAuC,EACtH,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4EAA2E,EACvK,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wCAAuC,EACzH,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iDAAgD,EAC/H,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yFAAwF,EACrK,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6DAA4D,IAG5I,iBAAqBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,0CAA2CE,EAAaE,EAAM,IAAK,eAAc,EAChN,QAAW,CACT,gBAAoBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACxG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wCAAuC,EACzH,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACxG,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC9F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EACxG,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC1F,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAC1G,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EACxH,qBAAyBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,UAAWE,EAAaE,EAAM,IAAK,oEAAmE,EACzO,WAAeN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC9F,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC5G,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC5F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACxF,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACxG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACtG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACtG,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAChH,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACxG,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC5G,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,EAClH,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,KAAQ,CACN,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACxF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACxF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAChG,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACxF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,GAExF,MAAS,CACP,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC5G,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACzF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,GAE1H,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0GAAyG,EACvM,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+CAA8C,EAC5I,mCAAuCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6EAA4E,EACrL,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+CAA8C,EACtI,MAAS,CACP,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EACjG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4BAA2B,EAC1G,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,GAEvG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,GAE5F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,4BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qCAAoC,EACtI,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oCAAmC,EAC3H,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAC3G,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EACpG,8BAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kCAAiC,EACrI,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAClG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uGAAwG,GC7G9L,GACE,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EAClG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC7F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EACpG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACxG,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACxF,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACxG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACtG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC5F,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC3F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAClG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACxG,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EAC7G,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EACnG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC5F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC7F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EACnG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACrG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAClG,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uCAAsC,EAC7H,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAC1G,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACnG,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACxG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACxG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAChH,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAChH,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAC/F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EACjG,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAC1G,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAC1G,OAAWF,IAAS,MAAQC,UAAWC,EAAYK,OAAQC,GAAYR,EAAI,OAAOQ,EAAQ,CAACN,EAAW,CAAC,WAAYA,EAAW,CAAC,aAAY,EAC3I,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC7F,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACpG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACjG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACnG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC7F,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EAC7G,QAAYF,IAAS,MAAQC,UAAWC,EAAYK,OAAQC,GAAYR,EAAI,OAAOQ,EAAQ,CAACN,EAAW,CAAC,YAAaA,EAAW,CAAC,cAAa,EAC9I,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,MAAUF,IAAS,MAAQC,UAAWC,EAAYK,OAAQC,GAAYR,EAAI,OAAOQ,EAAQ,CAACN,EAAW,CAAC,UAAWA,EAAW,CAAC,YAAW,EACxI,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAC1G,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gCAA+B,EAC7H,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC9E,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACtG,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EACzG,QAAW,CACT,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAChG,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,gBAAmB,CACjB,EAAMF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EAC5E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC9E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,EAAMF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EAC5E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC9E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,EAAMF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EAC5E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC9E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,EAAMF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EAC5E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC9E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,GAElF,SAAY,CACV,YAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC5F,cAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAChG,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,oBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC5G,sBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAChH,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,IAGtF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EAChG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACtG,QAAYF,IAAS,MAAQC,UAAWC,EAAYK,OAAQC,GAAYR,EAAI,OAAOQ,EAAQ,CAACN,EAAW,CAAC,YAAaA,EAAW,CAAC,cAAa,EAC9I,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAClG,8BAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iDAAgD,EACpJ,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC9F,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sCAAqC,GCvFrI,GACEO,MAAOC,EACPC,MAAOC,EACPC,IAAKC,EACLC,QAASC,EACTC,OAAQC,EACRC,UAAWC,EACXxD,MAAOyD,EACPC,OAAQC,EACRC,OAAQC,EACRC,WAAYC,EACZC,KAAMC,EACNC,SAAUC,E,iFCzBZ,OACE,cAAkB/B,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,EACjH,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6FAA4F,EACzL,mBAAuBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,gBAAiBE,EAAaE,EAAM,IAAK,UAAS,EACnL,YAAgBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,GCJvG,GACE,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAChH,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACrF,iCAAqCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oFAAmF,EAC1L,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACtG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAChG,WAAc,CACZ,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2CAA0C,EAC9H,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yCAAwC,EAC9H,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yCAAwC,EAC7H,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iDAAgD,EAC7I,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EACvG,6BAAiCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qCAAoC,EACvI,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kCAAiC,EAC7G,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yCAAwC,GAE1I,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACxG,8BAAkCF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,iEAAkEE,EAAaE,EAAM,IAAK,gDAA+C,EACrR,4BAAgCN,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,2EAA4EE,EAAaE,EAAM,IAAK,MAAK,EACnP,cAAkBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0BAAyB,EAC7G,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EAC5G,uBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mCAAkC,EAC/H,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kCAAiC,EAC7H,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0BAAyB,EACzG,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uCAAsC,EACtI,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mDAAkD,EAC9I,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gDAA+C,EAC1I,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EACpH,OAAU,CACR,MAAS,CACP,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACrF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EAC1G,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,GAEtF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,GAExG,+BAAmCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mGAAkG,EACvM,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EAC1G,KAASF,IAAS,MAAQC,UAAWC,EAAYK,OAAQC,GAAYR,EAAI,OAAOQ,EAAQ,CAACN,EAAW,CAAC,gBAAiBA,EAAW,CAAC,kBAAiB,EACnJ,6BAAiCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sCAAqC,EACxI,MAAS,CACP,MAAS,CACP,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,EACpH,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,GAEzH,QAAW,CACT,SAAY,CACV,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EACpG,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EACtG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACnG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACnG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,MCtDjH,GACE,MAAS,CACP,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6DAA4D,EAC1I,gFAAkFF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iGAAgG,EACpP,sCAAwCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iEAAgE,EAC1K,8BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6CAA4C,EAC9I,gCAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wCAAuC,EAC3I,iCAAmCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uDAAsD,EAC3J,oCAAsCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qDAAoD,EAC5J,uDAAyDF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6DAA4D,EACvL,kCAAoCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8CAA6C,EACnJ,6BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uCAAsC,EACvI,6CAA+CF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8DAA6D,EAC9K,sBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EACpH,kBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iCAAgC,EACtH,qCAAuCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2DAA0D,EACnK,4CAA8CF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kDAAiD,EACjK,eAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0BAAyB,EAC5G,mBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+BAA8B,EACrH,gBAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACrG,gDAAkDF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gFAA+E,EACnM,4DAA8DF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4DAA2D,EAC3L,6BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kDAAiD,EAClJ,uBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0BAAyB,EACpH,yCAA2CF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iDAAgD,EAC7J,wCAA0CF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kDAAiD,EAC7J,0BAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EACrH,uDAAyDF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yDAAwD,EACnL,sBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+BAA8B,EACxH,iDAAmDF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kFAAiF,EACtM,kEAAoEF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uGAAsG,EAC5O,8BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gDAA+C,GAEnJ,WAAc,CACZ,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC3F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,ICnCzF,GACE,8BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uCAAsC,EACxI,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EAC5F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACpF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACvF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iBAAgB,EACnG,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EAC/G,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC3F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACtF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACvF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACvF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC3F,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAC/E,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC5F,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACtF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACvF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,GChBlF,GACE,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACvF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAClG,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACxF,IAAQF,IAAS,MAAQC,UAAWC,EAAYK,OAAQC,GAAYR,EAAI,OAAOQ,EAAQ,CAACN,EAAW,CAAC,SAAUA,EAAW,CAAC,WAAU,EACpI,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EAC1F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EACzG,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACjF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACrF,QAAW,CACT,SAAY,CACV,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,GAE3F,MAAS,CACP,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAClF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACtF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,GAE1F,SAAY,CACV,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,IAG3F,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,GCvBtF,GACE,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EAClG,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,GCFhG,GACE,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6DAA4D,EAC1I,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wHAAuH,EACvM,UAAa,CACX,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAC9F,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,GAErG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,GCPpH,GACE,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2CAA0C,EAC9H,IAAO,CACL,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAC9F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC7F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gCAA+B,EACjH,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EAClG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EACxG,MAAS,CACP,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,gCAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qEAAoE,EACxK,2BAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6DAA4D,EAC3J,4BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8DAA6D,EAC7J,yBAA2BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8DAA6D,EAC1J,0BAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+DAA8D,EAC5J,4BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iEAAgE,EAChK,6BAA+BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kEAAiE,GAEpK,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,GAEnG,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uGAAsG,EACrM,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0DAAyD,EACzJ,sBAA0BF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,iBAAkBE,EAAaE,EAAM,IAAK,iCAAgC,EAC9M,UAAcN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EACtG,cAAkBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,aAAcE,EAAaE,EAAM,IAAK,8BAA6B,EAC/L,kBAAsBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gCAA+B,EACvH,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EAC3G,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EACxG,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,EACzG,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EACpG,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EAC1G,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4BAA2B,EACnH,+BAAmCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uDAAsD,EAC3J,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wDAAuD,GClC9I,GACE,kBAAmB,CACjB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,GAE7F,sBAAuB,CACrB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,GAEjG,oBAAqB,CACnB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,GAE/F,OAAU,CACR,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,GAE1F,kBAAmB,CACjB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,GAEpF,6BAA8B,CAC5B,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,GAEjG,OAAU,CACR,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,GAEvF,QAAW,CACT,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,GAEvF,kBAAmB,CACjB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,GAE5F,yBAA0B,CACxB,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,GAEhG,UAAa,CACX,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,GAE1F,MAAS,CACP,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,GAEtF,QAAW,CACT,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,ICtCzF,GACE,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAChG,YAAe,CACb,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACrF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACnF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,ICLvF,GACE,kCAAsCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2CAA0C,EAClJ,0BAA8BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8GAA6G,EAC7M,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,EACxH,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wGAAuG,EACtM,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAC7G,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACvF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8CAA6C,EAC9H,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,EACjH,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oCAAmC,EAC5H,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2BAA0B,EAC9G,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oFAAmF,EACvK,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACxF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACzF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC3F,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EAC9F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EAC1G,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,EACjH,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC9F,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EAC5G,mBAAuBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EACjH,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oCAAmC,EACxH,yBAA6BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yJAAwJ,EACvP,kBAAqB,CACnB,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACpF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACxF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACnF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACrF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,EACzG,YAAe,CACb,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yDAA0D,IAAK,YAAW,EACrJ,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wDAAuD,EAC1I,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2DAA0D,EAC7I,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sDAAqD,EAC1I,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8FAA6F,EACzK,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gCAA+B,EACjH,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wEAAuE,EAC7J,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iDAAgD,EAChI,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8CAA6C,EAC5H,sBAA0BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0FAAyF,EACrL,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oCAAmC,EACrH,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+DAA8D,EAC7I,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8GAA6G,EAC1L,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wEAAuE,IAGvJ,iBAAqBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,gDAAiDE,EAAaE,EAAM,IAAK,yBAAwB,EAChO,QAAW,CACT,gBAAoBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EAC9G,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0DAAyD,EAC3I,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC1G,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACrG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iCAAgC,EAClH,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EAChG,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4BAA2B,EAClH,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uCAAsC,EACpI,qBAAyBF,IAAS,MAAQC,UAAWC,EAAYC,YAAaC,EAAcC,KAAMC,GAAUN,EAAI,OAAOE,EAAW,CAAC,iBAAkBE,EAAaE,EAAM,IAAK,qFAAoF,EACjQ,kBAAsBN,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8BAA6B,EACrH,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EAC1F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACxF,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EACtF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EACtF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACrF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EAChG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oCAAmC,EACzH,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EAC7G,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,aAAY,EACjG,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+BAA8B,EACxH,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EAC9G,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EAC7G,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0CAAyC,EAC9H,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACxF,KAAQ,CACN,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACvF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACtF,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAChG,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACvF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,GAExF,MAAS,CACP,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,EACxG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6BAA4B,EAC3G,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4BAA2B,GAE1G,MAAS,CACP,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACtF,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kCAAiC,EACzH,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACxF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4BAA2B,GAE3H,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wIAAuI,EACrO,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wCAAuC,EACrI,mCAAuCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oFAAmF,EAC5L,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2CAA0C,EAClI,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,GAElG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC5F,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,8CAA6C,EACrI,4BAAgCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,2DAA0D,EAC5J,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oCAAmC,EACxH,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4BAA2B,EAC/G,8BAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,6CAA4C,EAChJ,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0BAAyB,EAC5G,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACnG,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oGAAmG,GC7GzL,GACE,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EACvG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACzF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EAChG,cAAkBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACtG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC/F,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EAC5G,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,QAAYF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACjG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EAC7G,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACvF,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,sBAAqB,EACxG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC3F,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EACzF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC9F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,uBAAsB,EACzG,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oBAAmB,EACzG,kBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,iCAAgC,EACxH,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAClG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kBAAiB,EACjG,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC9F,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAC9F,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAClG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACrG,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACrG,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kDAAiD,EACxI,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EAC/G,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACpG,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC5F,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0BAAyB,EAC/G,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,0BAAyB,EAC/G,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC9F,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4BAA2B,EACrH,oBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,4BAA2B,EACrH,WAAeF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACnG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mBAAkB,EACpG,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,UAAS,EACtF,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC3G,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC3G,OAAWF,IAAS,MAAQC,UAAWC,EAAYK,OAAQC,GAAYR,EAAI,OAAOQ,EAAQ,CAACN,EAAW,CAAC,WAAYA,EAAW,CAAC,aAAY,EAC3I,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC/F,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EACvG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+BAA8B,EAC9G,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACpG,UAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC/F,gBAAoBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,kCAAiC,EACvH,QAAYF,IAAS,MAAQC,UAAWC,EAAYK,OAAQC,GAAYR,EAAI,OAAOQ,EAAQ,CAACN,EAAW,CAAC,YAAaA,EAAW,CAAC,cAAa,EAC9I,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACtF,MAAUF,IAAS,MAAQC,UAAWC,EAAYK,OAAQC,GAAYR,EAAI,OAAOQ,EAAQ,CAACN,EAAW,CAAC,UAAWA,EAAW,CAAC,YAAW,EACxI,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,iBAAqBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EAC3G,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,oCAAmC,EACjI,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACpF,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EACpF,eAAmBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EACpG,qBAAyBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mCAAkC,EAC7H,QAAW,CACT,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,YAAW,EAC1F,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAChG,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,QAAO,EAClF,gBAAmB,CACjB,EAAMF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EAC5E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC9E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,EAAMF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EAC5E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC9E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,EAAMF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EAC5E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC9E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,EAAMF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,KAAI,EAC5E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,EAChF,GAAOF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,MAAK,EAC9E,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,OAAM,GAElF,SAAY,CACV,YAAcF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EAC7F,cAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,eAAc,EAChG,OAAWF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,EACvF,IAAQF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,cAAa,EACvF,oBAAsBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,yBAAwB,EAChH,sBAAwBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,+BAA8B,EACxH,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACnF,MAAUF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EAC3F,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,SAAQ,EACnF,KAASF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,WAAU,IAGzF,SAAaF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,wBAAuB,EACtG,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACtG,QAAYF,IAAS,MAAQC,UAAWC,EAAYK,OAAQC,GAAYR,EAAI,OAAOQ,EAAQ,CAACN,EAAW,CAAC,WAAYA,EAAW,CAAC,aAAY,EAC5I,aAAiBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qBAAoB,EACvG,8BAAkCF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,qDAAoD,EACxJ,YAAgBF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,gBAAe,EACjG,wBAA4BF,IAAS,MAAQC,UAAWC,GAAeF,EAAI,OAAOE,EAAW,CAAC,mDAAkD,GCvFlJ,GACEO,MAAOC,EACPC,MAAOC,EACPC,IAAKC,EACLC,QAASC,EACTC,OAAQC,EACRC,UAAWC,EACXxD,MAAOyD,EACPC,OAAQC,EACRC,OAAQC,EACRC,WAAYC,EACZC,KAAMC,EACNC,SAAUC,E,iFCzBZ,OAEC,ECFD,GAEC,ECFD,GAEC,ECFD,GAEC,ECFD,GAEC,ECFD,GAEC,ECFD,GAEC,ECFD,GAEC,ECFD,GAEC,ECFD,GAEC,ECFD,GAEC,ECFD,GAEC,ECWD,GACEtB,MAAOC,EACPC,MAAOC,EACPC,IAAKC,EACLC,QAASC,EACTC,OAAQC,EACRC,UAAWC,EACXxD,MAAOyD,EACPC,OAAQC,EACRC,OAAQC,EACRC,WAAYC,EACZC,KAAMC,EACNC,SAAUC,E,2FCpBVC,EAAAA,EAAAA,GAAS,qBAA4C,CACnDC,QACEC,QAAQC,IACN,qGAGJ,EACAC,aACEF,QAAQC,IAAI,sCACd,EACAE,SACEH,QAAQC,IAAI,2CACd,EACAG,cACEJ,QAAQC,IAAI,8BACd,EACAI,UACEL,QAAQC,IAAI,4CACd,EACAK,UACEN,QAAQC,IACN,gEAEJ,EACAvE,MAAMA,GACJsE,QAAQtE,MAAM,4CAA6CA,EAC7D,I,kCC5BJ,MAAM6E,EAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzEG,EAAa,CAAEC,GAAI,UACnBC,EAAa,CAAEC,MAAO,gBACtBC,EAAa,CAAED,MAAO,eACtBE,EAA2BT,GAAa,KAAmBU,EAAAA,EAAAA,GAAoB,SAAU,KAAM,cAAe,KAC9GC,EAA2BX,GAAa,KAAmBU,EAAAA,EAAAA,GAAoB,MAAO,CAAEH,MAAO,sBAAwB,KAAM,KAC7HK,EAAa,CAAEL,MAAO,eACtBM,EAAa,CACjBjE,IAAK,EACL2D,MAAO,sBAEHO,EAAa,CACjBlE,IAAK,EACL2D,MAAO,eAEHQ,EAAa,CAAC,QACdC,EAA4BhB,GAAa,KAAmBU,EAAAA,EAAAA,GAAoB,MAAO,CAAEH,MAAO,sBAAwB,KAAM,KAC9HU,EAAc,CAAEV,MAAO,eACvBW,EAAc,CAClBC,KAAM,sCACNC,OAAQ,SACRC,IAAK,uBAUP,OAA4BC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,SACRC,MAAO,CACLC,QAAS,KACTC,aAAc,MAEhBC,MAAMC,GAER,MAAMJ,EAAQI,GAON,aAAEF,EAAY,QAAED,IAAYI,EAAAA,EAAAA,IAAOL,GAE3C,MAAO,CAACM,EAAUC,KAChB,MAAMC,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,EAAY,EAC3DM,EAAAA,EAAAA,GAAoB,MAAOJ,EAAY,EACrCI,EAAAA,EAAAA,GAAoB,MAAOF,EAAY,CACrCC,GACA2B,EAAAA,EAAAA,IAAiB,MAAOC,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAOb,IAAW,KAE7Dd,GACAD,EAAAA,EAAAA,GAAoB,MAAOE,EAAY,EACrC2B,EAAAA,EAAAA,IAAaP,EAAwB,CAAEQ,GAAI,UAAY,CACrDtF,SAASuF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,iBAAkB,MAE9DC,EAAG,OAGNL,EAAAA,EAAAA,IAAOZ,KACHQ,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOtB,EAAY,OACtD+B,EAAAA,EAAAA,IAAoB,IAAI,IAC3BN,EAAAA,EAAAA,IAAOZ,KACHQ,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOrB,EAAY,EACpDJ,EAAAA,EAAAA,GAAoB,IAAK,CACvBS,KAAM,WAAUmB,EAAAA,EAAAA,IAAOZ,OACtBW,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,mBAAoB,EAAG3B,OAErD6B,EAAAA,EAAAA,IAAoB,IAAI,GAC5B5B,GACAN,EAAAA,EAAAA,GAAoB,MAAOO,EAAa,EACtCP,EAAAA,EAAAA,GAAoB,IAAKQ,GAAamB,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,yBAA0B,QAG7F,CAEJ,I,UChFA,MAAMG,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,Q,kDCLA,MAAM7C,EAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzEG,EAAa,CAAEC,GAAI,OACnBC,EAAa,CAAEC,MAAO,iBACtBC,EAAa,CAAED,MAAO,gBACtBE,EAAa,CAAEF,MAAO,mBACtBI,EAA2BX,GAAa,KAAmBU,EAAAA,EAAAA,GAAoB,MAAO,CAAEH,MAAO,YAAc,cAAe,KAC5HK,EAAa,CACjBhE,IAAK,EACL2D,MAAO,mBAEHM,EAA2Bb,GAAa,KAAmBU,EAAAA,EAAAA,GAAoB,MAAO,CAAEH,MAAO,0BAA4B,MAAO,KAClIO,EAAa,CAAEP,MAAO,uBACtBQ,EAAa,CACjBnE,IAAK,EACL2D,MAAO,mBAEHS,EAAc,CAAET,MAAO,4BACvBU,EAAc,CAClBrE,IAAK,EACL2D,MAAO,mBAEHW,EAA4BlB,GAAa,KAAmBU,EAAAA,EAAAA,GAAoB,IAAK,CAAEH,MAAO,kBAAoB,MAAO,KAY/H,OAA4Be,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,SACRuB,MAAO,CAAC,mBACRnB,MAAMC,GAAS,KAAEmB,IAIjB,MAAMjI,GAAQkI,EAAAA,EAAAA,KAERC,GAA0CC,EAAAA,EAAAA,KAC9C,IAAMpI,EAAMqI,QAAQpI,EAAAA,GAAAA,QAAAA,qBAEhBqI,GAAwCF,EAAAA,EAAAA,KAC5C,IAAMpI,EAAMqI,QAAQpI,EAAAA,GAAAA,QAAAA,oBAEhBsI,GAAgCH,EAAAA,EAAAA,KACpC,IAAMpI,EAAMqI,QAAQG,EAAAA,GAAAA,QAAAA,YAEhBC,GAAaC,EAAAA,EAAAA,KAAI,GAEvB,SAASC,IACPF,EAAWG,OAAQ,EACnBX,EAAK,mBAAmB,EAC1B,CACA,SAASY,IACPJ,EAAWG,OAAQ,EACnBX,EAAK,mBAAmB,EAC1B,CACA,SAASa,EAAeC,GACtB/I,EAAMgJ,SACJR,EAAAA,GAAAA,QAAAA,4BACAO,EAAOH,MAAMK,WAEjB,CACA,SAASC,IACPlJ,EAAMgJ,SAAS/I,EAAAA,GAAAA,QAAAA,OACjB,CAEF,MAAO,CAAC+G,EAAUC,KAChB,MAAMC,GAAyBC,EAAAA,EAAAA,IAAkB,eAC3CgC,GAAsBhC,EAAAA,EAAAA,IAAkB,YAE9C,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,EAAY,EAC3DM,EAAAA,EAAAA,GAAoB,MAAOJ,EAAY,EACrCI,EAAAA,EAAAA,GAAoB,MAAOF,EAAY,EACrCE,EAAAA,EAAAA,GAAoB,MAAO,CACzBH,MAAO,oBACP2D,QAASnC,EAAO,KAAOA,EAAO,GAAMoC,GAAiBrC,EAAKsC,QAAQC,KAAK,OACtE,mBAEL3D,EAAAA,EAAAA,GAAoB,MAAO,CACzBH,OAAO+D,EAAAA,EAAAA,IAAgB,CAAC,gBAAiB,CAAE,YAAaf,EAAWG,UAClE,EACDhD,EAAAA,EAAAA,GAAoB,IAAK,CACvBH,MAAO,4BACP2D,QAASnC,EAAO,KAAOA,EAAO,GAAMoC,GAAiBV,QAEtD,IACH/C,EAAAA,EAAAA,GAAoB,MAAO,CACzBH,OAAO+D,EAAAA,EAAAA,IAAgB,CAAC,YAAa,CAAE,YAAaf,EAAWG,UAC9D,EACDhD,EAAAA,EAAAA,GAAoB,MAAOD,EAAY,CACrCE,GACAD,EAAAA,EAAAA,GAAoB,IAAK,CACvBH,OAAO+D,EAAAA,EAAAA,IAAgB,CAAC,kCAAmC,CAAE,eAAgBf,EAAWG,SACxFQ,QAASnC,EAAO,KAAOA,EAAO,GAAMoC,GAAiBR,MACpD,KAAM,MAEXjD,EAAAA,EAAAA,GAAoB,MAAO,CACzBH,MAAO,qBACP2D,QAASnC,EAAO,KAAOA,EAAO,GAAMoC,GAAiBR,MACpD,EACArB,EAAAA,EAAAA,IAAOc,KACHlB,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOvB,EAAY,EACpD2B,EAAAA,EAAAA,IAAaP,EAAwB,CACnCzB,MAAO,WACPiC,GAAI,KACH,CACDtF,SAASuF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,wBAAyB,MAErEC,EAAG,KAELJ,EAAAA,EAAAA,IAAaP,EAAwB,CACnCzB,MAAO,WACPiC,GAAI,aACH,CACDtF,SAASuF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,KAAiBkC,EAAAA,EAAAA,IAAWzC,EAAKY,GAAG,mBAAoB,KAAM,MAEjFC,EAAG,KAELJ,EAAAA,EAAAA,IAAaP,EAAwB,CACnCzB,MAAO,WACPiC,GAAI,eACH,CACDtF,SAASuF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,0BAA2B,MAEvEC,EAAG,KAELJ,EAAAA,EAAAA,IAAaP,EAAwB,CACnCzB,MAAO,WACPiC,GAAI,iBACH,CACDtF,SAASuF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,yBAA0B,MAEtEC,EAAG,KAEJL,EAAAA,EAAAA,IAAOc,KAAoBd,EAAAA,EAAAA,IAAOW,GAAU/E,QACxCgE,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAaxC,EAAwB,CAClDpF,IAAK,EACL2D,MAAO,WACPiC,GAAI,UACH,CACDtF,SAASuF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,gBAAiB,MAE7DC,EAAG,MAELC,EAAAA,EAAAA,IAAoB,IAAI,GAC5B/B,MAEF+B,EAAAA,EAAAA,IAAoB,IAAI,MAE9BlC,EAAAA,EAAAA,GAAoB,MAAOI,EAAY,EACpCwB,EAAAA,EAAAA,IAAOc,KACHlB,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOpB,EAAY,EACpDL,EAAAA,EAAAA,GAAoB,MAAOM,EAAa,EACtCuB,EAAAA,EAAAA,IAAakC,EAAAA,EAAa,CAAEtF,MAAMmD,EAAAA,EAAAA,IAAOW,IAAa,KAAM,EAAG,CAAC,YAElEV,EAAAA,EAAAA,IAAaP,EAAwB,CACnCzB,MAAO,WACPiC,GAAI,WACJ0B,QAASP,GACR,CACDzG,SAASuF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAOW,GAAUyB,UAAW,MAEhE/B,EAAG,KAELjC,EAAAA,EAAAA,GAAoB,MAAO,CACzBH,MAAO,oBACP2D,QAASF,IACR3B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,gBAAiB,QAE9CR,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOlB,EAAa,EACrDsB,EAAAA,EAAAA,IAAaP,EAAwB,CACnCzB,MAAO,WACPiC,GAAI,SACJ0B,QAASP,GACR,CACDzG,SAASuF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,eAAgB,MAE5DC,EAAG,KAELJ,EAAAA,EAAAA,IAAaP,EAAwB,CACnCzB,MAAO,WACPiC,GAAI,YACJ0B,QAASP,GACR,CACDzG,SAASuF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,kBAAmB,MAE/DC,EAAG,QAGVL,EAAAA,EAAAA,IAAOqC,EAAAA,MAAuBrC,EAAAA,EAAAA,IAAOe,KACjCnB,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAaP,EAAqB,CAC/CrH,IAAK,EACL2D,MAAO,WACPqE,SAAStC,EAAAA,EAAAA,IAAOqC,EAAAA,IAChBE,UAAUvC,EAAAA,EAAAA,IAAOe,GACjByB,WAAYlB,GACX,CACD1G,SAASuF,EAAAA,EAAAA,KAAS,IAAM,CACtBvB,KAEFyB,EAAG,GACF,EAAG,CAAC,UAAW,eAClBC,EAAAA,EAAAA,IAAoB,IAAI,MAE7B,MAEL,CAEJ,IC1NA,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,Q,UCLA,MACMxC,EAAa,CAAEC,GAAI,aACnBC,EAAa,CAAEC,MAAO,cACtBC,EAAa,CAAED,MAAO,aACtBE,EAAa,CAAC,aAIpB,OAA4Ba,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,WACRI,MAAMC,GAGR,MAAO,CAACE,EAAUC,MACRG,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,EAAY,EAC3DM,EAAAA,EAAAA,GAAoB,MAAOJ,EAAY,EACrCI,EAAAA,EAAAA,GAAoB,MAAOF,EAAY,EACrC+B,EAAAA,EAAAA,IAAawC,EAAAA,MAEfrE,EAAAA,EAAAA,GAAoB,IAAK,CACvBH,MAAO,gBACPyE,UAAWlD,EAAKY,GAAG,oBAClB,KAAM,EAAGjC,OAIlB,ICvBA,MAAM,IAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,UCLA,MAAML,IAA0BM,EAAAA,EAAAA,GAAoB,MAAO,CAAEL,GAAI,OAAS,MAAO,GAC3EC,GAAa,CACjB1D,IAAK,EACL2D,MAAO,iBAEHC,GAAa,CAAED,MAAO,eACtBE,GAAa,CAAEF,MAAO,oBACtBI,IAA0BD,EAAAA,EAAAA,GAAoB,IAAK,CACvDH,MAAO,mBACP,cAAe,QACd,MAAO,GACJK,GAAa,CACjBD,IAcF,QAA4BW,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,MACRI,MAAMC,GAEN,MAAM9G,GAAQkI,EAAAA,EAAAA,KAERiC,GAAqC/B,EAAAA,EAAAA,KACzC,IAAMpI,EAAMqI,QAAQG,EAAAA,GAAAA,QAAAA,cAEhB4B,GAAmChC,EAAAA,EAAAA,KACvC,IAAMpI,EAAMqI,QAAQG,EAAAA,GAAAA,QAAAA,eAEhB6B,GAAgB3B,EAAAA,EAAAA,KAAI,GACpB4B,GAAsB5B,EAAAA,EAAAA,KAAI,GAQhC,SAAS6B,EAAoB9B,GAC3B4B,EAAczB,MAAQH,CACxB,CACA,SAAS+B,EAAmBC,GAC1B,OACEA,EAAQC,wBAAwBC,IAAMC,OAAOC,aAC7CJ,EAAQC,wBAAwBI,QAAU,CAE9C,CACA,SAASC,IACPH,OAAOI,SAAW,KAChB,MAAMF,EAASG,SAASC,cAAc,WACtCZ,EAAoB1B,MAAmB,OAAXkC,GAAmBN,EAAmBM,EAAO,CAE7E,CACA,SAASK,IACPP,OAAOQ,SAAS,CACdT,IAAK,EACLU,SAAU,WAEZC,YAAW,KACThB,EAAoB1B,OAAQ,CAAK,GAChC,IACL,CACA,SAAS2C,IACP,IAAIhD,EAAW,KACf,IACE,MAAMiD,EAAoBC,UAAUlD,SAASmD,MAAM,KAAK,GACpDF,KAAqBG,EAAAA,KACvBpD,EAAWiD,E,CAEb,MAAOI,GACPrD,EAAW,I,CAEbvI,EAAMgJ,SAASR,EAAAA,GAAAA,QAAAA,4BAAgDD,EACjE,CAEF,OA3CEsD,EAAAA,EAAAA,KAAc,KACZN,IACAvL,EAAMgJ,SAASR,EAAAA,GAAAA,QAAAA,uBAA0C,KAE3DsD,EAAAA,EAAAA,KAAU,IAAMf,MAuCX,CAAC/D,EAAUC,KAChB,MAAM8E,GAAoB5E,EAAAA,EAAAA,IAAkB,UACtC6E,GAAyB7E,EAAAA,EAAAA,IAAkB,eAEjD,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB4E,EAAAA,GAAW,KAAM,CACzD3G,IACAmC,EAAAA,EAAAA,IAAayE,EAAQ,CAAEC,kBAAmB5B,KACzC/C,EAAAA,EAAAA,IAAO4C,KACHhD,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO7B,GAAY,EACpDI,EAAAA,EAAAA,GAAoB,MAAOF,GAAY,EACrC+B,EAAAA,EAAAA,IAAasE,UAGhB3E,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO,CACxCvF,IAAK,EACL2D,OAAO+D,EAAAA,EAAAA,IAAgB,CAAC,gBAAiB,CAAE,cAAea,EAAczB,UACvE,EACApB,EAAAA,EAAAA,IAAO2C,KACH/C,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAasC,EAAwB,CAAElK,IAAK,OAC1DsF,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa0C,GAAU,CAAEtK,IAAK,MAChD,KACP8D,EAAAA,EAAAA,GAAoB,MAAOD,GAAY,EACrCC,EAAAA,EAAAA,GAAoB,MAAO,CACzBH,OAAO+D,EAAAA,EAAAA,IAAgB,CAAC,gBAAiB,CAAE,iBAAkBc,EAAoB1B,SACjFQ,QAAS+B,GACRrF,GAAY,MAEhB0B,EAAAA,EAAAA,IAAO2C,KACH/C,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa2C,EAAQ,CAClCvK,IAAK,EACL6E,SAASa,EAAAA,EAAAA,IAAO2C,IAAa3C,EAAAA,EAAAA,IAAO2C,GAAWxD,QAAU,GACzDC,cAAcY,EAAAA,EAAAA,IAAO2C,GAAWmC,eAC/B,KAAM,EAAG,CAAC,UAAW,mBACxBxE,EAAAA,EAAAA,IAAoB,IAAI,IAC3B,GAAG,CAER,ICtHA,MAAM,GAAc,GAEpB,U,iCCJA,MACMxC,GAAa,CAAEG,MAAO,iBACtBD,GAAa,CAAC,aAIpB,QAA4BgB,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,eACRC,MAAO,CACLjG,QAAS,MAEXoG,MAAMC,GAER,MAAMJ,EAAQI,GAKN,QAAErG,IAAYsG,EAAAA,EAAAA,IAAOL,GAE7B,MAAO,CAACM,EAAUC,MACRG,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,GAAY,EAC3DM,EAAAA,EAAAA,GAAoB,MAAO,CACzBsE,UAAWlD,EAAKY,IAAGJ,EAAAA,EAAAA,IAAO/G,KACzB,KAAM,EAAG+E,MAGhB,ICxBA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,U,WCLA,MACMF,GAAa,CAAEG,MAAO,mBACtBD,GAAa,CAAC,KAAM,OAAQ,YAAa,YACzCE,GAAa,CAAED,MAAO,mBAW5B,QAA4Be,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,iBACRC,MAAO,CACL6F,KAAM,KACNC,UAAW,CAAEpK,QAAS,KACtBqK,SAAU,CAAEC,KAAMC,QAASvK,SAAS,GACpCwK,MAAO,CAAExK,QAAS,KAEpB4F,MAAO,CAAC,eACRnB,MAAMC,GAAc,KAAEmB,IAExB,MAAMvB,EAAQI,EAMN+F,GAAOnE,EAAAA,EAAAA,IAAI,IAEjB,SAASoE,EAAWC,GAClB9E,EAAK,cAAe8E,EAAMzG,OAAOsC,MACnC,CASF,OAPEoE,EAAAA,EAAAA,KACE,IAAMtG,EAAMkG,QACXhE,IACCiE,EAAKjE,MAAkB,OAAVA,EAAiB,GAAKA,CAAK,IAIvC,CAAC5B,EAAUC,MACRG,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,GAAY,EAC3D2H,EAAAA,EAAAA,KAAgBrH,EAAAA,EAAAA,GAAoB,WAAY,CAC9CL,GAAIuB,EAAQyF,KACZA,KAAMzF,EAAQyF,KACdW,UAAWpG,EAAQ0F,UACnBC,SAAU3F,EAAQ2F,SAClB,sBAAuBxF,EAAO,KAAOA,EAAO,GAAMoC,GAAkBwD,EAAMjE,MAAQS,GAClF8D,QAASL,GACR,KAAM,GAAItH,IAAa,CACxB,CAAC4H,EAAAA,GAAaP,EAAKjE,UAErBhD,EAAAA,EAAAA,GAAoB,MAAOF,IAAY6B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,6BAA+B,MAAOL,EAAAA,EAAAA,IAAiBsF,EAAKjE,MAAM3G,QAAU,KAAMsF,EAAAA,EAAAA,IAAiBT,EAAQ0F,WAAY,KAG3L,ICxDA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,U,WCUA,IAA4BhG,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,WACRC,MAAO,CACL2G,SAAU,KACVC,SAAU,KACVC,iBAAkB,CAAEb,KAAMC,SAC1Ba,OAAQ,CAAEpL,QAAS,GACnBqL,YAAa,CAAEf,KAAMC,QAASvK,SAAS,GACvCsL,MAAO,CAAEhB,KAAMC,QAASvK,SAAS,GACjCuL,OAAQ,CAAEjB,KAAMC,QAASvK,SAAS,IAEpCyE,MAAMC,GAER,MAAMJ,EAAQI,GAIN,OACJ0G,EAAM,YACNC,EAAW,SACXJ,EAAQ,MACRK,EAAK,OACLC,EAAM,SACNL,EAAQ,iBACRC,IACExG,EAAAA,EAAAA,IAAOL,GACLkH,GAA6BxF,EAAAA,EAAAA,KAAS,IAC1CmF,EAAiB3E,MACbiF,GAAAA,GAAMP,EAAS1E,OAAOkF,cACtBR,EAAS1E,QAETmF,GAAoB3F,EAAAA,EAAAA,KAAS,IACjCmF,EAAiB3E,OACboF,EAAAA,GAAAA,IACEX,EAASzE,MACT0E,EAAS1E,MACTgF,EAAOhF,MACP4E,EAAO5E,OAETqF,WAAWZ,EAASzE,MAAMsF,QAAQV,EAAO5E,UAGjD,MAAO,CAAC5B,EAAUC,MACRG,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB4E,EAAAA,GAAW,KAAM,EACzDrG,EAAAA,EAAAA,GAAoB,OAAQ,CAC1BH,OAAO+D,EAAAA,EAAAA,IAAgB,CAAC,WAAY,CAAEmE,QAAQnG,EAAAA,EAAAA,IAAOmG,QACpDpG,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAOuG,IAAqB,IAChDzG,EAAAA,EAAAA,IAAiB,KAAMC,EAAAA,EAAAA,IAAiB,KAAO,MAC9CC,EAAAA,EAAAA,IAAOiG,KACHrG,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,OAAQ,CACzCvF,IAAK,EACL2D,OAAO+D,EAAAA,EAAAA,IAAgB,CAAC,OAAQ,CAAEmE,QAAQnG,EAAAA,EAAAA,IAAOmG,QAChDpG,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAOoG,KAAWrG,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAOkG,GAAS,KAAO,IAAK,KACnF5F,EAAAA,EAAAA,IAAoB,IAAI,IAC3B,IAEL,ICpEA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,U,WCLA,MACMxC,GAAa,CAAEG,MAAO,oBACtBD,GAAa,CACjB1D,IAAK,EACL2D,MAAO,iBAEHC,GAAa,CAAC,WAWpB,QAA4Bc,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,WACRC,MAAO,CACLoD,QAAS,KACTC,SAAU,MAEZ/B,MAAO,CACL+B,SAAWhB,GAA4BA,GAEzClC,MAAMC,GAAc,KAAEmB,IAExB,MAAMvB,EAAQI,EASNqH,GAAQC,EAAAA,GAAAA,MACRC,GAAS3F,EAAAA,EAAAA,KAAI,GACb4F,EAAkB5H,EAAMoD,QAAQyE,KAAKxF,GAAWA,IAEtD,SAASyF,IACPH,EAAOzF,OAASyF,EAAOzF,KACzB,CACA,SAAS6F,EAAe1F,GACtBd,EAAK,WAAYc,GACjBsF,EAAOzF,OAAQ,CACjB,CAOF,OALEoE,EAAAA,EAAAA,KACE,IAAMmB,EAAMO,OACZ,IAAOL,EAAOzF,OAAQ,IAGnB,CAAC5B,EAAUC,MACRG,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,GAAY,EAC3DM,EAAAA,EAAAA,GAAoB,MAAO,CACzBH,MAAO,oBACP2D,QAASoF,GACR,EACDG,EAAAA,EAAAA,IAAY3H,EAAK4H,OAAQ,aAE1BP,EAAOzF,QACHxB,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,KAAM7B,GAAY,GAClD4B,EAAAA,EAAAA,KAAW,IAAOC,EAAAA,EAAAA,IAAoB4E,EAAAA,GAAW,MAAM4C,EAAAA,EAAAA,KAAYrH,EAAAA,EAAAA,IAAO8G,IAAkB,CAACvF,EAAQ+F,MAC5F1H,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,KAAM,CAC9C5B,OAAO+D,EAAAA,EAAAA,IAAgB,CAAC,gBAAiB,CAAEO,SAAUhB,EAAOH,QAAU9B,EAAQiD,YAC9EjI,IAAKgN,EACL1F,QAAUC,GAAiBoF,EAAe1F,KACzCxB,EAAAA,EAAAA,IAAiBwB,EAAOgG,OAAQ,GAAIrJ,OACrC,UAENoC,EAAAA,EAAAA,IAAoB,IAAI,KAGhC,ICxEA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,UCLA,MACMxC,GAAa,CAAEG,MAAO,iBACtBD,GAAa,CAAE1D,IAAK,GACpB4D,GAAa,CAAE5D,IAAK,GAQ1B,QAA4B0E,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,eACRC,MAAO,CACLjG,QAAS,MAEXoG,MAAMC,GAER,MAAMJ,EAAQI,GAKN,QAAErG,IAAYsG,EAAAA,EAAAA,IAAOL,GAE7B,MAAO,CAACM,EAAUC,MACRG,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,GAAY,CAC1D0J,MAAMC,SAAQzH,EAAAA,EAAAA,IAAO/G,MACjB2G,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,KAAM7B,GAAY,GAClD4B,EAAAA,EAAAA,KAAW,IAAOC,EAAAA,EAAAA,IAAoB4E,EAAAA,GAAW,MAAM4C,EAAAA,EAAAA,KAAYrH,EAAAA,EAAAA,IAAO/G,IAAU,CAACyO,EAAYJ,MACxF1H,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,KAAM,CAAEvF,IAAKgN,IAASvH,EAAAA,EAAAA,IAAiBP,EAAKY,GAAGsH,IAAc,MACrG,WAEL9H,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3B,IAAY6B,EAAAA,EAAAA,IAAiBP,EAAKY,IAAGJ,EAAAA,EAAAA,IAAO/G,KAAY,MAG1G,ICjCA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,U,UCNIkG,QAAQ,MACRpB,GAAG,SACH4J,MAAM,6BACN,cAAY,+BACZC,EAAE,MACFC,EAAE,MACFC,QAAQ,sBACRC,MAAA,gDACA,YAAU,Y,IAEV3J,EAAAA,EAAAA,GAEO,QAFDL,GAAG,2BAA0B,6CAEnC,G,IACAK,EAAAA,EAAAA,GA2BI,WA1BFA,EAAAA,EAAAA,GAGE,QAFA4J,EAAE,oMAGJ5J,EAAAA,EAAAA,GAqBE,QApBA4J,EAAE,8xEAmB8E,G,IA5BpFhK,GAGAE,I,2CAdF2B,EAAAA,EAAAA,IA0CM,MA1CN/B,GA0CM,G,CAIN,QACEiH,KAAM,gBC3CV,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAASkD,MAEpE,U,UCLI9I,QAAQ,MACRpB,GAAG,SACH6J,EAAE,MACFC,EAAE,MACFC,QAAQ,sBACRC,MAAA,gDACA,YAAU,WACVJ,MAAM,6BACN,YAAU,8B,IAEVvJ,EAAAA,EAAAA,GAEO,QAFDL,GAAG,+BAA8B,kEAEvC,G,IACAK,EAAAA,EAAAA,GASI,KATDL,GAAG,QAAM,EACVK,EAAAA,EAAAA,GAGE,QAFA4J,EAAE,oOACFjK,GAAG,aAELK,EAAAA,EAAAA,GAGE,QAFA4J,EAAE,02EACFjK,GAAG,c,OAVPC,GAGAE,I,2CAdF2B,EAAAA,EAAAA,IAwBM,MAxBN/B,GAwBM,G,CAIN,QACEiH,KAAM,oBCzBV,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,MAEpE,U,UCLG5F,QAAQ,MACRpB,GAAG,SACH6J,EAAE,MACFC,EAAE,MACFC,QAAQ,sBACRC,MAAA,gDACA,YAAU,WACVJ,MAAM,6BACN,YAAU,8B,okIACT3J,I,2CAVH6B,EAAAA,EAAAA,IA8B6C,MA9B7C/B,GA8B6C,G,CAI5C,QACEiH,KAAM,kBC/BV,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,MAEpE,U,UCLI5F,QAAQ,MACRpB,GAAG,SACH4J,MAAM,6BACN,cAAY,+BACZC,EAAE,MACFC,EAAE,MACFC,QAAQ,sBACRC,MAAA,gDACA,YAAU,Y,IAEV3J,EAAAA,EAAAA,GAAiE,QAA3DL,GAAG,qBAAoB,iCAA6B,G,IAC1DK,EAAAA,EAAAA,GAgBI,WAfFA,EAAAA,EAAAA,GAGE,QAFA4J,EAAE,oLAGJ5J,EAAAA,EAAAA,GAUE,QATA4J,EAAE,8/BAQyC,G,IAf/ChK,GACAE,I,2CAZF2B,EAAAA,EAAAA,IA6BM,MA7BN/B,GA6BM,G,CAIN,QACEiH,KAAM,UC9BV,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,MAEpE,U,UCLI5F,QAAQ,MACRpB,GAAG,SACH4J,MAAM,6BACN,cAAY,+BACZC,EAAE,MACFC,EAAE,MACFC,QAAQ,sBACRC,MAAA,gDACA,YAAU,Y,IAEV3J,EAAAA,EAAAA,GAEO,QAFDL,GAAG,6BAA4B,mDAErC,G,IACAK,EAAAA,EAAAA,GA2BI,WA1BFA,EAAAA,EAAAA,GAyBI,WAxBFA,EAAAA,EAAAA,GAGE,QAFA4J,EAAE,sMAGJ5J,EAAAA,EAAAA,GAME,QALA4J,EAAE,ghBAMJ5J,EAAAA,EAAAA,GAYE,QAXA4J,EAAE,8oCAUuD,G,IA3B/DhK,GAGAE,I,2CAdF2B,EAAAA,EAAAA,IA0CM,MA1CN/B,GA0CM,G,CAIN,QACEiH,KAAM,kBC3CV,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,MAEpE,U,UCLI5F,QAAQ,MACRpB,GAAG,SACH4J,MAAM,6BACN,YAAU,6BACVC,EAAE,MACFC,EAAE,MACFC,QAAQ,sBACRC,MAAA,gDACA,YAAU,Y,g/HAEV/J,I,2CAXF6B,EAAAA,EAAAA,IA8DM,MA9DN/B,GA8DM,G,CAIN,QACEiH,KAAM,0BC/DV,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,MAEpE,U,UCLI5F,QAAQ,MACRpB,GAAG,SACH4J,MAAM,6BACN,cAAY,+BACZC,EAAE,MACFC,EAAE,MACFC,QAAQ,oBACRC,MAAA,8CACA,YAAU,Y,IAEV3J,EAAAA,EAAAA,GAAiE,QAA3DL,GAAG,qBAAoB,iCAA6B,G,IAC1DK,EAAAA,EAAAA,GAgBI,WAfFA,EAAAA,EAAAA,GAcI,WAbFA,EAAAA,EAAAA,GAWE,QAVA4J,EAAE,ulCAWJ5J,EAAAA,EAAAA,GAA+C,UAAvC8J,GAAG,UAAUC,GAAG,UAAUC,EAAE,e,OAfxCpK,GACAE,I,2CAZF2B,EAAAA,EAAAA,IA6BM,MA7BN/B,GA6BM,G,CAIN,QACEiH,KAAM,UC9BV,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,MAEpE,U,UCLI5F,QAAQ,MACRpB,GAAG,SACH4J,MAAM,6BACN,cAAY,+BACZC,EAAE,MACFC,EAAE,MACFC,QAAQ,oBACRC,MAAA,8CACA,YAAU,Y,IAEV3J,EAAAA,EAAAA,GAAmE,QAA7DL,GAAG,sBAAqB,kCAA8B,G,IAC5DK,EAAAA,EAAAA,GAgBI,WAfFA,EAAAA,EAAAA,GAGE,QAFA4J,EAAE,mLAGJ5J,EAAAA,EAAAA,GAUE,QATA4J,EAAE,6/BAQyG,G,IAf/GhK,GACAE,I,2CAZF2B,EAAAA,EAAAA,IA6BM,MA7BN/B,GA6BM,G,CAIN,QACEiH,KAAM,WC9BV,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,MAEpE,U,UCLI5F,QAAQ,MACRpB,GAAG,SACH4J,MAAM,6BACN,cAAY,+BACZC,EAAE,MACFC,EAAE,MACFC,QAAQ,sBACRC,MAAA,gDACA,YAAU,Y,IAEV3J,EAAAA,EAAAA,GAAuE,QAAjEL,GAAG,2BAA0B,iCAA6B,G,IAChEK,EAAAA,EAAAA,GAoBI,WAnBFA,EAAAA,EAAAA,GAkBI,WAjBFA,EAAAA,EAAAA,GAYE,QAXA4J,EAAE,ivCAYJ5J,EAAAA,EAAAA,GAGE,QAFA4J,EAAE,wMAC8E,G,IAlBtFhK,GACAE,I,2CAZF2B,EAAAA,EAAAA,IAiCM,MAjCN/B,GAiCM,G,CAIN,QACEiH,KAAM,gBClCV,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,MAEpE,U,UCLI5F,QAAQ,MACRpB,GAAG,SACH4J,MAAM,6BACN,cAAY,+BACZC,EAAE,MACFC,EAAE,MACFC,QAAQ,cACRC,MAAA,wCACA,YAAU,Y,IAEV3J,EAAAA,EAAAA,GAEO,QAFDL,GAAG,iCAAgC,mDAEzC,G,IACAK,EAAAA,EAAAA,GAcI,WAbFA,EAAAA,EAAAA,GAYE,QAXA4J,EAAE,ouCAUyE,G,IAf/EhK,GAGAE,I,2CAdF2B,EAAAA,EAAAA,IA6BM,MA7BN/B,GA6BM,G,CAIN,QACEiH,KAAM,sBC9BV,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,MAEpE,U,UCLI5F,QAAQ,MACRpB,GAAG,SACH6J,EAAE,MACFC,EAAE,MACFC,QAAQ,oBACRC,MAAA,8CACA,YAAU,WACVJ,MAAM,6BACN,YAAU,8B,stEAEV3J,I,2CAXF6B,EAAAA,EAAAA,IAqDM,MArDN/B,GAqDM,G,CAIN,QACEiH,KAAM,aCtDV,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,MAEpE,U,UCLI5F,QAAQ,MACRpB,GAAG,SACH4J,MAAM,6BACN,cAAY,+BACZC,EAAE,MACFC,EAAE,MACFC,QAAQ,sBACRC,MAAA,gDACA,YAAU,Y,IAEV3J,EAAAA,EAAAA,GAAyE,QAAnEL,GAAG,oBAAmB,0CAAsC,G,IAClEK,EAAAA,EAAAA,GAsBI,WArBFA,EAAAA,EAAAA,GAoBI,WAnBFA,EAAAA,EAAAA,GAcE,QAbA4J,EAAE,69CAcJ5J,EAAAA,EAAAA,GAGE,QAFA4J,EAAE,8MACmF,G,IApB3FhK,GACAE,I,2CAZF2B,EAAAA,EAAAA,IAmCM,MAnCN/B,GAmCM,G,CAIN,QACEiH,KAAM,SCpCV,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,MAEpE,U,UCLI5F,QAAQ,MACRpB,GAAG,SACH6J,EAAE,MACFC,EAAE,MACFC,QAAQ,oBACRC,MAAA,8CACA,YAAU,WACVJ,MAAM,6BACN,YAAU,8B,k5CAEV3J,I,2CAXF6B,EAAAA,EAAAA,IAuBM,MAvBN/B,GAuBM,G,CAIN,QACEiH,KAAM,WCxBV,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,MAEpE,UCJA,MAAMjH,GAAa,CAAC,SAwBpB,QAA4BkB,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,QACRC,MAAO,CACLmJ,WAAY,KACZC,MAAO,KACPC,MAAO,CAAE3N,QAAS,KAEpByE,MAAMC,GAER,MAAMJ,EAAQI,GAIN,MAAEgJ,EAAK,WAAED,EAAU,MAAEE,IAAUhJ,EAAAA,EAAAA,IAAOL,GACtCsJ,GAAcC,EAAAA,EAAAA,IAAO,eAE7B,MAAO,CAACjJ,EAAUC,MACRG,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO,CAC/C5B,MAAO,YACP8J,OAAOW,EAAAA,EAAAA,IAAgB,CAAEC,MAAM3I,EAAAA,EAAAA,IAAOsI,IAAStI,EAAAA,EAAAA,IAAOsI,IAAStI,EAAAA,EAAAA,IAAOwI,IAAaxI,EAAAA,EAAAA,IAAOqI,MAC1FE,OAAOvI,EAAAA,EAAAA,IAAOuI,IAASvI,EAAAA,EAAAA,IAAOuI,GAAS/I,EAAKY,GAAG,WAAUJ,EAAAA,EAAAA,IAAOqI,aAC/D,CACuB,qBAAvBrI,EAAAA,EAAAA,IAAOqI,KACHzI,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa0G,GAAc,CAAEtO,IAAK,MACjDgG,EAAAA,EAAAA,IAAoB,IAAI,GACJ,yBAAvBN,EAAAA,EAAAA,IAAOqI,KACHzI,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa2G,GAAkB,CAAEvO,IAAK,MACrDgG,EAAAA,EAAAA,IAAoB,IAAI,GACJ,uBAAvBN,EAAAA,EAAAA,IAAOqI,KACHzI,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa4G,GAAgB,CAAExO,IAAK,MACnDgG,EAAAA,EAAAA,IAAoB,IAAI,GACJ,YAAvBN,EAAAA,EAAAA,IAAOqI,KACHzI,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa6G,GAAQ,CAAEzO,IAAK,MAC3CgG,EAAAA,EAAAA,IAAoB,IAAI,GACJ,qBAAvBN,EAAAA,EAAAA,IAAOqI,KACHzI,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa8G,GAAgB,CAAE1O,IAAK,MACnDgG,EAAAA,EAAAA,IAAoB,IAAI,GACJ,gCAAvBN,EAAAA,EAAAA,IAAOqI,KACHzI,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa+G,GAAwB,CAAE3O,IAAK,MAC3DgG,EAAAA,EAAAA,IAAoB,IAAI,GACJ,YAAvBN,EAAAA,EAAAA,IAAOqI,KACHzI,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAagH,GAAQ,CAAE5O,IAAK,MAC3CgG,EAAAA,EAAAA,IAAoB,IAAI,GACJ,aAAvBN,EAAAA,EAAAA,IAAOqI,KACHzI,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAaiH,GAAS,CAAE7O,IAAK,MAC5CgG,EAAAA,EAAAA,IAAoB,IAAI,GACJ,qBAAvBN,EAAAA,EAAAA,IAAOqI,KACHzI,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAakH,GAAc,CAAE9O,IAAK,MACjDgG,EAAAA,EAAAA,IAAoB,IAAI,GACJ,4BAAvBN,EAAAA,EAAAA,IAAOqI,KACHzI,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAamH,GAAoB,CAAE/O,IAAK,MACvDgG,EAAAA,EAAAA,IAAoB,IAAI,GACJ,eAAvBN,EAAAA,EAAAA,IAAOqI,KACHzI,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAaoH,GAAW,CAAEhP,IAAK,OAC9CgG,EAAAA,EAAAA,IAAoB,IAAI,GACJ,WAAvBN,EAAAA,EAAAA,IAAOqI,KACHzI,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAaqH,GAAO,CAAEjP,IAAK,OAC1CgG,EAAAA,EAAAA,IAAoB,IAAI,GACJ,aAAvBN,EAAAA,EAAAA,IAAOqI,KACHzI,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAasH,GAAS,CAAElP,IAAK,OAC5CgG,EAAAA,EAAAA,IAAoB,IAAI,IAC3B,GAAIxC,IAET,ICvFA,MAAM,GAAc,GAEpB,U,UCJOG,MAAM,U,mCAAX4B,EAAAA,EAAAA,IAAsB,MAAtB/B,G,CCAF,MAAM2L,GAAS,CAAC,EAKV,IAA2B,OAAgBA,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,UCLA,MACM3L,GAAa,CAAEC,GAAI,SACnBC,GAAa,CAAEC,MAAO,gBACtBC,GAAa,CACjB5D,IAAK,EACL2D,MAAO,iBAEHE,GAAa,CACjB7D,IAAK,EACL2D,MAAO,iBAEHI,GAAa,CAAEJ,MAAO,iBAa5B,QAA4Be,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,QACRC,MAAO,CACLqJ,MAAO,KACPtP,QAAS,KACTyQ,cAAe,CAAE9O,QAAS,IAAM,OAElC4F,MAAO,CAAC,eAAgB,iBACxBnB,MAAMC,GAAc,KAAEmB,IAExB,MAAMvB,EAAQI,EAMN9G,GAAQkI,EAAAA,EAAAA,MAER,MAAE6H,EAAK,QAAEtP,EAAO,cAAEyQ,IAAkBnK,EAAAA,EAAAA,IAAOL,GAC3CyK,GAAuD/I,EAAAA,EAAAA,KAC3D,IAAMpI,EAAMqI,QAAQG,EAAAA,GAAAA,QAAAA,kBAIxB,OAFE4I,EAAAA,EAAAA,KAAY,IAAMpR,EAAMqR,OAAO7I,EAAAA,GAAAA,UAAAA,wBAE1B,CAACxB,EAAUC,KAChB,MAAMqK,GAAoBnK,EAAAA,EAAAA,IAAkB,UACtCoK,GAA0BpK,EAAAA,EAAAA,IAAkB,gBAC5CqK,GAAkBrK,EAAAA,EAAAA,IAAkB,QAE1C,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,GAAY,EAC3DM,EAAAA,EAAAA,GAAoB,MAAOJ,GAAY,EACrCiC,EAAAA,EAAAA,IAAa+J,EAAiB,KAAM,CAClCzB,OAAOpI,EAAAA,EAAAA,KAAS,IAAM,EACpBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAOuI,IAAS,MAEpD0B,SAAS9J,EAAAA,EAAAA,KAAS,IAAM,EACrBH,EAAAA,EAAAA,IAAO0J,KACH9J,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3B,GAAY,EACpD+B,EAAAA,EAAAA,IAAa6J,EAAmB,CAAEI,SAASlK,EAAAA,EAAAA,IAAO/G,IAAY,CAC5D2B,SAASuF,EAAAA,EAAAA,KAAS,IAAM,EACtB/B,EAAAA,EAAAA,GAAoB,OAAQ,MAAM2B,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAO0J,IAAiB,MAE7ErJ,EAAG,GACF,EAAG,CAAC,iBAERT,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO1B,IAAY4B,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAO/G,IAAW,KAC5F+G,EAAAA,EAAAA,IAAO2J,KACH/J,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa6H,EAAyB,CACnDzP,IAAK,EACLrB,SAAS+G,EAAAA,EAAAA,IAAO2J,IACf,KAAM,EAAG,CAAC,cACbrJ,EAAAA,EAAAA,IAAoB,IAAI,IAC5BlC,EAAAA,EAAAA,GAAoB,MAAOC,GAAY,EACnC2B,EAAAA,EAAAA,IAAO2J,IAMLrJ,EAAAA,EAAAA,IAAoB,IAAI,KALvBV,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,SAAU,CAC3CvF,IAAK,EACL2D,MAAO,UACP2D,QAASnC,EAAO,KAAOA,EAAO,GAAMoC,GAAiBpB,EAAK,oBACzDV,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,gBAAiB,KAEjDhC,EAAAA,EAAAA,GAAoB,SAAU,CAC5BH,MAAO,SACP2D,QAASnC,EAAO,KAAOA,EAAO,GAAMoC,GAAiBpB,EAAK,mBACzDV,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,aAAWJ,EAAAA,EAAAA,IAAO2J,GAAiB,SAAW,QAAU,QAGxFtJ,EAAG,OAGP,CAEJ,IC5FA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,UCEO,MAAM8J,GAAmB,CAC9B,CAAErL,OAAQsL,GAAcrF,KAAM,gBAC9B,CAAEjG,OAAQuL,GAAAA,EAAMtF,KAAM,QACtB,CAAEjG,OAAQwL,GAAgBvF,KAAM,kBAChC,CAAEjG,OAAQyL,GAAUxF,KAAM,YAC1B,CAAEjG,OAAQ0L,GAAUzF,KAAM,YAC1B,CAAEjG,OAAQ2L,GAAc1F,KAAM,gBAC9B,CAAEjG,OAAQ4L,GAAQ3F,KAAM,UACxB,CAAEjG,OAAQ6L,GAAO5F,KAAM,SACvB,CAAEjG,OAAQ8L,GAAY7F,KAAM,eCbjB8F,GAAmC,CAC9CC,QAAS,CACP7H,EACA8H,KAEA9H,EAAQ+H,kBAAoB,SAAUzF,GAC9BtC,IAAYsC,EAAMzG,QAAUmE,EAAQgI,SAAe1F,EAAMzG,SAC7DiM,EAAQ3J,MAAMmE,EAElB,EACA9B,SAASyH,KAAKC,iBAAiB,QAASlI,EAAQ+H,mBAChDvH,SAASyH,KAAKC,iBAAiB,aAAclI,EAAQ+H,kBAAkB,EAEzEI,UAAW,SAAUnI,GACfA,EAAQ+H,oBACVvH,SAASyH,KAAKG,oBAAoB,QAASpI,EAAQ+H,mBACnDvH,SAASyH,KAAKG,oBAAoB,aAAcpI,EAAQ+H,mBACxD/H,EAAQ+H,uBAAoBM,EAEhC,G,cCGFC,EAAAA,GAAAA,SACEC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,EACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GACAC,EAAAA,GAGF,MAAMC,IAAMC,EAAAA,EAAAA,IAAUC,IACnBC,QAAQ,cAAe/D,GAAAA,IACvBzQ,IAAIyU,GAAAA,GACJzU,IAAIS,GAAAA,GACJT,IAAI0U,GAAAA,GACJ1U,IAAI2U,EAAAA,GAAe,CAAE3H,KAAM,gBAC3B4H,UAAU,gBAAiB9B,IAE9BV,GAAiB9P,SAASuS,IACxBR,GAAIQ,UAAUA,EAAU7H,KAAM6H,EAAU9N,OAAO,IAGjDsN,GAAIS,MAAM,O,mKCpDV,MAAMnP,EAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzEG,EAAa,CACjBC,GAAI,YACJE,MAAO,cAEHD,EAAa,CAAC,YACdE,EAAa,CAAE4O,IAAK,iBACpB3O,EAAa,CAAC,SACdE,EAAa,CAAC,YACdC,EAAa,CAAEwO,IAAK,aACpBvO,EAAa,CAAC,YACdC,EAAa,CAAEP,MAAO,mBACtBQ,EAAa,CAAER,MAAO,YACtBS,EAA4BhB,GAAa,KAAmBU,EAAAA,EAAAA,GAAoB,IAAK,CACzFH,MAAO,oBACP,cAAe,QACd,MAAO,KACJU,EAAc,CAAEmO,IAAK,wBACrBlO,EAAc,CAAC,YACfmO,EAAc,CAAED,IAAK,qBACrBE,EAAc,CAAC,YACfC,EAAc,CAAEH,IAAK,oBACrBI,EAAc,CAAC,YACfC,EAAc,CAClB7S,IAAK,EACL2D,MAAO,gBAEHmP,EAAc,CAClBnP,MAAO,UACPiH,KAAM,UAEFmI,EAAc,CAAC,WACfC,EAAc,CAClBhT,IAAK,EACL2D,MAAO,gBAuBT,OAA4Be,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,mBACRC,MAAO,CACLyD,UAAW,KACX4K,QAAS,CAAErI,KAAMC,QAASvK,SAAS,IAErCyE,MAAMC,GAER,MAAMJ,EAAQI,GAGN,QAAEiO,IAAYhO,EAAAA,EAAAA,IAAOL,GAErB1G,GAAQkI,EAAAA,EAAAA,KACR+L,GAASe,EAAAA,EAAAA,MAETC,GAA0BC,EAAAA,EAAAA,IAAS,CACvC5I,cAAe,GACf6I,UAAW,EACXC,qBAAsB,EACtBC,kBAAmB,EACnBC,iBAAkB,IAEdnE,GAAuD/I,EAAAA,EAAAA,KAC3D,IAAMpI,EAAMqI,QAAQG,EAAAA,GAAAA,QAAAA,kBAStB,SAAS+M,EAAWpL,GAClBqL,OAAO5T,KAAKqT,GAAS1G,KAAKzM,IACxB,CAAC,uBAAwB,qBAAqBI,SAASJ,GAGpDmT,EAAQnT,IAAO2T,EAAAA,EAAAA,GAAgBtL,EAAUrI,IAGzCmT,EAAQnT,GAAOqI,EAAUrI,EAAK,GAErC,CACA,SAAS4T,IACPH,EAAW7O,EAAMyD,WACjBnK,EAAMqR,OAAO7I,EAAAA,GAAAA,UAAAA,sBACbyL,EAAO1K,KAAK,qBACd,CACA,SAASoM,IACP,MAAMC,EAA2BJ,OAAOK,OAAO,CAAC,EAAGZ,GACnDW,EAASR,sBAAwB,QACjCQ,EAASP,mBAAqB,QAC9BrV,EAAMgJ,SAASR,EAAAA,GAAAA,QAAAA,0BAA8CoN,EAC/D,CAEF,OA7BE/J,EAAAA,EAAAA,KAAc,KACRnF,EAAMyD,WACRoL,EAAW7O,EAAMyD,U,IA2BhB,CAACnD,EAAUC,KAChB,MAAMsK,GAA0BpK,EAAAA,EAAAA,IAAkB,gBAC5CqK,GAAkBrK,EAAAA,EAAAA,IAAkB,QAE1C,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,EAAY,EAC3DmC,EAAAA,EAAAA,IAAa+J,EAAiB,KAAM,CAClCzB,OAAOpI,EAAAA,EAAAA,KAAS,IAAM,EACpBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,2BAA4B,MAExE6J,SAAS9J,EAAAA,EAAAA,KAAS,IAAM,EACtB/B,EAAAA,EAAAA,GAAoB,OAAQ,CAC1BH,MAAO,aACPkQ,UAAUG,EAAAA,EAAAA,IAAeH,EAAU,CAAC,aACnC,EACD/P,EAAAA,EAAAA,GAAoB,QAASF,EAAY,EACvC4B,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,mCAAqC,KAAM,IACnFJ,EAAAA,EAAAA,IAAOuN,IAAaE,EAAQ3I,eAO1BW,EAAAA,EAAAA,MAAiB7F,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,QAAS,CAC1DvF,IAAK,EACLyD,GAAI,gBACJgH,KAAM,gBACNG,KAAM,QACN,sBAAuBzF,EAAO,KAAOA,EAAO,GAAMoC,GAAkB4L,EAAQ3I,cAAiBjD,GAC7FoD,WAAWjF,EAAAA,EAAAA,IAAOuN,IACjB,KAAM,EAAGlP,IAAc,CACxB,CAACuH,EAAAA,GAAa6H,EAAQ3I,mBAdvBlF,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,QAAS,CAC1CvF,IAAK,EACL2D,MAAO,aACPmD,MAAO5B,EAAKY,GAAG,qCACf6E,SAAU,IACT,KAAM,EAAG9G,OAYlBC,EAAAA,EAAAA,GAAoB,QAASE,EAAY,EACvCwB,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,qCAAuC,KAAM,IACvFqF,EAAAA,EAAAA,KAAgBrH,EAAAA,EAAAA,GAAoB,QAAS,CAC3CL,GAAI,YACJgH,KAAM,YACNG,KAAM,SACNqJ,IAAK,IACL,sBAAuB9O,EAAO,KAAOA,EAAO,GAAMoC,GAAkB4L,EAAQE,UAAa9L,GACzFoD,WAAWjF,EAAAA,EAAAA,IAAOuN,IACjB,KAAM,EAAGhP,GAAa,CACvB,CAACqH,EAAAA,GAAa6H,EAAQE,gBAG1BvP,EAAAA,EAAAA,GAAoB,MAAOI,EAAY,EACrCJ,EAAAA,EAAAA,GAAoB,OAAQK,EAAY,CACtCC,GACAoB,EAAAA,EAAAA,IAAiB,KAAMC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,oCAAqC,QAGzFhC,EAAAA,EAAAA,GAAoB,QAASO,EAAa,EACxCmB,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,kDAAoD,KAAM,IACpGqF,EAAAA,EAAAA,KAAgBrH,EAAAA,EAAAA,GAAoB,QAAS,CAC3CL,GAAI,uBACJgH,KAAM,uBACNG,KAAM,SACNsJ,KAAM,MACND,IAAK,IACL,sBAAuB9O,EAAO,KAAOA,EAAO,GAAMoC,GAAkB4L,EAAQG,qBAAwB/L,GACpGoD,WAAWjF,EAAAA,EAAAA,IAAOuN,IACjB,KAAM,EAAG3O,GAAc,CACxB,CAACgH,EAAAA,GAAa6H,EAAQG,2BAG1BxP,EAAAA,EAAAA,GAAoB,QAAS2O,EAAa,EACxCjN,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,+CAAiD,KAAM,IACjGqF,EAAAA,EAAAA,KAAgBrH,EAAAA,EAAAA,GAAoB,QAAS,CAC3CL,GAAI,oBACJgH,KAAM,oBACNG,KAAM,SACNsJ,KAAM,MACND,IAAK,IACL,sBAAuB9O,EAAO,KAAOA,EAAO,GAAMoC,GAAkB4L,EAAQI,kBAAqBhM,GACjGoD,WAAWjF,EAAAA,EAAAA,IAAOuN,IACjB,KAAM,EAAGP,GAAc,CACxB,CAACpH,EAAAA,GAAa6H,EAAQI,wBAG1BzP,EAAAA,EAAAA,GAAoB,QAAS6O,EAAa,EACxCnN,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,4CAA8C,KAAM,IAC9FqF,EAAAA,EAAAA,KAAgBrH,EAAAA,EAAAA,GAAoB,QAAS,CAC3CL,GAAI,mBACJgH,KAAM,mBACNG,KAAM,SACNqJ,IAAK,IACL,sBAAuB9O,EAAO,KAAOA,EAAO,GAAMoC,GAAkB4L,EAAQK,iBAAoBjM,GAChGoD,WAAWjF,EAAAA,EAAAA,IAAOuN,IACjB,KAAM,EAAGL,GAAc,CACxB,CAACtH,EAAAA,GAAa6H,EAAQK,uBAGzB9N,EAAAA,EAAAA,IAAO2J,KACH/J,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa6H,EAAyB,CACnDzP,IAAK,EACLrB,SAAS+G,EAAAA,EAAAA,IAAO2J,IACf,KAAM,EAAG,CAAC,cACbrJ,EAAAA,EAAAA,IAAoB,IAAI,IAC3BN,EAAAA,EAAAA,IAAOuN,KACH3N,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOsN,EAAa,EACrD/O,EAAAA,EAAAA,GAAoB,SAAUgP,GAAarN,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,mBAAoB,IACxFhC,EAAAA,EAAAA,GAAoB,SAAU,CAC5BH,MAAO,SACP2D,SAAS0M,EAAAA,EAAAA,IAAeJ,EAAU,CAAC,cAClCnO,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,mBAAoB,EAAGiN,QAEpDzN,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOyN,EAAa,EACrDlP,EAAAA,EAAAA,GAAoB,SAAU,CAC5BH,MAAO,UACP2D,QAASnC,EAAO,KAAOA,EAAO,IAAK6O,EAAAA,EAAAA,KAAgBzM,GAAiBrC,EAAKsC,QAAQC,KAAK,4BAA6B,CAAC,eACnHhC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,iBAAkB,IAC9ChC,EAAAA,EAAAA,GAAoB,SAAU,CAC5BH,MAAO,SACP2D,QAASnC,EAAO,KAAOA,EAAO,IAAK6O,EAAAA,EAAAA,KAAgBzM,GAAiBrC,EAAKsC,QAAQC,KAAK,WAAY,CAAC,eAClGhC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,wBAAyB,OAE1D,GAAIpC,MAETqC,EAAG,KAEL,CAEJ,I,UC1OA,MAAME,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,QCLA,MAAMzC,EAAa,CAAEG,MAAO,aACtBD,EAAa,CAAEC,MAAO,oBACtBC,EAAa,CAAED,MAAO,aACtBE,EAAa,CAAEF,MAAO,gBACtBI,EAAa,CAAEJ,MAAO,aACtBK,EAAa,CAAEL,MAAO,QAU5B,OAA4Be,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,WACRC,MAAO,CACLuP,KAAM,KACNpJ,KAAM,KACNjE,MAAO,MAET/B,MAAMC,GAER,MAAMJ,EAAQI,GAON,KAAEmP,EAAI,KAAEpJ,EAAI,MAAEjE,IAAU7B,EAAAA,EAAAA,IAAOL,GAEvC,MAAO,CAACM,EAAUC,MACRG,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,EAAY,EAC3DM,EAAAA,EAAAA,GAAoB,MAAOJ,EAAY,EACrCI,EAAAA,EAAAA,GAAoB,MAAOF,EAAY,EACrCE,EAAAA,EAAAA,GAAoB,IAAK,CACvBH,OAAO+D,EAAAA,EAAAA,IAAgB,CAAC,KAAM,OAAMhC,EAAAA,EAAAA,IAAOyO,QAC1C,KAAM,MAEXrQ,EAAAA,EAAAA,GAAoB,MAAOD,EAAY,EACrCC,EAAAA,EAAAA,GAAoB,MAAOC,GAAY0B,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAOoB,IAAS,IACxEhD,EAAAA,EAAAA,GAAoB,MAAOE,GAAYyB,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAOqF,IAAQ,SAK/E,IC9CA,MAAM,EAAc,EAEpB,QCJA,MAAMvH,EAAa,CAAEC,GAAI,cAYzB,OAA4BiB,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,gBACRC,MAAO,CACLwP,cAAe,MAEjBrP,MAAMC,GAER,MAAMJ,EAAQI,GAMN,cAAEoP,IAAkBnP,EAAAA,EAAAA,IAAOL,GAC3ByP,GAAgB/N,EAAAA,EAAAA,KAAS,KAC7BgO,EAAAA,EAAAA,GAAoBF,EAActN,MAAMyN,kBAAkB,KAG9D,MAAO,CAACrP,EAAUC,MACRG,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,EAAY,EAC3DmC,EAAAA,EAAAA,IAAa6O,EAAU,CACrBL,KAAM,QACNrN,OAAOpB,EAAAA,EAAAA,IAAO0O,GAAeK,MAC7B1J,KAAM7F,EAAKY,GAAG,cAAcJ,EAAAA,EAAAA,IAAO0O,GAAeK,QACjD,KAAM,EAAG,CAAC,QAAS,UACtB9O,EAAAA,EAAAA,IAAa6O,EAAU,CACrBL,KAAM,OACNrN,OAAOpB,EAAAA,EAAAA,IAAO0O,GAAejS,OAC7B4I,KAAM7F,EAAKY,GAAG,kBAAkBJ,EAAAA,EAAAA,IAAO0O,GAAejS,SACrD,KAAM,EAAG,CAAC,QAAS,UACtBwD,EAAAA,EAAAA,IAAa6O,EAAU,CACrBL,KAAM,WACNrN,OAAOpB,EAAAA,EAAAA,IAAO0O,GAAe3R,SAC7BsI,KAAM7F,EAAKY,GAAG,oBAAoBJ,EAAAA,EAAAA,IAAO0O,GAAe3R,WACvD,KAAM,EAAG,CAAC,QAAS,UACtBkD,EAAAA,EAAAA,IAAa6O,EAAU,CACrBL,KAAM,cACNrN,OAAOpB,EAAAA,EAAAA,IAAO2O,GAAeK,KAC7B3J,MAAMrF,EAAAA,EAAAA,IAAO2O,GAAeM,QAC3B,KAAM,EAAG,CAAC,QAAS,WAG1B,ICpDA,MAAM,EAAc,EAEpB,Q,UCJA,MAAMvR,EAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzEG,EAAa,CACjBC,GAAI,aACJE,MAAO,eAEHD,EAAa,CAAEC,MAAO,+BACtBC,EAAa,CAAED,MAAO,8BACtBE,GAA2BT,GAAa,KAAmBU,EAAAA,EAAAA,GAAoB,KAAM,KAAM,MAAO,KAClGC,GAAa,CAAEJ,MAAO,uBACtBK,GAAa,CACjBhE,IAAK,EACL2D,MAAO,wBAEHM,GAA2Bb,GAAa,KAAmBU,EAAAA,EAAAA,GAAoB,IAAK,CACxFH,MAAO,6BACP,cAAe,QACd,MAAO,KAaV,QAA4Be,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,YACRC,MAAO,CACLyD,UAAW,KACX+L,cAAe,CAAE9T,QAAS,KAAM,CAAsB,KAExDyE,MAAMC,GAER,MAAMJ,EAAQI,GAIN,UAAEqD,EAAS,cAAE+L,IAAkBnP,EAAAA,EAAAA,IAAOL,GAE9C,MAAO,CAACM,EAAUC,KAChB,MAAMC,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,EAAY,EAC3DmC,EAAAA,EAAAA,IAAaoK,EAAAA,EAAM,KAAM,CACvB9B,OAAOpI,EAAAA,EAAAA,KAAS,IAAM,EACpBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,yBAA0B,MAEtE6J,SAAS9J,EAAAA,EAAAA,KAAS,IAAM,EACtBF,EAAAA,EAAAA,IAAaiP,EAAe,CAAER,eAAe1O,EAAAA,EAAAA,IAAO0O,IAAkB,KAAM,EAAG,CAAC,mBAChFtQ,EAAAA,EAAAA,GAAoB,MAAOJ,EAAY,EACrCI,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9B6B,EAAAA,EAAAA,IAAaP,EAAwB,CAAEQ,GAAI,sBAAwB,CACjEtF,SAASuF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,sBAAuB,MAEnEC,EAAG,OAGPjC,EAAAA,EAAAA,GAAoB,KAAMF,EAAY,EACpC4B,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,yCAA0C,GACpFjC,IACAC,EAAAA,EAAAA,GAAoB,OAAQC,IAAY0B,EAAAA,EAAAA,IAAiBP,EAAKY,GACxD,wBACEJ,EAAAA,EAAAA,IAAO2C,GAAWwM,wBAA0B,UAAY,cAExD,IACNnP,EAAAA,EAAAA,IAAO2C,GAAWyM,0BAKhB9O,EAAAA,EAAAA,IAAoB,IAAI,KAJvBV,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,OAAQvB,GAAY,CACrDC,IACAuB,EAAAA,EAAAA,IAAiB,KAAMC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,iCAAkC,SAI1FhC,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9B6B,EAAAA,EAAAA,IAAaP,EAAwB,CAAEQ,GAAI,iBAAmB,CAC5DtF,SAASuF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,KAAiBkC,EAAAA,EAAAA,IAAWzC,EAAKY,GAAG,iBAAkB,KAAM,MAE/EC,EAAG,OAGPjC,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,gCAAiC,IAC1FhC,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9B6B,EAAAA,EAAAA,IAAaP,EAAwB,CAAEQ,GAAI,gBAAkB,CAC3DtF,SAASuF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,KAAiBkC,EAAAA,EAAAA,IAAWzC,EAAKY,GAAG,aAAc,KAAM,MAE3EC,EAAG,OAGPjC,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,2CAA4C,UAI3GC,EAAG,KAEL,CAEJ,ICpGA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,U,qBCLA,MAAM3C,GAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzEG,GAAa,CACjBC,GAAI,eACJE,MAAO,cAEHD,GAAa,CAAEC,MAAO,oBACtBC,GAA2BR,IAAa,KAAmBU,EAAAA,EAAAA,GAAoB,KAAM,KAAM,KAAM,KACjGD,GAAa,CAAEF,MAAO,aACtBI,GAAa,CAAEJ,MAAO,0BACtBK,GAA2BZ,IAAa,KAAmBU,EAAAA,EAAAA,GAAoB,KAAM,KAAM,MAAO,KAClGG,GAAa,CAAEN,MAAO,eACtBO,GAA2Bd,IAAa,KAAmBU,EAAAA,EAAAA,GAAoB,OAAQ,CAAEH,MAAO,gBAAkB,MAAO,KACzHQ,GAAa,CAAER,MAAO,gBACtBS,GAAc,CAAET,MAAO,eACvBU,GAAc,CAAEV,MAAO,gBACvBW,GAAc,CAAEX,MAAO,eACvB8O,GAAc,CAAE9O,MAAO,gBACvB+O,GAAc,CAAE/O,MAAO,gBACvBgP,GAAc,CAAEhP,MAAO,gBACvBiP,GAAc,CAAEjP,MAAO,iBACvBkP,GAAc,CAAC,WACfC,GAAc,CAClB9S,IAAK,EACL2D,MAAO,gBAEHoP,GAA4B3P,IAAa,KAAmBU,EAAAA,EAAAA,GAAoB,IAAK,CACzFH,MAAO,gBACP,cAAe,QACd,MAAO,KAWV,QAA4Be,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,cACRI,MAAMC,GAEN,MAAM,EAAE+P,IAAMC,EAAAA,GAAAA,MACR9W,GAAQkI,EAAAA,EAAAA,KAER6O,GAAoD3O,EAAAA,EAAAA,KAAS,KACjE4O,EAAAA,GAAAA,IAAgBhX,EAAMqI,QAAQ4O,EAAAA,GAAAA,QAAAA,QAA8BJ,KAExD1F,GAAuD/I,EAAAA,EAAAA,KAC3D,IAAMpI,EAAMqI,QAAQG,EAAAA,GAAAA,QAAAA,kBAGtB,SAAS0O,EAAkB3R,EAAY4R,GACrCnX,EAAMgJ,SAASiO,EAAAA,GAAAA,QAAAA,cAAoC,CACjD1R,KACA4R,YAEJ,CAEF,MAAO,CAACnQ,EAAUC,KAChB,MAAMmQ,GAAwBjQ,EAAAA,EAAAA,IAAkB,cAC1CoK,GAA0BpK,EAAAA,EAAAA,IAAkB,gBAC5CqK,GAAkBrK,EAAAA,EAAAA,IAAkB,QAE1C,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,GAAY,EAC3DmC,EAAAA,EAAAA,IAAa+J,EAAiB,KAAM,CAClCzB,OAAOpI,EAAAA,EAAAA,KAAS,IAAM,EACpBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,uBAAwB,MAEpE6J,SAAS9J,EAAAA,EAAAA,KAAS,IAAM,EACtB/B,EAAAA,EAAAA,GAAoB,SAAU,CAC5BH,MAAO,aACP2D,QAASnC,EAAO,KAAOA,EAAO,IAAK6O,EAAAA,EAAAA,KAAgBzM,GAAiBrC,EAAKsC,QAAQC,KAAK,WAAY,CAAC,eAClGhC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,wBAAyB,IACrDhC,EAAAA,EAAAA,GAAoB,MAAOJ,GAAY,EACrCI,EAAAA,EAAAA,GAAoB,QAAS,KAAM,EACjCA,EAAAA,EAAAA,GAAoB,QAAS,KAAM,EACjCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9BF,IACAE,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,6BAA8B,IACvFhC,EAAAA,EAAAA,GAAoB,KAAMD,IAAY4B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,6BAA8B,IAC7FhC,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,8BAA+B,IACxFhC,EAAAA,EAAAA,GAAoB,KAAMC,IAAY0B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,iBAAkB,GACjF9B,QAGJF,EAAAA,EAAAA,GAAoB,QAAS,KAAM,GAChCwB,EAAAA,EAAAA,KAAW,IAAOC,EAAAA,EAAAA,IAAoB4E,EAAAA,GAAW,MAAM4C,EAAAA,EAAAA,KAAYrH,EAAAA,EAAAA,IAAOuP,IAAoBM,KACrFjQ,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,KAAM,CAC9CvF,IAAKuV,EAAM9R,IACV,EACDK,EAAAA,EAAAA,GAAoB,KAAMG,GAAY,CACpCC,IACAsB,EAAAA,EAAAA,IAAiB,KAAMC,EAAAA,EAAAA,IAAiB8P,EAAM9R,IAAK,MAErDK,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,OAAQK,IAAYsB,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,6BAA8B,IAC/FH,EAAAA,EAAAA,IAAa2P,EAAuB,CAClCrH,MAAOsH,EAAMC,gBACb,cAAeD,EAAMtI,MACrBe,MAAOuH,EAAMvH,OACZ,KAAM,EAAG,CAAC,QAAS,cAAe,aAEvClK,EAAAA,EAAAA,GAAoB,KAAMM,GAAa,EACrCN,EAAAA,EAAAA,GAAoB,OAAQO,IAAaoB,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,6BAA8B,IAChGN,EAAAA,EAAAA,IAAiB,KAAMC,EAAAA,EAAAA,IAAiB8P,EAAMC,iBAAkB,MAElE1R,EAAAA,EAAAA,GAAoB,KAAMQ,GAAa,EACrCR,EAAAA,EAAAA,GAAoB,OAAQ2O,IAAahN,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,8BAA+B,IACjGhC,EAAAA,EAAAA,GAAoB,IAAK,CACvBH,OAAO+D,EAAAA,EAAAA,IAAgB,SAAQ6N,EAAME,UAAY,SAAW,KAC5D,cAAe,QACd,KAAM,MAEX3R,EAAAA,EAAAA,GAAoB,KAAM4O,GAAa,EACrC5O,EAAAA,EAAAA,GAAoB,OAAQ6O,IAAalN,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,iBAAkB,IACpFhC,EAAAA,EAAAA,GAAoB,MAAO8O,GAAa,EACtC9O,EAAAA,EAAAA,GAAoB,SAAU,CAC5BH,OAAO+D,EAAAA,EAAAA,IAAgB,CAAEgO,OAAQH,EAAME,YACvCnO,QAAUC,GAAiB6N,EAAkBG,EAAM9R,IAAK8R,EAAME,aAC7DhQ,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,WAAWyP,EAAME,UAAY,MAAQ,aAAc,GAAI5C,IAClF0C,EAAMI,eACFrQ,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,OAAQuN,GAAa,CACtDC,IACAvN,EAAAA,EAAAA,IAAiB,KAAMC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,oCAAqC,OAEvFE,EAAAA,EAAAA,IAAoB,IAAI,YAIhC,WAGPN,EAAAA,EAAAA,IAAO2J,KACH/J,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa6H,EAAyB,CACnDzP,IAAK,EACLrB,SAAS+G,EAAAA,EAAAA,IAAO2J,IACf,KAAM,EAAG,CAAC,cACbrJ,EAAAA,EAAAA,IAAoB,IAAI,IAC5BlC,EAAAA,EAAAA,GAAoB,SAAU,CAC5BwD,QAASnC,EAAO,KAAOA,EAAO,IAAK6O,EAAAA,EAAAA,KAAgBzM,GAAiBrC,EAAKsC,QAAQC,KAAK,WAAY,CAAC,eAClGhC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,wBAAyB,QAGzDC,EAAG,KAEL,CAEJ,IClJA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,U,iCCLA,MACMvC,GAAa,CAAEG,MAAO,iBACtBD,GAAa,CAAEC,MAAO,mBACtBC,GAAa,CAAC,UAAW,eAM/B,QAA4Bc,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,kBACRuB,MAAO,CAAC,oBACRnB,MAAMC,GAAS,KAAEmB,IAEjB,MAAMkG,GAAQC,EAAAA,EAAAA,MACRxE,GAAWlB,EAAAA,EAAAA,IAAIyF,EAAMuJ,MAAMC,EAAIxJ,EAAMuJ,MAAMC,EAAI,IAGrD,SAASC,IACgB,KAAnBhO,EAAShB,OACXX,EAAK,mBAAoB2B,EAE7B,CACA,SAASiO,IACPjO,EAAShB,MAAQ,GACjBX,EAAK,mBAAoB2B,EAAShB,MACpC,CAEF,MAAO,CAAC5B,EAAUC,MACRG,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,GAAY,EAC3DM,EAAAA,EAAAA,GAAoB,MAAOJ,GAAY,EACrCyH,EAAAA,EAAAA,KAAgBrH,EAAAA,EAAAA,GAAoB,QAAS,CAC3CL,GAAI,WACJgH,KAAM,WACN,sBAAuBtF,EAAO,KAAOA,EAAO,GAAMoC,GAAkBO,EAAUhB,MAAQS,GACtFyO,SAASC,EAAAA,EAAAA,IAAUH,EAAa,CAAC,UACjCI,YAAahR,EAAKY,GAAG,4BACpB,KAAM,GAAIlC,IAAa,CACxB,CACE0H,EAAAA,GACAxD,EAAShB,WACT,EACA,CAAEqP,MAAM,MAGQ,KAAnBrO,EAAShB,QACLxB,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,IAAK,CACtCvF,IAAK,EACL2D,MAAO,cACP,cAAe,OACf2D,QAASyO,MAEX/P,EAAAA,EAAAA,IAAoB,IAAI,MAE9BlC,EAAAA,EAAAA,GAAoB,IAAK,CACvBH,OAAO+D,EAAAA,EAAAA,IAAgB,CAAC,eAAgB,CAAE,cAAkC,KAAnBI,EAAShB,SAClE,cAAe,OACfQ,QAASwO,GACR,KAAM,KAGb,IC1DA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,U,sBCLA,MAAM1S,GAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzEG,GAAa,CACjBC,GAAI,cACJE,MAAO,cAEHD,GAAa,CACjB1D,IAAK,EACL2D,MAAO,YAEHC,GAAa,CACjB5D,IAAK,EACL2D,MAAO,oBAEHE,GAA2BT,IAAa,KAAmBU,EAAAA,EAAAA,GAAoB,KAAM,KAAM,KAAM,KACjGC,GAAa,CAAEJ,MAAO,aACtBK,GAAa,CAAEL,MAAO,aACtBM,GAAa,CAAEN,MAAO,aACtBO,GAAa,CAAEP,MAAO,gBACtBQ,GAAa,CAAER,MAAO,gBACtBS,GAAc,CAAET,MAAO,gBACvBU,GAAc,CAAEV,MAAO,gBACvBW,GAAc,CAAEX,MAAO,eACvB8O,GAAc,CAAE9O,MAAO,gBACvB+O,GAAc,CAAE/O,MAAO,eACvBgP,GAAc,CAAEhP,MAAO,gBACvBiP,GAAc,CAAEjP,MAAO,eACvBkP,GAAc,CAAElP,MAAO,gBACvBmP,GAAc,CAAEnP,MAAO,eACvBoP,GAAc,CAAEpP,MAAO,gBACvBqP,GAAc,CAAC,WAAY,WA0BjC,QAA4BtO,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,aACRI,MAAMC,GAEN,MAAM9G,GAAQkI,EAAAA,EAAAA,KACRiG,GAAQC,EAAAA,EAAAA,MACR6F,GAASe,EAAAA,EAAAA,MAETkD,EAAwB,CAC5B,YACA,QACA,aACA,WACA,kBAEIC,EAAiB,aACvB,IAAIT,GAA4BxC,EAAAA,EAAAA,KAC9BkD,EAAAA,GAAAA,IAASjK,EAAMuJ,MAAOQ,EAAaC,IAErC,MAAMhQ,GAA0CC,EAAAA,EAAAA,KAC9C,IAAMpI,EAAMqI,QAAQpI,EAAAA,GAAAA,QAAAA,qBAEhBsW,GAAqCnO,EAAAA,EAAAA,KACzC,IAAMpI,EAAMqI,QAAQgQ,EAAAA,GAAAA,QAAAA,SAEhBC,GAAuClQ,EAAAA,EAAAA,KAC3C,IAAMpI,EAAMqI,QAAQgQ,EAAAA,GAAAA,QAAAA,oBAEhBlH,GAAuD/I,EAAAA,EAAAA,KAC3D,IAAMpI,EAAMqI,QAAQG,EAAAA,GAAAA,QAAAA,kBAKtB,SAAS+P,EAAUC,GACjBxY,EAAMgJ,SAASqP,EAAAA,GAAAA,QAAAA,UAA+BG,EAChD,CACA,SAASZ,EAAYhO,GACnB6O,EAAY,IAAK7O,EAAShB,MAC5B,CAEA,SAAS8P,EAAW9O,EAAkBxG,GACpCpD,EAAMgJ,SAASqP,EAAAA,GAAAA,QAAAA,YAAiC,CAC9CzO,WACAxG,SAEJ,CACA,SAASqV,EAAYE,EAAoBC,GACvClB,EAAMiB,GAAcC,EACD,aAAfD,IACFjB,EAAMmB,KAAO,GAEf5E,EAAO1K,KAAK,CAAEmF,KAAM,eAAgBgJ,SACtC,CAcF,OAnCE7L,EAAAA,EAAAA,KAAc,IAAM0M,EAAUb,MAuB9BtG,EAAAA,EAAAA,KAAY,KACVpR,EAAMgJ,SAASqP,EAAAA,GAAAA,QAAAA,YAAgC,KAGjDrL,EAAAA,EAAAA,KACE,IAAMmB,EAAMuJ,QACXoB,IACCpB,GAAQU,EAAAA,GAAAA,IAASU,EAAUZ,EAAaC,EAAgB,CAAET,UAC1Da,EAAUb,EAAM,IAIf,CAAC1Q,EAAUC,KAChB,MAAMC,GAAyBC,EAAAA,EAAAA,IAAkB,eAC3CoK,GAA0BpK,EAAAA,EAAAA,IAAkB,gBAC5CqK,GAAkBrK,EAAAA,EAAAA,IAAkB,QAE1C,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,GAAY,EAC3DmC,EAAAA,EAAAA,IAAa+J,EAAiB,KAAM,CAClCzB,OAAOpI,EAAAA,EAAAA,KAAS,IAAM,EACpBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,KAAiBkC,EAAAA,EAAAA,IAAWzC,EAAKY,GAAG,aAAc,KAAM,MAE3E6J,SAAS9J,EAAAA,EAAAA,KAAS,IAAM,EACtB/B,EAAAA,EAAAA,GAAoB,SAAU,CAC5BH,MAAO,aACP2D,QAASnC,EAAO,KAAOA,EAAO,IAAK6O,EAAAA,EAAAA,KAAgBzM,GAAiBrC,EAAKsC,QAAQC,KAAK,WAAY,CAAC,eAClGhC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,wBAAyB,IACrDH,EAAAA,EAAAA,IAAasR,GAAiB,CAAEC,mBAAoBpB,KACpDnQ,EAAAA,EAAAA,IAAawR,GAAAA,EAAe,CAC1BC,MAAM1R,EAAAA,EAAAA,IAAO2R,GAAAA,IACbC,SAAUlB,EACVR,OAAOlQ,EAAAA,EAAAA,IAAOkQ,GACdjX,QAAS,+BACT4Y,eAAgBZ,GACf,KAAM,EAAG,CAAC,OAAQ,UACK,KAAzBjR,EAAAA,EAAAA,IAAO+O,GAAOtU,SACVmF,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO7B,IAAY+B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,wBAAyB,MACvGR,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3B,GAAY,EACpDE,EAAAA,EAAAA,GAAoB,QAAS,KAAM,EACjCA,EAAAA,EAAAA,GAAoB,QAAS,KAAM,EACjCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9BD,IACAC,EAAAA,EAAAA,GAAoB,KAAMC,IAAY0B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,kBAAmB,IAClFhC,EAAAA,EAAAA,GAAoB,KAAME,IAAYyB,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,eAAgB,IAC/EhC,EAAAA,EAAAA,GAAoB,KAAMG,IAAYwB,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,mCAAoC,IACnGhC,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,KAAiBkC,EAAAA,EAAAA,IAAWzC,EAAKY,GAAG,mBAAoB,KAAM,IAC9FhC,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,iBAAkB,IAC3EhC,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,eAAgB,IACzEhC,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,iBAAkB,QAG/EhC,EAAAA,EAAAA,GAAoB,QAAS,KAAM,GAChCwB,EAAAA,EAAAA,KAAW,IAAOC,EAAAA,EAAAA,IAAoB4E,EAAAA,GAAW,MAAM4C,EAAAA,EAAAA,KAAYrH,EAAAA,EAAAA,IAAO+O,IAASlS,KAC1E+C,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,KAAM,CAC9CvF,IAAKuC,EAAKuF,UACT,EACDhE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,OAAQI,IAAYuB,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,yBAA0B,IAC3FH,EAAAA,EAAAA,IAAakC,GAAAA,EAAa,CAAEtF,KAAMA,GAAQ,KAAM,EAAG,CAAC,YAEtDuB,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,OAAQK,IAAYsB,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,kBAAmB,IACpFH,EAAAA,EAAAA,IAAaP,EAAwB,CACnCQ,GAAI,gBAAgBrD,EAAKuF,YACxB,CACDxH,SAASuF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBlD,EAAKuF,UAAW,MAEpD/B,EAAG,GACF,KAAM,CAAC,UAEZjC,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,OAAQM,IAAaqB,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,eAAgB,IAClFN,EAAAA,EAAAA,IAAiB,KAAMC,EAAAA,EAAAA,IAAiBlD,EAAKiV,OAAQ,MAEvD1T,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,OAAQO,IAAaoB,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,mCAAoC,IACtGN,EAAAA,EAAAA,IAAiB,KAAMC,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAO+R,GAAAA,GAAP/R,CAC1CnD,EAAKmV,YACLhS,EAAAA,EAAAA,IAAOW,GAAUsR,UACjBjS,EAAAA,EAAAA,IAAOW,GAAUuR,cACf,MAEF9T,EAAAA,EAAAA,GAAoB,KAAMQ,GAAa,EACrCR,EAAAA,EAAAA,GAAoB,OAAQ2O,IAAahN,EAAAA,EAAAA,KAAiBkC,EAAAA,EAAAA,IAAWzC,EAAKY,GAAG,mBAAoB,KAAM,IACvGN,EAAAA,EAAAA,IAAiB,KAAMC,EAAAA,EAAAA,IAAiBlD,EAAKsV,aAAc,MAE7D/T,EAAAA,EAAAA,GAAoB,KAAM4O,GAAa,EACrC5O,EAAAA,EAAAA,GAAoB,OAAQ6O,IAAalN,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,iBAAkB,IACpFhC,EAAAA,EAAAA,GAAoB,IAAK,CACvBH,OAAO+D,EAAAA,EAAAA,IAAgB,QAAQnF,EAAKkT,UAAY,SAAW,eAC3D,cAAe,QACd,KAAM,MAEX3R,EAAAA,EAAAA,GAAoB,KAAM8O,GAAa,EACrC9O,EAAAA,EAAAA,GAAoB,OAAQ+O,IAAapN,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,eAAgB,IAClFhC,EAAAA,EAAAA,GAAoB,IAAK,CACvBH,OAAO+D,EAAAA,EAAAA,IAAgB,QAAQnF,EAAKjB,MAAQ,SAAW,eACvD,cAAe,QACd,KAAM,MAEXwC,EAAAA,EAAAA,GAAoB,KAAMgP,GAAa,EACrChP,EAAAA,EAAAA,GAAoB,OAAQiP,IAAatN,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,iBAAkB,IACpFhC,EAAAA,EAAAA,GAAoB,SAAU,CAC5BH,OAAO+D,EAAAA,EAAAA,IAAgB,CAAEgO,OAAQnT,EAAKjB,QACtCqJ,SAAUpI,EAAKuF,YAAapC,EAAAA,EAAAA,IAAOW,GAAUyB,SAC7CR,QAAUC,GAAiBqP,EAAWrU,EAAKuF,UAAWvF,EAAKjB,SAC1DmE,EAAAA,EAAAA,IAAiBP,EAAKY,GACzB,qBACEvD,EAAKjB,MAAQ,SAAW,uBAExB,GAAI0R,WAGR,WAGPtN,EAAAA,EAAAA,IAAO8Q,GAAYO,OACfzR,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAakQ,GAAAA,EAAY,CACtC9X,IAAK,EACL4M,KAAM,eACN4J,YAAY9Q,EAAAA,EAAAA,IAAO8Q,GACnBZ,OAAOlQ,EAAAA,EAAAA,IAAOkQ,IACb,KAAM,EAAG,CAAC,aAAc,YAC3B5P,EAAAA,EAAAA,IAAoB,IAAI,IAC3BN,EAAAA,EAAAA,IAAO2J,KACH/J,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa6H,EAAyB,CACnDzP,IAAK,EACLrB,SAAS+G,EAAAA,EAAAA,IAAO2J,IACf,KAAM,EAAG,CAAC,cACbrJ,EAAAA,EAAAA,IAAoB,IAAI,IAC5BlC,EAAAA,EAAAA,GAAoB,SAAU,CAC5BwD,QAASnC,EAAO,KAAOA,EAAO,IAAK6O,EAAAA,EAAAA,KAAgBzM,GAAiBrC,EAAKsC,QAAQC,KAAK,WAAY,CAAC,eAClGhC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,wBAAyB,SAG7DC,EAAG,KAEL,CAEJ,ICvPA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,U,WCLA,MAAMvC,GAAa,CAAEG,MAAO,wCACtBD,GAAa,CAAEC,MAAO,6CACtBC,GAAa,CAAC,KAAM,OAAQ,UAAW,WAAY,WAWzD,QAA4Bc,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,kBACRC,MAAO,CACLmT,KAAM,KACNC,YAAa,KACb/E,QAAS,CAAErI,KAAMC,SACjBF,SAAU,CAAEC,KAAMC,QAASvK,SAAS,IAEtCyE,MAAMC,GAER,MAAMJ,EAAQI,GAIN,KAAE+S,EAAI,YAAEC,EAAW,SAAErN,IAAa1F,EAAAA,EAAAA,IAAOL,GAE/C,SAASqT,EAAQC,GACf,OAAQA,GACN,IAAK,UACL,IAAK,UACH,MAAO,iBAAiBA,EAAIC,sBAC9B,IAAK,OACL,IAAK,cACL,IAAK,SACH,MAAO,WACLvT,EAAMqO,QAAU,QAAU,MACxBiF,EAAIC,sBACV,QACA,IAAK,UACH,MAAO,YAAWvT,EAAMqO,QAAU,QAAU,IAElD,CAEF,MAAO,CAAC/N,EAAUC,MACRG,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,GAAY,EAC3DM,EAAAA,EAAAA,GAAoB,MAAOJ,GAAY,GACpC4B,EAAAA,EAAAA,KAAW,IAAOC,EAAAA,EAAAA,IAAoB4E,EAAAA,GAAW,MAAM4C,EAAAA,EAAAA,KAAYrH,EAAAA,EAAAA,IAAOqS,IAAQG,KACzE5S,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO,CAC/C5B,MAAO,8BACP3D,IAAKkY,GACJ,EACDpU,EAAAA,EAAAA,GAAoB,QAAS,KAAM,EACjCA,EAAAA,EAAAA,GAAoB,QAAS,CAC3B8G,KAAM,QACNnH,GAAIyU,EACJzN,KAAMyN,EACNE,SAAS1S,EAAAA,EAAAA,IAAOsS,GAAapO,MAAM,KAAK,KAAOsO,EAC/CvN,UAAUjF,EAAAA,EAAAA,IAAOiF,GACjBU,QAAU9D,GAAiBrC,EAAKsC,QAAQC,KAAKwQ,EAAQC,KACpD,KAAM,GAAItU,KACbE,EAAAA,EAAAA,GAAoB,OAAQ,MAAM2B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,qBAAqBoS,MAAS,UAG3F,UAIV,ICpEA,MAAM,GAAc,GAEpB,UCJA,MACM1U,GAAa,CAAEC,GAAI,gBACnBC,GAAa,CAAEC,MAAO,OAa5B,QAA4Be,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,QACRC,MAAO,CACLrC,KAAM,KACN2V,IAAK,MAEPnT,MAAMC,GAER,MAAMJ,EAAQI,GAON,KAAEzC,EAAI,IAAE2V,IAAQjT,EAAAA,EAAAA,IAAOL,GACvBmT,EAAO,CAAC,UAAW,cAAe,SAAU,QAEpD,MAAO,CAAC7S,EAAUC,KAChB,MAAM+E,GAAyB7E,EAAAA,EAAAA,IAAkB,eAEjD,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,GAAY,EAC3DmC,EAAAA,EAAAA,IAAa0S,GAAAA,EAAY,CAAE9V,MAAMmD,EAAAA,EAAAA,IAAOnD,IAAS,KAAM,EAAG,CAAC,UAC3DuB,EAAAA,EAAAA,GAAoB,MAAOJ,GAAY,EACrCiC,EAAAA,EAAAA,IAAa2S,GAAiB,CAC5BP,KAAMA,EACNC,aAAatS,EAAAA,EAAAA,IAAOwS,GACpBjF,SAAS,GACR,KAAM,EAAG,CAAC,iBACbtN,EAAAA,EAAAA,IAAauE,EAAwB,CAAE3H,MAAMmD,EAAAA,EAAAA,IAAOnD,IAAS,KAAM,EAAG,CAAC,YAEzE,CAEJ,IC7CA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,U,sBCLA,MAAMiB,GAAa,CACjBC,GAAI,mBACJE,MAAO,oBAEHD,GAAa,CAAEC,MAAO,mBAc5B,QAA4Be,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,kBACRC,MAAO,CACLrC,KAAM,MAERwC,MAAMC,GAER,MAAMJ,EAAQI,EAMN9G,GAAQkI,EAAAA,EAAAA,KAERmS,GAAmCjS,EAAAA,EAAAA,KACvC,IAAMpI,EAAMqI,QAAQG,EAAAA,GAAAA,QAAAA,YAEhB8R,GAAelS,EAAAA,EAAAA,KAAS,IAC5B1B,EAAMrC,KAAKkE,SACPgS,GAAAA,GAAe7T,EAAMrC,KAAKkE,UAC1BgS,GAAAA,GAAAA,KAEAC,GAAgBpS,EAAAA,EAAAA,KAAS,IAAO1B,EAAMrC,KAAKoW,MAAQ,SAAW,WAC9DhB,GAAWrR,EAAAA,EAAAA,KAAS,IACxB1B,EAAMrC,KAAKoV,SAAW/S,EAAMrC,KAAKoV,SAAW,iBAExCC,GAActR,EAAAA,EAAAA,KAAS,IAC3B1B,EAAMrC,KAAKqV,YAAchT,EAAMrC,KAAKqV,YAAc,eAE9CgB,GAAiBtS,EAAAA,EAAAA,KAAS,IAC9B1B,EAAMrC,KAAKqW,eAAiB,YAAc,WAG9C,MAAO,CAAC1T,EAAUC,MACRG,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,GAAY,EAC3DM,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,0BAA4B,IAAK,IAC1FhC,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAO8S,IAAgB,IACxE1U,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,0BAA4B,IAAK,IAC1FhC,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAOiS,IAAY,IACpE7T,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,6BAA+B,IAAK,IAC7FhC,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAOmT,GAAAA,GAAPnT,EAAsBA,EAAAA,EAAAA,IAAOkS,IAAclS,EAAAA,EAAAA,IAAO6S,KAAgB,IACnHzU,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,mCAAqC,IAAK,IACnGhC,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,iBAAgBJ,EAAAA,EAAAA,IAAOgT,OAAoB,IACpG5U,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,6BAA+B,IAAK,IAC7FhC,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,IAAiBP,EAAKY,GAChD,uBAAsBd,EAAQzC,KAAKuW,eAAiB,WAAa,YAC/D,IACRhV,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,6BAA+B,IAAK,IAC7FhC,EAAAA,EAAAA,GAAoB,KAAM,MAAM2B,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,WAAUJ,EAAAA,EAAAA,IAAOkT,OAAqB,MAEjG9U,EAAAA,EAAAA,GAAoB,MAAOJ,GAAY,EACrCI,EAAAA,EAAAA,GAAoB,SAAU,CAC5BwD,QAASnC,EAAO,KAAOA,EAAO,GAAMoC,GAAiBrC,EAAKsC,QAAQC,KAAK,gCACtEhC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,kCAAmC,IAC/DhC,EAAAA,EAAAA,GAAoB,SAAU,CAC5BwD,QAASnC,EAAO,KAAOA,EAAO,GAAMoC,GAAiBrC,EAAKsC,QAAQC,KAAK,QACtEhC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,gBAAiB,OAInD,IChFA,MAAM,GAAc,GAEpB,UCFA,MAAMtC,GAAa,CACjBC,GAAI,uBACJE,MAAO,eAeT,QAA4Be,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,QACRC,MAAO,CACLrC,KAAM,KACN2V,IAAK,MAEPnT,MAAMC,GAER,MAAMJ,EAAQI,EAON9G,GAAQkI,EAAAA,EAAAA,MAER,KAAE7D,EAAI,IAAE2V,IAAQjT,EAAAA,EAAAA,IAAOL,GACvBmT,EAAO,CAAC,UAAW,UAAW,UAAW,cAAe,UACxDgB,GAAUzS,EAAAA,EAAAA,KACd,IAAMpI,EAAMqI,QAAQpI,EAAAA,GAAAA,QAAAA,gBAGxB,MAAO,CAAC+G,EAAUC,KAChB,MAAM+E,GAAyB7E,EAAAA,EAAAA,IAAkB,eAC3CqK,GAAkBrK,EAAAA,EAAAA,IAAkB,QAE1C,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,GAAY,EAC3DmC,EAAAA,EAAAA,IAAa+J,EAAiB,KAAM,CAClCzB,OAAOpI,EAAAA,EAAAA,KAAS,IAAM,EACpBL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,iBAAgBJ,EAAAA,EAAAA,IAAOwS,eAAkB,MAErFvI,SAAS9J,EAAAA,EAAAA,KAAS,IAAM,EACtBF,EAAAA,EAAAA,IAAa2S,GAAiB,CAC5BP,KAAMA,EACNC,aAAatS,EAAAA,EAAAA,IAAOwS,GACpBjF,SAAS,EACTtI,UAAUjF,EAAAA,EAAAA,IAAOqT,IAChB,KAAM,EAAG,CAAC,cAAe,cAC5BpT,EAAAA,EAAAA,IAAauE,EAAwB,CAAE3H,MAAMmD,EAAAA,EAAAA,IAAOnD,IAAS,KAAM,EAAG,CAAC,YAEzEwD,EAAG,KAEL,CAEJ,IC9DA,MAAM,GAAc,GAEpB,U,WCFA,MACMvC,GAAa,CAAEC,GAAI,sBACnBC,GAAa,CAAEC,MAAO,yBACtBC,GAAa,CACjB5D,IAAK,EACL2D,MAAO,4BAEHE,GAAa,CAAC,YACdE,GAAa,CACjBJ,MAAO,aACP6O,IAAK,SAEDxO,GAAa,CAAC,YACdC,GAAa,CACjBN,MAAO,aACP6O,IAAK,kBAEDtO,GAAa,CACjBP,MAAO,aACP6O,IAAK,sBAEDrO,GAAa,CAAER,MAAO,gBACtBS,GAAc,CAClBT,MAAO,UACPiH,KAAM,UAyBR,QAA4BlG,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,qBACRC,MAAO,CACLrC,KAAM,MAERwC,MAAMC,GAER,MAAMJ,EAAQI,GAKN,KAAEzC,IAAS0C,EAAAA,EAAAA,IAAOL,GAElB1G,GAAQkI,EAAAA,EAAAA,KACR4S,GAAgC5F,EAAAA,EAAAA,IAAS,CAC7CoE,MAAO,GACPyB,SAAU,GACVC,aAAc,KAEVH,GAAUzS,EAAAA,EAAAA,KACd,IAAMpI,EAAMqI,QAAQpI,EAAAA,GAAAA,QAAAA,gBAEhBkK,GAAqC/B,EAAAA,EAAAA,KACzC,IAAMpI,EAAMqI,QAAQG,EAAAA,GAAAA,QAAAA,cAEhByS,GAAkC7S,EAAAA,EAAAA,KACtC,IAAMpI,EAAMqI,QAAQpI,EAAAA,GAAAA,QAAAA,cAEhBib,GAAcxS,EAAAA,EAAAA,KAAI,GAClByI,GAAuD/I,EAAAA,EAAAA,KAC3D,IAAMpI,EAAMqI,QAAQG,EAAAA,GAAAA,QAAAA,kBAEhB2S,GAAazS,EAAAA,EAAAA,KAAI,GACjB0S,GAA6B1S,EAAAA,EAAAA,KAAI,GAQvC,SAAS2S,IACPF,EAAWvS,OAAQ,CACrB,CACA,SAAS0S,EAAejX,GACtByW,EAASxB,MAAQjV,EAAKiV,KACxB,CACA,SAASiC,EAAeR,GACtBD,EAASC,SAAWA,CACtB,CACA,SAASS,EAAkBR,GACzBF,EAASE,aAAeA,CAC1B,CACA,SAASS,IACP,MAAMC,EAA+B,CACnCpC,MAAOwB,EAASxB,MAChByB,SAAUD,EAASC,UAEjBD,EAASE,eACXU,EAAQV,aAAeF,EAASE,cAElCE,EAAYtS,MAAQkS,EAASxB,QAAUjV,EAAKuE,MAAM0Q,MAClDtZ,EAAMgJ,SAAS/I,EAAAA,GAAAA,QAAAA,oBAA6Cyb,EAC9D,CACA,SAASC,EAAmB/S,GAC1BwS,EAAaxS,MAAQA,CACvB,CACA,SAASgT,EAAchS,GACrB5J,EAAMgJ,SAAS/I,EAAAA,GAAAA,QAAAA,eAAwC,CAAE2J,YAC3D,CAyBF,OA3DEkC,EAAAA,EAAAA,KAAU,KACJpF,EAAMrC,MACRiX,EAAe5U,EAAMrC,K,KAkCzB+M,EAAAA,EAAAA,KAAY,KACVpR,EAAMqR,OAAOpR,EAAAA,GAAAA,UAAAA,mBAA6C,GAC1DD,EAAMqR,OAAO7I,EAAAA,GAAAA,UAAAA,qBAA0C,KAGzDwE,EAAAA,EAAAA,KACE,IAAMiO,EAAUrS,QAChBiT,UACMC,IACFP,EAAe,IACfC,EAAkB,IAClBF,EAAejX,EAAKuE,OACpBuS,EAAWvS,OAAQ,E,KAIzBoE,EAAAA,EAAAA,KACE,IAAM3I,EAAKuE,MAAM0Q,QACjBuC,UACEP,EAAejX,EAAKuE,MAAM,IAIzB,CAAC5B,EAAUC,KAChB,MAAM8U,GAAmB5U,EAAAA,EAAAA,IAAkB,SACrCoK,GAA0BpK,EAAAA,EAAAA,IAAkB,gBAElD,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,GAAY,CAC1D8V,EAAaxS,QACTxB,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAaqS,EAAkB,CAC5Cja,IAAK,EACLiO,MAAO/I,EAAKY,GAAG,uBACfnH,QAASuG,EAAKY,GAAG,iCACjBoU,gBAAiB/U,EAAO,KAAOA,EAAO,GAAMoC,GAAiBuS,GAAcpU,EAAAA,EAAAA,IAAOnD,GAAMuF,WACxFqS,eAAgBhV,EAAO,KAAOA,EAAO,GAAMoC,GAAiBsS,GAAmB,KAC9E,KAAM,EAAG,CAAC,QAAS,cACtB7T,EAAAA,EAAAA,IAAoB,IAAI,IAC5BlC,EAAAA,EAAAA,GAAoB,MAAOJ,GAAY,EACpCgC,EAAAA,EAAAA,IAAO2J,KACH/J,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa6H,EAAyB,CACnDzP,IAAK,EACLrB,SAAS+G,EAAAA,EAAAA,IAAO2J,IACf,KAAM,EAAG,CAAC,cACbrJ,EAAAA,EAAAA,IAAoB,IAAI,IAC3BN,EAAAA,EAAAA,IAAOyT,KACH7T,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3B,IAAY6B,EAAAA,EAAAA,IAAiBP,EAAKY,GAC1E,2BACEsT,EAAYtS,QAASpB,EAAAA,EAAAA,IAAO2C,GAAWyM,yBAA2B,SAAW,aAE7E,KACJ9O,EAAAA,EAAAA,IAAoB,IAAI,IAC5BlC,EAAAA,EAAAA,GAAoB,OAAQ,CAC1BH,OAAO+D,EAAAA,EAAAA,IAAgB,CAAE0S,OAAQf,EAAWvS,QAC5C+M,UAAUG,EAAAA,EAAAA,IAAe2F,EAAe,CAAC,aACxC,EACD7V,EAAAA,EAAAA,GAAoB,QAASC,GAAY,EACvCyB,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,eAAiB,KAAM,IACjEqF,EAAAA,EAAAA,KAAgBrH,EAAAA,EAAAA,GAAoB,QAAS,CAC3CL,GAAI,QACJ,sBAAuB0B,EAAO,KAAOA,EAAO,GAAMoC,GAAkByR,EAASxB,MAASjQ,GACtFoD,UAAUjF,EAAAA,EAAAA,IAAOqT,GACjBsB,UAAU,EACVC,UAAWf,GACV,KAAM,GAAIvV,IAAa,CACxB,CAACsH,EAAAA,GAAa0N,EAASxB,YAG3B1T,EAAAA,EAAAA,GAAoB,QAASG,GAAY,EACvCuB,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,0BAA4B,KAAM,IAC5EH,EAAAA,EAAAA,IAAa4U,GAAAA,EAAe,CAC1B9W,GAAI,iBACJkH,UAAUjF,EAAAA,EAAAA,IAAOqT,GACjBE,SAAUD,EAASC,SACnBoB,UAAU,EACVG,iBAAkBf,EAClBgB,gBAAiBlB,GAChB,KAAM,EAAG,CAAC,WAAY,gBAE3BzV,EAAAA,EAAAA,GAAoB,QAASI,GAAY,EACvCsB,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,sBAAwB,IAAK,IACvEH,EAAAA,EAAAA,IAAa4U,GAAAA,EAAe,CAC1B9W,GAAI,qBACJkH,UAAUjF,EAAAA,EAAAA,IAAOqT,GACjB2B,eAAe,EACfzB,SAAUD,EAASE,aACnBC,WAAW,EACXqB,iBAAkBd,EAClBe,gBAAiBlB,GAChB,KAAM,EAAG,CAAC,WAAY,gBAE3BzV,EAAAA,EAAAA,GAAoB,MAAOK,GAAY,EACrCL,EAAAA,EAAAA,GAAoB,SAAUM,IAAaqB,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,mBAAoB,IACxFhC,EAAAA,EAAAA,GAAoB,SAAU,CAC5BH,MAAO,SACP2D,QAASnC,EAAO,KAAOA,EAAO,IAAK6O,EAAAA,EAAAA,KAAgBzM,GAAiBrC,EAAKsC,QAAQC,KAAK,aAAc,CAAC,eACpGhC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,mBAAoB,IAChDhC,EAAAA,EAAAA,GAAoB,SAAU,CAC5BH,MAAO,SACP2D,QAASnC,EAAO,KAAOA,EAAO,IAAK6O,EAAAA,EAAAA,KAAgBzM,GAAiBsS,GAAmB,IAAQ,CAAC,eAC/FpU,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,8BAA+B,MAE5D,GAAIjC,OAET,CAEJ,IC/NA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,U,WCLA,MACML,GAAa,CAAEC,GAAI,sBACnBC,GAAa,CAAEC,MAAO,yBACtBC,GAAa,CAAC,YACdC,GAAa,CACjBF,MAAO,aACP6O,IAAK,oBAEDzO,GAAa,CAAC,SACdC,GAAa,CACjBL,MAAO,aACP6O,IAAK,cAEDvO,GAAa,CAAC,YACdC,GAAa,CACjBP,MAAO,aACP6O,IAAK,aAEDrO,GAAa,CACjBR,MAAO,aACP6O,IAAK,cAEDpO,GAAc,CAAC,YACfC,GAAc,CAClBV,MAAO,aACP6O,IAAK,YAEDlO,GAAc,CAAC,YACfmO,GAAc,CAAE9O,MAAO,cACvB+O,GAAc,CAAE/O,MAAO,gBACvBgP,GAAc,CAClBhP,MAAO,UACPiH,KAAM,UAeR,QAA4BlG,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,mBACRC,MAAO,CACLrC,KAAM,MAERwC,MAAMC,GAER,MAAMJ,EAAQI,EAMN9G,GAAQkI,EAAAA,EAAAA,KAER4S,GAAyB5F,EAAAA,EAAAA,IAAS,CACtCuH,WAAY,GACZC,UAAW,GACXC,WAAY,GACZC,SAAU,GACVC,IAAK,KAEDC,GAAmB1U,EAAAA,EAAAA,KAAS,IAChC1B,EAAMrC,KAAKmV,YACPD,EAAAA,GAAAA,IACE7S,EAAMrC,KAAKmV,WACX9S,EAAMrC,KAAKoV,SACX/S,EAAMrC,KAAKqV,aAEb,KAEAmB,GAAUzS,EAAAA,EAAAA,KACd,IAAMpI,EAAMqI,QAAQpI,EAAAA,GAAAA,QAAAA,gBAEhBkR,GAAuD/I,EAAAA,EAAAA,KAC3D,IAAMpI,EAAMqI,QAAQG,EAAAA,GAAAA,QAAAA,kBAStB,SAAS8S,EAAejX,GACtByW,EAAS2B,WAAapY,EAAKoY,WAAapY,EAAKoY,WAAa,GAC1D3B,EAAS4B,UAAYrY,EAAKqY,UAAYrY,EAAKqY,UAAY,GACvD5B,EAAS6B,WAAatY,EAAKsY,YACvBI,EAAAA,GAAAA,GAAO,IAAIC,KAAK3Y,EAAKsY,YAAa,cAClC,GACJ7B,EAAS8B,SAAWvY,EAAKuY,SAAWvY,EAAKuY,SAAW,GACpD9B,EAAS+B,IAAMxY,EAAKwY,IAAMxY,EAAKwY,IAAM,EACvC,CACA,SAASI,EAAUrU,GACjBkS,EAAS+B,IAAMjU,CACjB,CACA,SAAS6S,IACPzb,EAAMgJ,SAAS/I,EAAAA,GAAAA,QAAAA,oBAA6C6a,EAC9D,CAMF,OA1BEhP,EAAAA,EAAAA,KAAU,KACJpF,EAAMrC,MACRiX,EAAe5U,EAAMrC,K,KAoBzB+M,EAAAA,EAAAA,KAAY,KACVpR,EAAMqR,OAAO7I,EAAAA,GAAAA,UAAAA,qBAA0C,IAGpD,CAACxB,EAAUC,KAChB,MAAMsK,GAA0BpK,EAAAA,EAAAA,IAAkB,gBAC5C+V,GAA4B/V,EAAAA,EAAAA,IAAkB,kBAEpD,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,GAAY,EAC3DM,EAAAA,EAAAA,GAAoB,MAAOJ,GAAY,EACpCgC,EAAAA,EAAAA,IAAO2J,KACH/J,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa6H,EAAyB,CACnDzP,IAAK,EACLrB,SAAS+G,EAAAA,EAAAA,IAAO2J,IACf,KAAM,EAAG,CAAC,cACbrJ,EAAAA,EAAAA,IAAoB,IAAI,IAC5BlC,EAAAA,EAAAA,GAAoB,OAAQ,CAC1B+P,UAAUG,EAAAA,EAAAA,IAAe2F,EAAe,CAAC,aACxC,EACD7V,EAAAA,EAAAA,GAAoB,QAASD,GAAY,EACvC2B,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,mCAAqC,IAAK,IACpFhC,EAAAA,EAAAA,GAAoB,QAAS,CAC3BL,GAAI,mBACJqD,OAAOpB,EAAAA,EAAAA,IAAOsV,GACdrQ,SAAU,IACT,KAAM,EAAG5G,OAEdD,EAAAA,EAAAA,GAAoB,QAASE,GAAY,EACvCwB,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,4BAA8B,IAAK,IAC7EqF,EAAAA,EAAAA,KAAgBrH,EAAAA,EAAAA,GAAoB,QAAS,CAC3CL,GAAI,aACJ,sBAAuB0B,EAAO,KAAOA,EAAO,GAAMoC,GAAkByR,EAAS2B,WAAcpT,GAC3FoD,UAAUjF,EAAAA,EAAAA,IAAOqT,IAChB,KAAM,EAAG9U,IAAa,CACvB,CAACqH,EAAAA,GAAa0N,EAAS2B,iBAG3B7W,EAAAA,EAAAA,GAAoB,QAASI,GAAY,EACvCsB,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,2BAA6B,IAAK,IAC5EqF,EAAAA,EAAAA,KAAgBrH,EAAAA,EAAAA,GAAoB,QAAS,CAC3CL,GAAI,YACJ,sBAAuB0B,EAAO,KAAOA,EAAO,GAAMoC,GAAkByR,EAAS4B,UAAarT,IACzF,KAAM,KAAM,CACb,CAAC+D,EAAAA,GAAa0N,EAAS4B,gBAG3B9W,EAAAA,EAAAA,GAAoB,QAASK,GAAY,EACvCqB,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,4BAA8B,IAAK,IAC7EqF,EAAAA,EAAAA,KAAgBrH,EAAAA,EAAAA,GAAoB,QAAS,CAC3CL,GAAI,aACJmH,KAAM,OACNjH,MAAO,aACP,sBAAuBwB,EAAO,KAAOA,EAAO,GAAMoC,GAAkByR,EAAS6B,WAActT,GAC3FoD,UAAUjF,EAAAA,EAAAA,IAAOqT,IAChB,KAAM,EAAG3U,IAAc,CACxB,CAACkH,EAAAA,GAAa0N,EAAS6B,iBAG3B/W,EAAAA,EAAAA,GAAoB,QAASO,GAAa,EACxCmB,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,0BAA4B,IAAK,IAC3EqF,EAAAA,EAAAA,KAAgBrH,EAAAA,EAAAA,GAAoB,QAAS,CAC3CL,GAAI,WACJ,sBAAuB0B,EAAO,KAAOA,EAAO,GAAMoC,GAAkByR,EAAS8B,SAAYvT,GACzFoD,UAAUjF,EAAAA,EAAAA,IAAOqT,IAChB,KAAM,EAAGzU,IAAc,CACxB,CAACgH,EAAAA,GAAa0N,EAAS8B,eAG3BhX,EAAAA,EAAAA,GAAoB,QAAS2O,GAAa,EACxCjN,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,qBAAuB,IAAK,IACtEH,EAAAA,EAAAA,IAAayV,EAA2B,CACtC3Q,KAAM,MACNC,UAAW,IACXI,MAAOkO,EAAS+B,IAChBpQ,UAAUjF,EAAAA,EAAAA,IAAOqT,GACjBsC,cAAeF,GACd,KAAM,EAAG,CAAC,QAAS,gBAExBrX,EAAAA,EAAAA,GAAoB,MAAO4O,GAAa,EACtC5O,EAAAA,EAAAA,GAAoB,SAAU6O,IAAalN,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,mBAAoB,IACxFhC,EAAAA,EAAAA,GAAoB,SAAU,CAC5BH,MAAO,SACP2D,QAASnC,EAAO,KAAOA,EAAO,IAAK6O,EAAAA,EAAAA,KAAgBzM,GAAiBrC,EAAKsC,QAAQC,KAAK,aAAc,CAAC,eACpGhC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,mBAAoB,MAEjD,GAAIlC,OAET,CAEJ,ICjMA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,UCLA,MAAMR,GAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzEG,GAAa,CAAEC,GAAI,wBACnBC,GAAa,CAAEC,MAAO,qBACtBC,GAAa,CAAC,YACdC,GAAa,CAAEF,MAAO,gBACtBI,GAAa,CAAEJ,MAAO,YACtBK,GAA2BZ,IAAa,KAAmBU,EAAAA,EAAAA,GAAoB,IAAK,CACxFH,MAAO,oBACP,cAAe,QACd,MAAO,KACJM,GAAa,CAAEN,MAAO,mBACtBO,GAAa,CAAC,YAepB,QAA4BQ,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,qBACRC,MAAO,CACLrC,KAAM,MAERwC,MAAMC,GAER,MAAMJ,EAAQI,EAMN9G,GAAQkI,EAAAA,EAAAA,MAER,KAAE7D,IAAS0C,EAAAA,EAAAA,IAAOL,GAClByK,GAAuD/I,EAAAA,EAAAA,KAC3D,IAAMpI,EAAMqI,QAAQG,EAAAA,GAAAA,QAAAA,kBAEhB2B,GAAqC/B,EAAAA,EAAAA,KACzC,IAAMpI,EAAMqI,QAAQG,EAAAA,GAAAA,QAAAA,cAEhB4U,EAAgBjT,EAAUvB,MAAMwM,sBAClCgB,EAAAA,EAAAA,GAAoBjM,EAAUvB,MAAMwM,sBACpC,GACEiI,GAAgC3U,EAAAA,EAAAA,IAAI,MAE1C,SAAS4U,IACPtd,EAAMgJ,SAAS/I,EAAAA,GAAAA,QAAAA,eACjB,CACA,SAASsd,EAAkBxQ,GACrBA,EAAMzG,OAAOkX,QACfH,EAAYzU,MAAQmE,EAAMzG,OAAOkX,MAAM,GAE3C,CACA,SAASC,IACHJ,EAAYzU,OACd5I,EAAMgJ,SAAS/I,EAAAA,GAAAA,QAAAA,oBAA6C,CAC1Dyd,QAASL,EAAYzU,OAG3B,CAMF,OAJEwI,EAAAA,EAAAA,KAAY,KACVpR,EAAMqR,OAAO7I,EAAAA,GAAAA,UAAAA,qBAA0C,IAGpD,CAACxB,EAAUC,KAChB,MAAMsK,GAA0BpK,EAAAA,EAAAA,IAAkB,gBAElD,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO/B,GAAY,EAC3DM,EAAAA,EAAAA,GAAoB,MAAOJ,GAAY,EACpCgC,EAAAA,EAAAA,IAAO2J,KACH/J,EAAAA,EAAAA,OAAcsC,EAAAA,EAAAA,IAAa6H,EAAyB,CACnDzP,IAAK,EACLrB,SAAS+G,EAAAA,EAAAA,IAAO2J,IACf,KAAM,EAAG,CAAC,cACbrJ,EAAAA,EAAAA,IAAoB,IAAI,IAC5BL,EAAAA,EAAAA,IAAakC,GAAAA,EAAa,CAAEtF,MAAMmD,EAAAA,EAAAA,IAAOnD,IAAS,KAAM,EAAG,CAAC,UAC5DuB,EAAAA,EAAAA,GAAoB,OAAQ,CAC1B+P,UAAUG,EAAAA,EAAAA,IAAe2H,EAAmB,CAAC,aAC5C,EACD7X,EAAAA,EAAAA,GAAoB,QAAS,CAC3B8G,KAAM,OACNH,KAAM,UACNoR,OAAQ,iBACRxQ,QAASoQ,GACR,KAAM,KACT3X,EAAAA,EAAAA,GAAoB,MAAOD,GAAY,EACrCC,EAAAA,EAAAA,GAAoB,OAAQC,GAAY,CACtCC,IACAwB,EAAAA,EAAAA,IAAiB,KAAMC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,sBAAwB,MAAOL,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAO4V,IAAiB,QAG5HxX,EAAAA,EAAAA,GAAoB,MAAOG,GAAY,EACrCH,EAAAA,EAAAA,GAAoB,SAAU,CAC5B8G,KAAM,SACND,UAAW4Q,EAAYzU,QACtBrB,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,gCAAiC,EAAG5B,KAC/DwB,EAAAA,EAAAA,IAAOnD,GAAMqZ,UACTtW,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,SAAU,CAC3CvF,IAAK,EACL2D,MAAO,SACP2D,QAASkU,IACR/V,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,gCAAiC,KAC7DE,EAAAA,EAAAA,IAAoB,IAAI,IAC5BlC,EAAAA,EAAAA,GAAoB,SAAU,CAC5BH,MAAO,SACP2D,QAASnC,EAAO,KAAOA,EAAO,GAAMoC,GAAiBrC,EAAKsC,QAAQC,KAAK,eACtEhC,EAAAA,EAAAA,IAAiBP,EAAKY,GAAG,iCAAkC,MAE/D,GAAIlC,OAET,CAEJ,ICtHA,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,YAAY,qBAEvE,UCRO,MAAMkY,GAAY,CACvB,iBACA,eACA,iBACA,gBACA,eACA,oBACA,eACA,kBACA,sBACA,cACA,kBACA,eACA,gBACA,kBACA,iBACA,kBACA,kBACA,iBACA,eACA,kBACA,eACA,oBACA,oBACA,iCACA,8BACA,4BACA,0BACA,6BACA,4BACA,iCACA,0BACA,6BACA,6BACA,4BACA,4BACA,mBACA,mBACA,gBACA,yBACA,mBACA,gBACA,iBACA,uBACA,oBACA,iBACA,gBACA,wBACA,uBACA,iBACA,kBACA,kBACA,kBACA,oBACA,qBACA,kBACA,iBACA,kBACA,uBACA,iBACA,uBACA,iBACA,kBACA,mBACA,mBACA,sBACA,oBACA,sBACA,oBACA,kBACA,oBACA,qBACA,oBACA,oBACA,iBACA,kBACA,iBACA,qBACA,+BACA,uBACA,0BACA,6BACA,4BACA,wBACA,4BACA,0BACA,iBACA,kBACA,kBACA,iBACA,8BACA,8BACA,iBACA,eACA,sBACA,iBACA,kBACA,iBACA,qBACA,oBACA,mBACA,oBACA,iBACA,qBACA,sBACA,mBACA,kBACA,oBACA,qBACA,iBACA,mBACA,kBACA,eACA,kBACA,8BACA,8BACA,iCACA,kBACA,iBACA,sBACA,qBACA,kBACA,yBACA,wBACA,sBACA,sBACA,uBACA,sBACA,uBACA,iBACA,iBACA,mBACA,qBACA,mBACA,mBACA,wBACA,oBACA,uBACA,gBACA,mBACA,wBACA,sBACA,gBACA,sBACA,kBACA,kBACA,oBACA,qBACA,mBACA,kBACA,sBACA,mBACA,mBACA,4BACA,uBACA,oBACA,oBACA,qBACA,mBACA,mBACA,oBACA,cACA,aACA,cACA,aACA,cACA,gBACA,cACA,eACA,YACA,eACA,eACA,cACA,eACA,cACA,aACA,kBACA,eACA,gBACA,aACA,YACA,aACA,gBACA,iBACA,YACA,cACA,mBACA,iBACA,YACA,eACA,eACA,gBACA,iBACA,aACA,iBACA,eACA,iBACA,gBACA,eACA,mBACA,oBACA,eACA,aACA,eACA,gBACA,cACA,eACA,oBACA,mBACA,YACA,YACA,iBACA,iBACA,aACA,gBACA,iBACA,cACA,gBACA,iBACA,aACA,gBACA,iBACA,qBACA,cACA,gBACA,eACA,cACA,eACA,aACA,aACA,mBACA,cACA,gBACA,mBACA,eACA,cACA,qBACA,eACA,kBACA,mBACA,kBACA,sBACA,iBACA,mBACA,qBACA,yBACA,mBACA,qBACA,qBACA,wBACA,mBACA,mBACA,kBACA,mBACA,qBACA,sBACA,sBACA,kBACA,mBACA,mBACA,iBACA,mBACA,gBACA,kBACA,gBACA,kBACA,mBACA,kBACA,kBACA,oBACA,gBACA,mBACA,kBACA,kBACA,qBACA,cACA,eACA,gBACA,gBACA,oBACA,gBACA,eACA,eACA,gBACA,gBACA,cACA,eACA,gBACA,cACA,cACA,gBACA,iBACA,oBACA,eACA,mBACA,iBACA,gBACA,mBACA,kBACA,gBACA,iBACA,mBACA,gBACA,oBACA,gBACA,gBACA,mBACA,eACA,mBACA,cACA,kBACA,mB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","sources":["webpack://fittrackee_client/./src/api/authApi.ts","webpack://fittrackee_client/./src/api/pending.ts","webpack://fittrackee_client/./src/i18n.ts","webpack://fittrackee_client/./src/locales/de/about.json","webpack://fittrackee_client/./src/locales/de/administration.json","webpack://fittrackee_client/./src/locales/de/api.json","webpack://fittrackee_client/./src/locales/de/buttons.json","webpack://fittrackee_client/./src/locales/de/common.json","webpack://fittrackee_client/./src/locales/de/dashboard.json","webpack://fittrackee_client/./src/locales/de/error.json","webpack://fittrackee_client/./src/locales/de/oauth2.json","webpack://fittrackee_client/./src/locales/de/sports.json","webpack://fittrackee_client/./src/locales/de/statistics.json","webpack://fittrackee_client/./src/locales/de/user.json","webpack://fittrackee_client/./src/locales/de/workouts.json","webpack://fittrackee_client/./src/locales/de/de.ts","webpack://fittrackee_client/./src/locales/en/about.json","webpack://fittrackee_client/./src/locales/en/administration.json","webpack://fittrackee_client/./src/locales/en/api.json","webpack://fittrackee_client/./src/locales/en/buttons.json","webpack://fittrackee_client/./src/locales/en/common.json","webpack://fittrackee_client/./src/locales/en/dashboard.json","webpack://fittrackee_client/./src/locales/en/error.json","webpack://fittrackee_client/./src/locales/en/oauth2.json","webpack://fittrackee_client/./src/locales/en/sports.json","webpack://fittrackee_client/./src/locales/en/statistics.json","webpack://fittrackee_client/./src/locales/en/user.json","webpack://fittrackee_client/./src/locales/en/workouts.json","webpack://fittrackee_client/./src/locales/en/en.ts","webpack://fittrackee_client/./src/locales/fr/about.json","webpack://fittrackee_client/./src/locales/fr/administration.json","webpack://fittrackee_client/./src/locales/fr/api.json","webpack://fittrackee_client/./src/locales/fr/buttons.json","webpack://fittrackee_client/./src/locales/fr/common.json","webpack://fittrackee_client/./src/locales/fr/dashboard.json","webpack://fittrackee_client/./src/locales/fr/error.json","webpack://fittrackee_client/./src/locales/fr/oauth2.json","webpack://fittrackee_client/./src/locales/fr/sports.json","webpack://fittrackee_client/./src/locales/fr/statistics.json","webpack://fittrackee_client/./src/locales/fr/user.json","webpack://fittrackee_client/./src/locales/fr/workouts.json","webpack://fittrackee_client/./src/locales/fr/fr.ts","webpack://fittrackee_client/./src/locales/nb/about.json","webpack://fittrackee_client/./src/locales/nb/administration.json","webpack://fittrackee_client/./src/locales/nb/api.json","webpack://fittrackee_client/./src/locales/nb/buttons.json","webpack://fittrackee_client/./src/locales/nb/common.json","webpack://fittrackee_client/./src/locales/nb/dashboard.json","webpack://fittrackee_client/./src/locales/nb/error.json","webpack://fittrackee_client/./src/locales/nb/oauth2.json","webpack://fittrackee_client/./src/locales/nb/sports.json","webpack://fittrackee_client/./src/locales/nb/statistics.json","webpack://fittrackee_client/./src/locales/nb/user.json","webpack://fittrackee_client/./src/locales/nb/workouts.json","webpack://fittrackee_client/./src/locales/nb/nb.ts","webpack://fittrackee_client/./src/registerServiceWorker.ts","webpack://fittrackee_client/./src/components/Footer.vue?771f","webpack://fittrackee_client/./src/components/Footer.vue","webpack://fittrackee_client/./src/components/NavBar.vue?9bec","webpack://fittrackee_client/./src/components/NavBar.vue","webpack://fittrackee_client/./src/components/NoConfig.vue?541b","webpack://fittrackee_client/./src/components/NoConfig.vue","webpack://fittrackee_client/./src/App.vue?2a5e","webpack://fittrackee_client/./src/App.vue","webpack://fittrackee_client/./src/components/Common/AlertMessage.vue?3150","webpack://fittrackee_client/./src/components/Common/AlertMessage.vue","webpack://fittrackee_client/./src/components/Common/CustomTextArea.vue?8efa","webpack://fittrackee_client/./src/components/Common/CustomTextArea.vue","webpack://fittrackee_client/./src/components/Common/Distance.vue?edec","webpack://fittrackee_client/./src/components/Common/Distance.vue","webpack://fittrackee_client/./src/components/Common/Dropdown.vue?f7d5","webpack://fittrackee_client/./src/components/Common/Dropdown.vue","webpack://fittrackee_client/./src/components/Common/ErrorMessage.vue?c328","webpack://fittrackee_client/./src/components/Common/ErrorMessage.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/CyclingSport.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/CyclingSport.vue?4f4b","webpack://fittrackee_client/./src/components/Common/Images/SportImage/CyclingTransport.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/CyclingTransport.vue?a81c","webpack://fittrackee_client/./src/components/Common/Images/SportImage/CyclingVirtual.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/CyclingVirtual.vue?1bd1","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Hiking.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Hiking.vue?cf60","webpack://fittrackee_client/./src/components/Common/Images/SportImage/MountainBiking.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/MountainBiking.vue?8a30","webpack://fittrackee_client/./src/components/Common/Images/SportImage/MountainBikingElectric.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/MountainBikingElectric.vue?f7ee","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Rowing.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Rowing.vue?c24b","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Running.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Running.vue?2cd2","webpack://fittrackee_client/./src/components/Common/Images/SportImage/SkiingAlpine.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/SkiingAlpine.vue?f1ff","webpack://fittrackee_client/./src/components/Common/Images/SportImage/SkiingCrossCountry.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/SkiingCrossCountry.vue?f0db","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Snowshoes.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Snowshoes.vue?cfb7","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Trail.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Trail.vue?5564","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Walking.vue","webpack://fittrackee_client/./src/components/Common/Images/SportImage/Walking.vue?f92f","webpack://fittrackee_client/./src/components/Common/Images/SportImage/index.vue?1cdd","webpack://fittrackee_client/./src/components/Common/Images/SportImage/index.vue","webpack://fittrackee_client/./src/components/Common/Loader.vue","webpack://fittrackee_client/./src/components/Common/Loader.vue?0b74","webpack://fittrackee_client/./src/components/Common/Modal.vue?0d9d","webpack://fittrackee_client/./src/components/Common/Modal.vue","webpack://fittrackee_client/./src/custom-components.ts","webpack://fittrackee_client/./src/directives.ts","webpack://fittrackee_client/./src/main.ts","webpack://fittrackee_client/./src/components/Administration/AdminApplication.vue?dc32","webpack://fittrackee_client/./src/components/Administration/AdminApplication.vue","webpack://fittrackee_client/./src/components/Common/StatCard.vue?3301","webpack://fittrackee_client/./src/components/Common/StatCard.vue","webpack://fittrackee_client/./src/components/Administration/AppStatsCards.vue?60fb","webpack://fittrackee_client/./src/components/Administration/AppStatsCards.vue","webpack://fittrackee_client/./src/components/Administration/AdminMenu.vue?0597","webpack://fittrackee_client/./src/components/Administration/AdminMenu.vue","webpack://fittrackee_client/./src/components/Administration/AdminSports.vue?05cc","webpack://fittrackee_client/./src/components/Administration/AdminSports.vue","webpack://fittrackee_client/./src/components/Users/UsersNameFilter.vue?0a55","webpack://fittrackee_client/./src/components/Users/UsersNameFilter.vue","webpack://fittrackee_client/./src/components/Administration/AdminUsers.vue?5a76","webpack://fittrackee_client/./src/components/Administration/AdminUsers.vue","webpack://fittrackee_client/./src/components/User/UserProfileTabs.vue?63ef","webpack://fittrackee_client/./src/components/User/UserProfileTabs.vue","webpack://fittrackee_client/./src/components/User/ProfileDisplay/index.vue?c76d","webpack://fittrackee_client/./src/components/User/ProfileDisplay/index.vue","webpack://fittrackee_client/./src/components/User/ProfileDisplay/UserPreferences.vue?a91b","webpack://fittrackee_client/./src/components/User/ProfileDisplay/UserPreferences.vue","webpack://fittrackee_client/./src/components/User/ProfileEdition/index.vue?8616","webpack://fittrackee_client/./src/components/User/ProfileEdition/index.vue","webpack://fittrackee_client/./src/components/User/ProfileEdition/UserAccountEdition.vue?a978","webpack://fittrackee_client/./src/components/User/ProfileEdition/UserAccountEdition.vue","webpack://fittrackee_client/./src/components/User/ProfileEdition/UserInfosEdition.vue?38a2","webpack://fittrackee_client/./src/components/User/ProfileEdition/UserInfosEdition.vue","webpack://fittrackee_client/./src/components/User/ProfileEdition/UserPictureEdition.vue?05c1","webpack://fittrackee_client/./src/components/User/ProfileEdition/UserPictureEdition.vue","webpack://fittrackee_client/./src/utils/timezone.ts","webpack://fittrackee_client/./src/components/User/ProfileEdition/TimezoneDropdown.vue?5519","webpack://fittrackee_client/./src/components/User/ProfileEdition/TimezoneDropdown.vue","webpack://fittrackee_client/./src/components/User/ProfileEdition/UserPreferencesEdition.vue?76a6","webpack://fittrackee_client/./src/components/User/ProfileEdition/UserPreferencesEdition.vue","webpack://fittrackee_client/./src/utils/oauth.ts","webpack://fittrackee_client/./src/components/User/UserApps/AddUserApp.vue?64f1","webpack://fittrackee_client/./src/components/User/UserApps/AddUserApp.vue","webpack://fittrackee_client/./src/components/User/UserApps/AuthorizeUserApp.vue?3371","webpack://fittrackee_client/./src/components/User/UserApps/AuthorizeUserApp.vue","webpack://fittrackee_client/./src/components/User/UserApps/index.vue?889c","webpack://fittrackee_client/./src/components/User/UserApps/index.vue","webpack://fittrackee_client/./src/components/User/UserApps/UserApp.vue?df25","webpack://fittrackee_client/./src/components/User/UserApps/UserApp.vue","webpack://fittrackee_client/./src/components/User/UserApps/UserAppsList.vue?6c20","webpack://fittrackee_client/./src/components/User/UserApps/UserAppsList.vue","webpack://fittrackee_client/./src/components/User/UserSportPreferences.vue?5e40","webpack://fittrackee_client/./src/components/User/UserSportPreferences.vue","webpack://fittrackee_client/./src/components/About.vue?b879","webpack://fittrackee_client/./src/components/About.vue","webpack://fittrackee_client/./src/components/BikePic.vue","webpack://fittrackee_client/./src/components/BikePic.vue?a9e2","webpack://fittrackee_client/./src/views/AboutView.vue?9f41","webpack://fittrackee_client/./src/views/AboutView.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutCard.vue?56e2","webpack://fittrackee_client/./src/components/Workout/WorkoutCard.vue","webpack://fittrackee_client/./src/components/Dashboard/Timeline.vue?046b","webpack://fittrackee_client/./src/components/Dashboard/Timeline.vue","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarWorkout.vue?609b","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarWorkout.vue","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/DonutChart.vue?08e2","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/DonutChart.vue","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarWorkoutsChart.vue?1aa0","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarWorkoutsChart.vue","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarWorkouts.vue?7291","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarWorkouts.vue","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarCells.vue?b7e6","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarCells.vue","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarDays.vue?4138","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarDays.vue","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarHeader.vue?7e24","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/CalendarHeader.vue","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/index.vue?c598","webpack://fittrackee_client/./src/components/Dashboard/UserCalendar/index.vue","webpack://fittrackee_client/./src/components/Dashboard/UserMonthStats.vue?9128","webpack://fittrackee_client/./src/components/Dashboard/UserMonthStats.vue","webpack://fittrackee_client/./src/utils/records.ts","webpack://fittrackee_client/./src/components/Dashboard/UserRecords/RecordsCard.vue?9439","webpack://fittrackee_client/./src/components/Dashboard/UserRecords/RecordsCard.vue","webpack://fittrackee_client/./src/components/Dashboard/UserRecords/index.vue?7d56","webpack://fittrackee_client/./src/components/Dashboard/UserRecords/index.vue","webpack://fittrackee_client/./src/components/Dashboard/UserStatsCards/index.vue?c362","webpack://fittrackee_client/./src/components/Dashboard/UserStatsCards/index.vue","webpack://fittrackee_client/./src/views/Dashboard.vue?95bb","webpack://fittrackee_client/./src/views/Dashboard.vue","webpack://fittrackee_client/./src/views/NotFoundView.vue?8c2c","webpack://fittrackee_client/./src/views/NotFoundView.vue","webpack://fittrackee_client/./src/views/user/LoginOrRegister.vue?46fb","webpack://fittrackee_client/./src/views/user/LoginOrRegister.vue","webpack://fittrackee_client/./src/router/index.ts","webpack://fittrackee_client/./src/store/modules/authUser/enums.ts","webpack://fittrackee_client/./src/store/modules/oauth2/enums.ts","webpack://fittrackee_client/./src/store/modules/root/enums.ts","webpack://fittrackee_client/./src/store/modules/sports/enums.ts","webpack://fittrackee_client/./src/store/modules/statistics/enums.ts","webpack://fittrackee_client/./src/store/modules/users/enums.ts","webpack://fittrackee_client/./src/store/constants.ts","webpack://fittrackee_client/./src/api/defaultApi.ts","webpack://fittrackee_client/./src/store/modules/users/actions.ts","webpack://fittrackee_client/./src/store/modules/authUser/actions.ts","webpack://fittrackee_client/./src/store/modules/authUser/getters.ts","webpack://fittrackee_client/./src/store/modules/authUser/mutations.ts","webpack://fittrackee_client/./src/store/modules/authUser/state.ts","webpack://fittrackee_client/./src/store/modules/authUser/index.ts","webpack://fittrackee_client/./src/store/modules/oauth2/actions.ts","webpack://fittrackee_client/./src/store/modules/oauth2/getters.ts","webpack://fittrackee_client/./src/store/modules/oauth2/mutations.ts","webpack://fittrackee_client/./src/store/modules/oauth2/state.ts","webpack://fittrackee_client/./src/store/modules/oauth2/index.ts","webpack://fittrackee_client/./src/store/modules/root/actions.ts","webpack://fittrackee_client/./src/store/modules/root/getters.ts","webpack://fittrackee_client/./src/store/modules/root/mutations.ts","webpack://fittrackee_client/./src/store/modules/root/state.ts","webpack://fittrackee_client/./src/store/modules/sports/actions.ts","webpack://fittrackee_client/./src/store/modules/sports/getters.ts","webpack://fittrackee_client/./src/store/modules/sports/mutations.ts","webpack://fittrackee_client/./src/store/modules/sports/state.ts","webpack://fittrackee_client/./src/store/modules/sports/index.ts","webpack://fittrackee_client/./src/store/modules/statistics/actions.ts","webpack://fittrackee_client/./src/store/modules/statistics/getters.ts","webpack://fittrackee_client/./src/store/modules/statistics/mutations.ts","webpack://fittrackee_client/./src/store/modules/statistics/state.ts","webpack://fittrackee_client/./src/store/modules/statistics/index.ts","webpack://fittrackee_client/./src/store/modules/users/getters.ts","webpack://fittrackee_client/./src/store/modules/users/mutations.ts","webpack://fittrackee_client/./src/store/modules/users/state.ts","webpack://fittrackee_client/./src/store/modules/users/index.ts","webpack://fittrackee_client/./src/store/modules/workouts/actions.ts","webpack://fittrackee_client/./src/store/modules/workouts/getters.ts","webpack://fittrackee_client/./src/store/modules/workouts/mutations.ts","webpack://fittrackee_client/./src/store/modules/workouts/state.ts","webpack://fittrackee_client/./src/store/modules/workouts/index.ts","webpack://fittrackee_client/./src/store/modules/root/index.ts","webpack://fittrackee_client/./src/store/index.ts","webpack://fittrackee_client/./src/store/modules/workouts/enums.ts","webpack://fittrackee_client/./src/use/useStore.ts","webpack://fittrackee_client/./src/utils/api.ts","webpack://fittrackee_client/./src/utils/dates.ts","webpack://fittrackee_client/./src/utils/files.ts","webpack://fittrackee_client/./src/utils/index.ts","webpack://fittrackee_client/./src/utils/locales.ts","webpack://fittrackee_client/./src/utils/sports.ts","webpack://fittrackee_client/./src/utils/statistics.ts","webpack://fittrackee_client/./src/utils/units.ts","webpack://fittrackee_client/./src/utils/workouts.ts","webpack://fittrackee_client/./src/components/Common/Card.vue","webpack://fittrackee_client/./src/components/Common/Card.vue?88f1","webpack://fittrackee_client/./src/components/Common/FilterSelects.vue?7823","webpack://fittrackee_client/./src/components/Common/FilterSelects.vue","webpack://fittrackee_client/./src/components/Common/Images/ErrorImg.vue","webpack://fittrackee_client/./src/components/Common/Images/ErrorImg.vue?6a2a","webpack://fittrackee_client/./src/components/Common/Error.vue?5a3e","webpack://fittrackee_client/./src/components/Common/Error.vue","webpack://fittrackee_client/./src/components/Common/NotFound.vue?45eb","webpack://fittrackee_client/./src/components/Common/NotFound.vue","webpack://fittrackee_client/./src/components/Common/Pagination.vue?e0b0","webpack://fittrackee_client/./src/components/Common/Pagination.vue","webpack://fittrackee_client/./src/utils/password.ts","webpack://fittrackee_client/./src/components/Common/PasswordStength.vue?1d44","webpack://fittrackee_client/./src/components/Common/PasswordStength.vue","webpack://fittrackee_client/./src/components/Common/PasswordInput.vue?e9ce","webpack://fittrackee_client/./src/components/Common/PasswordInput.vue","webpack://fittrackee_client/./src/components/Common/StaticMap.vue?d223","webpack://fittrackee_client/./src/components/Common/StaticMap.vue","webpack://fittrackee_client/./src/components/Common/StatsChart/index.vue?f4b9","webpack://fittrackee_client/./src/components/Common/StatsChart/Chart.vue?1063","webpack://fittrackee_client/./src/utils/duration.ts","webpack://fittrackee_client/./src/utils/tooltip.ts","webpack://fittrackee_client/./src/components/Common/StatsChart/Chart.vue?960e","webpack://fittrackee_client/./src/components/Common/StatsChart/Chart.vue","webpack://fittrackee_client/./src/components/Common/StatsChart/index.vue?279d","webpack://fittrackee_client/./src/components/Common/StatsChart/index.vue","webpack://fittrackee_client/./src/components/User/ProfileDisplay/UserHeader.vue?bf09","webpack://fittrackee_client/./src/components/User/ProfileDisplay/UserHeader.vue","webpack://fittrackee_client/./src/components/User/ProfileDisplay/UserInfos.vue?77c4","webpack://fittrackee_client/./src/components/User/ProfileDisplay/UserInfos.vue","webpack://fittrackee_client/./src/components/User/UserAuthForm.vue?09b2","webpack://fittrackee_client/./src/components/User/UserAuthForm.vue","webpack://fittrackee_client/./src/components/User/UserPicture.vue?4869","webpack://fittrackee_client/./src/components/User/UserPicture.vue","webpack://fittrackee_client/./src/components/Workouts/NoWorkouts.vue","webpack://fittrackee_client/./src/components/Workouts/NoWorkouts.vue?e10e","webpack://fittrackee_client/./src/locales/ sync [A-Za-z0-9-_,\\s]+\\.ts$/","webpack://fittrackee_client/webpack/bootstrap","webpack://fittrackee_client/webpack/runtime/chunk loaded","webpack://fittrackee_client/webpack/runtime/compat get default export","webpack://fittrackee_client/webpack/runtime/create fake namespace object","webpack://fittrackee_client/webpack/runtime/define property getters","webpack://fittrackee_client/webpack/runtime/ensure chunk","webpack://fittrackee_client/webpack/runtime/get javascript chunk filename","webpack://fittrackee_client/webpack/runtime/get mini-css chunk filename","webpack://fittrackee_client/webpack/runtime/global","webpack://fittrackee_client/webpack/runtime/hasOwnProperty shorthand","webpack://fittrackee_client/webpack/runtime/load script","webpack://fittrackee_client/webpack/runtime/make namespace object","webpack://fittrackee_client/webpack/runtime/publicPath","webpack://fittrackee_client/webpack/runtime/css loading","webpack://fittrackee_client/webpack/runtime/jsonp chunk loading","webpack://fittrackee_client/webpack/startup"],"sourcesContent":["import axios from 'axios'\n\nimport { pendingRequests, removeRequestIfPending } from '@/api/pending'\nimport store from '@/store'\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport { getApiUrl } from '@/utils'\n\nconst authApi = axios.create({\n baseURL: getApiUrl(),\n})\n\nauthApi.interceptors.request.use(\n (config) => {\n const controller = new AbortController()\n config.signal = controller.signal\n const requestKey = removeRequestIfPending(config)\n pendingRequests.set(requestKey, controller)\n\n const authToken = store.getters[AUTH_USER_STORE.GETTERS.AUTH_TOKEN]\n if (authToken) {\n const auth = `Bearer ${authToken}`\n if (config.headers && config.headers.Authorization !== auth) {\n config.headers.Authorization = `Bearer ${authToken}`\n }\n }\n return config\n },\n (error) => Promise.reject(error)\n)\n\nauthApi.interceptors.response.use(\n (response) => {\n removeRequestIfPending(response.config)\n return response\n },\n (error) => {\n if (error.message !== 'canceled') {\n removeRequestIfPending(error.response.config)\n }\n return Promise.reject(error)\n }\n)\n\nexport default authApi\n","import { AxiosRequestConfig } from 'axios'\n\nexport const pendingRequests = new Map()\n\nconst generateRequestKey = (config: AxiosRequestConfig): string => {\n const { method, url, params = {}, data = {} } = config\n return [method, url, JSON.stringify(params), JSON.stringify(data)].join('')\n}\n\nexport const removeRequestIfPending = (config: AxiosRequestConfig): string => {\n const requestKey = generateRequestKey(config)\n if (pendingRequests.has(requestKey)) {\n const controller = pendingRequests.get(requestKey) || {}\n controller?.abort()\n pendingRequests.delete(requestKey)\n }\n return requestKey\n}\n","import { createI18n, LocaleMessages, VueMessageType } from 'vue-i18n'\n\n/**\n * Load locale messages\n *\n * The loaded `JSON` locale messages is pre-compiled by `@intlify/vue-i18n-loader`, which is integrated into `vue-cli-plugin-i18n`.\n * See: https://github.com/intlify/vue-i18n-loader#rocket-i18n-resource-pre-compilation\n */\nconst disabledLanguages = ['nb'] // to remove after norwegian translations release\n\nfunction loadLocaleMessages(): Record> {\n const locales = require.context('./locales', true, /[A-Za-z0-9-_,\\s]+\\.ts$/i)\n const messages: Record> = {}\n locales.keys().forEach((key) => {\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i)\n if (\n matched &&\n matched.length > 1 &&\n !disabledLanguages.includes(matched[1])\n ) {\n const locale = matched[1]\n messages[locale] = locales(key).default\n }\n })\n return messages\n}\n\nexport default createI18n({\n legacy: false,\n locale: 'en',\n fallbackLocale: 'en',\n globalInjection: true,\n messages: loadLocaleMessages(),\n})\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontaktiere den Administrator\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee ist ein selbst-gehosteter Outdoor-Aktivitäts-Tracker.\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"unter \", _interpolate(_list(0)), \" Lizenz \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Quellkode\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktion\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiviere Konto\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiv\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hinzufügen/Entfernen von Administratorrechten, Lösche Nutzerkonto.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontakt-E-Mail des Administrators\"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Anzahl aktiver Nutzer\"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wenn 0, gibt es keine Registrierungslimitierung..\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Dateianzahl im zip Archiv\"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Kontakt-E-Mail\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Größe der hochgeladenen Dateien (in Mb)\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungskonfiguration\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Größe des zip Archives (in Mb)\"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück zu Admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Möchtest du wirklich das \", _interpolate(_list(0)), \" Konto löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Möchtest du wirklich das \", _interpolate(_list(0)), \" Passwort zurücksetzen?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktuelle E-Mail\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lösche Nutzer\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail-Versand ist deaktiviert.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktivieren/Deaktivieren von Sportarten.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Neue E-Mail\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Das wasswort wurde zurückgesetzt.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung ist derzeit deaktiviert.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung ist derzeit aktiviert.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktiv\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainings existieren\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten Administration\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktualisiere Anwemdungskonfiguration (maximale Anzahl an registrierten Nutzern, maximale Dateigröße).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktualisiere E-Mail\"])},\n \"USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzer\"])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die E-Mail Adresse wurde aktualisiert.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administratorrechte hinzufügen\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administratorrechte entfernen\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Adminstatus\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierungsdatum\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accountstatus\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzername\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainingsanzahl\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail: Eine gültige E-Mail muss angegeben werden.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler bei der GPX-Verarbeitung.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Einlesen der GPX-Datei\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Abrufen der Konfiguration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler beim Aktualisieren der Konfiguration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Die Registrierung ist deaktiviert.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dateierweiterung ist nicht erlaubt.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die Datei ist größer als erlaubt.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültige Anmeldedaten.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die bereitgestellten Daten sind ungültig.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte erneut anmelden.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte erneut anmelden.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Netzwerkfehler.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die neue E-Mail muss sich von der aktuellen E-Mail unterscheiden\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei angegeben.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei ausgewählt.\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort: Passwort und Passwortbestätigung stimmen nicht überein.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe ein gültiges Authentifizierungstoken an.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Es tut mir leid, der Benutzername ist schon vergeben.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportart existiert nicht.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Die Signatur ist abgelaufen. Bitte melde dich erneut an.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrierung erfolgreich.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Der Nutzer existiert nicht.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Um den Administrator zu kontaktieren, muss eine gültige E-Mail-Adresse angegeben werden\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du kannst Dein Konto nicht löschen, da kein anderer Nutzer hat Administratorrechte besitzt.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du hast keine Berechtigung.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorhergehende\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächste\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bestätigungs-E-Mail erneut senden\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Autorisieren\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abbrechen\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter löschen\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mein Konto löschen\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Deaktivieren\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bearbeiten\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktivieren\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmelden\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nein\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrieren\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurücksetzen\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Speichern\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ja\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Über\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bestätigung\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontakt\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Tag\"]), _normalize([\"Tage\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Angezeigt\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dokumentation (en)\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hier\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Versteckt\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Startseite\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sortiert nach\"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sortieren\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"aufsteigend\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"absteigend\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pro Seite\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Insgesamt\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dashboard\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dieser Monat\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fehler. Bitte versuche es erneut oder kontaktiere den Administrator.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bei der Anwendung scheinen einige Probleme aufgetreten zu sein.
                                                                              Bitte versuche es später noch einmal oder kontaktiere den Administrator.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Seite nicht gefunden\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training nicht gefunden\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Etwas lief schief\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Eine neue OAuth2-Anwendung hinzufügen\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ID\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geheimnis\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungsbeschreibung\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erstellt am\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungsname\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Weiterleitungs-URL\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geltungsbereich\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf auth-Endpunkte\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf auth-Endpunkte\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf users-Endpunkte\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf users-Endpunkte\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Lesezugriff auf workouts-Endpunkte\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf workouts-Endpunkte\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"erlaubt Schreibzugriff auf die Anwendungskonfiguration\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungs-URL\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung erfolgreich erstellt. Stelle sicher, dass du das Geheimnis kopierst, du kannst es nicht erneut anzeigen.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist sicher, dass du diese App löschen willst?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Die Anwendung \", _interpolate(_list(0)), \" fragt an:\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OAuth2-Anwendungen\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([_interpolate(_list(0)), \" den Zugriff auf deinen Account erlauben?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"in Zwischenablage kopieren\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung löschen\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung hinzufügen\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendung wurde nicht gefunden!\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Anwendungen\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"keine Beschreibung\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alle Tokens zurückrufen\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist du sicher, dass du alle Tokens zurückrufen möchtest?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Alle vorhandenen und vergebenen Tokens wurde zurückgerufen.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Pendeln)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Radfahren (Virtuell)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wandern\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountainbiken\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountainbiken (elektrisch)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Rudern\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Laufen\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skifahren (Alpin)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skifahren (Langlauf)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schneeschuhe\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gehen\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistik\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Woche\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Monat\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jahr\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hast du keine Anweisungen erhalten?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prüfe deine E-Mail. Eine neue Bestätigungs-E-Mail wurde an die angegebene Adresse geschickt.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hast du bereits ein Konto?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Möchtest du dein Konto wirklich löschen? Alle Daten werden gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktuelles Passwort\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe eine gültige E-Mail-Adresse an.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gebe ein Passwort ein\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nach Benutzernamen filtern\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort verbergen\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ungültiges Token, bitte fordere ein neues Passworts an.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sprache\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmelden\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmeldung\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abmelden\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Neues Passwort\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Nutzer gefunden.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mindestens 8 Zeichen sind erforderlich.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort vergessen?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prüfe Deine E-Mail. Wenn Deine Adresse in der Datenbank enthalten ist, wirst du eine E-Mail mit einem Link erhalten um Dein Passwort zurückzusetzen.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"schwach\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mittel\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"gut\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwortstärke\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide vorhersehbare Buchstabenersetzungen wie \", \"@\", \" für a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide umgekehrte Schreibweisen gebräuchlicher Wörter.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schreibe einige, aber nicht alle Buchstaben groß.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schreibe mehr als nur den ersten Buchstaben groß.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Daten und Jahreszahlen, die mit Dir in Verbindung gebracht werden.\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Angabe von letzten Jahreszahlen.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide Jahreszahlen, die mit Dir in Verbindung gebracht werden.\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide gebräuchliche Zeichenfolgen.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vermeide wiederholungen von Wörtern und Zeichen.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Verwende längere Tastaturmuster und ändere mehrmals die Schreibrichtung.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Füge weitere weniger gebräuchliche Wörter hinzu.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Verwenden Sie mehrere Wörter, aber vermeide gebräuchliche Ausdrücke.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Du kannst sichere Passwörter erstellen, ohne Symbole, Zahlen oder Großbuchstaben zu verwenden.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wenn Sie dieses Passwort auch anderweitig verwenden, sollten Sie es ändern.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Dein Passwort wurde aktualisiert. Klicke \", _interpolate(_list(0)), \" um dich anzumelden.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kontoausgabe\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anstiegs-bezogene Daten (Aufnahmen, gesamt)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zurück zum Profil\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Biographie\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geburtsdatum\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Datumsanzeigeformat\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil bearbeiten\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen ändern\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen für Sportarten ändern\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Bitte \", _interpolate(_list(0)), \" um Deine E-Mail Adresse nochmals zu ändern oder kontaktiere den Administrator\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorname\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erster Tag der Woche\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sprache\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nachname\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ort\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Montag\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bildausgabe\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild aktualisieren\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild entfernen\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungsausgabe\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil-Ausgabe\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Regirierungsdatum\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten-Einstellungsausgabe\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sontag\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Konto\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anwendungen\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bild\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einstellungen\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profil\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sportarten\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aktion\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Farbe\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vom Admin deaktiviert\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"aktiv\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geschwindigkeitsschwellenwert für Stopp\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich aktualisiert. Bitte prüfe Deine E-Mail um die neue E-Mail Adresse zu bestätigen.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich erstellt.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ein Aktivierungslink für Dein Konto wurde an die angegebene E-Mail Adresse geschickt.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dein Konto wurde erfolgreich aktualisiert.\"])},\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Einheiten für die Distanz\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Imperiales System (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Metrisches System (m, km)\"])}\n },\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Zeitzone\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registrieren\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E-Mail zur Kontobestätigung erneut senden\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Entschuldigung, die Registrierung ist deaktiviert.\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort zurücksetzen\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Passwort anzeigen\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dieser Account ist inaktiv.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Benutzerbild\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nutzername\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 bis 30 Zeichen sind erforderlich, nur alphanumerische Zeichen und der Unterstrich _ sind erlaubt.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training hinzufügen\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Analyse\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aufstieg\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschn. Geschwindigkeit\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschnittsgeschwindigkeit\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"zurück zum Training\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Datum\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Abstieg\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"zeige Filter\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Entfernung\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dauer\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Training bearbeiten\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höhe\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ende\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Von\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".gpx Datei\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"verberge Filter\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Letzte Trainings\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lade mehr Trainings\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"maximale Höhe\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Maximale Dateianzahl\"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Maximalgröße\"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Geschwindigkeit\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"minimale Höhe\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächstes Segment\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nächstes Training\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Daten aus gpx, ohne Bereinigung\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Datei angegeben\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"enthält keinen Ordner\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Karte\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein nächstes Segment\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein nächstes Training\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Anmerkungen\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein vorheriges Segment\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Kein vorheriges Training\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Aufzeichnungen.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Keine Trainings.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Anmerkungen\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pausen\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorheriges Segment\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vorheriges Training\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Aufzeichnung\"]), _normalize([\"Aufzeichnungen\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durchschn. Geschwindigkeit\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Weiteste Entfernung\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höchster Anstieg\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Längste Dauer\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. Geschwindigkeit\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"verbleibende Zeichen\"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Segment\"]), _normalize([\"Segmente\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Geschwindigkeit\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Sportart\"]), _normalize([\"Sportarten\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start und Ziel\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Höhenachse bei Null starten\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Titel\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"bis\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Gesamtdauer\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Füge erstes Training hinzu!\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Luftfeuchtigkeit\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Temperatur\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wind\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNO\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NO\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ONO\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"O\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OSO\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SO\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSO\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSW\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SW\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WSW\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"W\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WNW\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NW\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNW\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"klarer Tag\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"klare Nacht\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wolkig\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nebel\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"teilweise bewölkter Tag\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"teilweise bewölkte Nacht\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Regen\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schneeregen\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Schnee\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Wind\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mit .gpx Datei\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ohne .gpx Datei\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"Training\"]), _normalize([\"Trainings\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trainingsdatum\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bist du sicher, dass du dieses Training löschen möchtest?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".zip Datei\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"oder .zip Datei mit .gpx Dateien\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Contact the administrator\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee is a self-hosted outdoor activity tracker.\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"under \", _interpolate(_list(0)), \" license \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Source code\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Action\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activate account\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Active\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add/remove admin rights, delete user account.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administrator email for contact\"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. number of active users\"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"If 0, no limitation on registration.\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. files of zip archive\"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no contact email\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. size of uploaded files (in Mb)\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application configuration\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. size of zip archive (in Mb)\"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back to admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Are you sure you want to delete \", _interpolate(_list(0)), \" account? All data will be deleted, this cannot be undone.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Are you sure you want to reset \", _interpolate(_list(0)), \" password?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Current email\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete user\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email sending is disabled.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enable/disable sports.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New email\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The password has been reset.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration is currently disabled.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration is currently enabled.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset password\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Active\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workouts exist\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Label\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sports administration\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update application configuration (maximum number of registered users, maximum files size).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update email\"])},\n \"USER\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"user\"]), _normalize([\"users\"])])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The email address has been updated.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add admin rights\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove admin rights\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"admin status\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"registration date\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"account status\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"username\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workout count\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error. Please try again or contact the administrator.\"])},\n \"at least one file in zip archive exceeds size limit, please check the archive\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"At least one file in zip archive exceeds size limit, please check the archive.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email: valid email must be provided.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error during gpx processing.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error during gpx file parsing.\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error on getting configuration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error when updating configuration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error, please try again or contact the administrator.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error, registration is disabled.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File extension not allowed.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"File size is greater than the allowed size.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid credentials.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Provided data are invalid.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please log in again.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please log in again.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Network Error.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The new email must be different than curent email\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No file provided.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No selected file.\"])},\n \"the number of files in the archive exceeds the limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The number of files in the archive exceeds the limit.\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password: password and password confirmation don't match.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Provide a valid auth token.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sorry, that username is already taken.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sport does not exist.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Signature expired. Please log in again.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Successfully registered.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"User does not exist.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"A valid email must be provided for administrator contact\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You can not delete your account, no other user has admin rights.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You do not have permissions.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"previous\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"next\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Resend confirmation email\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Authorize\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cancel\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Clear filters\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete my account\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Disable\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enable\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Log in\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Register\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Submit\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Yes\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"about\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirmation\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"contact\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"day\"]), _normalize([\"days\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Displayed\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"here\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hidden\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Home\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"order by\"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sort\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascending\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descending\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"par page\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Total\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dashboard\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This month\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Error. Please try again or contact the administrator.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"The application seems to have encountered some issues.
                                                                              Please try again later or contact the administrator.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Page not found\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Workout not found\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Something went wrong\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add a new OAuth2 application\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Id\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Secret\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application description\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Issue at\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application name\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Redirect URL\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scope\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to application configuration.\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to auth endpoints.\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to auth endpoints.\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to users endpoints.\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to users endpoints.\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants read access to workouts endpoints.\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"grants write access to workouts endpoints.\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application URL\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application created successfully. Make sure to copy the secret now, it won't show up again.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete this app?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"The application \", _interpolate(_list(0)), \" is requesting:\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OAuth2 applications\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Authorize \", _interpolate(_list(0)), \" to use your account?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"copy to the clipboard\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Delete application\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add an application\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application not found!\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no applications\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no description\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revoke all tokens\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to revoke all tokens?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"All existing associated tokens have been revoked.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Transport)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Cycling (Virtual)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Hiking\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountain Biking\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mountain Biking (Electric)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Rowing\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Running\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skiing (Alpine)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Skiing (Cross Country)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Snowshoes\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Walking\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistics\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"week\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"month\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"year\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Didn't received instructions?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Check your email. A new confirmation email has been sent to the address provided.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Already have an account?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete your account? All data will be deleted, this cannot be undone\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Current password\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter a valid email address.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Enter a password\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filter on username\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hide password\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Invalid token, please request a new password reset.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Language\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"log in\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Login\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Logout\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"New password\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No users found.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"At least 8 characters required.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Forgot password?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Password reset\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Check your email. If your address is in our database, you'll received an email with a link to reset your password.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"weak\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"average\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"good\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"strong\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"password strength\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid predictable letter substitutions like \", \"@\", \" for a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid reversed spellings of common words.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalize some, but not all letters.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalize more than the first letter.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid dates and years that are associated with you.\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid recent years.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid years that are associated with you.\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid common character sequences.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Avoid repeated words and characters.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Use longer keyboard patterns and change typing direction multiple times.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add more words that are less common.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Use multiple words, but avoid common phrases.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"You can create strong passwords without using symbols, numbers, or uppercase letters.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"If you use this password elsewhere, you should change it.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Your password have been updated. Click \", _interpolate(_list(0)), \" to log in.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Account edition\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ascent-related data (records, total)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Back to profile\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bio\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Birth date\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date display format\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit profile\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit preferences\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit sports preferences\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Please \", _interpolate(_list(0)), \" to change your email address again or contact the administrator\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"First name\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"First day of week\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Language\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Last name\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Location\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Monday\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Picture\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Picture edition\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Update picture\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Remove picture\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Preferences edition\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Profile edition\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Registration date\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sports preferences edition\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sunday\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"account\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"apps\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"picture\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"preferences\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"profile\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sports\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"action\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"color\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"disabled by admin\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"active\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"label\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"stopped speed threshold\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been updated successfully. Please check your email to confirm your new email address.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been created successfully.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"A link to activate your account has been emailed to the address provided.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Your account has been updated successfully.\"])},\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Units for distance\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Imperial system (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Metric system (m, km)\"])}\n },\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Timezone\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Register\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Resend account confirmation email\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Sorry, registration is disabled.\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Reset your password\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"show password\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"This user account is inactive.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"user picture\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Username\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 to 30 characters required, only alphanumeric characters and the underscore character \\\"_\\\" allowed.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Add a workout\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"analysis\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascent\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ave. speed\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"average speed\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"back to workout\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descent\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"display filters\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"distance\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"duration\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Edit the workout\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"elevation\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"end\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"from\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".gpx file\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"hide filters\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Latest workouts\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Load more workouts\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max. altitude\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max files\"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max size\"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"max. speed\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"min. altitude\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next segment\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Next workout\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"data from gpx, without any cleaning\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No file provided\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"no folder inside\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No map\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next segment\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No next workout\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No notes\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No previous segment\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No previous workout\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No records.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"No workouts.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"notes\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pauses\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Previous segment\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Previous workout\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"record\"]), _normalize([\"records\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ave. speed\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Farthest distance\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Highest ascent\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Longest duration\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Max. speed\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"remaining characters\"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"segment\"]), _normalize([\"segments\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"speed\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"sport\"]), _normalize([\"sports\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Start and finish\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"start elevation axis at zero\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"title\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"to\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"total duration\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Upload one!\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"humidity\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"temperature\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wind\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNE\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NE\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ENE\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ESE\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SE\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSE\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSW\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SW\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WSW\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"W\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"WNW\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NW\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNW\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"clear day\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"clear night\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"cloudy\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fog\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partly cloudy day\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partly cloudy night\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"rain\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sleet\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"snow\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"wind\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"with .gpx file\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"without .gpx file\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"workout\"]), _normalize([\"workouts\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"workout date\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Are you sure you want to delete this workout?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\".zip file\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"or .zip file containing .gpx files\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \"CONTACT_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Contacter l'administrateur\"])},\n \"FITTRACKEE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"FitTrackee est un tracker d'activités sportives (en extérieur).\"])},\n \"FITTRACKEE_LICENSE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"sous licence \", _interpolate(_list(0)), \" (en) \"])},\n \"SOURCE_CODE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Code source (en)\"])}\n}","export default {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Action\"])},\n \"ACTIVATE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer le compte\"])},\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Actif\"])},\n \"ADMIN_RIGHTS_DELETE_USER_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter/retirer des droits d'administration, supprimer des comptes utilisateurs.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ADMINISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration\"])},\n \"APPLICATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application\"])},\n \"APP_CONFIG\": {\n \"ADMIN_CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Email de l'administrateur pour contact \"])},\n \"MAX_USERS_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nombre maximum d'utilisateurs actifs \"])},\n \"MAX_USERS_HELP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Si égal à 0, pas limite d'inscription\"])},\n \"MAX_FILES_IN_ZIP_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nombre max. de fichiers dans une archive zip \"])},\n \"NO_CONTACT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"non renseigné\"])},\n \"SINGLE_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Taille max. des fichiers (en Mo) \"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Configuration de l'application\"])},\n \"ZIP_UPLOAD_MAX_SIZE_LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Taille max. des archives zip (en Mo) \"])}\n },\n \"BACK_TO_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revenir à l'admin\"])},\n \"CONFIRM_USER_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Êtes-vous sûr de vouloir supprimer le compte de l'utilisateur \", _interpolate(_list(0)), \" ? Toutes les données seront définitivement.\"])},\n \"CONFIRM_USER_PASSWORD_RESET\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Êtes-vous sûr de vouloir réinitialiser le mot de passe de l'utilisateur \", _interpolate(_list(0)), \" ?\"])},\n \"CURRENT_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Adresse email actuelle\"])},\n \"DELETE_USER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer l'utilisateur\"])},\n \"EMAIL_SENDING_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'envoi d'emails est désactivé.\"])},\n \"ENABLE_DISABLE_SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer/désactiver des sports.\"])},\n \"NEW_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nouvelle adresse email\"])},\n \"PASSWORD_RESET_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Le mot de passe a été réinitialisé.\"])},\n \"REGISTRATION_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Les inscriptions sont actuellement désactivées.\"])},\n \"REGISTRATION_ENABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Les inscriptions sont actuellement activées.\"])},\n \"RESET_USER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinit. le mot de passe\"])},\n \"SPORTS\": {\n \"TABLE\": {\n \"ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Actif\"])},\n \"HAS_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"des séances existent\"])},\n \"IMAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Label\"])}\n },\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Administration - Sports\"])}\n },\n \"UPDATE_APPLICATION_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Configurer l'application (nombre maximum d'utilisateurs inscrits, taille maximale des fichers).\"])},\n \"UPDATE_USER_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Changer l'email\"])},\n \"USER\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"utilisateur\"]), _normalize([\"utilisateurs\"])])},\n \"USER_EMAIL_UPDATE_SUCCESSFUL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'adresse email a été mise à jour.\"])},\n \"USERS\": {\n \"TABLE\": {\n \"ADD_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter les droits d'admin\"])},\n \"REMOVE_ADMIN_RIGHTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Retirer les droits d'admin\"])}\n },\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"status administrateur\"])},\n \"CREATED_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date d'inscription\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"statut du compte\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nom d'utilisateur\"])},\n \"WORKOUTS_COUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nombre de séances\"])}\n }\n }\n }\n}","export default {\n \"ERROR\": {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur. Veuillez réessayer ou contacter l'administrateur.\"])},\n \"at least one file in zip archive exceeds size limit, please check the archive\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Au moins un fichier de l'archive zip dépasse la taille maximale, veuillez vérifier l'archive.\"])},\n \"email: valid email must be provided\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Courriel : une adresse électronique valide doit être fournie.\"])},\n \"error during gpx processing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors du traitement du fichier gpx.\"])},\n \"error during gpx file parsing\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de l'analyse du fichier.\"])},\n \"error on getting configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de la récupération de la configuration.\"])},\n \"error when updating configuration\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur lors de la mise à jour de la configuration\"])},\n \"error, please try again or contact the administrator\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur, veuillez réessayer ou contacter l'administrateur.\"])},\n \"error, registration is disabled\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur, les inscriptions sont désactivées.\"])},\n \"file extension not allowed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Extension de fichier non autorisée.\"])},\n \"file size is greater than the allowed size\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"La taille du fichier est supérieure à la limite autorisée.\"])},\n \"invalid credentials\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Identifiants invalides.\"])},\n \"invalid payload\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Données fournies incorrectes.\"])},\n \"invalid token, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton de connexion invalide, merci de vous reconnecter.\"])},\n \"invalid token, please request a new token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton de connexion, merci de vous reconnecter.\"])},\n \"no file part\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier fourni.\"])},\n \"no selected file\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier sélectionné.\"])},\n \"Network Error\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur réseau.\"])},\n \"new email must be different than curent email\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"La nouvelle addresse électronique doit être differente de l'adresse actuelle\"])},\n \"password: password and password confirmation do not match\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe : les mots de passe saisis sont différents.\"])},\n \"provide a valid auth token\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Merci de fournir un jeton de connexion valide.\"])},\n \"sport does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ce sport n'existe pas.\"])},\n \"signature expired, please log in again\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Signature expirée. Merci de vous reconnecter.\"])},\n \"sorry, that username is already taken\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désolé, ce nom d'utilisateur est déjà utilisé.\"])},\n \"successfully registered\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Inscription validée.\"])},\n \"the number of files in the archive exceeds the limit\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Le nombre de fichiers de l'archive dépasse la limite.\"])},\n \"user does not exist\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'utilisateur n'existe pas.\"])},\n \"valid email must be provided for admin contact\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Une adresse électronique doit être fournie pour le contact de l'administrateur\"])},\n \"you can not delete your account, no other user has admin rights\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous ne pouvez pas supprimer votre compte, aucun autre utilisateur n'a des droits d'administration.\"])},\n \"you do not have permissions\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous n'avez pas les permissions nécessaires.\"])}\n },\n \"PAGINATION\": {\n \"PREVIOUS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"précédent\"])},\n \"NEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"suivant\"])}\n }\n}","export default {\n \"ACCOUNT-CONFIRMATION-RESEND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Renvoyer le message de confirmation\"])},\n \"AUTHORIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Autoriser\"])},\n \"BACK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Retour\"])},\n \"CANCEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Annuler\"])},\n \"CLEAR_FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialiser\"])},\n \"DELETE_MY_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer mon compte\"])},\n \"DISABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désactiver\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier\"])},\n \"ENABLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Activer\"])},\n \"FILTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filtrer\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se connecter\"])},\n \"NO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Non\"])},\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S'inscrire\"])},\n \"RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinit.\"])},\n \"SUBMIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Valider\"])},\n \"YES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Oui\"])}\n}","export default {\n \"ABOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"à propos\"])},\n \"CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Confirmation\"])},\n \"CONTACT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"contact\"])},\n \"DAY\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"jour\"]), _normalize([\"jours\"])])},\n \"DISPLAYED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Affiché\"])},\n \"DOCUMENTATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"documentation (en)\"])},\n \"HERE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ici\"])},\n \"HIDDEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Masqué\"])},\n \"HOME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Accueil\"])},\n \"SELECTS\": {\n \"ORDER_BY\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"trier par \"])}\n },\n \"ORDER\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"tri\"])},\n \"ASC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ascendant\"])},\n \"DESC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"descendant\"])}\n },\n \"PER_PAGE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"par page\"])}\n }\n },\n \"TOTAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Total\"])}\n}","export default {\n \"DASHBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tableau de bord\"])},\n \"THIS_MONTH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ce mois-ci\"])}\n}","export default {\n \"UNKNOWN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Erreur. Veuillez réessayer ou contacter l'administrateur.\"])},\n \"APP_ERROR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"L'application semble rencontrer quelques problèmes.
                                                                              Veuillez réessayer plus tard ou contacter l'administrateur.\"])},\n \"NOT_FOUND\": {\n \"PAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Page introuvable\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance introuvable\"])}\n },\n \"SOMETHING_WRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Une erreur s'est produite\"])}\n}","export default {\n \"ADD_A_NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une nouvelle application OAuth2\"])},\n \"APP\": {\n \"CLIENT_ID\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Identifiant\"])},\n \"CLIENT_SECRET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Secret\"])},\n \"DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Description de l'application\"])},\n \"ISSUE_AT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Créée le\"])},\n \"NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom de l'application\"])},\n \"REDIRECT_URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"URL de redirection\"])},\n \"SCOPE\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Scope\"])},\n \"application:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture à la configuration de l'application.\"])},\n \"profile:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes auth.\"])},\n \"profile:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes auth.\"])},\n \"users:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes users.\"])},\n \"users:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes users.\"])},\n \"workouts:read_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en lecture aux routes workouts.\"])},\n \"workouts:write_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"donne les droits en écriture aux routes workouts.\"])}\n },\n \"URL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"URL de l'application\"])}\n },\n \"APP_CREATED_SUCCESSFULLY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application créée avec succès. Assurez-vous de copier le secret maintenant, il ne s'affichera plus.\"])},\n \"APP_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr de vouloir supprimer cette application ?\"])},\n \"APP_REQUESTING_ACCESS\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"L'application \", _interpolate(_list(0)), \" demande les accès suivants :\"])},\n \"APPS_LIST\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Applications OAuth2\"])},\n \"AUTHORIZE_APP\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Autoriser \", _interpolate(_list(0)), \" à utiliser votre compte ?\"])},\n \"COPY_TO_CLIPBOARD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"copier dans le presse papier\"])},\n \"DELETE_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer l'application\"])},\n \"NEW_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une application\"])},\n \"NO_APP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Application introuvable !\"])},\n \"NO_APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de applications\"])},\n \"NO_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de description\"])},\n \"REVOKE_ALL_TOKENS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Révoquer tous les jetons\"])},\n \"TOKENS_REVOCATION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr de vouloir révoquer tous les jetons ?\"])},\n \"TOKENS_REVOKED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Tous les jetons associés existants ont été révoqués.\"])}\n}","export default {\n \"Cycling (Sport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Sport)\"])}\n },\n \"Cycling (Transport)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Transport)\"])}\n },\n \"Cycling (Virtual)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vélo (Virtuel)\"])}\n },\n \"Hiking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Randonnée\"])}\n },\n \"Mountain Biking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"VTT\"])}\n },\n \"Mountain Biking (Electric)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"VTT (Électrique)\"])}\n },\n \"Rowing\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aviron\"])}\n },\n \"Running\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Course\"])}\n },\n \"Skiing (Alpine)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ski (Alpin)\"])}\n },\n \"Skiing (Cross Country)\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ski (Randonnée)\"])}\n },\n \"Snowshoes\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Raquettes\"])}\n },\n \"Trail\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Trail\"])}\n },\n \"Walking\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Marche\"])}\n }\n}","export default {\n \"STATISTICS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Statistiques\"])},\n \"TIME_FRAMES\": {\n \"week\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"semaine\"])},\n \"month\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"mois\"])},\n \"year\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"année\"])}\n }\n}","export default {\n \"ACCOUNT_CONFIRMATION_NOT_RECEIVED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous n'avez pas reçu les instructions ?\"])},\n \"ACCOUNT_CONFIRMATION_SENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vérifiez vos courriels. Un nouveau courriel de confirmation a été envoyé à l'adresse électronique fournie.\"])},\n \"ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Admin\"])},\n \"ALREADY_HAVE_ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous avez déjà un compte ?\"])},\n \"CONFIRM_ACCOUNT_DELETION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Êtes-vous sûr·e de vouloir supprimer votre compte ? Toutes les données seront définitivement effacés\"])},\n \"CURRENT_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe actuel\"])},\n \"EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Courriel\"])},\n \"EMAIL_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Saisissez une adresse électronique valide.\"])},\n \"ENTER_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Saisissez un mot de passe\"])},\n \"FILTER_ON_USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Filtrer sur le nom d'utilisateur\"])},\n \"HIDE_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"masquer le mot de passe\"])},\n \"INVALID_TOKEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Jeton invalide, veuillez demander une nouvelle réinitialisation de mot de passe.\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Langue\"])},\n \"LOG_IN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"connecter\"])},\n \"LOGIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se connecter\"])},\n \"LOGOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Se déconnecter\"])},\n \"NEW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nouveau mot de passe\"])},\n \"NO_USERS_FOUND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Aucun utilisateur trouvé.\"])},\n \"PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe\"])},\n \"PASSWORD_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"8 caractères minimum.\"])},\n \"PASSWORD_FORGOTTEN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mot de passe oublié ?\"])},\n \"PASSWORD_RESET\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialisation du mot de passe\"])},\n \"PASSWORD_SENT_EMAIL_TEXT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vérifiez vos courriels. Si vote adresse est dans notre base de données, vous recevrez un courriel avec un lien pour réinitialiser votre mot de passe.\"])},\n \"PASSWORD_STRENGTH\": {\n \"WEAK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"faible\"])},\n \"AVERAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"moyenne\"])},\n \"GOOD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"bonne\"])},\n \"STRONG\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"forte\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"robustesse du mot de passe\"])},\n \"SUGGESTIONS\": {\n \"l33t\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les substitutions de lettres prévisibles comme \", \"@\", \" pour a.\"])},\n \"reverseWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les orthographes inversées des mots courants.\"])},\n \"allUppercase\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mettez quelques lettres en majuscules, mais pas toutes.\"])},\n \"capitalization\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Capitalisez mais pas seulement la première lettre.\"])},\n \"dates\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les dates et les années qui vous sont associées. (ex : date ou année de naissance).\"])},\n \"recentYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les dernières années.\"])},\n \"associatedYears\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les années qui vous sont associées. (ex : date de naissance).\"])},\n \"sequences\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les séquences de caractères courantes.\"])},\n \"repeated\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Évitez les mots et les caractères répétés.\"])},\n \"longerKeyboardPattern\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Utilisez des motifs de clavier plus longs et changez de sens de frappe plusieurs fois.\"])},\n \"anotherWord\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajoutez des mots moins courants.\"])},\n \"useWords\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Utilisez plusieurs mots, mais évitez les phrases courantes.\"])},\n \"noNeed\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vous pouvez créer des mots de passe forts sans utiliser de symboles, de chiffres ou de lettres majuscules.\"])},\n \"pwned\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Si vous utilisez ce mot de passe ailleurs, vous devriez le modifier.\"])}\n }\n },\n \"PASSWORD_UPDATED\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Votre mot de passe a été mis à jour. Cliquez \", _interpolate(_list(0)), \" pour vous connecter.\"])},\n \"PROFILE\": {\n \"ACCOUNT_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour du compte\"])},\n \"ASCENT_DATA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Données relatives au dénivelé positif (records, total)\"])},\n \"BACK_TO_PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Revenir au profil\"])},\n \"BIO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Bio\"])},\n \"BIRTH_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date de naissance\"])},\n \"DATE_FORMAT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Format d'affichage de la date\"])},\n \"EDIT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier le profil\"])},\n \"EDIT_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier les préférences\"])},\n \"EDIT_SPORTS_PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier les préférences des sports\"])},\n \"ERRORED_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize, interpolate: _interpolate, list: _list } = ctx;return _normalize([\"Veuillez vous \", _interpolate(_list(0)), \" pour changer de nouveau votre adresse électronique ou contacter l'administrateur\"])},\n \"FIRST_DAY_OF_WEEK\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Premier jour de la semaine\"])},\n \"FIRST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Prénom\"])},\n \"LANGUAGE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Langue\"])},\n \"LAST_NAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom\"])},\n \"LOCATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lieu\"])},\n \"MONDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Lundi\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Image de profil\"])},\n \"PICTURE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour de l'image de profil\"])},\n \"PICTURE_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mettre à jour l'image\"])},\n \"PICTURE_REMOVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Supprimer\"])},\n \"PREFERENCES_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour des préférences\"])},\n \"PROFILE_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour du profil\"])},\n \"REGISTRATION_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Date d'inscription\"])},\n \"SPORTS_EDITION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Mise à jour des préférences des sports\"])},\n \"SUNDAY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dimanche\"])},\n \"TABS\": {\n \"ACCOUNT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"compte\"])},\n \"APPS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"apps\"])},\n \"PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"image\"])},\n \"PREFERENCES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"préférences\"])},\n \"PROFILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"profil\"])},\n \"SPORTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sports\"])}\n },\n \"UNITS\": {\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Unités pour les distances\"])},\n \"IMPERIAL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Système impérial (ft, mi)\"])},\n \"METRIC\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Système métrique (m, km)\"])}\n },\n \"SPORT\": {\n \"ACTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"action\"])},\n \"COLOR\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"couleur\"])},\n \"DISABLED_BY_ADMIN\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"désactivé par l'administrateur\"])},\n \"IS_ACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"actif\"])},\n \"LABEL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"label\"])},\n \"STOPPED_SPEED_THRESHOLD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"seuil de vitesse arrêtée\"])}\n },\n \"SUCCESSFUL_EMAIL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été modifié avec succès. Veuillez vérifier votre boîte de réception pour valider votre nouvelle adresse électronique.\"])},\n \"SUCCESSFUL_REGISTRATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été créé avec succès.\"])},\n \"SUCCESSFUL_REGISTRATION_WITH_EMAIL\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Un lien pour activer votre compte a été envoyé à l'adresse électronique fournie.\"])},\n \"SUCCESSFUL_UPDATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Votre compte a été modifié avec succès.\"])},\n \"TIMEZONE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Fuseau horaire\"])}\n },\n \"REGISTER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S'inscrire\"])},\n \"REGISTER_DISABLED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Désolé, les inscriptions sont désactivées.\"])},\n \"RESENT_ACCOUNT_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Envoyer à nouveau le courriel de confirmation de compte\"])},\n \"RESET_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Réinitialiser votre mot de passe\"])},\n \"SHOW_PASSWORD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"afficher le mot de passe\"])},\n \"THIS_USER_ACCOUNT_IS_INACTIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Le compte de cet utilisateur est inactif.\"])},\n \"USER_PICTURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"photo de l'utilisateur\"])},\n \"USERNAME\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Nom d'utilisateur\"])},\n \"USERNAME_INFO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"3 à 30 caractères requis, seuls les caractères alphanumériques et le caractère _ sont autorisés.\"])}\n}","export default {\n \"ADD_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajouter une séance\"])},\n \"ANALYSIS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"analyse\"])},\n \"ASCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"dénivelé positif\"])},\n \"AVERAGE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse moyenne\"])},\n \"AVE_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse moy.\"])},\n \"BACK_TO_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"revenir à la séance\"])},\n \"DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date\"])},\n \"DESCENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"dénivelé négatif\"])},\n \"DISPLAY_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"afficher les filtres\"])},\n \"DISTANCE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"distance\"])},\n \"DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"durée\"])},\n \"EDIT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Modifier la séance\"])},\n \"ELEVATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude\"])},\n \"END\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fin\"])},\n \"FROM\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"à partir de\"])},\n \"GPX_FILE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fichier .gpx\"])},\n \"HIDE_FILTERS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"masquer les filtres\"])},\n \"LATEST_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séances récentes\"])},\n \"LOAD_MORE_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Charger les séances suivantes\"])},\n \"MAX_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude max\"])},\n \"MAX_FILES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"fichiers max. \"])},\n \"MAX_SIZE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"taille max. \"])},\n \"MAX_SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse max\"])},\n \"MIN_ALTITUDE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"altitude min\"])},\n \"NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Segment suivant\"])},\n \"NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance suivante\"])},\n \"NO_DATA_CLEANING\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"données issues du fichier gpx, sans correction\"])},\n \"NO_FILE_PROVIDED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de fichier fourni\"])},\n \"NO_FOLDER\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pas de répertoire\"])},\n \"NO_MAP\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de carte\"])},\n \"NO_NEXT_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de segment suivant\"])},\n \"NO_NEXT_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séance suivante\"])},\n \"NO_NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de notes\"])},\n \"NO_PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de segment précédent\"])},\n \"NO_PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séance précédente\"])},\n \"NO_RECORDS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de records.\"])},\n \"NO_WORKOUTS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Pas de séances.\"])},\n \"NOTES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"notes\"])},\n \"PAUSES\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pauses\"])},\n \"PREVIOUS_SEGMENT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Segment précédent\"])},\n \"PREVIOUS_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Séance précédente\"])},\n \"RECORD\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"record\"]), _normalize([\"records\"])])},\n \"RECORD_AS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vitesse moy.\"])},\n \"RECORD_FD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Distance la + longue\"])},\n \"RECORD_HA\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Dénivelé positif le + élevé\"])},\n \"RECORD_LD\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Durée la + longue\"])},\n \"RECORD_MS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Vitesse max.\"])},\n \"REMAINING_CHARS\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nombre de caractères restants \"])},\n \"SEGMENT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"segment\"]), _normalize([\"segments\"])])},\n \"SPEED\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vitesse\"])},\n \"SPORT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"sport\"]), _normalize([\"sports\"])])},\n \"START\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"début\"])},\n \"START_AND_FINISH\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Départ et arrivée\"])},\n \"START_ELEVATION_AT_ZERO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"démarrer l'axe de l'altitude à 0\"])},\n \"TITLE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"titre\"])},\n \"TO\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"jusqu'au\"])},\n \"TOTAL_DURATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"durée totale\"])},\n \"UPLOAD_FIRST_WORKOUT\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Ajoutez votre première séance !\"])},\n \"WEATHER\": {\n \"HUMIDITY\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"humidité\"])},\n \"TEMPERATURE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"température\"])},\n \"WIND\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"vent\"])},\n \"WIND_DIRECTIONS\": {\n \"N\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"N\"])},\n \"NNE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNE\"])},\n \"NE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NE\"])},\n \"ENE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ENE\"])},\n \"E\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"E\"])},\n \"ESE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ESE\"])},\n \"SE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SE\"])},\n \"SSE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSE\"])},\n \"S\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"S\"])},\n \"SSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SSO\"])},\n \"SW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"SO\"])},\n \"WSW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"OSO\"])},\n \"W\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"O\"])},\n \"WNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ONO\"])},\n \"NW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NO\"])},\n \"NNW\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"NNO\"])}\n },\n \"DARK_SKY\": {\n \"clear-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ensoleillé\"])},\n \"clear-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuit claire\"])},\n \"cloudy\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuageux\"])},\n \"fog\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"brouillard\"])},\n \"partly-cloudy-day\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"partiellement nuageux\"])},\n \"partly-cloudy-night\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"nuit partiellement nuageuse\"])},\n \"rain\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"pluie\"])},\n \"sleet\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"neige fondue\"])},\n \"snow\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"neige\"])},\n \"wind\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"venteux\"])}\n }\n },\n \"WITH_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"avec un fichier .gpx\"])},\n \"WITHOUT_GPX\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"sans fichier .gpx\"])},\n \"WORKOUT\": (ctx) => {const { normalize: _normalize, plural: _plural } = ctx;return _plural([_normalize([\"séance\"]), _normalize([\"séances\"])])},\n \"WORKOUT_DATE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"date de la séance\"])},\n \"WORKOUT_DELETION_CONFIRMATION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"Etes-vous sûr de vouloir supprimer cette séance ?\"])},\n \"ZIP_ARCHIVE\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"archive .zip\"])},\n \"ZIP_ARCHIVE_DESCRIPTION\": (ctx) => {const { normalize: _normalize } = ctx;return _normalize([\"ou une archive .zip contenant des fichiers .gpx\"])}\n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","export default {\n \n}","import AboutTranslations from './about.json'\nimport AdministrationTranslations from './administration.json'\nimport ApiTranslations from './api.json'\nimport ButtonsTranslations from './buttons.json'\nimport CommonTranslations from './common.json'\nimport DashboardTranslations from './dashboard.json'\nimport ErrorTranslations from './error.json'\nimport OAuth2Translations from './oauth2.json'\nimport SportsTranslations from './sports.json'\nimport StatisticsTranslations from './statistics.json'\nimport UserTranslations from './user.json'\nimport WorkoutsTranslations from './workouts.json'\n\nexport default {\n about: AboutTranslations,\n admin: AdministrationTranslations,\n api: ApiTranslations,\n buttons: ButtonsTranslations,\n common: CommonTranslations,\n dashboard: DashboardTranslations,\n error: ErrorTranslations,\n oauth2: OAuth2Translations,\n sports: SportsTranslations,\n statistics: StatisticsTranslations,\n user: UserTranslations,\n workouts: WorkoutsTranslations,\n}\n","/* eslint-disable no-console */\n\nimport { register } from 'register-service-worker'\n\nif (process.env.NODE_ENV === 'production') {\n register(`${process.env.BASE_URL}service-worker.js`, {\n ready() {\n console.log(\n 'App is being served from cache by a service worker.\\n' +\n 'For more details, visit https://goo.gl/AFskqB'\n )\n },\n registered() {\n console.log('Service worker has been registered.')\n },\n cached() {\n console.log('Content has been cached for offline use.')\n },\n updatefound() {\n console.log('New content is downloading.')\n },\n updated() {\n console.log('New content is available; please refresh.')\n },\n offline() {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n )\n },\n error(error) {\n console.error('Error during service worker registration:', error)\n },\n })\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2c73279e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"footer\" }\nconst _hoisted_2 = { class: \"footer-items\" }\nconst _hoisted_3 = { class: \"footer-item\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"strong\", null, \"FitTrackee\", -1))\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"footer-item bullet\" }, \"•\", -1))\nconst _hoisted_6 = { class: \"footer-item\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"footer-item bullet\"\n}\nconst _hoisted_8 = {\n key: 1,\n class: \"footer-item\"\n}\nconst _hoisted_9 = [\"href\"]\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"footer-item bullet\" }, \"•\", -1))\nconst _hoisted_11 = { class: \"footer-item\" }\nconst _hoisted_12 = {\n href: \"https://samr1.github.io/FitTrackee/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\n\nimport { toRefs } from 'vue'\n\n interface Props {\n version: string\n adminContact?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Footer',\n props: {\n version: null,\n adminContact: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n version: string\n adminContact?: string\n }\n\n \n\n const { adminContact, version } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _hoisted_4,\n _createTextVNode(\" v\" + _toDisplayString(_unref(version)), 1)\n ]),\n _hoisted_5,\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_router_link, { to: \"/about\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('common.ABOUT')), 1)\n ]),\n _: 1\n })\n ]),\n (_unref(adminContact))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, \"•\"))\n : _createCommentVNode(\"\", true),\n (_unref(adminContact))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"a\", {\n href: `mailto:${_unref(adminContact)}`\n }, _toDisplayString(_ctx.$t('common.CONTACT')), 9, _hoisted_9)\n ]))\n : _createCommentVNode(\"\", true),\n _hoisted_10,\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"a\", _hoisted_12, _toDisplayString(_ctx.$t('common.DOCUMENTATION')), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./Footer.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Footer.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Footer.vue?vue&type=style&index=0&id=2c73279e&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2c73279e\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-95c1cc02\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"nav\" }\nconst _hoisted_2 = { class: \"nav-container\" }\nconst _hoisted_3 = { class: \"nav-app-name\" }\nconst _hoisted_4 = { class: \"nav-items-close\" }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"app-name\" }, \"FitTrackee\", -1))\nconst _hoisted_6 = {\n key: 0,\n class: \"nav-items-group\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"nav-item nav-separator\" }, null, -1))\nconst _hoisted_8 = { class: \"nav-items-user-menu\" }\nconst _hoisted_9 = {\n key: 0,\n class: \"nav-items-group\"\n}\nconst _hoisted_10 = { class: \"nav-item nav-profile-img\" }\nconst _hoisted_11 = {\n key: 1,\n class: \"nav-items-group\"\n}\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", { class: \"fa fa-language\" }, null, -1))\n\nimport { ComputedRef, computed, ref, capitalize } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IDropdownOption } from '@/types/forms'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { availableLanguages } from '@/utils/locales'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'NavBar',\n emits: ['menuInteraction'],\n setup(__props, { emit }) {\n\n \n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const isAuthenticated: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n )\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const isMenuOpen = ref(false)\n\n function openMenu() {\n isMenuOpen.value = true\n emit('menuInteraction', true)\n }\n function closeMenu() {\n isMenuOpen.value = false\n emit('menuInteraction', false)\n }\n function updateLanguage(option: IDropdownOption) {\n store.dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n option.value.toString()\n )\n }\n function logout() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.LOGOUT)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Dropdown = _resolveComponent(\"Dropdown\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: \"nav-item app-name\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/')))\n }, \" FitTrackee \")\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"nav-icon-open\", { 'menu-open': isMenuOpen.value }])\n }, [\n _createElementVNode(\"i\", {\n class: \"fa fa-bars hamburger-icon\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (openMenu()))\n })\n ], 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"nav-items\", { 'menu-open': isMenuOpen.value }])\n }, [\n _createElementVNode(\"div\", _hoisted_4, [\n _hoisted_5,\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa fa-close close-icon nav-item\", { 'menu-closed': !isMenuOpen.value }]),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (closeMenu()))\n }, null, 2)\n ]),\n _createElementVNode(\"div\", {\n class: \"nav-items-app-menu\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (closeMenu()))\n }, [\n (_unref(isAuthenticated))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('dashboard.DASHBOARD')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/workouts\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 2))), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/statistics\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('statistics.STATISTICS')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/workouts/add\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.ADD_WORKOUT')), 1)\n ]),\n _: 1\n }),\n (_unref(isAuthenticated) && _unref(authUser).admin)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"nav-item\",\n to: \"/admin\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.ADMIN')), 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n _hoisted_7\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n (_unref(isAuthenticated))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _createVNode(UserPicture, { user: _unref(authUser) }, null, 8, [\"user\"])\n ]),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/profile\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(authUser).username), 1)\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", {\n class: \"nav-item nav-link\",\n onClick: logout\n }, _toDisplayString(_ctx.$t('user.LOGOUT')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/login\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.LOGIN')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: \"/register\",\n onClick: closeMenu\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.REGISTER')), 1)\n ]),\n _: 1\n })\n ])),\n (_unref(availableLanguages) && _unref(language))\n ? (_openBlock(), _createBlock(_component_Dropdown, {\n key: 2,\n class: \"nav-item\",\n options: _unref(availableLanguages),\n selected: _unref(language),\n onSelected: updateLanguage\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }, 8, [\"options\", \"selected\"]))\n : _createCommentVNode(\"\", true)\n ])\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./NavBar.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NavBar.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./NavBar.vue?vue&type=style&index=0&id=95c1cc02&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-95c1cc02\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-47759238\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"no-config\" }\nconst _hoisted_2 = { class: \"error-page\" }\nconst _hoisted_3 = { class: \"error-img\" }\nconst _hoisted_4 = [\"innerHTML\"]\n\nimport ErrorImg from '@/components/Common/Images/ErrorImg.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'NoConfig',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(ErrorImg)\n ]),\n _createElementVNode(\"p\", {\n class: \"error-message\",\n innerHTML: _ctx.$t('error.APP_ERROR')\n }, null, 8, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./NoConfig.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./NoConfig.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./NoConfig.vue?vue&type=style&index=0&id=47759238&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-47759238\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, createVNode as _createVNode, unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, normalizeClass as _normalizeClass, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { id: \"top\" }, null, -1)\nconst _hoisted_2 = {\n key: 0,\n class: \"app-container\"\n}\nconst _hoisted_3 = { class: \"app-loading\" }\nconst _hoisted_4 = { class: \"container scroll\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-up\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_6 = [\n _hoisted_5\n]\n\nimport { ComputedRef, computed, ref, onBeforeMount, onMounted } from 'vue'\n\n import Footer from '@/components/Footer.vue'\n import NavBar from '@/components/NavBar.vue'\n import NoConfig from '@/components/NoConfig.vue'\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { useStore } from '@/use/useStore'\n import { localeFromLanguage } from '@/utils/locales'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'App',\n setup(__props) {\n\n const store = useStore()\n\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const appLoading: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_LOADING]\n )\n const hideScrollBar = ref(false)\n const displayScrollButton = ref(false)\n\n onBeforeMount(() => {\n initLanguage()\n store.dispatch(ROOT_STORE.ACTIONS.GET_APPLICATION_CONFIG)\n })\n onMounted(() => scroll())\n\n function updateHideScrollBar(isMenuOpen: boolean) {\n hideScrollBar.value = isMenuOpen\n }\n function isScrolledToBottom(element: Element): boolean {\n return (\n element.getBoundingClientRect().top < window.innerHeight &&\n element.getBoundingClientRect().bottom >= 0\n )\n }\n function scroll() {\n window.onscroll = () => {\n const bottom = document.querySelector('#bottom')\n displayScrollButton.value = bottom !== null && isScrolledToBottom(bottom)\n }\n }\n function scrollToTop() {\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n })\n setTimeout(() => {\n displayScrollButton.value = false\n }, 300)\n }\n function initLanguage() {\n let language = 'en'\n try {\n const navigatorLanguage = navigator.language.split('-')[0]\n if (navigatorLanguage in localeFromLanguage) {\n language = navigatorLanguage\n }\n } catch (e) {\n language = 'en'\n }\n store.dispatch(ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE, language)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Loader = _resolveComponent(\"Loader\")!\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _hoisted_1,\n _createVNode(NavBar, { onMenuInteraction: updateHideScrollBar }),\n (_unref(appLoading))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Loader)\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([\"app-container\", { 'hide-scroll': hideScrollBar.value }])\n }, [\n (_unref(appConfig))\n ? (_openBlock(), _createBlock(_component_router_view, { key: 0 }))\n : (_openBlock(), _createBlock(NoConfig, { key: 1 }))\n ], 2)),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"scroll-button\", { 'display-button': displayScrollButton.value }]),\n onClick: scrollToTop\n }, _hoisted_6, 2)\n ]),\n (_unref(appConfig))\n ? (_openBlock(), _createBlock(Footer, {\n key: 2,\n version: _unref(appConfig) ? _unref(appConfig).version : '',\n adminContact: _unref(appConfig).admin_contact\n }, null, 8, [\"version\", \"adminContact\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n}\n}\n\n})","import script from \"./App.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./App.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./App.vue?vue&type=style&index=0&id=2930d5e0&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-69d7e4ff\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"alert-message\" }\nconst _hoisted_2 = [\"innerHTML\"]\n\nimport { toRefs } from 'vue'\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AlertMessage',\n props: {\n message: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n message: string\n }\n\n \n const { message } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n innerHTML: _ctx.$t(_unref(message))\n }, null, 8, _hoisted_2)\n ]))\n}\n}\n\n})","import script from \"./AlertMessage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AlertMessage.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AlertMessage.vue?vue&type=style&index=0&id=69d7e4ff&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-69d7e4ff\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8cf5cc64\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"custom-textarea\" }\nconst _hoisted_2 = [\"id\", \"name\", \"maxLenght\", \"disabled\"]\nconst _hoisted_3 = { class: \"remaining-chars\" }\n\nimport { ref, watch, withDefaults } from 'vue'\n\n interface Props {\n name: string\n charLimit?: number\n disabled?: boolean\n input?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CustomTextArea',\n props: {\n name: null,\n charLimit: { default: 500 },\n disabled: { type: Boolean, default: false },\n input: { default: '' }\n },\n emits: ['updateValue'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { name: string, charLimit: number, disabled: boolean, input: string | null }\n\n \n\n \n\n const text = ref('')\n\n function updateText(event: Event & { target: HTMLInputElement }) {\n emit('updateValue', event.target.value)\n }\n\n watch(\n () => props.input,\n (value) => {\n text.value = value === null ? '' : value\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _withDirectives(_createElementVNode(\"textarea\", {\n id: __props.name,\n name: __props.name,\n maxLenght: __props.charLimit,\n disabled: __props.disabled,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((text).value = $event)),\n onInput: updateText\n }, null, 40, _hoisted_2), [\n [_vModelText, text.value]\n ]),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('workouts.REMAINING_CHARS')) + \": \" + _toDisplayString(text.value.length) + \"/\" + _toDisplayString(__props.charLimit), 1)\n ]))\n}\n}\n\n})","import script from \"./CustomTextArea.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CustomTextArea.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CustomTextArea.vue?vue&type=style&index=0&id=8cf5cc64&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8cf5cc64\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, Fragment as _Fragment } from \"vue\"\n\nimport { ComputedRef, computed, toRefs, withDefaults } from 'vue'\n\n import { TUnit } from '@/types/units'\n import { units, convertDistance } from '@/utils/units'\n\n interface Props {\n distance: number\n unitFrom: TUnit\n useImperialUnits: boolean\n digits?: number\n displayUnit?: boolean\n speed?: boolean\n strong?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Distance',\n props: {\n distance: null,\n unitFrom: null,\n useImperialUnits: { type: Boolean },\n digits: { default: 2 },\n displayUnit: { type: Boolean, default: true },\n speed: { type: Boolean, default: false },\n strong: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { distance: number, unitFrom: TUnit, useImperialUnits: boolean, digits: number, displayUnit: boolean, speed: boolean, strong: boolean }\n\n \n\n const {\n digits,\n displayUnit,\n distance,\n speed,\n strong,\n unitFrom,\n useImperialUnits,\n } = toRefs(props)\n const unitTo: ComputedRef = computed(() =>\n useImperialUnits.value\n ? units[unitFrom.value].defaultTarget\n : unitFrom.value\n )\n const convertedDistance = computed(() =>\n useImperialUnits.value\n ? convertDistance(\n distance.value,\n unitFrom.value,\n unitTo.value,\n digits.value\n )\n : parseFloat(distance.value.toFixed(digits.value))\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"distance\", { strong: _unref(strong) }])\n }, _toDisplayString(_unref(convertedDistance)), 3),\n _createTextVNode(\" \" + _toDisplayString(' ') + \" \"),\n (_unref(displayUnit))\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n class: _normalizeClass([\"unit\", { strong: _unref(strong) }])\n }, _toDisplayString(_unref(unitTo)) + _toDisplayString(_unref(speed) ? '/h' : ''), 3))\n : _createCommentVNode(\"\", true)\n ], 64))\n}\n}\n\n})","import script from \"./Distance.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Distance.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Distance.vue?vue&type=style&index=0&id=f46ff1d6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-f46ff1d6\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderSlot as _renderSlot, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2d3b4eac\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"dropdown-wrapper\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"dropdown-list\"\n}\nconst _hoisted_3 = [\"onClick\"]\n\nimport { ref, watch } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { IDropdownOption, TDropdownOptions } from '@/types/forms'\n interface Props {\n options: TDropdownOptions\n selected: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Dropdown',\n props: {\n options: null,\n selected: null\n },\n emits: {\n selected: (option: IDropdownOption) => option,\n },\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n options: TDropdownOptions\n selected: string\n }\n\n \n\n \n\n const route = useRoute()\n const isOpen = ref(false)\n const dropdownOptions = props.options.map((option) => option)\n\n function toggleDropdown() {\n isOpen.value = !isOpen.value\n }\n function updateSelected(option: IDropdownOption) {\n emit('selected', option)\n isOpen.value = false\n }\n\n watch(\n () => route.path,\n () => (isOpen.value = false)\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"dropdown-selected\",\n onClick: toggleDropdown\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n (isOpen.value)\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(dropdownOptions), (option, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n class: _normalizeClass([\"dropdown-item\", { selected: option.value === __props.selected }]),\n key: index,\n onClick: ($event: any) => (updateSelected(option))\n }, _toDisplayString(option.label), 11, _hoisted_3))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./Dropdown.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Dropdown.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Dropdown.vue?vue&type=style&index=0&id=2d3b4eac&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2d3b4eac\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2659a79a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"error-message\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { key: 1 }\n\nimport { toRefs } from 'vue'\n\n interface Props {\n message: string | string[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'ErrorMessage',\n props: {\n message: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n message: string | string[]\n }\n\n \n const { message } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (Array.isArray(_unref(message)))\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(message), (subMessage, index) => {\n return (_openBlock(), _createElementBlock(\"li\", { key: index }, _toDisplayString(_ctx.$t(subMessage)), 1))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(_unref(message))), 1))\n ]))\n}\n}\n\n})","import script from \"./ErrorMessage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ErrorMessage.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./ErrorMessage.vue?vue&type=style&index=0&id=2659a79a&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2659a79a\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingSport.vue?vue&type=template&id=be8023a2\"\nimport script from \"./CyclingSport.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingSport.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingTransport.vue?vue&type=template&id=97af5148\"\nimport script from \"./CyclingTransport.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingTransport.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./CyclingVirtual.vue?vue&type=template&id=ec8f7bb6\"\nimport script from \"./CyclingVirtual.vue?vue&type=script&lang=js\"\nexport * from \"./CyclingVirtual.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Hiking.vue?vue&type=template&id=40903dc4\"\nimport script from \"./Hiking.vue?vue&type=script&lang=js\"\nexport * from \"./Hiking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./MountainBiking.vue?vue&type=template&id=5bdbc6e8\"\nimport script from \"./MountainBiking.vue?vue&type=script&lang=js\"\nexport * from \"./MountainBiking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./MountainBikingElectric.vue?vue&type=template&id=21e72aec\"\nimport script from \"./MountainBikingElectric.vue?vue&type=script&lang=js\"\nexport * from \"./MountainBikingElectric.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Rowing.vue?vue&type=template&id=31ae2dd5\"\nimport script from \"./Rowing.vue?vue&type=script&lang=js\"\nexport * from \"./Rowing.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Running.vue?vue&type=template&id=4d47a4fe\"\nimport script from \"./Running.vue?vue&type=script&lang=js\"\nexport * from \"./Running.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./SkiingAlpine.vue?vue&type=template&id=3ebf3bca\"\nimport script from \"./SkiingAlpine.vue?vue&type=script&lang=js\"\nexport * from \"./SkiingAlpine.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./SkiingCrossCountry.vue?vue&type=template&id=1561bbe6\"\nimport script from \"./SkiingCrossCountry.vue?vue&type=script&lang=js\"\nexport * from \"./SkiingCrossCountry.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Snowshoes.vue?vue&type=template&id=67df2761\"\nimport script from \"./Snowshoes.vue?vue&type=script&lang=js\"\nexport * from \"./Snowshoes.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Trail.vue?vue&type=template&id=32a14156\"\nimport script from \"./Trail.vue?vue&type=script&lang=js\"\nexport * from \"./Trail.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Walking.vue?vue&type=template&id=2ed4f5f4\"\nimport script from \"./Walking.vue?vue&type=script&lang=js\"\nexport * from \"./Walking.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"title\"]\n\nimport { inject, toRefs, withDefaults } from 'vue'\n\n import CyclingSport from '@/components/Common/Images/SportImage/CyclingSport.vue'\n import CyclingTransport from '@/components/Common/Images/SportImage/CyclingTransport.vue'\n import CyclingVirtual from '@/components/Common/Images/SportImage/CyclingVirtual.vue'\n import Hiking from '@/components/Common/Images/SportImage/Hiking.vue'\n import MountainBiking from '@/components/Common/Images/SportImage/MountainBiking.vue'\n import MountainBikingElectric from '@/components/Common/Images/SportImage/MountainBikingElectric.vue'\n import Rowing from '@/components/Common/Images/SportImage/Rowing.vue'\n import Running from '@/components/Common/Images/SportImage/Running.vue'\n import SkiingAlpine from '@/components/Common/Images/SportImage/SkiingAlpine.vue'\n import SkiingCrossCountry from '@/components/Common/Images/SportImage/SkiingCrossCountry.vue'\n import Snowshoes from '@/components/Common/Images/SportImage/Snowshoes.vue'\n import Trail from '@/components/Common/Images/SportImage/Trail.vue'\n import Walking from '@/components/Common/Images/SportImage/Walking.vue'\n\n interface Props {\n sportLabel: string\n color: string | null\n title?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sportLabel: null,\n color: null,\n title: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { sportLabel: string, color: string | null, title: string }\n\n \n\n const { color, sportLabel, title } = toRefs(props)\n const sportColors = inject('sportColors')\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"sport-img\",\n style: _normalizeStyle({ fill: _unref(color) ? _unref(color) : _unref(sportColors)[_unref(sportLabel)] }),\n title: _unref(title) ? _unref(title) : _ctx.$t(`sports.${_unref(sportLabel)}.LABEL`)\n }, [\n (_unref(sportLabel) === 'Cycling (Sport)')\n ? (_openBlock(), _createBlock(CyclingSport, { key: 0 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Cycling (Transport)')\n ? (_openBlock(), _createBlock(CyclingTransport, { key: 1 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Cycling (Virtual)')\n ? (_openBlock(), _createBlock(CyclingVirtual, { key: 2 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Hiking')\n ? (_openBlock(), _createBlock(Hiking, { key: 3 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Mountain Biking')\n ? (_openBlock(), _createBlock(MountainBiking, { key: 4 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Mountain Biking (Electric)')\n ? (_openBlock(), _createBlock(MountainBikingElectric, { key: 5 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Rowing')\n ? (_openBlock(), _createBlock(Rowing, { key: 6 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Running')\n ? (_openBlock(), _createBlock(Running, { key: 7 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Skiing (Alpine)')\n ? (_openBlock(), _createBlock(SkiingAlpine, { key: 8 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Skiing (Cross Country)')\n ? (_openBlock(), _createBlock(SkiingCrossCountry, { key: 9 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Snowshoes')\n ? (_openBlock(), _createBlock(Snowshoes, { key: 10 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Trail')\n ? (_openBlock(), _createBlock(Trail, { key: 11 }))\n : _createCommentVNode(\"\", true),\n (_unref(sportLabel) === 'Walking')\n ? (_openBlock(), _createBlock(Walking, { key: 12 }))\n : _createCommentVNode(\"\", true)\n ], 12, _hoisted_1))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","\n\n\n","import { render } from \"./Loader.vue?vue&type=template&id=4c9921ee&scoped=true\"\nconst script = {}\n\nimport \"./Loader.vue?vue&type=style&index=0&id=4c9921ee&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4c9921ee\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-e8fcfaba\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"modal\" }\nconst _hoisted_2 = { class: \"custom-modal\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"modal-message\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"modal-message\"\n}\nconst _hoisted_5 = { class: \"modal-buttons\" }\n\nimport { ComputedRef, computed, toRefs, withDefaults, onUnmounted } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n title: string\n message: string\n strongMessage?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Modal',\n props: {\n title: null,\n message: null,\n strongMessage: { default: () => null }\n },\n emits: ['cancelAction', 'confirmAction'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { title: string, message: string, strongMessage: string | null }\n\n \n\n \n\n const store = useStore()\n\n const { title, message, strongMessage } = toRefs(props)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\nreturn (_ctx: any,_cache: any) => {\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(title)), 1)\n ]),\n content: _withCtx(() => [\n (_unref(strongMessage))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createVNode(_component_i18n_t, { keypath: _unref(message) }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(strongMessage)), 1)\n ]),\n _: 1\n }, 8, [\"keypath\"])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, _toDisplayString(_unref(message)), 1)),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 2,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_5, [\n (!_unref(errorMessages))\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"confirm\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('confirmAction')))\n }, _toDisplayString(_ctx.$t('buttons.YES')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('cancelAction')))\n }, _toDisplayString(_ctx.$t(`buttons.${_unref(errorMessages) ? 'CANCEL' : 'NO'}`)), 1)\n ])\n ]),\n _: 1\n })\n ])\n ]))\n}\n}\n\n})","import script from \"./Modal.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Modal.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Modal.vue?vue&type=style&index=0&id=e8fcfaba&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-e8fcfaba\"]])\n\nexport default __exports__","import AlertMessage from '@/components/Common/AlertMessage.vue'\nimport Card from '@/components/Common/Card.vue'\nimport CustomTextArea from '@/components/Common/CustomTextArea.vue'\nimport Distance from '@/components/Common/Distance.vue'\nimport Dropdown from '@/components/Common/Dropdown.vue'\nimport ErrorMessage from '@/components/Common/ErrorMessage.vue'\nimport SportImage from '@/components/Common/Images/SportImage/index.vue'\nimport Loader from '@/components/Common/Loader.vue'\nimport Modal from '@/components/Common/Modal.vue'\n\nexport const customComponents = [\n { target: AlertMessage, name: 'AlertMessage' },\n { target: Card, name: 'Card' },\n { target: CustomTextArea, name: 'CustomTextArea' },\n { target: Distance, name: 'Distance' },\n { target: Dropdown, name: 'Dropdown' },\n { target: ErrorMessage, name: 'ErrorMessage' },\n { target: Loader, name: 'Loader' },\n { target: Modal, name: 'Modal' },\n { target: SportImage, name: 'SportImage' },\n]\n","import { Directive, DirectiveBinding } from 'vue'\n\ninterface ClickOutsideHTMLElement extends HTMLElement {\n clickOutsideEvent?: (event: MouseEvent | TouchEvent) => void\n}\n\nexport const clickOutsideDirective: Directive = {\n mounted: (\n element: ClickOutsideHTMLElement,\n binding: DirectiveBinding\n ): void => {\n element.clickOutsideEvent = function (event) {\n if (!(element === event.target || element.contains(event.target))) {\n binding.value(event)\n }\n }\n document.body.addEventListener('click', element.clickOutsideEvent)\n document.body.addEventListener('touchstart', element.clickOutsideEvent)\n },\n unmounted: function (element: ClickOutsideHTMLElement): void {\n if (element.clickOutsideEvent) {\n document.body.removeEventListener('click', element.clickOutsideEvent)\n document.body.removeEventListener('touchstart', element.clickOutsideEvent)\n element.clickOutsideEvent = undefined\n }\n },\n}\n","import {\n Chart,\n BarElement,\n LineElement,\n PointElement,\n Legend,\n Title,\n Tooltip,\n Filler,\n BarController,\n CategoryScale,\n LineController,\n LinearScale,\n} from 'chart.js'\nimport ChartDataLabels from 'chartjs-plugin-datalabels'\nimport { createApp } from 'vue'\nimport VueFullscreen from 'vue-fullscreen'\n\nimport './registerServiceWorker'\nimport App from './App.vue'\nimport i18n from './i18n'\nimport router from './router'\nimport store from './store'\n\nimport { customComponents } from '@/custom-components'\nimport { clickOutsideDirective } from '@/directives'\nimport { sportColors } from '@/utils/sports'\n\nChart.register(\n BarElement,\n LineElement,\n PointElement,\n Legend,\n Title,\n Tooltip,\n Filler,\n BarController,\n CategoryScale,\n LineController,\n LinearScale,\n ChartDataLabels\n)\n\nconst app = createApp(App)\n .provide('sportColors', sportColors)\n .use(i18n)\n .use(store)\n .use(router)\n .use(VueFullscreen, { name: 'VFullscreen' })\n .directive('click-outside', clickOutsideDirective)\n\ncustomComponents.forEach((component) => {\n app.component(component.name, component.target)\n})\n\napp.mount('#app')\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, vModelText as _vModelText, withDirectives as _withDirectives, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, withModifiers as _withModifiers, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-24ec93e2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-app\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = [\"onSubmit\"]\nconst _hoisted_3 = { for: \"admin_contact\" }\nconst _hoisted_4 = [\"value\"]\nconst _hoisted_5 = [\"disabled\"]\nconst _hoisted_6 = { for: \"max_users\" }\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = { class: \"user-limit-help\" }\nconst _hoisted_9 = { class: \"info-box\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { for: \"max_single_file_size\" }\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = { for: \"max_zip_file_size\" }\nconst _hoisted_14 = [\"disabled\"]\nconst _hoisted_15 = { for: \"gpx_limit_import\" }\nconst _hoisted_16 = [\"disabled\"]\nconst _hoisted_17 = {\n key: 1,\n class: \"form-buttons\"\n}\nconst _hoisted_18 = {\n class: \"confirm\",\n type: \"submit\"\n}\nconst _hoisted_19 = [\"onClick\"]\nconst _hoisted_20 = {\n key: 2,\n class: \"form-buttons\"\n}\n\nimport {\n ComputedRef,\n computed,\n reactive,\n withDefaults,\n onBeforeMount,\n toRefs,\n } from 'vue'\n import { useRouter } from 'vue-router'\n\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig, TAppConfigForm } from '@/types/application'\n import { useStore } from '@/use/useStore'\n import { getFileSizeInMB } from '@/utils/files'\n\n interface Props {\n appConfig: TAppConfig\n edition?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminApplication',\n props: {\n appConfig: null,\n edition: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { appConfig: TAppConfig, edition: boolean }\n\n \n const { edition } = toRefs(props)\n\n const store = useStore()\n const router = useRouter()\n\n const appData: TAppConfigForm = reactive({\n admin_contact: '',\n max_users: 0,\n max_single_file_size: 0,\n max_zip_file_size: 0,\n gpx_limit_import: 0,\n })\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => {\n if (props.appConfig) {\n updateForm(props.appConfig)\n }\n })\n\n function updateForm(appConfig: TAppConfig) {\n Object.keys(appData).map((key) => {\n ['max_single_file_size', 'max_zip_file_size'].includes(key)\n ? // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (appData[key] = getFileSizeInMB(appConfig[key]))\n : // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (appData[key] = appConfig[key])\n })\n }\n function onCancel() {\n updateForm(props.appConfig)\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n router.push('/admin/application')\n }\n function onSubmit() {\n const formData: TAppConfigForm = Object.assign({}, appData)\n formData.max_single_file_size *= 1048576\n formData.max_zip_file_size *= 1048576\n store.dispatch(ROOT_STORE.ACTIONS.UPDATE_APPLICATION_CONFIG, formData)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.TITLE')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"form\", {\n class: \"admin-form\",\n onSubmit: _withModifiers(onSubmit, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_3, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.ADMIN_CONTACT')) + \": \", 1),\n (!_unref(edition) && !appData.admin_contact)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"no-contact\",\n value: _ctx.$t('admin.APP_CONFIG.NO_CONTACT_EMAIL'),\n disabled: \"\"\n }, null, 8, _hoisted_4))\n : _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 1,\n id: \"admin_contact\",\n name: \"admin_contact\",\n type: \"email\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((appData.admin_contact) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_5)), [\n [_vModelText, appData.admin_contact]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_USERS_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_users\",\n name: \"max_users\",\n type: \"number\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((appData.max_users) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_7), [\n [_vModelText, appData.max_users]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"span\", _hoisted_9, [\n _hoisted_10,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_USERS_HELP')), 1)\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.SINGLE_UPLOAD_MAX_SIZE_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_single_file_size\",\n name: \"max_single_file_size\",\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((appData.max_single_file_size) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_12), [\n [_vModelText, appData.max_single_file_size]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_13, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.ZIP_UPLOAD_MAX_SIZE_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"max_zip_file_size\",\n name: \"max_zip_file_size\",\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((appData.max_zip_file_size) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_14), [\n [_vModelText, appData.max_zip_file_size]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_15, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APP_CONFIG.MAX_FILES_IN_ZIP_LABEL')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"gpx_limit_import\",\n name: \"gpx_limit_import\",\n type: \"number\",\n min: \"0\",\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((appData.gpx_limit_import) = $event)),\n disabled: !_unref(edition)\n }, null, 8, _hoisted_16), [\n [_vModelText, appData.gpx_limit_import]\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(edition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createElementVNode(\"button\", _hoisted_18, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(onCancel, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_19)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: _cache[5] || (_cache[5] = _withModifiers(($event: any) => (_ctx.$router.push('/admin/application/edit')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.EDIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[6] || (_cache[6] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ]))\n ], 40, _hoisted_2)\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminApplication.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminApplication.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminApplication.vue?vue&type=style&index=0&id=24ec93e2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-24ec93e2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"stat-card\" }\nconst _hoisted_2 = { class: \"stat-content box\" }\nconst _hoisted_3 = { class: \"stat-icon\" }\nconst _hoisted_4 = { class: \"stat-details\" }\nconst _hoisted_5 = { class: \"stat-huge\" }\nconst _hoisted_6 = { class: \"stat\" }\n\nimport { toRefs } from 'vue'\n\n interface Props {\n icon: string\n text: string\n value: string | number\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatCard',\n props: {\n icon: null,\n text: null,\n value: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n icon: string\n text: string\n value: string | number\n }\n\n \n const { icon, text, value } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa\", `fa-${_unref(icon)}`])\n }, null, 2)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, _toDisplayString(_unref(value)), 1),\n _createElementVNode(\"div\", _hoisted_6, _toDisplayString(_unref(text)), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./StatCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatCard.vue?vue&type=style&index=0&id=6cbb3351&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-stats\" }\n\nimport { computed, toRefs } from 'vue'\n\n import StatCard from '@/components/Common/StatCard.vue'\n import { IAppStatistics } from '@/types/application'\n import { getReadableFileSize } from '@/utils/files'\n\n interface Props {\n appStatistics: IAppStatistics\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AppStatsCards',\n props: {\n appStatistics: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n appStatistics: IAppStatistics\n }\n\n \n\n const { appStatistics } = toRefs(props)\n const uploadDirSize = computed(() =>\n getReadableFileSize(appStatistics.value.uploads_dir_size, false)\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatCard, {\n icon: \"users\",\n value: _unref(appStatistics).users,\n text: _ctx.$t('admin.USER', _unref(appStatistics).users)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"tags\",\n value: _unref(appStatistics).sports,\n text: _ctx.$t('workouts.SPORT', _unref(appStatistics).sports)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"calendar\",\n value: _unref(appStatistics).workouts,\n text: _ctx.$t('workouts.WORKOUT', _unref(appStatistics).workouts)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"folder-open\",\n value: _unref(uploadDirSize).size,\n text: _unref(uploadDirSize).suffix\n }, null, 8, [\"value\", \"text\"])\n ]))\n}\n}\n\n})","import script from \"./AppStatsCards.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStatsCards.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AppStatsCards.vue?vue&type=style&index=0&id=61c5053e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0dd66f89\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-menu\",\n class: \"center-card\"\n}\nconst _hoisted_2 = { class: \"admin-menu description-list\" }\nconst _hoisted_3 = { class: \"application-config-details\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_5 = { class: \"registration-status\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"email-sending-status\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-exclamation-triangle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { capitalize, toRefs, withDefaults } from 'vue'\n\n import AppStatsCards from '@/components/Administration/AppStatsCards.vue'\n import Card from '@/components/Common/Card.vue'\n import { IAppStatistics, TAppConfig } from '@/types/application'\n\n interface Props {\n appConfig: TAppConfig\n appStatistics?: IAppStatistics\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminMenu',\n props: {\n appConfig: null,\n appStatistics: { default: () => ({} as IAppStatistics) }\n },\n setup(__props: any) {\n\nconst props = __props as { appConfig: TAppConfig, appStatistics: IAppStatistics }\n\n \n\n const { appConfig, appStatistics } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.ADMINISTRATION')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(AppStatsCards, { appStatistics: _unref(appStatistics) }, null, 8, [\"appStatistics\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/application\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.APPLICATION')), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", _hoisted_3, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.UPDATE_APPLICATION_DESCRIPTION')), 1),\n _hoisted_4,\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.$t(\n `admin.REGISTRATION_${\n _unref(appConfig).is_registration_enabled ? 'ENABLED' : 'DISABLED'\n }`\n )), 1),\n (!_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_6, [\n _hoisted_7,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.EMAIL_SENDING_DISABLED')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/sports\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('workouts.SPORT', 0))), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t('admin.ENABLE_DISABLE_SPORTS')), 1),\n _createElementVNode(\"dt\", null, [\n _createVNode(_component_router_link, { to: \"/admin/users\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('admin.USER', 0))), 1)\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t('admin.ADMIN_RIGHTS_DELETE_USER_ACCOUNT')), 1)\n ])\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminMenu.vue?vue&type=style&index=0&id=0dd66f89&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0dd66f89\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withModifiers as _withModifiers, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, createBlock as _createBlock, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6d62af67\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-sports\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = { class: \"responsive-table\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, \"#\", -1))\nconst _hoisted_4 = { class: \"text-left\" }\nconst _hoisted_5 = { class: \"text-left sport-action\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, null, -1))\nconst _hoisted_7 = { class: \"text-center\" }\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"cell-heading\" }, \"id\", -1))\nconst _hoisted_9 = { class: \"cell-heading\" }\nconst _hoisted_10 = { class: \"sport-label\" }\nconst _hoisted_11 = { class: \"cell-heading\" }\nconst _hoisted_12 = { class: \"text-center\" }\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"sport-action\" }\nconst _hoisted_15 = { class: \"cell-heading\" }\nconst _hoisted_16 = { class: \"action-button\" }\nconst _hoisted_17 = [\"onClick\"]\nconst _hoisted_18 = {\n key: 0,\n class: \"has-workouts\"\n}\nconst _hoisted_19 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-warning\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { ComputedRef, computed } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ROOT_STORE, SPORTS_STORE } from '@/store/constants'\n import { ITranslatedSport } from '@/types/sports'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminSports',\n setup(__props) {\n\n const { t } = useI18n()\n const store = useStore()\n\n const translatedSports: ComputedRef = computed(() =>\n translateSports(store.getters[SPORTS_STORE.GETTERS.SPORTS], t)\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n function updateSportStatus(id: number, isActive: boolean) {\n store.dispatch(SPORTS_STORE.ACTIONS.UPDATE_SPORTS, {\n id,\n isActive,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.SPORTS.TITLE')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"button\", {\n class: \"top-button\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_3,\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.IMAGE')), 1),\n _createElementVNode(\"th\", _hoisted_4, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.LABEL')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.ACTIVE')), 1),\n _createElementVNode(\"th\", _hoisted_5, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _hoisted_6\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: sport.id\n }, [\n _createElementVNode(\"td\", _hoisted_7, [\n _hoisted_8,\n _createTextVNode(\" \" + _toDisplayString(sport.id), 1)\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.IMAGE')), 1),\n _createVNode(_component_SportImage, {\n title: sport.translatedLabel,\n \"sport-label\": sport.label,\n color: sport.color\n }, null, 8, [\"title\", \"sport-label\", \"color\"])\n ]),\n _createElementVNode(\"td\", _hoisted_10, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.LABEL')), 1),\n _createTextVNode(\" \" + _toDisplayString(sport.translatedLabel), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_12, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.ACTIVE')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${sport.is_active ? '-check' : ''}`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_14, [\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"button\", {\n class: _normalizeClass({ danger: sport.is_active }),\n onClick: ($event: any) => (updateSportStatus(sport.id, !sport.is_active))\n }, _toDisplayString(_ctx.$t(`buttons.${sport.is_active ? 'DIS' : 'EN'}ABLE`)), 11, _hoisted_17),\n (sport.has_workouts)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_18, [\n _hoisted_19,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('admin.SPORTS.TABLE.HAS_WORKOUTS')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ]))\n }), 128))\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminSports.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminSports.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminSports.vue?vue&type=style&index=0&id=6d62af67&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6d62af67\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { vModelText as _vModelText, withKeys as _withKeys, createElementVNode as _createElementVNode, withDirectives as _withDirectives, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-627a8e91\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"users-filters\" }\nconst _hoisted_2 = { class: \"search-username\" }\nconst _hoisted_3 = [\"onKeyup\", \"placeholder\"]\n\nimport { ref } from 'vue'\n import { useRoute } from 'vue-router'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UsersNameFilter',\n emits: ['filterOnUsername'],\n setup(__props, { emit }) {\n\n const route = useRoute()\n const username = ref(route.query.q ? route.query.q : '')\n\n \n function searchUsers() {\n if (username.value !== '') {\n emit('filterOnUsername', username)\n }\n }\n function resetFilter() {\n username.value = ''\n emit('filterOnUsername', username.value)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"username\",\n name: \"username\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((username).value = $event)),\n onKeyup: _withKeys(searchUsers, [\"enter\"]),\n placeholder: _ctx.$t('user.FILTER_ON_USERNAME')\n }, null, 40, _hoisted_3), [\n [\n _vModelText,\n username.value,\n void 0,\n { trim: true }\n ]\n ]),\n (username.value !== '')\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-times\",\n \"aria-hidden\": \"true\",\n onClick: resetFilter\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa fa-search\", { 'fa-disabled': username.value === '' }]),\n \"aria-hidden\": \"true\",\n onClick: searchUsers\n }, null, 2)\n ]))\n}\n}\n\n})","import script from \"./UsersNameFilter.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./UsersNameFilter.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./UsersNameFilter.vue?vue&type=style&index=0&id=627a8e91&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-627a8e91\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withModifiers as _withModifiers, createElementVNode as _createElementVNode, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, withCtx as _withCtx, normalizeClass as _normalizeClass, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-dc12ff78\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"admin-users\",\n class: \"admin-card\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"no-users\"\n}\nconst _hoisted_3 = {\n key: 1,\n class: \"responsive-table\"\n}\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, \"#\", -1))\nconst _hoisted_5 = { class: \"left-text\" }\nconst _hoisted_6 = { class: \"left-text\" }\nconst _hoisted_7 = { class: \"left-text\" }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = { class: \"cell-heading\" }\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = { class: \"cell-heading\" }\nconst _hoisted_12 = { class: \"text-center\" }\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"text-center\" }\nconst _hoisted_15 = { class: \"cell-heading\" }\nconst _hoisted_16 = { class: \"text-center\" }\nconst _hoisted_17 = { class: \"cell-heading\" }\nconst _hoisted_18 = { class: \"text-center\" }\nconst _hoisted_19 = { class: \"cell-heading\" }\nconst _hoisted_20 = [\"disabled\", \"onClick\"]\n\nimport {\n ComputedRef,\n Ref,\n computed,\n reactive,\n watch,\n capitalize,\n onBeforeMount,\n onUnmounted,\n } from 'vue'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import FilterSelects from '@/components/Common/FilterSelects.vue'\n import Pagination from '@/components/Common/Pagination.vue'\n import UserPicture from '@/components/User/UserPicture.vue'\n import UsersNameFilter from '@/components/Users/UsersNameFilter.vue'\n import { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\n import { IPagination, TPaginationPayload } from '@/types/api'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getQuery, sortList } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AdminUsers',\n setup(__props) {\n\n const store = useStore()\n const route = useRoute()\n const router = useRouter()\n\n const orderByList: string[] = [\n 'is_active',\n 'admin',\n 'created_at',\n 'username',\n 'workouts_count',\n ]\n const defaultOrderBy = 'created_at'\n let query: TPaginationPayload = reactive(\n getQuery(route.query, orderByList, defaultOrderBy)\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const users: ComputedRef = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS]\n )\n const pagination: ComputedRef = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS_PAGINATION]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => loadUsers(query))\n\n function loadUsers(queryParams: TPaginationPayload) {\n store.dispatch(USERS_STORE.ACTIONS.GET_USERS, queryParams)\n }\n function searchUsers(username: Ref) {\n reloadUsers('q', username.value)\n }\n\n function updateUser(username: string, admin: boolean) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n admin,\n })\n }\n function reloadUsers(queryParam: string, queryValue: string) {\n query[queryParam] = queryValue\n if (queryParam === 'per_page') {\n query.page = 1\n }\n router.push({ path: '/admin/users', query })\n }\n\n onUnmounted(() => {\n store.dispatch(USERS_STORE.ACTIONS.EMPTY_USERS)\n })\n\n watch(\n () => route.query,\n (newQuery: LocationQuery) => {\n query = getQuery(newQuery, orderByList, defaultOrderBy, { query })\n loadUsers(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(capitalize(_ctx.$t('admin.USER', 0))), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"button\", {\n class: \"top-button\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1),\n _createVNode(UsersNameFilter, { onFilterOnUsername: searchUsers }),\n _createVNode(FilterSelects, {\n sort: _unref(sortList),\n order_by: orderByList,\n query: _unref(query),\n message: \"admin.USERS.SELECTS.ORDER_BY\",\n onUpdateSelect: reloadUsers\n }, null, 8, [\"sort\", \"query\"]),\n (_unref(users).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('user.NO_USERS_FOUND')), 1))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_4,\n _createElementVNode(\"th\", _hoisted_5, _toDisplayString(_ctx.$t('user.USERNAME')), 1),\n _createElementVNode(\"th\", _hoisted_6, _toDisplayString(_ctx.$t('user.EMAIL')), 1),\n _createElementVNode(\"th\", _hoisted_7, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 0))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.ACTIVE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.ADMIN')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('admin.ACTION')), 1)\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(users), (user) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: user.username\n }, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE')), 1),\n _createVNode(UserPicture, { user: user }, null, 8, [\"user\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_ctx.$t('user.USERNAME')), 1),\n _createVNode(_component_router_link, {\n to: `/admin/users/${user.username}`\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(user.username), 1)\n ]),\n _: 2\n }, 1032, [\"to\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('user.EMAIL')), 1),\n _createTextVNode(\" \" + _toDisplayString(user.email), 1)\n ]),\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')), 1),\n _createTextVNode(\" \" + _toDisplayString(_unref(formatDate)(\n user.created_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_12, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 0))), 1),\n _createTextVNode(\" \" + _toDisplayString(user.nb_workouts), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_14, [\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('admin.ACTIVE')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${user.is_active ? '-check' : ''}-square-o`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_16, [\n _createElementVNode(\"span\", _hoisted_17, _toDisplayString(_ctx.$t('user.ADMIN')), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${user.admin ? '-check' : ''}-square-o`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _createElementVNode(\"td\", _hoisted_18, [\n _createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('admin.ACTION')), 1),\n _createElementVNode(\"button\", {\n class: _normalizeClass({ danger: user.admin }),\n disabled: user.username === _unref(authUser).username,\n onClick: ($event: any) => (updateUser(user.username, !user.admin))\n }, _toDisplayString(_ctx.$t(\n `admin.USERS.TABLE.${\n user.admin ? 'REMOVE' : 'ADD'\n }_ADMIN_RIGHTS`\n )), 11, _hoisted_20)\n ])\n ]))\n }), 128))\n ])\n ]),\n (_unref(pagination).page)\n ? (_openBlock(), _createBlock(Pagination, {\n key: 0,\n path: \"/admin/users\",\n pagination: _unref(pagination),\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 1,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = _withModifiers(($event: any) => (_ctx.$router.push('/admin')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.BACK_TO_ADMIN')), 1)\n ]))\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./AdminUsers.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminUsers.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminUsers.vue?vue&type=style&index=0&id=dc12ff78&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-dc12ff78\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = { class: \"profile-tabs custom-checkboxes-group\" }\nconst _hoisted_2 = { class: \"profile-tabs-checkboxes custom-checkboxes\" }\nconst _hoisted_3 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n tabs: string[]\n selectedTab: string\n edition: boolean\n disabled?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserProfileTabs',\n props: {\n tabs: null,\n selectedTab: null,\n edition: { type: Boolean },\n disabled: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { tabs: string[], selectedTab: string, edition: boolean, disabled: boolean }\n\n \n\n const { tabs, selectedTab, disabled } = toRefs(props)\n\n function getPath(tab: string) {\n switch (tab) {\n case 'ACCOUNT':\n case 'PICTURE':\n return `/profile/edit/${tab.toLocaleLowerCase()}`\n case 'APPS':\n case 'PREFERENCES':\n case 'SPORTS':\n return `/profile${\n props.edition ? '/edit' : ''\n }/${tab.toLocaleLowerCase()}`\n default:\n case 'PROFILE':\n return `/profile${props.edition ? '/edit' : ''}`\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(tabs), (tab) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"profile-tab custom-checkbox\",\n key: tab\n }, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: tab,\n name: tab,\n checked: _unref(selectedTab).split('/')[0] === tab,\n disabled: _unref(disabled),\n onInput: ($event: any) => (_ctx.$router.push(getPath(tab)))\n }, null, 40, _hoisted_3),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`user.PROFILE.TABS.${tab}`)), 1)\n ])\n ]))\n }), 128))\n ])\n ]))\n}\n}\n\n})","import script from \"./UserProfileTabs.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserProfileTabs.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserProfileTabs.vue?vue&type=style&index=0&id=01b05f01&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9729cba4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-profile\" }\nconst _hoisted_2 = { class: \"box\" }\n\nimport { toRefs } from 'vue'\n\n import UserHeader from '@/components/User/ProfileDisplay/UserHeader.vue'\n import UserProfileTabs from '@/components/User/UserProfileTabs.vue'\n import { IUserProfile } from '@/types/user'\n\n interface Props {\n user: IUserProfile\n tab: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null,\n tab: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n tab: string\n }\n\n \n\n const { user, tab } = toRefs(props)\n const tabs = ['PROFILE', 'PREFERENCES', 'SPORTS', 'APPS']\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(UserHeader, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(UserProfileTabs, {\n tabs: tabs,\n selectedTab: _unref(tab),\n edition: false\n }, null, 8, [\"selectedTab\"]),\n _createVNode(_component_router_view, { user: _unref(user) }, null, 8, [\"user\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=9729cba4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9729cba4\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"user-preferences\",\n class: \"description-list\"\n}\nconst _hoisted_2 = { class: \"profile-buttons\" }\n\nimport { computed, ComputedRef } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getDateFormat } from '@/utils/dates'\n import { languageLabels } from '@/utils/locales'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPreferences',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const appLanguage: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const userLanguage = computed(() =>\n props.user.language\n ? languageLabels[props.user.language]\n : languageLabels['en']\n )\n const fistDayOfWeek = computed(() => (props.user.weekm ? 'MONDAY' : 'SUNDAY'))\n const timezone = computed(() =>\n props.user.timezone ? props.user.timezone : 'Europe/Paris'\n )\n const date_format = computed(() =>\n props.user.date_format ? props.user.date_format : 'MM/dd/yyyy'\n )\n const display_ascent = computed(() =>\n props.user.display_ascent ? 'DISPLAYED' : 'HIDDEN'\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LANGUAGE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(userLanguage)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.TIMEZONE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(timezone)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.DATE_FORMAT')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(getDateFormat)(_unref(date_format), _unref(appLanguage))), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_DAY_OF_WEEK')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(`user.PROFILE.${_unref(fistDayOfWeek)}`)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.UNITS.LABEL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(\n `user.PROFILE.UNITS.${__props.user.imperial_units ? 'IMPERIAL' : 'METRIC'}`\n )), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.ASCENT_DATA')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_ctx.$t(`common.${_unref(display_ascent)}`)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"button\", {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/edit/preferences')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPreferences.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPreferences.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"user-profile-edition\",\n class: \"center-card\"\n}\n\nimport { computed, toRefs } from 'vue'\n\n import UserProfileTabs from '@/components/User/UserProfileTabs.vue'\n import { AUTH_USER_STORE } from '@/store/constants'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n tab: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null,\n tab: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n tab: string\n }\n\n \n\n const store = useStore()\n\n const { user, tab } = toRefs(props)\n const tabs = ['PROFILE', 'ACCOUNT', 'PICTURE', 'PREFERENCES', 'SPORTS']\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(`user.PROFILE.${_unref(tab)}_EDITION`)), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserProfileTabs, {\n tabs: tabs,\n selectedTab: _unref(tab),\n edition: true,\n disabled: _unref(loading)\n }, null, 8, [\"selectedTab\", \"disabled\"]),\n _createVNode(_component_router_view, { user: _unref(user) }, null, 8, [\"user\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, createVNode as _createVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-37b8c4c8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-infos-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = {\n key: 1,\n class: \"info-box success-message\"\n}\nconst _hoisted_4 = [\"onSubmit\"]\nconst _hoisted_5 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_6 = [\"disabled\"]\nconst _hoisted_7 = {\n class: \"form-items\",\n for: \"password-field\"\n}\nconst _hoisted_8 = {\n class: \"form-items\",\n for: \"new-password-field\"\n}\nconst _hoisted_9 = { class: \"form-buttons\" }\nconst _hoisted_10 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport {\n ComputedRef,\n Ref,\n computed,\n reactive,\n ref,\n toRefs,\n onMounted,\n watch,\n onUnmounted,\n } from 'vue'\n\n import PasswordInput from '@/components/Common/PasswordInput.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IUserProfile, IUserAccountPayload } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAccountEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n const { user } = toRefs(props)\n\n const store = useStore()\n const userForm: IUserAccountPayload = reactive({\n email: '',\n password: '',\n new_password: '',\n })\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const emailUpdate = ref(false)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const formErrors = ref(false)\n const displayModal: Ref = ref(false)\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function invalidateForm() {\n formErrors.value = true\n }\n function updateUserForm(user: IUserProfile) {\n userForm.email = user.email\n }\n function updatePassword(password: string) {\n userForm.password = password\n }\n function updateNewPassword(new_password: string) {\n userForm.new_password = new_password\n }\n function updateProfile() {\n const payload: IUserAccountPayload = {\n email: userForm.email,\n password: userForm.password,\n }\n if (userForm.new_password) {\n payload.new_password = userForm.new_password\n }\n emailUpdate.value = userForm.email !== user.value.email\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_ACCOUNT, payload)\n }\n function updateDisplayModal(value: boolean) {\n displayModal.value = value\n }\n function deleteAccount(username: string) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.DELETE_ACCOUNT, { username })\n }\n\n onUnmounted(() => {\n store.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\n watch(\n () => isSuccess.value,\n async (isSuccessValue) => {\n if (isSuccessValue) {\n updatePassword('')\n updateNewPassword('')\n updateUserForm(user.value)\n formErrors.value = false\n }\n }\n )\n watch(\n () => user.value.email,\n async () => {\n updateUserForm(user.value)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t('user.CONFIRM_ACCOUNT_DELETION'),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (deleteAccount(_unref(user).username))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\n `user.PROFILE.SUCCESSFUL_${\n emailUpdate.value && _unref(appConfig).is_email_sending_enabled ? 'EMAIL_' : ''\n }UPDATE`\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_5, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.EMAIL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"email\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((userForm.email) = $event)),\n disabled: _unref(loading),\n required: true,\n onInvalid: invalidateForm\n }, null, 40, _hoisted_6), [\n [_vModelText, userForm.email]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.CURRENT_PASSWORD')) + \"* \", 1),\n _createVNode(PasswordInput, {\n id: \"password-field\",\n disabled: _unref(loading),\n password: userForm.password,\n required: true,\n onUpdatePassword: updatePassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"password\"])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.NEW_PASSWORD')) + \" \", 1),\n _createVNode(PasswordInput, {\n id: \"new-password-field\",\n disabled: _unref(loading),\n checkStrength: true,\n password: userForm.new_password,\n isSuccess: false,\n onUpdatePassword: updateNewPassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"password\"])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"button\", _hoisted_10, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[3] || (_cache[3] = _withModifiers(($event: any) => (_ctx.$router.push('/profile')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1),\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (updateDisplayModal(true)), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.DELETE_MY_ACCOUNT')), 1)\n ])\n ], 42, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserAccountEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAccountEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAccountEdition.vue?vue&type=style&index=0&id=37b8c4c8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-37b8c4c8\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, vModelText as _vModelText, withDirectives as _withDirectives, createVNode as _createVNode, withModifiers as _withModifiers, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5e5a4552\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-infos-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = {\n class: \"form-items\",\n for: \"registrationDate\"\n}\nconst _hoisted_5 = [\"value\"]\nconst _hoisted_6 = {\n class: \"form-items\",\n for: \"first_name\"\n}\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = {\n class: \"form-items\",\n for: \"last_name\"\n}\nconst _hoisted_9 = {\n class: \"form-items\",\n for: \"birth_date\"\n}\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = {\n class: \"form-items\",\n for: \"location\"\n}\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = { class: \"form-items\" }\nconst _hoisted_14 = { class: \"form-buttons\" }\nconst _hoisted_15 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport { format } from 'date-fns'\n import { ComputedRef, computed, reactive, onMounted, onUnmounted } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IUserProfile, IUserPayload, IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserInfosEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const userForm: IUserPayload = reactive({\n first_name: '',\n last_name: '',\n birth_date: '',\n location: '',\n bio: '',\n })\n const registrationDate = computed(() =>\n props.user.created_at\n ? formatDate(\n props.user.created_at,\n props.user.timezone,\n props.user.date_format\n )\n : ''\n )\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function updateUserForm(user: IUserProfile) {\n userForm.first_name = user.first_name ? user.first_name : ''\n userForm.last_name = user.last_name ? user.last_name : ''\n userForm.birth_date = user.birth_date\n ? format(new Date(user.birth_date), 'yyyy-MM-dd')\n : ''\n userForm.location = user.location ? user.location : ''\n userForm.bio = user.bio ? user.bio : ''\n }\n function updateBio(value: string) {\n userForm.bio = value\n }\n function updateProfile() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PROFILE, userForm)\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')) + \" \", 1),\n _createElementVNode(\"input\", {\n id: \"registrationDate\",\n value: _unref(registrationDate),\n disabled: \"\"\n }, null, 8, _hoisted_5)\n ]),\n _createElementVNode(\"label\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.FIRST_NAME')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"first_name\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((userForm.first_name) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_7), [\n [_vModelText, userForm.first_name]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LAST_NAME')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"last_name\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((userForm.last_name) = $event))\n }, null, 512), [\n [_vModelText, userForm.last_name]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_9, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.BIRTH_DATE')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"birth_date\",\n type: \"date\",\n class: \"birth-date\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((userForm.birth_date) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_10), [\n [_vModelText, userForm.birth_date]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LOCATION')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"location\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((userForm.location) = $event)),\n disabled: _unref(loading)\n }, null, 8, _hoisted_12), [\n [_vModelText, userForm.location]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_13, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.BIO')) + \" \", 1),\n _createVNode(_component_CustomTextArea, {\n name: \"bio\",\n charLimit: 200,\n input: userForm.bio,\n disabled: _unref(loading),\n onUpdateValue: updateBio\n }, null, 8, [\"input\", \"disabled\"])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"button\", _hoisted_15, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (_ctx.$router.push('/profile')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserInfosEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserInfosEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserInfosEdition.vue?vue&type=style&index=0&id=5e5a4552&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5e5a4552\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-687e9604\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-picture-edition\" }\nconst _hoisted_2 = { class: \"user-picture-form\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = { class: \"picture-help\" }\nconst _hoisted_5 = { class: \"info-box\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = { class: \"picture-buttons\" }\nconst _hoisted_8 = [\"disabled\"]\n\nimport { ComputedRef, Ref, computed, ref, toRefs, onUnmounted } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { getReadableFileSize } from '@/utils/files'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPictureEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const store = useStore()\n\n const { user } = toRefs(props)\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const appConfig: ComputedRef = 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 pictureFile: Ref = ref(null)\n\n function deleteUserPicture() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.DELETE_PICTURE)\n }\n function updatePictureFile(event: Event & { target: HTMLInputElement }) {\n if (event.target.files) {\n pictureFile.value = event.target.files[0]\n }\n }\n function updateUserPicture() {\n if (pictureFile.value) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PICTURE, {\n picture: pictureFile.value,\n })\n }\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateUserPicture, [\"prevent\"])\n }, [\n _createElementVNode(\"input\", {\n type: \"file\",\n name: \"picture\",\n accept: \".png,.jpg,.gif\",\n onInput: updatePictureFile\n }, null, 32),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"span\", _hoisted_5, [\n _hoisted_6,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(fileSizeLimit)), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"button\", {\n type: \"submit\",\n disabled: !pictureFile.value\n }, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE_UPDATE')), 9, _hoisted_8),\n (_unref(user).picture)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"danger\",\n onClick: deleteUserPicture\n }, _toDisplayString(_ctx.$t('user.PROFILE.PICTURE_REMOVE')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.BACK_TO_PROFILE')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPictureEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPictureEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPictureEdition.vue?vue&type=style&index=0&id=687e9604&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-687e9604\"]])\n\nexport default __exports__","export const timeZones = [\n 'Africa/Abidjan',\n 'Africa/Accra',\n 'Africa/Algiers',\n 'Africa/Bissau',\n 'Africa/Cairo',\n 'Africa/Casablanca',\n 'Africa/Ceuta',\n 'Africa/El_Aaiun',\n 'Africa/Johannesburg',\n 'Africa/Juba',\n 'Africa/Khartoum',\n 'Africa/Lagos',\n 'Africa/Maputo',\n 'Africa/Monrovia',\n 'Africa/Nairobi',\n 'Africa/Ndjamena',\n 'Africa/Sao_Tome',\n 'Africa/Tripoli',\n 'Africa/Tunis',\n 'Africa/Windhoek',\n 'America/Adak',\n 'America/Anchorage',\n 'America/Araguaina',\n 'America/Argentina/Buenos_Aires',\n 'America/Argentina/Catamarca',\n 'America/Argentina/Cordoba',\n 'America/Argentina/Jujuy',\n 'America/Argentina/La_Rioja',\n 'America/Argentina/Mendoza',\n 'America/Argentina/Rio_Gallegos',\n 'America/Argentina/Salta',\n 'America/Argentina/San_Juan',\n 'America/Argentina/San_Luis',\n 'America/Argentina/Tucuman',\n 'America/Argentina/Ushuaia',\n 'America/Asuncion',\n 'America/Atikokan',\n 'America/Bahia',\n 'America/Bahia_Banderas',\n 'America/Barbados',\n 'America/Belem',\n 'America/Belize',\n 'America/Blanc-Sablon',\n 'America/Boa_Vista',\n 'America/Bogota',\n 'America/Boise',\n 'America/Cambridge_Bay',\n 'America/Campo_Grande',\n 'America/Cancun',\n 'America/Caracas',\n 'America/Cayenne',\n 'America/Chicago',\n 'America/Chihuahua',\n 'America/Costa_Rica',\n 'America/Creston',\n 'America/Cuiaba',\n 'America/Curacao',\n 'America/Danmarkshavn',\n 'America/Dawson',\n 'America/Dawson_Creek',\n 'America/Denver',\n 'America/Detroit',\n 'America/Edmonton',\n 'America/Eirunepe',\n 'America/El_Salvador',\n 'America/Fortaleza',\n 'America/Fort_Nelson',\n 'America/Glace_Bay',\n 'America/Godthab',\n 'America/Goose_Bay',\n 'America/Grand_Turk',\n 'America/Guatemala',\n 'America/Guayaquil',\n 'America/Guyana',\n 'America/Halifax',\n 'America/Havana',\n 'America/Hermosillo',\n 'America/Indiana/Indianapolis',\n 'America/Indiana/Knox',\n 'America/Indiana/Marengo',\n 'America/Indiana/Petersburg',\n 'America/Indiana/Tell_City',\n 'America/Indiana/Vevay',\n 'America/Indiana/Vincennes',\n 'America/Indiana/Winamac',\n 'America/Inuvik',\n 'America/Iqaluit',\n 'America/Jamaica',\n 'America/Juneau',\n 'America/Kentucky/Louisville',\n 'America/Kentucky/Monticello',\n 'America/La_Paz',\n 'America/Lima',\n 'America/Los_Angeles',\n 'America/Maceio',\n 'America/Managua',\n 'America/Manaus',\n 'America/Martinique',\n 'America/Matamoros',\n 'America/Mazatlan',\n 'America/Menominee',\n 'America/Merida',\n 'America/Metlakatla',\n 'America/Mexico_City',\n 'America/Miquelon',\n 'America/Moncton',\n 'America/Monterrey',\n 'America/Montevideo',\n 'America/Nassau',\n 'America/New_York',\n 'America/Nipigon',\n 'America/Nome',\n 'America/Noronha',\n 'America/North_Dakota/Beulah',\n 'America/North_Dakota/Center',\n 'America/North_Dakota/New_Salem',\n 'America/Ojinaga',\n 'America/Panama',\n 'America/Pangnirtung',\n 'America/Paramaribo',\n 'America/Phoenix',\n 'America/Port-au-Prince',\n 'America/Port_of_Spain',\n 'America/Porto_Velho',\n 'America/Puerto_Rico',\n 'America/Punta_Arenas',\n 'America/Rainy_River',\n 'America/Rankin_Inlet',\n 'America/Recife',\n 'America/Regina',\n 'America/Resolute',\n 'America/Rio_Branco',\n 'America/Santarem',\n 'America/Santiago',\n 'America/Santo_Domingo',\n 'America/Sao_Paulo',\n 'America/Scoresbysund',\n 'America/Sitka',\n 'America/St_Johns',\n 'America/Swift_Current',\n 'America/Tegucigalpa',\n 'America/Thule',\n 'America/Thunder_Bay',\n 'America/Tijuana',\n 'America/Toronto',\n 'America/Vancouver',\n 'America/Whitehorse',\n 'America/Winnipeg',\n 'America/Yakutat',\n 'America/Yellowknife',\n 'Antarctica/Casey',\n 'Antarctica/Davis',\n 'Antarctica/DumontDUrville',\n 'Antarctica/Macquarie',\n 'Antarctica/Mawson',\n 'Antarctica/Palmer',\n 'Antarctica/Rothera',\n 'Antarctica/Syowa',\n 'Antarctica/Troll',\n 'Antarctica/Vostok',\n 'Asia/Almaty',\n 'Asia/Amman',\n 'Asia/Anadyr',\n 'Asia/Aqtau',\n 'Asia/Aqtobe',\n 'Asia/Ashgabat',\n 'Asia/Atyrau',\n 'Asia/Baghdad',\n 'Asia/Baku',\n 'Asia/Bangkok',\n 'Asia/Barnaul',\n 'Asia/Beirut',\n 'Asia/Bishkek',\n 'Asia/Brunei',\n 'Asia/Chita',\n 'Asia/Choibalsan',\n 'Asia/Colombo',\n 'Asia/Damascus',\n 'Asia/Dhaka',\n 'Asia/Dili',\n 'Asia/Dubai',\n 'Asia/Dushanbe',\n 'Asia/Famagusta',\n 'Asia/Gaza',\n 'Asia/Hebron',\n 'Asia/Ho_Chi_Minh',\n 'Asia/Hong_Kong',\n 'Asia/Hovd',\n 'Asia/Irkutsk',\n 'Asia/Jakarta',\n 'Asia/Jayapura',\n 'Asia/Jerusalem',\n 'Asia/Kabul',\n 'Asia/Kamchatka',\n 'Asia/Karachi',\n 'Asia/Kathmandu',\n 'Asia/Khandyga',\n 'Asia/Kolkata',\n 'Asia/Krasnoyarsk',\n 'Asia/Kuala_Lumpur',\n 'Asia/Kuching',\n 'Asia/Macau',\n 'Asia/Magadan',\n 'Asia/Makassar',\n 'Asia/Manila',\n 'Asia/Nicosia',\n 'Asia/Novokuznetsk',\n 'Asia/Novosibirsk',\n 'Asia/Omsk',\n 'Asia/Oral',\n 'Asia/Pontianak',\n 'Asia/Pyongyang',\n 'Asia/Qatar',\n 'Asia/Qostanay',\n 'Asia/Qyzylorda',\n 'Asia/Riyadh',\n 'Asia/Sakhalin',\n 'Asia/Samarkand',\n 'Asia/Seoul',\n 'Asia/Shanghai',\n 'Asia/Singapore',\n 'Asia/Srednekolymsk',\n 'Asia/Taipei',\n 'Asia/Tashkent',\n 'Asia/Tbilisi',\n 'Asia/Tehran',\n 'Asia/Thimphu',\n 'Asia/Tokyo',\n 'Asia/Tomsk',\n 'Asia/Ulaanbaatar',\n 'Asia/Urumqi',\n 'Asia/Ust-Nera',\n 'Asia/Vladivostok',\n 'Asia/Yakutsk',\n 'Asia/Yangon',\n 'Asia/Yekaterinburg',\n 'Asia/Yerevan',\n 'Atlantic/Azores',\n 'Atlantic/Bermuda',\n 'Atlantic/Canary',\n 'Atlantic/Cape_Verde',\n 'Atlantic/Faroe',\n 'Atlantic/Madeira',\n 'Atlantic/Reykjavik',\n 'Atlantic/South_Georgia',\n 'Atlantic/Stanley',\n 'Australia/Adelaide',\n 'Australia/Brisbane',\n 'Australia/Broken_Hill',\n 'Australia/Currie',\n 'Australia/Darwin',\n 'Australia/Eucla',\n 'Australia/Hobart',\n 'Australia/Lindeman',\n 'Australia/Lord_Howe',\n 'Australia/Melbourne',\n 'Australia/Perth',\n 'Australia/Sydney',\n 'Europe/Amsterdam',\n 'Europe/Andorra',\n 'Europe/Astrakhan',\n 'Europe/Athens',\n 'Europe/Belgrade',\n 'Europe/Berlin',\n 'Europe/Brussels',\n 'Europe/Bucharest',\n 'Europe/Budapest',\n 'Europe/Chisinau',\n 'Europe/Copenhagen',\n 'Europe/Dublin',\n 'Europe/Gibraltar',\n 'Europe/Helsinki',\n 'Europe/Istanbul',\n 'Europe/Kaliningrad',\n 'Europe/Kiev',\n 'Europe/Kirov',\n 'Europe/Lisbon',\n 'Europe/London',\n 'Europe/Luxembourg',\n 'Europe/Madrid',\n 'Europe/Malta',\n 'Europe/Minsk',\n 'Europe/Monaco',\n 'Europe/Moscow',\n 'Europe/Oslo',\n 'Europe/Paris',\n 'Europe/Prague',\n 'Europe/Riga',\n 'Europe/Rome',\n 'Europe/Samara',\n 'Europe/Saratov',\n 'Europe/Simferopol',\n 'Europe/Sofia',\n 'Europe/Stockholm',\n 'Europe/Tallinn',\n 'Europe/Tirane',\n 'Europe/Ulyanovsk',\n 'Europe/Uzhgorod',\n 'Europe/Vienna',\n 'Europe/Vilnius',\n 'Europe/Volgograd',\n 'Europe/Warsaw',\n 'Europe/Zaporozhye',\n 'Europe/Zurich',\n 'Indian/Chagos',\n 'Indian/Christmas',\n 'Indian/Cocos',\n 'Indian/Kerguelen',\n 'Indian/Mahe',\n 'Indian/Maldives',\n 'Indian/Mauritius',\n 'Indian/Reunion',\n 'Pacific/Apia',\n 'Pacific/Auckland',\n 'Pacific/Bougainville',\n 'Pacific/Chatham',\n 'Pacific/Chuuk',\n 'Pacific/Easter',\n 'Pacific/Efate',\n 'Pacific/Enderbury',\n 'Pacific/Fakaofo',\n 'Pacific/Fiji',\n 'Pacific/Funafuti',\n 'Pacific/Galapagos',\n 'Pacific/Gambier',\n 'Pacific/Guadalcanal',\n 'Pacific/Guam',\n 'Pacific/Honolulu',\n 'Pacific/Kiritimati',\n 'Pacific/Kosrae',\n 'Pacific/Kwajalein',\n 'Pacific/Majuro',\n 'Pacific/Marquesas',\n 'Pacific/Nauru',\n 'Pacific/Niue',\n 'Pacific/Norfolk',\n 'Pacific/Noumea',\n 'Pacific/Pago_Pago',\n 'Pacific/Palau',\n 'Pacific/Pitcairn',\n 'Pacific/Pohnpei',\n 'Pacific/Port_Moresby',\n 'Pacific/Rarotonga',\n 'Pacific/Tahiti',\n 'Pacific/Tarawa',\n 'Pacific/Tongatapu',\n 'Pacific/Wake',\n 'Pacific/Wallis',\n]\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, withKeys as _withKeys, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-47ea2903\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"tz-dropdown\" }\nconst _hoisted_2 = [\"value\", \"disabled\", \"onKeydown\"]\nconst _hoisted_3 = [\"onClick\", \"onMouseover\", \"autofocus\"]\n\nimport { Ref, ref, toRefs, watch, withDefaults } from 'vue'\n\n import { timeZones } from '@/utils/timezone'\n\n interface Props {\n input: string\n disabled?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'TimezoneDropdown',\n props: {\n input: null,\n disabled: { type: Boolean, default: false }\n },\n emits: ['updateTimezone'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { input: string, disabled: boolean }\n\n \n\n \n\n const { input, disabled } = toRefs(props)\n const timezone: Ref = ref(props.input)\n const isOpen: Ref = ref(false)\n const tzList: Ref = ref(null)\n const focusItemIndex: Ref = ref(0)\n\n function matchTimezone(t: string): RegExpMatchArray | null {\n return t.toLowerCase().match(timezone.value.toLowerCase())\n }\n function onMouseOver(index: number) {\n focusItemIndex.value = index\n }\n function onUpdateTimezone(value: string) {\n timezone.value = value\n isOpen.value = false\n emit('updateTimezone', value)\n }\n function onEnter(event: Event & { target: HTMLInputElement }) {\n event.preventDefault()\n if (tzList.value?.firstElementChild?.innerHTML) {\n onUpdateTimezone(tzList.value?.firstElementChild?.innerHTML)\n }\n }\n function openDropdown(event: Event & { target: HTMLInputElement }) {\n event.preventDefault()\n isOpen.value = true\n timezone.value = event.target.value.trim()\n }\n\n watch(\n () => props.input,\n (value) => {\n timezone.value = value\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"input\", {\n class: \"tz-dropdown-input\",\n id: \"timezone\",\n name: \"timezone\",\n value: timezone.value,\n disabled: _unref(disabled),\n required: \"\",\n onKeydown: [\n _cache[0] || (_cache[0] = _withKeys(($event: any) => (onUpdateTimezone(_unref(input))), [\"esc\"])),\n _withKeys(onEnter, [\"enter\"])\n ],\n onInput: openDropdown\n }, null, 40, _hoisted_2),\n (isOpen.value)\n ? (_openBlock(), _createElementBlock(\"ul\", {\n key: 0,\n class: \"tz-dropdown-list\",\n ref_key: \"tzList\",\n ref: tzList\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(timeZones).filter((t) => matchTimezone(t)), (tz, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: tz,\n class: _normalizeClass([\"tz-dropdown-item\", { focus: index === focusItemIndex.value }]),\n onClick: ($event: any) => (onUpdateTimezone(tz)),\n onMouseover: ($event: any) => (onMouseOver(index)),\n autofocus: index === focusItemIndex.value\n }, _toDisplayString(tz), 43, _hoisted_3))\n }), 128))\n ], 512))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./TimezoneDropdown.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./TimezoneDropdown.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./TimezoneDropdown.vue?vue&type=style&index=0&id=47ea2903&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-47ea2903\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, vModelSelect as _vModelSelect, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, createVNode as _createVNode, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-065d5e6c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-preferences-edition\" }\nconst _hoisted_2 = { class: \"profile-form form-box\" }\nconst _hoisted_3 = [\"onSubmit\"]\nconst _hoisted_4 = { class: \"form-items\" }\nconst _hoisted_5 = [\"disabled\"]\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = { class: \"form-items\" }\nconst _hoisted_8 = { class: \"form-items\" }\nconst _hoisted_9 = [\"disabled\"]\nconst _hoisted_10 = [\"value\"]\nconst _hoisted_11 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_12 = { class: \"checkboxes-label\" }\nconst _hoisted_13 = { class: \"checkboxes\" }\nconst _hoisted_14 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_15 = { class: \"checkbox-label\" }\nconst _hoisted_16 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_17 = { class: \"checkboxes-label\" }\nconst _hoisted_18 = { class: \"checkboxes\" }\nconst _hoisted_19 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_20 = { class: \"checkbox-label\" }\nconst _hoisted_21 = { class: \"form-items form-checkboxes\" }\nconst _hoisted_22 = { class: \"checkboxes-label\" }\nconst _hoisted_23 = { class: \"checkboxes\" }\nconst _hoisted_24 = [\"id\", \"name\", \"checked\", \"disabled\", \"onInput\"]\nconst _hoisted_25 = { class: \"checkbox-label\" }\nconst _hoisted_26 = { class: \"form-buttons\" }\nconst _hoisted_27 = {\n class: \"confirm\",\n type: \"submit\"\n}\n\nimport { ComputedRef, computed, reactive, onMounted, onUnmounted } from 'vue'\n\n import TimezoneDropdown from '@/components/User/ProfileEdition/TimezoneDropdown.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IUserPreferencesPayload, IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { availableDateFormatOptions } from '@/utils/dates'\n import { availableLanguages } from '@/utils/locales'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPreferencesEdition',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const userForm: IUserPreferencesPayload = reactive({\n display_ascent: true,\n imperial_units: false,\n language: '',\n timezone: 'Europe/Paris',\n date_format: 'dd/MM/yyyy',\n weekm: false,\n })\n const weekStart = [\n {\n label: 'SUNDAY',\n value: false,\n },\n {\n label: 'MONDAY',\n value: true,\n },\n ]\n const imperialUnits = [\n {\n label: 'METRIC',\n value: false,\n },\n {\n label: 'IMPERIAL',\n value: true,\n },\n ]\n const ascentData = [\n {\n label: 'DISPLAYED',\n value: true,\n },\n {\n label: 'HIDDEN',\n value: false,\n },\n ]\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const dateFormatOptions = computed(() =>\n availableDateFormatOptions(\n new Date().toUTCString(),\n props.user.timezone,\n userForm.language\n )\n )\n\n onMounted(() => {\n if (props.user) {\n updateUserForm(props.user)\n }\n })\n\n function updateUserForm(user: IAuthUserProfile) {\n userForm.display_ascent = user.display_ascent\n userForm.imperial_units = user.imperial_units ? user.imperial_units : false\n userForm.language = user.language ? user.language : 'en'\n userForm.timezone = user.timezone ? user.timezone : 'Europe/Paris'\n userForm.date_format = user.date_format ? user.date_format : 'dd/MM/yyyy'\n userForm.weekm = user.weekm ? user.weekm : false\n }\n function updateProfile() {\n store.dispatch(AUTH_USER_STORE.ACTIONS.UPDATE_USER_PREFERENCES, userForm)\n }\n function updateTZ(value: string) {\n userForm.timezone = value\n }\n function updateAscentDisplay(value: boolean) {\n userForm.display_ascent = value\n }\n function updateImperialUnit(value: boolean) {\n userForm.imperial_units = value\n }\n function updateWeekM(value: boolean) {\n userForm.weekm = value\n }\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(updateProfile, [\"prevent\"])\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.LANGUAGE')) + \" \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"language\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((userForm.language) = $event)),\n disabled: _unref(loading)\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(availableLanguages), (lang) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: lang.value,\n key: lang.value\n }, _toDisplayString(lang.label), 9, _hoisted_6))\n }), 128))\n ], 8, _hoisted_5), [\n [_vModelSelect, userForm.language]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.TIMEZONE')) + \" \", 1),\n _createVNode(TimezoneDropdown, {\n input: userForm.timezone,\n disabled: _unref(loading),\n onUpdateTimezone: updateTZ\n }, null, 8, [\"input\", \"disabled\"])\n ]),\n _createElementVNode(\"label\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PROFILE.DATE_FORMAT')) + \" \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"date_format\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((userForm.date_format) = $event)),\n disabled: _unref(loading)\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(dateFormatOptions), (dateFormat) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: dateFormat.value,\n key: dateFormat.value\n }, _toDisplayString(dateFormat.label), 9, _hoisted_10))\n }), 128))\n ], 8, _hoisted_9), [\n [_vModelSelect, userForm.date_format]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_DAY_OF_WEEK')), 1),\n _createElementVNode(\"div\", _hoisted_13, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(weekStart, (start) => {\n return _createElementVNode(\"label\", {\n key: start.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: start.label,\n name: start.label,\n checked: start.value === userForm.weekm,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateWeekM(start.value))\n }, null, 40, _hoisted_14),\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t(`user.PROFILE.${start.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"span\", _hoisted_17, _toDisplayString(_ctx.$t('user.PROFILE.UNITS.LABEL')), 1),\n _createElementVNode(\"div\", _hoisted_18, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(imperialUnits, (unit) => {\n return _createElementVNode(\"label\", {\n key: unit.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: unit.label,\n name: unit.label,\n checked: unit.value === userForm.imperial_units,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateImperialUnit(unit.value))\n }, null, 40, _hoisted_19),\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t(`user.PROFILE.UNITS.${unit.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"span\", _hoisted_22, _toDisplayString(_ctx.$t('user.PROFILE.ASCENT_DATA')), 1),\n _createElementVNode(\"div\", _hoisted_23, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(ascentData, (status) => {\n return _createElementVNode(\"label\", {\n key: status.label\n }, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: status.label,\n name: status.label,\n checked: status.value === userForm.display_ascent,\n disabled: _unref(loading),\n onInput: ($event: any) => (updateAscentDisplay(status.value))\n }, null, 40, _hoisted_24),\n _createElementVNode(\"span\", _hoisted_25, _toDisplayString(_ctx.$t(`common.${status.label}`)), 1)\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_26, [\n _createElementVNode(\"button\", _hoisted_27, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/preferences')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_3)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserPreferencesEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPreferencesEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPreferencesEdition.vue?vue&type=style&index=0&id=065d5e6c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-065d5e6c\"]])\n\nexport default __exports__","export const oauth2_scopes = [\n 'profile:read',\n 'profile:write',\n 'users:read',\n 'users:write',\n 'workouts:read',\n 'workouts:write',\n]\n\nexport const admin_oauth2_scopes = ['application:write']\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, vModelText as _vModelText, withDirectives as _withDirectives, resolveComponent as _resolveComponent, createVNode as _createVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0657ee77\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"new-oauth2-app\" }\nconst _hoisted_2 = { id: \"new-oauth2-title\" }\nconst _hoisted_3 = { id: \"apps-form\" }\nconst _hoisted_4 = [\"onSubmit\"]\nconst _hoisted_5 = { class: \"form-items\" }\nconst _hoisted_6 = { class: \"form-item\" }\nconst _hoisted_7 = { for: \"app-name\" }\nconst _hoisted_8 = { class: \"form-item\" }\nconst _hoisted_9 = { for: \"app-description\" }\nconst _hoisted_10 = { class: \"form-item\" }\nconst _hoisted_11 = { for: \"app-url\" }\nconst _hoisted_12 = { class: \"form-item\" }\nconst _hoisted_13 = { for: \"app-redirect-uri\" }\nconst _hoisted_14 = { class: \"form-item-scope\" }\nconst _hoisted_15 = { class: \"form-item-scope-label\" }\nconst _hoisted_16 = { class: \"scope-label\" }\nconst _hoisted_17 = [\"name\", \"checked\", \"onChange\"]\nconst _hoisted_18 = [\"innerHTML\"]\nconst _hoisted_19 = { class: \"form-buttons\" }\nconst _hoisted_20 = [\"disabled\"]\n\nimport { computed, reactive } from 'vue'\n\n import { OAUTH2_STORE } from '@/store/constants'\n import { IOAuth2ClientPayload } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { admin_oauth2_scopes, oauth2_scopes } from '@/utils/oauth'\n\n interface Props {\n authUser: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AddUserApp',\n props: {\n authUser: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n const appForm = reactive({\n client_name: '',\n client_uri: '',\n client_description: '',\n redirect_uri: '',\n })\n const scopes: string[] = reactive([])\n const filtered_scopes = computed(() =>\n getScopes(props.authUser, admin_oauth2_scopes, oauth2_scopes)\n )\n\n function createApp() {\n const payload: IOAuth2ClientPayload = {\n client_name: appForm.client_name,\n client_description: appForm.client_description,\n client_uri: appForm.client_uri,\n redirect_uris: [appForm.redirect_uri],\n scope: scopes.sort().join(' '),\n }\n store.dispatch(OAUTH2_STORE.ACTIONS.CREATE_CLIENT, payload)\n }\n function updateDescription(value: string) {\n appForm.client_description = value\n }\n function updateScopes(scope: string) {\n const index = scopes.indexOf(scope)\n if (index > -1) {\n scopes.splice(index, 1)\n } else {\n scopes.push(scope)\n }\n }\n function getScopes(\n authUser: IAuthUserProfile,\n admin_scopes: string[],\n scopes: string[]\n ) {\n const filtered_scopes = [...scopes]\n if (authUser.admin) {\n filtered_scopes.push(...admin_scopes)\n }\n return filtered_scopes.sort()\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"h1\", _hoisted_2, _toDisplayString(_ctx.$t('oauth2.ADD_A_NEW_APP')), 1),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"form\", {\n onSubmit: _withModifiers(createApp, [\"prevent\"])\n }, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"label\", _hoisted_7, _toDisplayString(_ctx.$t('oauth2.APP.NAME')) + \"*\", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-name\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((appForm.client_name) = $event))\n }, null, 512), [\n [_vModelText, appForm.client_name]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"label\", _hoisted_9, _toDisplayString(_ctx.$t('oauth2.APP.DESCRIPTION')), 1),\n _createVNode(_component_CustomTextArea, {\n name: \"app-description\",\n charLimit: 200,\n input: appForm.description,\n onUpdateValue: updateDescription\n }, null, 8, [\"input\"])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"label\", _hoisted_11, _toDisplayString(_ctx.$t('oauth2.APP.URL')) + \"*\", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-url\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((appForm.client_uri) = $event))\n }, null, 512), [\n [_vModelText, appForm.client_uri]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"label\", _hoisted_13, _toDisplayString(_ctx.$t('oauth2.APP.REDIRECT_URL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"app-redirect-uri\",\n type: \"text\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((appForm.redirect_uri) = $event))\n }, null, 512), [\n [_vModelText, appForm.redirect_uri]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", _hoisted_15, _toDisplayString(_ctx.$t('oauth2.APP.SCOPE.LABEL')) + \"* \", 1),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(filtered_scopes), (scope) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"form-item-scope-checkboxes\",\n key: scope\n }, [\n _createElementVNode(\"label\", _hoisted_16, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n name: scope,\n checked: scopes.includes(scope),\n onChange: ($event: any) => (updateScopes(scope))\n }, null, 40, _hoisted_17),\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]),\n _createElementVNode(\"p\", {\n class: \"scope-description\",\n innerHTML: _ctx.$t(`oauth2.APP.SCOPE.${scope}_DESCRIPTION`)\n }, null, 8, _hoisted_18)\n ]))\n }), 128))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n type: \"submit\",\n disabled: scopes.length === 0\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_20),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[3] || (_cache[3] = _withModifiers(() => _ctx.$router.push('/profile/apps'), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ], 40, _hoisted_4)\n ])\n ]))\n}\n}\n\n})","import script from \"./AddUserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AddUserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AddUserApp.vue?vue&type=style&index=0&id=0657ee77&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0657ee77\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3b2fe9ed\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"authorize-oauth2-app\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { id: \"authorize-oauth2-title\" }\nconst _hoisted_4 = { class: \"oauth2-access description-list\" }\nconst _hoisted_5 = { class: \"client-scope\" }\nconst _hoisted_6 = [\"innerHTML\"]\nconst _hoisted_7 = { class: \"authorize-oauth2-buttons\" }\nconst _hoisted_8 = { key: 1 }\nconst _hoisted_9 = { class: \"no-app\" }\n\nimport { computed, ComputedRef, onBeforeMount } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IOAuth2Client } from '@/types/oauth'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AuthorizeUserApp',\n setup(__props) {\n\n const route = useRoute()\n const store = useStore()\n\n const client: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENT]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n\n onBeforeMount(() => loadApp())\n\n function loadApp() {\n if (route.query.client_id && typeof route.query.client_id === 'string') {\n store.dispatch(\n OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_CLIENT_ID,\n route.query.client_id\n )\n }\n }\n\n function authorizeApp() {\n store.dispatch(OAUTH2_STORE.ACTIONS.AUTHORIZE_CLIENT, {\n client_id: `${route.query.client_id}`,\n redirect_uri: `${route.query.redirect_uri}`,\n response_type: `${route.query.response_type}`,\n scope: `${route.query.scope}`,\n state: `${route.query.state ? route.query.state : ''}`,\n code_challenge: `${\n route.query.code_challenge ? route.query.code_challenge : ''\n }`,\n code_challenge_method: `${\n route.query.code_challenge_method\n ? route.query.code_challenge_method\n : ''\n }`,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(client).client_id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"h1\", _hoisted_3, [\n _createVNode(_component_i18n_t, { keypath: \"oauth2.AUTHORIZE_APP\" }, {\n default: _withCtx(() => [\n _createVNode(_component_router_link, {\n to: { name: 'UserApp', params: { id: _unref(client).id } }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(client).name), 1)\n ]),\n _: 1\n }, 8, [\"to\"])\n ]),\n _: 1\n })\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t('oauth2.APP_REQUESTING_ACCESS')), 1),\n _createElementVNode(\"dl\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(client).scope.split(' '), (scope) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: scope }, [\n _createElementVNode(\"dt\", _hoisted_5, [\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]),\n _createElementVNode(\"dd\", {\n innerHTML: _ctx.$t(`oauth2.APP.SCOPE.${scope}_DESCRIPTION`)\n }, null, 8, _hoisted_6)\n ], 64))\n }), 128))\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: authorizeApp\n }, _toDisplayString(_ctx.$t('buttons.AUTHORIZE')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 1)\n ])\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"p\", _hoisted_9, _toDisplayString(_ctx.$t('oauth2.NO_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n ]))\n}\n}\n\n})","import script from \"./AuthorizeUserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AuthorizeUserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AuthorizeUserApp.vue?vue&type=style&index=0&id=3b2fe9ed&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3b2fe9ed\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"oauth2-apps\" }\n\nimport { onUnmounted, toRefs } from 'vue'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const { user } = toRefs(props)\n\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(OAUTH2_STORE.MUTATIONS.SET_CLIENTS, [])\n })\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_router_view, { authUser: _unref(user) }, null, 8, [\"authUser\"])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3a844fa2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"oauth2-app\",\n class: \"description-list\"\n}\nconst _hoisted_2 = { key: 1 }\nconst _hoisted_3 = {\n key: 0,\n class: \"info-box success-message\"\n}\nconst _hoisted_4 = [\"title\"]\nconst _hoisted_5 = { key: 0 }\nconst _hoisted_6 = {\n key: 1,\n class: \"app-secret\"\n}\nconst _hoisted_7 = [\"title\"]\nconst _hoisted_8 = { class: \"client-scopes\" }\nconst _hoisted_9 = { class: \"app-buttons\" }\nconst _hoisted_10 = { key: 2 }\nconst _hoisted_11 = { class: \"no-app\" }\n\nimport {\n ComputedRef,\n Ref,\n capitalize,\n computed,\n onBeforeMount,\n toRefs,\n ref,\n onUnmounted,\n withDefaults,\n watch,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\n import { IOAuth2Client } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n authUser: IAuthUserProfile\n afterCreation?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserApp',\n props: {\n authUser: null,\n afterCreation: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, afterCreation: boolean }\n\n \n const route = useRoute()\n const store = useStore()\n\n const { afterCreation, authUser } = toRefs(props)\n const client: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENT]\n )\n const revocationSuccessful: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.REVOCATION_SUCCESSFUL]\n )\n const displayModal: Ref = ref(false)\n const messageToDisplay: Ref = ref(null)\n const idCopied: Ref = ref(false)\n const secretCopied: Ref = ref(false)\n const clipboardSupport: Ref = ref(false)\n\n onBeforeMount(() => {\n loadClient()\n if (navigator.clipboard) {\n clipboardSupport.value = true\n }\n })\n\n function loadClient() {\n // after creation, client is already in store\n if (\n !afterCreation.value &&\n route.params.id &&\n typeof route.params.id === 'string'\n ) {\n store.dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_ID, +route.params.id)\n }\n }\n function updateMessageToDisplay(forDelete: boolean) {\n messageToDisplay.value = forDelete\n ? 'oauth2.APP_DELETION_CONFIRMATION'\n : 'oauth2.TOKENS_REVOCATION_CONFIRMATION'\n updateDisplayModal(true)\n }\n function updateDisplayModal(value: boolean) {\n displayModal.value = value\n if (!value) {\n messageToDisplay.value = null\n }\n }\n function confirmAction(clientId: number) {\n if (messageToDisplay.value === 'oauth2.APP_DELETION_CONFIRMATION') {\n store.dispatch(OAUTH2_STORE.ACTIONS.DELETE_CLIENT, clientId)\n } else {\n store.dispatch(OAUTH2_STORE.ACTIONS.REVOKE_ALL_TOKENS, clientId)\n }\n }\n function copyIdToClipboard() {\n navigator.clipboard.writeText(client.value.client_id)\n idCopied.value = true\n secretCopied.value = false\n setTimeout(() => {\n idCopied.value = false\n }, 3000)\n }\n function copySecretToClipboard() {\n if (client.value.client_secret) {\n navigator.clipboard.writeText(client.value.client_secret)\n secretCopied.value = true\n idCopied.value = false\n setTimeout(() => {\n secretCopied.value = false\n }, 3000)\n }\n }\n onUnmounted(() => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(OAUTH2_STORE.MUTATIONS.EMPTY_CLIENT)\n store.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, false)\n })\n\n watch(\n () => revocationSuccessful.value,\n (newValue) => {\n if (newValue) {\n updateDisplayModal(false)\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t(messageToDisplay.value),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (confirmAction(_unref(client).id))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(client) && _unref(client).client_id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (_unref(afterCreation) || _unref(revocationSuccessful))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\n _unref(afterCreation)\n ? 'oauth2.APP_CREATED_SUCCESSFULLY'\n : 'oauth2.TOKENS_REVOKED'\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.CLIENT_ID')) + \":\", 1),\n _createElementVNode(\"dd\", null, [\n _createTextVNode(_toDisplayString(_unref(client).client_id) + \" \", 1),\n (_unref(afterCreation) && clipboardSupport.value)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: _normalizeClass(`fa fa-${idCopied.value ? 'check' : 'copy'}`),\n \"aria-hidden\": \"true\",\n title: _ctx.$t('oauth2.COPY_TO_CLIPBOARD'),\n onClick: copyIdToClipboard\n }, null, 10, _hoisted_4))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(afterCreation) && _unref(client).client_secret)\n ? (_openBlock(), _createElementBlock(\"dt\", _hoisted_5, _toDisplayString(_ctx.$t('oauth2.APP.CLIENT_SECRET')) + \": \", 1))\n : _createCommentVNode(\"\", true),\n (_unref(afterCreation) && _unref(client).client_secret)\n ? (_openBlock(), _createElementBlock(\"dd\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_unref(client).client_secret) + \" \", 1),\n (clipboardSupport.value)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: _normalizeClass(`fa fa-${secretCopied.value ? 'check' : 'copy'}`),\n \"aria-hidden\": \"true\",\n title: _ctx.$t('oauth2.COPY_TO_CLIPBOARD'),\n onClick: copySecretToClipboard\n }, null, 10, _hoisted_7))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"dt\", null, _toDisplayString(capitalize(_ctx.$t('oauth2.APP.ISSUE_AT'))) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(formatDate)(\n _unref(client).issued_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.DESCRIPTION')) + \":\", 1),\n _createElementVNode(\"dd\", {\n class: _normalizeClass({ 'no-description': !_unref(client).client_description })\n }, _toDisplayString(_unref(client).client_description\n ? _unref(client).client_description\n : _ctx.$t('oauth2.NO_DESCRIPTION')), 3),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.URL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).website), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.REDIRECT_URL')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(client).redirect_uris.length > 0 ? _unref(client).redirect_uris[0] : ''), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('oauth2.APP.SCOPE.LABEL')) + \":\", 1),\n _createElementVNode(\"dd\", _hoisted_8, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(client).scope.split(' '), (scope) => {\n return (_openBlock(), _createElementBlock(\"span\", {\n class: \"client-scope\",\n key: scope\n }, [\n _createElementVNode(\"code\", null, _toDisplayString(scope), 1)\n ]))\n }), 128))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (updateMessageToDisplay(false)))\n }, _toDisplayString(_ctx.$t('oauth2.REVOKE_ALL_TOKENS')), 1),\n _createElementVNode(\"button\", {\n class: \"danger\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateMessageToDisplay(true)))\n }, _toDisplayString(_ctx.$t('oauth2.DELETE_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [\n _createElementVNode(\"p\", _hoisted_11, _toDisplayString(_ctx.$t('oauth2.NO_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.$router.push('/profile/apps')))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n ]))\n}\n}\n\n})","import script from \"./UserApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserApp.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserApp.vue?vue&type=style&index=0&id=3a844fa2&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3a844fa2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-efa45ea0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"oauth2-apps-list\" }\nconst _hoisted_2 = { class: \"apps-list\" }\nconst _hoisted_3 = { key: 0 }\nconst _hoisted_4 = { class: \"app-issued-at\" }\nconst _hoisted_5 = {\n key: 1,\n class: \"no-apps\"\n}\nconst _hoisted_6 = { class: \"app-list-buttons\" }\n\nimport { ComputedRef, computed, onBeforeMount, toRefs, watch } from 'vue'\n import { LocationQuery, useRoute } from 'vue-router'\n\n import Pagination from '@/components/Common/Pagination.vue'\n import { OAUTH2_STORE } from '@/store/constants'\n import { IPagination } from '@/types/api'\n import { IOAuth2Client, IOauth2ClientsPayload } from '@/types/oauth'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { defaultPage, getNumberQueryValue } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n authUser: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAppsList',\n props: {\n authUser: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n const route = useRoute()\n\n const { authUser } = toRefs(props)\n const clients: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENTS]\n )\n\n const pagination: ComputedRef = computed(\n () => store.getters[OAUTH2_STORE.GETTERS.CLIENTS_PAGINATION]\n )\n let query: IOauth2ClientsPayload = getClientsQuery(route.query)\n\n onBeforeMount(() => {\n loadClients(query)\n })\n\n function getClientsQuery(newQuery: LocationQuery): IOauth2ClientsPayload {\n const clientsQuery: IOauth2ClientsPayload = {}\n if (newQuery.page) {\n clientsQuery.page = getNumberQueryValue(newQuery.page, defaultPage)\n }\n return clientsQuery\n }\n function loadClients(payload: IOauth2ClientsPayload) {\n store.dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENTS, payload)\n }\n\n watch(\n () => route.query,\n async (newQuery) => {\n query = getClientsQuery(newQuery)\n loadClients(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"p\", _hoisted_2, _toDisplayString(_ctx.$t('oauth2.APPS_LIST')), 1),\n (_unref(clients).length > 0)\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(clients), (client) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: client.client_id\n }, [\n _createVNode(_component_router_link, {\n to: { name: 'UserApp', params: { id: client.id } }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(client.name), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('oauth2.APP.ISSUE_AT')) + \" \" + _toDisplayString(_unref(formatDate)(\n client.issued_at,\n _unref(authUser).timezone,\n _unref(authUser).date_format\n )), 1)\n ]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('oauth2.NO_APPS')), 1)),\n (_unref(clients).length > 0)\n ? (_openBlock(), _createBlock(Pagination, {\n key: 2,\n pagination: _unref(pagination),\n path: \"/profile/apps\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"button\", {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push('/profile/apps/new')))\n }, _toDisplayString(_ctx.$t('oauth2.NEW_APP')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ])\n ]))\n}\n}\n\n})","import script from \"./UserAppsList.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAppsList.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAppsList.vue?vue&type=style&index=0&id=efa45ea0&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-efa45ea0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, withModifiers as _withModifiers, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createBlock as _createBlock, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74e52489\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-sport-preferences\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"responsive-table\"\n}\nconst _hoisted_3 = { class: \"mobile-display\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"profile-buttons mobile-display\"\n}\nconst _hoisted_5 = {\n key: 1,\n class: \"profile-buttons\"\n}\nconst _hoisted_6 = { class: \"text-left\" }\nconst _hoisted_7 = { key: 0 }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = [\"value\"]\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"disabled-message\"\n}\nconst _hoisted_12 = {\n key: 1,\n class: \"fa fa-refresh fa-spin fa-fw\"\n}\nconst _hoisted_13 = { class: \"cell-heading\" }\nconst _hoisted_14 = { class: \"cell-heading\" }\nconst _hoisted_15 = [\"checked\"]\nconst _hoisted_16 = { class: \"cell-heading\" }\nconst _hoisted_17 = [\"value\"]\nconst _hoisted_18 = { key: 1 }\nconst _hoisted_19 = {\n key: 0,\n class: \"action-buttons\"\n}\nconst _hoisted_20 = { class: \"cell-heading\" }\nconst _hoisted_21 = [\"onClick\"]\nconst _hoisted_22 = {\n key: 1,\n class: \"edition-buttons\"\n}\nconst _hoisted_23 = [\"disabled\"]\nconst _hoisted_24 = [\"disabled\", \"onClick\"]\nconst _hoisted_25 = [\"disabled\"]\nconst _hoisted_26 = {\n key: 0,\n class: \"profile-buttons\"\n}\nconst _hoisted_27 = {\n key: 1,\n class: \"profile-buttons\"\n}\n\nimport { ComputedRef, computed, inject, reactive, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { AUTH_USER_STORE, ROOT_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IUserProfile, IUserSportPreferencesPayload } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n user: IUserProfile\n isEdition: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserSportPreferences',\n props: {\n user: null,\n isEdition: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n isEdition: boolean\n }\n\n \n\n const store = useStore()\n const { t } = useI18n()\n\n const { isEdition, user } = toRefs(props)\n const defaultColor = '#838383'\n const sportColors: Record | undefined = inject('sportColors')\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(sports.value, t, 'is_active', user.value.sports_list)\n )\n const loading = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const sportPayload: IUserSportPreferencesPayload = reactive({\n sport_id: 0,\n color: null,\n is_active: true,\n stopped_speed_threshold: 1,\n })\n\n function updateSportInEdition(sport: ISport | null) {\n if (sport !== null) {\n sportPayload.sport_id = sport.id\n sportPayload.color = sport.color\n ? sport.color\n : sportColors\n ? sportColors[sport.label]\n : defaultColor\n sportPayload.is_active = sport.is_active_for_user\n sportPayload.stopped_speed_threshold = sport.stopped_speed_threshold\n } else {\n resetSportPayload()\n }\n }\n function isSportInEdition(sportId: number) {\n return sportPayload.sport_id === sportId\n }\n function updateColor(event: Event & { target: HTMLInputElement }) {\n sportPayload.color = event.target.value\n }\n function updateThreshold(event: Event & { target: HTMLInputElement }) {\n sportPayload.stopped_speed_threshold = parseFloat(event.target.value)\n }\n function updateIsActive(event: Event & { target: HTMLInputElement }) {\n sportPayload.is_active = event.target.checked\n }\n function resetSportPayload() {\n sportPayload.sport_id = 0\n sportPayload.color = null\n sportPayload.is_active = true\n sportPayload.stopped_speed_threshold = 1\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n }\n function updateSport(event: Event) {\n event.preventDefault()\n store.dispatch(\n AUTH_USER_STORE.ACTIONS.UPDATE_USER_SPORT_PREFERENCES,\n sportPayload\n )\n }\n function resetSport(event: Event, sportId: number) {\n event.preventDefault()\n store.dispatch(\n AUTH_USER_STORE.ACTIONS.RESET_USER_SPORT_PREFERENCES,\n sportId\n )\n }\n\n watch(\n () => loading.value,\n (newIsLoading) => {\n if (!newIsLoading && !errorMessages.value) {\n resetSportPayload()\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/sports')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"button\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$router.push('/profile/edit/sports')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_SPORTS_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]),\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.COLOR')), 1),\n _createElementVNode(\"th\", _hoisted_6, _toDisplayString(_ctx.$t('workouts.SPORT', 0)), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('workouts.WORKOUT', 0)), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.IS_ACTIVE')), 1),\n _createElementVNode(\"th\", null, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD')), 1),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"th\", _hoisted_7, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.ACTION')), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: sport.id\n }, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.COLOR')), 1),\n (isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"sport-color\",\n type: \"color\",\n value: sportPayload.color,\n onInput: updateColor\n }, null, 40, _hoisted_9))\n : (_openBlock(), _createBlock(_component_SportImage, {\n key: 1,\n title: sport.translatedLabel,\n \"sport-label\": sport.label,\n color: sport.color ? sport.color : _unref(sportColors)[sport.label]\n }, null, 8, [\"title\", \"sport-label\", \"color\"]))\n ]),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"sport-label\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.LABEL')), 1),\n _createTextVNode(\" \" + _toDisplayString(sport.translatedLabel) + \" \", 1),\n (!sport.is_active)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, \" (\" + _toDisplayString(_ctx.$t('user.PROFILE.SPORT.DISABLED_BY_ADMIN')) + \") \", 1))\n : _createCommentVNode(\"\", true),\n (_unref(loading) && isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"i\", _hoisted_12))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages) && sportPayload.sport_id === sport.id)\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 2,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('workouts.WORKOUT', 0)), 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa${\n _unref(user).sports_list.includes(sport.id) ? '-check' : ''\n }`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.IS_ACTIVE')), 1),\n (isSportInEdition(sport.id) && sport.is_active)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n type: \"checkbox\",\n checked: sport.is_active_for_user,\n onChange: updateIsActive\n }, null, 40, _hoisted_15))\n : (_openBlock(), _createElementBlock(\"i\", {\n key: 1,\n class: _normalizeClass(`fa fa${sport.is_active_for_user ? '-check' : ''}`),\n \"aria-hidden\": \"true\"\n }, null, 2))\n ], 2),\n _createElementVNode(\"td\", {\n class: _normalizeClass([\"text-center\", { 'disabled-sport': !sport.is_active }])\n }, [\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.STOPPED_SPEED_THRESHOLD')), 1),\n (isSportInEdition(sport.id) && sport.is_active)\n ? (_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"threshold-input\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: sportPayload.stopped_speed_threshold,\n onInput: updateThreshold\n }, null, 40, _hoisted_17))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_18, _toDisplayString(sport.stopped_speed_threshold), 1))\n ], 2),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"td\", _hoisted_19, [\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('user.PROFILE.SPORT.ACTION')), 1),\n (sportPayload.sport_id === 0)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n onClick: ($event: any) => (updateSportInEdition(sport))\n }, _toDisplayString(_ctx.$t('buttons.EDIT')), 9, _hoisted_21))\n : _createCommentVNode(\"\", true),\n (isSportInEdition(sport.id))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_22, [\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: updateSport\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_23),\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: (e) => resetSport(e, sport.id)\n }, _toDisplayString(_ctx.$t('buttons.RESET')), 9, _hoisted_24),\n _createElementVNode(\"button\", {\n disabled: _unref(loading),\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateSportInEdition(null)))\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_25)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n }), 128))\n ])\n ]),\n (_unref(isEdition))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_26, [\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (_ctx.$router.push('/profile/sports')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_27, [\n _createElementVNode(\"button\", {\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.$router.push('/profile/edit/sports')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT_SPORTS_PREFERENCES')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./UserSportPreferences.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserSportPreferences.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserSportPreferences.vue?vue&type=style&index=0&id=74e52489&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74e52489\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74257266\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"about-text\" }\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-book fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = {\n href: \"https://samr1.github.io/FitTrackee/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-github fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_6 = {\n href: \"https://github.com/SamR1/FitTrackee\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-balance-scale fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://choosealicense.com/licenses/agpl-3.0/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}, \" AGPLv3 \", -1))\nconst _hoisted_9 = { key: 0 }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-envelope-o fa-padding\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = [\"href\"]\n\nimport { ComputedRef, computed, capitalize } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'About',\n setup(__props) {\n\n const store = useStore()\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"p\", {\n class: \"error-message\",\n innerHTML: _ctx.$t('about.FITTRACKEE_DESCRIPTION')\n }, null, 8, _hoisted_2),\n _createElementVNode(\"p\", null, [\n _hoisted_3,\n _createElementVNode(\"a\", _hoisted_4, _toDisplayString(capitalize(_ctx.$t('common.DOCUMENTATION'))), 1)\n ]),\n _createElementVNode(\"p\", null, [\n _hoisted_5,\n _createElementVNode(\"a\", _hoisted_6, _toDisplayString(_ctx.$t('about.SOURCE_CODE')), 1)\n ]),\n _createElementVNode(\"p\", null, [\n _hoisted_7,\n _createVNode(_component_i18n_t, { keypath: \"about.FITTRACKEE_LICENSE\" }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n })\n ]),\n (_unref(appConfig).admin_contact)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _hoisted_10,\n _createElementVNode(\"a\", {\n href: `mailto:${_unref(appConfig).admin_contact}`\n }, _toDisplayString(_ctx.$t('about.CONTACT_ADMIN')), 9, _hoisted_11)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./About.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./About.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./About.vue?vue&type=style&index=0&id=74257266&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74257266\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./BikePic.vue?vue&type=template&id=795f7f5f&scoped=true\"\nconst script = {}\n\nimport \"./BikePic.vue?vue&type=style&index=0&id=795f7f5f&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-795f7f5f\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-bffb50d0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"about\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = { class: \"container-sub\" }\nconst _hoisted_4 = { class: \"container-sub about-details\" }\n\nimport About from '@/components/About.vue'\n import BikePic from '@/components/BikePic.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'AboutView',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(BikePic)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(About)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./AboutView.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./AboutView.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./AboutView.vue?vue&type=style&index=0&id=bffb50d0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-bffb50d0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-96abcc38\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"timeline-workout\" }\nconst _hoisted_2 = { class: \"box\" }\nconst _hoisted_3 = { class: \"workout-user-date\" }\nconst _hoisted_4 = { class: \"workout-user\" }\nconst _hoisted_5 = [\"title\"]\nconst _hoisted_6 = { key: 0 }\nconst _hoisted_7 = {\n key: 1,\n class: \"no-map\"\n}\nconst _hoisted_8 = { class: \"img\" }\nconst _hoisted_9 = { class: \"data\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-clock-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { key: 0 }\nconst _hoisted_12 = { class: \"data\" }\nconst _hoisted_13 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-road\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_14 = {\n key: 0,\n class: \"data elevation\"\n}\nconst _hoisted_15 = [\"alt\"]\nconst _hoisted_16 = { class: \"data-values\" }\nconst _hoisted_17 = {\n key: 1,\n class: \"data altitude\"\n}\nconst _hoisted_18 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-location-arrow\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_19 = { class: \"data-values\" }\n\nimport { Locale, formatDistance } from 'date-fns'\n import { ComputedRef, computed, toRefs, withDefaults } from 'vue'\n\n import StaticMap from '@/components/Common/StaticMap.vue'\n import UserPicture from '@/components/User/UserPicture.vue'\n import { ROOT_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkout } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { formatDate } from '@/utils/dates'\n\n interface Props {\n user: IUserProfile\n useImperialUnits: boolean\n workout?: IWorkout\n sport?: ISport\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutCard',\n props: {\n user: null,\n useImperialUnits: { type: Boolean },\n workout: { default: () => ({} as IWorkout) },\n sport: { default: () => ({} as ISport) }\n },\n setup(__props: any) {\n\nconst props = __props as { user: IUserProfile, useImperialUnits: boolean, workout: IWorkout, sport: ISport }\n\n \n\n const store = useStore()\n\n const { user, workout, sport, useImperialUnits } = toRefs(props)\n const locale: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LOCALE]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n (_unref(user).username)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"workout-user-name\",\n to: {\n name: 'User',\n params: { username: _unref(user).username },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(user).username), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n class: \"workout-title\",\n to: {\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(workout).title), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true),\n (_unref(workout).workout_date && _unref(user))\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"workout-date\",\n title: \n _unref(formatDate)(_unref(workout).workout_date, _unref(user).timezone, _unref(user).date_format)\n \n }, _toDisplayString(_unref(formatDistance)(new Date(_unref(workout).workout_date), new Date(), {\n addSuffix: true,\n locale: _unref(locale),\n })), 9, _hoisted_5))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-map\", { 'no-cursor': !_unref(workout) }]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _unref(workout).id\n ? _ctx.$router.push({\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n })\n : null\n ))\n }, [\n (_unref(workout))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n (_unref(workout).with_gpx)\n ? (_openBlock(), _createBlock(StaticMap, {\n key: 0,\n workout: _unref(workout)\n }, null, 8, [\"workout\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.NO_MAP')), 1))\n ]))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-data\", { 'without-gpx': _unref(workout) && !_unref(workout).with_gpx }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (\n _unref(workout).id\n ? _ctx.$router.push({\n name: 'Workout',\n params: { workoutId: _unref(workout).id },\n })\n : null\n ))\n }, [\n _createElementVNode(\"div\", _hoisted_8, [\n (_unref(sport).label)\n ? (_openBlock(), _createBlock(_component_SportImage, {\n key: 0,\n \"sport-label\": _unref(sport).label,\n color: _unref(sport).color\n }, null, 8, [\"sport-label\", \"color\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n (_unref(workout))\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, _toDisplayString(_unref(workout).moving), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _hoisted_13,\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).distance,\n digits: 3,\n unitFrom: \"km\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (_unref(workout) && _unref(workout).with_gpx)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n _createElementVNode(\"img\", {\n class: \"mountains\",\n src: \"/img/workouts/mountains.svg\",\n alt: _ctx.$t('workouts.ELEVATION')\n }, null, 8, _hoisted_15),\n _createElementVNode(\"div\", _hoisted_16, [\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).min_alt,\n unitFrom: \"m\",\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\"/ \"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 1,\n distance: _unref(workout).max_alt,\n unitFrom: \"m\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(workout) && _unref(workout).with_gpx)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _hoisted_18,\n _createElementVNode(\"div\", _hoisted_19, [\n _createTextVNode(\" +\"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: _unref(workout).ascent,\n unitFrom: \"m\",\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\"/- \"),\n (_unref(workout).id)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 1,\n distance: _unref(workout).descent,\n unitFrom: \"m\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./WorkoutCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutCard.vue?vue&type=style&index=0&id=96abcc38&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-96abcc38\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-35567bf2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"timeline\" }\nconst _hoisted_2 = { class: \"section-title\" }\nconst _hoisted_3 = { key: 0 }\nconst _hoisted_4 = { key: 1 }\nconst _hoisted_5 = {\n key: 1,\n class: \"more-workouts\"\n}\n\nimport { ComputedRef, computed, ref, onBeforeMount, toRefs } from 'vue'\n\n import WorkoutCard from '@/components/Workout/WorkoutCard.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkout } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n sports: ISport[]\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Timeline',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IUserProfile\n }\n\n \n\n const store = useStore()\n\n const { sports, user } = toRefs(props)\n const page = ref(1)\n const per_page = 5\n const initWorkoutsCount =\n props.user.nb_workouts >= per_page ? per_page : props.user.nb_workouts\n onBeforeMount(() => loadWorkouts())\n const workouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.TIMELINE_WORKOUTS]\n )\n const moreWorkoutsExist: ComputedRef = computed(() =>\n workouts.value.length > 0\n ? workouts.value[workouts.value.length - 1].previous_workout !== null\n : false\n )\n\n function loadWorkouts() {\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_TIMELINE_WORKOUTS, {\n page: page.value,\n per_page,\n ...defaultOrder,\n })\n }\n function loadMoreWorkouts() {\n page.value += 1\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_MORE_TIMELINE_WORKOUTS, {\n page: page.value,\n per_page,\n ...defaultOrder,\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('workouts.LATEST_WORKOUTS')), 1),\n (_unref(user).nb_workouts > 0 && _unref(workouts).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList([...Array(_unref(initWorkoutsCount)).keys()], (index) => {\n return (_openBlock(), _createBlock(WorkoutCard, {\n user: _unref(user),\n useImperialUnits: _unref(user).imperial_units,\n key: index\n }, null, 8, [\"user\", \"useImperialUnits\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout) => {\n return (_openBlock(), _createBlock(WorkoutCard, {\n workout: workout,\n sport: \n _unref(workouts).length > 0\n ? _unref(sports).filter((s) => s.id === workout.sport_id)[0]\n : null\n ,\n user: _unref(user),\n useImperialUnits: _unref(user).imperial_units,\n key: workout.id\n }, null, 8, [\"workout\", \"sport\", \"user\", \"useImperialUnits\"]))\n }), 128)),\n (_unref(workouts).length === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true),\n (_unref(moreWorkoutsExist))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"button\", { onClick: loadMoreWorkouts }, _toDisplayString(_ctx.$t('workouts.LOAD_MORE_WORKOUT')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n}\n}\n\n})","import script from \"./Timeline.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Timeline.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Timeline.vue?vue&type=style&index=0&id=35567bf2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-35567bf2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = [\"title\"]\n\nimport { toRefs } from 'vue'\n\n import { IWorkout } from '@/types/workouts'\n interface Props {\n displayHARecord: boolean\n workout: IWorkout\n sportLabel: string\n sportColor: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkout',\n props: {\n displayHARecord: { type: Boolean },\n workout: null,\n sportLabel: null,\n sportColor: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n displayHARecord: boolean\n workout: IWorkout\n sportLabel: string\n sportColor: string | null\n }\n\n \n\n const { displayHARecord, workout, sportLabel, sportColor } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"calendar-workout\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _ctx.$router.push({ name: 'Workout', params: { workoutId: _unref(workout).id } })\n ))\n }, [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(sportLabel),\n title: _unref(workout).title,\n color: _unref(sportColor)\n }, null, 8, [\"sport-label\", \"title\", \"color\"]),\n _createElementVNode(\"sup\", null, [\n (_unref(workout).records.length > 0)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-trophy custom-fa-small\",\n \"aria-hidden\": \"true\",\n title: \n _unref(workout).records\n .filter((record) =>\n _unref(displayHARecord) ? true : record.record_type !== 'HA'\n )\n .map((record) => ` ${_ctx.$t(`workouts.RECORD_${record.record_type}`)}`)\n \n }, null, 8, _hoisted_1))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkout.vue?vue&type=style&index=0&id=331e1c8b&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"donut-chart\" }\nconst _hoisted_2 = {\n height: \"34\",\n width: \"34\",\n viewBox: \"0 0 34 34\"\n}\nconst _hoisted_3 = [\"stroke\", \"stroke-dashoffset\", \"transform\"]\n\nimport { toRefs } from 'vue'\n\n interface Props {\n colors: Record\n datasets: Record>\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'DonutChart',\n props: {\n colors: null,\n datasets: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n colors: Record\n datasets: Record>\n }\n\n \n\n const { colors, datasets } = toRefs(props)\n let angleOffset = -90\n const cx = 16\n const cy = 16\n const radius = 14\n const circumference = 2 * Math.PI * radius\n\n function calculateStrokeDashOffset(\n percentage: number,\n circumference: number\n ): number {\n return circumference - percentage * circumference\n }\n function returnCircleTransformValue(\n index: number,\n percentage: number\n ): string {\n const rotation = `rotate(${angleOffset}, ${cx}, ${cy})`\n angleOffset = percentage * 360 + angleOffset\n return rotation\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(Object.entries(_unref(datasets)), (data, index) => {\n return (_openBlock(), _createElementBlock(\"g\", { key: index }, [\n _createElementVNode(\"circle\", {\n cx: cx,\n cy: cy,\n r: radius,\n fill: \"transparent\",\n stroke: _unref(colors)[+data[0]],\n \"stroke-dashoffset\": \n calculateStrokeDashOffset(data[1].percentage, circumference)\n ,\n \"stroke-dasharray\": circumference,\n \"stroke-width\": \"3\",\n \"stroke-opacity\": \"0.8\",\n transform: returnCircleTransformValue(index, data[1].percentage)\n }, null, 8, _hoisted_3)\n ]))\n }), 128))\n ]))\n ]))\n}\n}\n\n})","import script from \"./DonutChart.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./DonutChart.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-52d4310a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"calendar-workouts-chart\" }\nconst _hoisted_2 = { class: \"workouts-count\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workouts-pane\"\n}\nconst _hoisted_4 = { class: \"more-workouts\" }\n\nimport { ref, toRefs } from 'vue'\n\n import CalendarWorkout from '@/components/Dashboard/UserCalendar/CalendarWorkout.vue'\n import DonutChart from '@/components/Dashboard/UserCalendar/DonutChart.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getSportColor, getSportLabel } from '@/utils/sports'\n\n interface Props {\n colors: Record\n datasets: Record>\n sports: ISport[]\n workouts: IWorkout[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkoutsChart',\n props: {\n colors: null,\n datasets: null,\n sports: null,\n workouts: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n colors: Record\n datasets: Record>\n sports: ISport[]\n workouts: IWorkout[]\n }\n\n \n\n const { colors, datasets, sports, workouts } = toRefs(props)\n const isHidden = ref(true)\n\n function togglePane(event: Event & { target: HTMLElement }) {\n event.stopPropagation()\n isHidden.value = !isHidden.value\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _directive_click_outside = _resolveDirective(\"click-outside\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"workouts-chart\",\n onClick: togglePane\n }, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_unref(workouts).length), 1),\n _createVNode(DonutChart, {\n datasets: _unref(datasets),\n colors: _unref(colors)\n }, null, 8, [\"datasets\", \"colors\"])\n ]),\n (!isHidden.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"i\", {\n class: \"fa fa-times calendar-more\",\n \"aria-hidden\": \"true\",\n onClick: togglePane\n }),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout, index) => {\n return (_openBlock(), _createBlock(CalendarWorkout, {\n key: index,\n workout: workout,\n sportLabel: _unref(getSportLabel)(workout, _unref(sports)),\n sportColor: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"workout\", \"sportLabel\", \"sportColor\"]))\n }), 128))\n ])), [\n [_directive_click_outside, togglePane]\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkoutsChart.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkoutsChart.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkoutsChart.vue?vue&type=style&index=0&id=52d4310a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-52d4310a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-workouts\" }\nconst _hoisted_2 = { class: \"desktop-display\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workouts-display\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"donut-display\"\n}\nconst _hoisted_5 = { class: \"mobile-display\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"donut-display\"\n}\n\nimport { computed, toRefs } from 'vue'\n\n import CalendarWorkout from '@/components/Dashboard/UserCalendar/CalendarWorkout.vue'\n import CalendarWorkoutsChart from '@/components/Dashboard/UserCalendar/CalendarWorkoutsChart.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getSportColor, getSportLabel, sportIdColors } from '@/utils/sports'\n import { getDonutDatasets } from '@/utils/workouts'\n\n interface Props {\n displayHARecord: boolean\n workouts: IWorkout[]\n sports: ISport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarWorkouts',\n props: {\n displayHARecord: { type: Boolean },\n workouts: null,\n sports: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n displayHARecord: boolean\n workouts: IWorkout[]\n sports: ISport[]\n }\n\n \n\n const { displayHARecord, workouts, sports } = toRefs(props)\n const chartDatasets = computed(() => getDonutDatasets(props.workouts))\n const colors = computed(() => sportIdColors(props.sports))\n const displayedWorkoutCount = 6\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(workouts).length <= displayedWorkoutCount)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts).slice(0, displayedWorkoutCount), (workout, index) => {\n return (_openBlock(), _createBlock(CalendarWorkout, {\n key: index,\n displayHARecord: _unref(displayHARecord),\n workout: workout,\n sportLabel: _unref(getSportLabel)(workout, _unref(sports)),\n sportColor: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"displayHARecord\", \"workout\", \"sportLabel\", \"sportColor\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(CalendarWorkoutsChart, {\n workouts: _unref(workouts),\n sports: _unref(sports),\n datasets: _unref(chartDatasets),\n colors: _unref(colors)\n }, null, 8, [\"workouts\", \"sports\", \"datasets\", \"colors\"])\n ]))\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n (_unref(workouts).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(CalendarWorkoutsChart, {\n workouts: _unref(workouts),\n sports: _unref(sports),\n datasets: _unref(chartDatasets),\n colors: _unref(colors)\n }, null, 8, [\"workouts\", \"sports\", \"datasets\", \"colors\"])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./CalendarWorkouts.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarWorkouts.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarWorkouts.vue?vue&type=style&index=0&id=5aab7455&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-cells\" }\nconst _hoisted_2 = { class: \"calendar-cell-day\" }\n\nimport { addDays, format, isSameDay, isSameMonth, isToday } from 'date-fns'\n import { Ref, ref, toRefs, watch, onMounted } from 'vue'\n\n import CalendarWorkouts from '@/components/Dashboard/UserCalendar/CalendarWorkouts.vue'\n import { ISport } from '@/types/sports'\n import { IWorkout } from '@/types/workouts'\n import { getDateWithTZ } from '@/utils/dates'\n\n interface Props {\n currentDay: Date\n displayHARecord: boolean\n endDate: Date\n sports: ISport[]\n startDate: Date\n timezone: string\n weekStartingMonday: boolean\n workouts: IWorkout[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarCells',\n props: {\n currentDay: null,\n displayHARecord: { type: Boolean },\n endDate: null,\n sports: null,\n startDate: null,\n timezone: null,\n weekStartingMonday: { type: Boolean },\n workouts: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n currentDay: Date\n displayHARecord: boolean\n endDate: Date\n sports: ISport[]\n startDate: Date\n timezone: string\n weekStartingMonday: boolean\n workouts: IWorkout[]\n }\n\n \n\n const {\n currentDay,\n displayHARecord,\n endDate,\n sports,\n startDate,\n timezone,\n weekStartingMonday,\n workouts,\n } = toRefs(props)\n const rows: Ref = ref([])\n\n onMounted(() => getDays())\n\n function getDays() {\n rows.value = []\n let day = startDate.value\n while (day <= endDate.value) {\n const days: Date[] = []\n for (let i = 0; i < 7; i++) {\n days.push(day)\n day = addDays(day, 1)\n }\n rows.value.push(days)\n }\n }\n function isWeekEnd(day: number): boolean {\n return weekStartingMonday.value\n ? [5, 6].includes(day)\n : [0, 6].includes(day)\n }\n function filterWorkouts(day: Date, workouts: IWorkout[]) {\n if (workouts) {\n return workouts\n .filter((workout) =>\n isSameDay(getDateWithTZ(workout.workout_date, timezone.value), day)\n )\n .reverse()\n }\n return []\n }\n\n watch(\n () => props.currentDay,\n () => getDays()\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(rows.value, (row, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"calendar-row\",\n key: index\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(row, (day, i) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"calendar-cell\", {\n 'disabled-cell': !_unref(isSameMonth)(day, _unref(currentDay)),\n 'week-end': isWeekEnd(i),\n today: _unref(isToday)(day),\n }]),\n key: i\n }, [\n _createVNode(CalendarWorkouts, {\n workouts: filterWorkouts(day, _unref(workouts)),\n sports: _unref(sports),\n displayHARecord: _unref(displayHARecord)\n }, null, 8, [\"workouts\", \"sports\", \"displayHARecord\"]),\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_unref(format)(day, 'd')), 1)\n ], 2))\n }), 128))\n ]))\n }), 128))\n ]))\n}\n}\n\n})","import script from \"./CalendarCells.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarCells.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarCells.vue?vue&type=style&index=0&id=34b99f0e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-days\" }\n\nimport { Locale, format, addDays } from 'date-fns'\n\n interface Props {\n startDate: Date\n localeOptions: Locale\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarDays',\n props: {\n startDate: null,\n localeOptions: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n startDate: Date\n localeOptions: Locale\n }\n\n \n\n const days = []\n for (let i = 0; i < 7; i++) {\n days.push(addDays(props.startDate, i))\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(days, (day, index) => {\n return _createElementVNode(\"div\", {\n class: \"calendar-day\",\n key: index\n }, _toDisplayString(_unref(format)(day, 'EEE', { locale: __props.localeOptions })), 1)\n }), 64))\n ]))\n}\n}\n\n})","import script from \"./CalendarDays.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarDays.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarDays.vue?vue&type=style&index=0&id=4f3dc99e&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, unref as _unref, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"calendar-header\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\nconst _hoisted_4 = { class: \"calendar-month\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_6 = [\n _hoisted_5\n]\n\nimport { Locale, format } from 'date-fns'\n import { toRefs } from 'vue'\n\n interface Props {\n day: Date\n localeOptions: Locale\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalendarHeader',\n props: {\n day: null,\n localeOptions: null\n },\n emits: ['displayNextMonth', 'displayPreviousMonth'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n day: Date\n localeOptions: Locale\n }\n\n \n\n \n\n const { day, localeOptions } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"calendar-arrow calendar-arrow-left\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('displayPreviousMonth')))\n }, _hoisted_3),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(format)(_unref(day), 'MMM yyyy', { locale: _unref(localeOptions) })), 1)\n ]),\n _createElementVNode(\"div\", {\n class: \"calendar-arrow calendar-arrow-right\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('displayNextMonth')))\n }, _hoisted_6)\n ]))\n}\n}\n\n})","import script from \"./CalendarHeader.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalendarHeader.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./CalendarHeader.vue?vue&type=style&index=0&id=79a65a70&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-calendar\" }\nconst _hoisted_2 = { class: \"calendar-card box\" }\n\nimport { Locale, addMonths, format, subMonths } from 'date-fns'\n import { ComputedRef, computed, ref, toRefs, onBeforeMount } from 'vue'\n\n import CalendarCells from '@/components/Dashboard/UserCalendar/CalendarCells.vue'\n import CalendarDays from '@/components/Dashboard/UserCalendar/CalendarDays.vue'\n import CalendarHeader from '@/components/Dashboard/UserCalendar/CalendarHeader.vue'\n import { ROOT_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkout, TWorkoutsPayload } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { getCalendarStartAndEnd } from '@/utils/dates'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const store = useStore()\n\n const { sports, user } = toRefs(props)\n const dateFormat = 'yyyy-MM-dd'\n const day = ref(new Date())\n const calendarDates = ref(getCalendarStartAndEnd(day.value, props.user.weekm))\n const calendarWorkouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.CALENDAR_WORKOUTS]\n )\n const localeOptions: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LOCALE]\n )\n\n onBeforeMount(() => getCalendarWorkouts())\n\n function getCalendarWorkouts() {\n calendarDates.value = getCalendarStartAndEnd(day.value, props.user.weekm)\n const apiParams: TWorkoutsPayload = {\n from: format(calendarDates.value.start, dateFormat),\n to: format(calendarDates.value.end, dateFormat),\n page: 1,\n per_page: 100,\n ...defaultOrder,\n }\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_CALENDAR_WORKOUTS, apiParams)\n }\n function displayNextMonth() {\n day.value = addMonths(day.value, 1)\n getCalendarWorkouts()\n }\n function displayPreviousMonth() {\n day.value = subMonths(day.value, 1)\n getCalendarWorkouts()\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(CalendarHeader, {\n day: day.value,\n \"locale-options\": _unref(localeOptions),\n onDisplayNextMonth: displayNextMonth,\n onDisplayPreviousMonth: displayPreviousMonth\n }, null, 8, [\"day\", \"locale-options\"]),\n _createVNode(CalendarDays, {\n \"start-date\": calendarDates.value.start,\n \"locale-options\": _unref(localeOptions)\n }, null, 8, [\"start-date\", \"locale-options\"]),\n _createVNode(CalendarCells, {\n currentDay: day.value,\n displayHARecord: _unref(user).display_ascent,\n \"end-date\": calendarDates.value.end,\n sports: _unref(sports),\n \"start-date\": calendarDates.value.start,\n timezone: _unref(user).timezone,\n workouts: _unref(calendarWorkouts),\n weekStartingMonday: _unref(user).weekm\n }, null, 8, [\"currentDay\", \"displayHARecord\", \"end-date\", \"sports\", \"start-date\", \"timezone\", \"workouts\", \"weekStartingMonday\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=3e7444d9&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1bcddc12\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"user-month-stats\" }\n\nimport { endOfMonth, startOfMonth } from 'date-fns'\n import { toRefs } from 'vue'\n\n import StatChart from '@/components/Common/StatsChart/index.vue'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n\n interface Props {\n sports: ISport[]\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserMonthStats',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IUserProfile\n }\n\n \n\n const { sports, user } = toRefs(props)\n const date = new Date()\n const chartParams = {\n duration: 'week',\n start: startOfMonth(date),\n end: endOfMonth(date),\n }\n const selectedSportIds = props.sports.map((sport) => sport.id)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('dashboard.THIS_MONTH')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(StatChart, {\n sports: _unref(sports),\n user: _unref(user),\n \"chart-params\": chartParams,\n \"displayed-sport-ids\": _unref(selectedSportIds),\n \"hide-chart-if-no-data\": true\n }, null, 8, [\"sports\", \"user\", \"displayed-sport-ids\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./UserMonthStats.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserMonthStats.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserMonthStats.vue?vue&type=style&index=0&id=1bcddc12&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1bcddc12\"]])\n\nexport default __exports__","import createI18n from '@/i18n'\nimport { ITranslatedSport } from '@/types/sports'\nimport { TUnit } from '@/types/units'\nimport { ICardRecord, IRecord, IRecordsBySports } from '@/types/workouts'\nimport { formatDate, getDateFormat } from '@/utils/dates'\nimport { convertDistance, units } from '@/utils/units'\n\nconst { locale } = createI18n.global\n\nexport const formatRecord = (\n record: IRecord,\n tz: string,\n useImperialUnits: boolean,\n date_format: string\n): Record => {\n const distanceUnitFrom: TUnit = 'km'\n const distanceUnitTo: TUnit = useImperialUnits\n ? units[distanceUnitFrom].defaultTarget\n : distanceUnitFrom\n const ascentUnitFrom: TUnit = 'm'\n const ascentUnitTo: TUnit = useImperialUnits\n ? units[ascentUnitFrom].defaultTarget\n : ascentUnitFrom\n let value\n switch (record.record_type) {\n case 'AS':\n case 'MS':\n value = `${convertDistance(\n +record.value,\n distanceUnitFrom,\n distanceUnitTo,\n 2\n )} ${distanceUnitTo}/h`\n break\n case 'FD':\n value = `${convertDistance(\n +record.value,\n distanceUnitFrom,\n distanceUnitTo,\n 3\n )} ${distanceUnitTo}`\n break\n case 'HA':\n value = `${convertDistance(\n +record.value,\n ascentUnitFrom,\n ascentUnitTo,\n 2\n )} ${ascentUnitTo}`\n break\n case 'LD':\n value = record.value\n break\n default:\n throw new Error(\n `Invalid record type, expected: \"AS\", \"FD\", \"HA\", \"LD\", \"MD\", got: \"${record.record_type}\"`\n )\n }\n return {\n workout_date: formatDate(record.workout_date, tz, date_format, false),\n workout_id: record.workout_id,\n id: record.id,\n record_type: record.record_type,\n value: value,\n }\n}\n\nexport const sortRecords = (a: ICardRecord, b: ICardRecord): number => {\n const recordALabel = a.label.toLowerCase()\n const recordBLabel = b.label.toLowerCase()\n return recordALabel > recordBLabel ? 1 : recordALabel < recordBLabel ? -1 : 0\n}\n\nexport const getRecordsBySports = (\n records: IRecord[],\n translatedSports: ITranslatedSport[],\n tz: string,\n useImperialUnits: boolean,\n display_ascent: boolean,\n date_format: string\n): IRecordsBySports => {\n date_format = getDateFormat(date_format, locale.value)\n return records\n .filter((r) => (display_ascent ? true : r.record_type !== 'HA'))\n .reduce((sportList: IRecordsBySports, record) => {\n const sport = translatedSports.find((s) => s.id === record.sport_id)\n if (sport && sport.label) {\n if (sportList[sport.translatedLabel] === void 0) {\n sportList[sport.translatedLabel] = {\n label: sport.label,\n color: sport.color,\n records: [],\n }\n }\n sportList[sport.translatedLabel].records.push(\n formatRecord(record, tz, useImperialUnits, date_format)\n )\n }\n return sportList\n }, {})\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8d17c606\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"records-card\" }\nconst _hoisted_2 = { class: \"record-type\" }\nconst _hoisted_3 = { class: \"record-value\" }\nconst _hoisted_4 = { class: \"record-date\" }\n\nimport { toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ICardRecord, IRecord, IRecordsBySports } from '@/types/workouts'\n import { sortRecords } from '@/utils/records'\n\n interface Props {\n records: IRecordsBySports\n sportTranslatedLabel: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'RecordsCard',\n props: {\n records: null,\n sportTranslatedLabel: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n records: IRecordsBySports\n sportTranslatedLabel: string\n }\n\n \n\n const { records, sportTranslatedLabel } = toRefs(props)\n\n const { t } = useI18n()\n\n function getTranslatedRecords(records: IRecord[]): ICardRecord[] {\n const translatedRecords: ICardRecord[] = []\n records.map((record) => {\n translatedRecords.push({\n ...record,\n label: t(`workouts.RECORD_${record.record_type}`),\n })\n })\n return translatedRecords.sort(sortRecords)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(records).label,\n color: _unref(records).color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createTextVNode(\" \" + _toDisplayString(_unref(sportTranslatedLabel)), 1)\n ]),\n content: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(getTranslatedRecords(_unref(records).records), (record) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"record\",\n key: record.id\n }, [\n _createElementVNode(\"span\", _hoisted_2, _toDisplayString(record.label), 1),\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(record.value), 1),\n _createElementVNode(\"span\", _hoisted_4, [\n _createVNode(_component_router_link, {\n to: {\n name: 'Workout',\n params: { workoutId: record.workout_id },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(record.workout_date), 1)\n ]),\n _: 2\n }, 1032, [\"to\"])\n ])\n ]))\n }), 128))\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./RecordsCard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RecordsCard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./RecordsCard.vue?vue&type=style&index=0&id=8d17c606&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8d17c606\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-f0c85cb8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"user-records-section\" }\nconst _hoisted_2 = { class: \"section-title\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy custom-fa-small\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { class: \"user-records\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"no-records\"\n}\n\nimport { computed } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import RecordsCard from '@/components/Dashboard/UserRecords/RecordsCard.vue'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { getRecordsBySports } from '@/utils/records'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const recordsBySport = computed(() =>\n getRecordsBySports(\n props.user.records,\n translateSports(props.sports, t),\n props.user.timezone,\n props.user.imperial_units,\n props.user.display_ascent,\n props.user.date_format\n )\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.RECORD', 2)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n (Object.keys(_unref(recordsBySport)).length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('workouts.NO_RECORDS')), 1))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(Object.keys(_unref(recordsBySport)).sort(), (sportTranslatedLabel) => {\n return (_openBlock(), _createBlock(RecordsCard, {\n sportTranslatedLabel: sportTranslatedLabel,\n records: _unref(recordsBySport)[sportTranslatedLabel],\n key: sportTranslatedLabel,\n useImperialUnits: __props.user.imperial_units\n }, null, 8, [\"sportTranslatedLabel\", \"records\", \"useImperialUnits\"]))\n }), 128))\n ])\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=f0c85cb8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-f0c85cb8\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { id: \"user-stats\" }\n\nimport { ComputedRef, computed, toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import StatCard from '@/components/Common/StatCard.vue'\n import { TUnit } from '@/types/units'\n import { IAuthUserProfile } from '@/types/user'\n import { convertDistance, units } from '@/utils/units'\n interface Props {\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const { user } = toRefs(props)\n const userTotalDuration: ComputedRef = computed(\n () => props.user.total_duration\n )\n const totalDuration = computed(() => get_duration(userTotalDuration))\n const distanceUnitFrom: TUnit = 'km'\n const distanceUnitTo: TUnit = user.value.imperial_units\n ? units[distanceUnitFrom].defaultTarget\n : distanceUnitFrom\n const totalDistance: ComputedRef = computed(() =>\n user.value.imperial_units\n ? convertDistance(user.value.total_distance, distanceUnitFrom, distanceUnitTo, 2)\n : parseFloat(user.value.total_distance.toFixed(2)))\n const ascentUnitFrom: TUnit = 'm'\n const ascentUnitTo: TUnit = user.value.imperial_units\n ? units[ascentUnitFrom].defaultTarget\n : ascentUnitFrom\n const totalAscent: ComputedRef = computed(() =>\n user.value.imperial_units\n ? convertDistance(user.value.total_ascent, ascentUnitFrom, ascentUnitTo, 2)\n : parseFloat(user.value.total_ascent.toFixed(2)))\n\n\n function get_duration(total_duration: ComputedRef) {\n const duration = total_duration.value.match(/day/g)\n ? total_duration.value.split(', ')[1]\n : total_duration.value\n return {\n days: total_duration.value.match(/day/g)\n ? `${total_duration.value.split(' ')[0]} ${\n total_duration.value.match(/days/g)\n ? t('common.DAY', 2)\n : t('common.DAY', 1)\n }`\n : `0 ${t('common.DAY', 2)},`,\n duration: `${duration.split(':')[0]}h ${duration.split(':')[1]}min`,\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatCard, {\n icon: \"calendar\",\n value: _unref(user).nb_workouts,\n text: _ctx.$t('workouts.WORKOUT', _unref(user).nb_workouts)\n }, null, 8, [\"value\", \"text\"]),\n _createVNode(StatCard, {\n icon: \"road\",\n value: _unref(totalDistance),\n text: _unref(distanceUnitTo) === 'mi' ? 'miles' : _unref(distanceUnitTo)\n }, null, 8, [\"value\", \"text\"]),\n (_unref(user).display_ascent)\n ? (_openBlock(), _createBlock(StatCard, {\n key: 0,\n icon: \"location-arrow\",\n value: _unref(totalAscent),\n text: _unref(ascentUnitTo) === 'ft' ? 'feet' : _unref(ascentUnitTo)\n }, null, 8, [\"value\", \"text\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(StatCard, {\n icon: \"clock-o\",\n value: _unref(totalDuration).days,\n text: _unref(totalDuration).duration\n }, null, 8, [\"value\", \"text\"]),\n (!_unref(user).display_ascent)\n ? (_openBlock(), _createBlock(StatCard, {\n key: 1,\n icon: \"tags\",\n value: _unref(user).nb_sports,\n text: _ctx.$t('workouts.SPORT', _unref(user).nb_sports)\n }, null, 8, [\"value\", \"text\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=22dcb990&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4c0893c1\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"dashboard\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container mobile-menu\" }\nconst _hoisted_3 = { class: \"box\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-calendar\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_5 = [\n _hoisted_4\n]\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-bar-chart\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = [\n _hoisted_6\n]\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-map-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_9 = [\n _hoisted_8\n]\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = [\n _hoisted_10\n]\nconst _hoisted_12 = { class: \"container\" }\nconst _hoisted_13 = { class: \"container dashboard-container\" }\nconst _hoisted_14 = { class: \"left-container dashboard-sub-container\" }\nconst _hoisted_15 = { class: \"right-container dashboard-sub-container\" }\nconst _hoisted_16 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\nconst _hoisted_17 = {\n key: 1,\n class: \"app-loading\"\n}\n\nimport { ComputedRef, Ref, computed, onBeforeMount, ref } from 'vue'\n\n import Timeline from '@/components/Dashboard/Timeline.vue'\n import UserCalendar from '@/components/Dashboard/UserCalendar/index.vue'\n import UserMonthStats from '@/components/Dashboard/UserMonthStats.vue'\n import UserRecords from '@/components/Dashboard/UserRecords/index.vue'\n import UserStatsCards from '@/components/Dashboard/UserStatsCards/index.vue'\n import { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Dashboard',\n setup(__props) {\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const isSelected: Ref = ref('calendar')\n\n onBeforeMount(() => store.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE))\n\n function updateDisplayColumn(target: string) {\n isSelected.value = target\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Loader = _resolveComponent(\"Loader\")!\n\n return (_unref(authUser).username && _unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'calendar' }]),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (updateDisplayColumn('calendar')))\n }, _hoisted_5, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'chart' }]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayColumn('chart')))\n }, _hoisted_7, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'timeline' }]),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (updateDisplayColumn('timeline')))\n }, _hoisted_9, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-menu-item\", { 'is-selected': isSelected.value === 'records' }]),\n onClick: _cache[3] || (_cache[3] = ($event: any) => (updateDisplayColumn('records')))\n }, _hoisted_11, 2)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createVNode(UserStatsCards, { user: _unref(authUser) }, null, 8, [\"user\"])\n ]),\n _createElementVNode(\"div\", _hoisted_13, [\n _createElementVNode(\"div\", _hoisted_14, [\n _createVNode(UserMonthStats, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'chart') })\n }, null, 8, [\"sports\", \"user\", \"class\"]),\n _createVNode(UserRecords, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'records') })\n }, null, 8, [\"sports\", \"user\", \"class\"])\n ]),\n _createElementVNode(\"div\", _hoisted_15, [\n _createVNode(UserCalendar, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'calendar') })\n }, null, 8, [\"sports\", \"user\", \"class\"]),\n _createVNode(Timeline, {\n sports: _unref(sports),\n user: _unref(authUser),\n class: _normalizeClass({ 'is-hidden': !(isSelected.value === 'timeline') })\n }, null, 8, [\"sports\", \"user\", \"class\"])\n ])\n ]),\n _hoisted_16\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createVNode(_component_Loader)\n ]))\n}\n}\n\n})","import script from \"./Dashboard.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Dashboard.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Dashboard.vue?vue&type=style&index=0&id=4c0893c1&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4c0893c1\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"not-found view\" }\n\nimport NotFound from '@/components/Common/NotFound.vue'\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'NotFoundView',\n setup(__props) {\n\n \nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(NotFound)\n ]))\n}\n}\n\n})","import script from \"./NotFoundView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NotFoundView.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6a38125b\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"loginOrRegister\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = { class: \"container-sub\" }\nconst _hoisted_4 = { class: \"container-sub\" }\n\nimport { toRefs } from 'vue'\n\n import BikePic from '@/components/BikePic.vue'\n import LoginOrRegisterForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'LoginOrRegister',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(BikePic)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(LoginOrRegisterForm, { action: _unref(action) }, null, 8, [\"action\"])\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./LoginOrRegister.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./LoginOrRegister.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./LoginOrRegister.vue?vue&type=style&index=0&id=6a38125b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6a38125b\"]])\n\nexport default __exports__","import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'\n\nimport AdminApplication from '@/components/Administration/AdminApplication.vue'\nimport AdminMenu from '@/components/Administration/AdminMenu.vue'\nimport AdminSports from '@/components/Administration/AdminSports.vue'\nimport AdminUsers from '@/components/Administration/AdminUsers.vue'\nimport Profile from '@/components/User/ProfileDisplay/index.vue'\nimport UserInfos from '@/components/User/ProfileDisplay/UserInfos.vue'\nimport UserPreferences from '@/components/User/ProfileDisplay/UserPreferences.vue'\nimport ProfileEdition from '@/components/User/ProfileEdition/index.vue'\nimport UserAccountEdition from '@/components/User/ProfileEdition/UserAccountEdition.vue'\nimport UserInfosEdition from '@/components/User/ProfileEdition/UserInfosEdition.vue'\nimport UserPictureEdition from '@/components/User/ProfileEdition/UserPictureEdition.vue'\nimport UserPreferencesEdition from '@/components/User/ProfileEdition/UserPreferencesEdition.vue'\nimport AddUserApp from '@/components/User/UserApps/AddUserApp.vue'\nimport AuthorizeUserApp from '@/components/User/UserApps/AuthorizeUserApp.vue'\nimport UserApps from '@/components/User/UserApps/index.vue'\nimport UserApp from '@/components/User/UserApps/UserApp.vue'\nimport UserAppsList from '@/components/User/UserApps/UserAppsList.vue'\nimport UserSportPreferences from '@/components/User/UserSportPreferences.vue'\nimport store from '@/store'\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport AboutView from '@/views/AboutView.vue'\nimport Dashboard from '@/views/Dashboard.vue'\nimport NotFoundView from '@/views/NotFoundView.vue'\nimport LoginOrRegister from '@/views/user/LoginOrRegister.vue'\n\nconst getTabFromPath = (path: string): string => {\n const regex = /(\\/profile)(\\/edit)*(\\/*)/\n const tag = path.replace(regex, '').toUpperCase()\n return tag === '' ? 'PROFILE' : tag.toUpperCase()\n}\n\nconst routes: Array = [\n {\n path: '/',\n name: 'Dashboard',\n component: Dashboard,\n },\n {\n path: '/login',\n name: 'Login',\n component: LoginOrRegister,\n props: { action: 'login' },\n },\n {\n path: '/register',\n name: 'Register',\n component: LoginOrRegister,\n props: { action: 'register' },\n },\n {\n path: '/account-confirmation',\n name: 'AccountConfirmation',\n component: () =>\n import(\n /* webpackChunkName: 'profile' */ '@/views/user/AccountConfirmationView.vue'\n ),\n },\n {\n path: '/account-confirmation/resend',\n name: 'AccountConfirmationResend',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/AccountConfirmationResendView.vue'\n ),\n props: { action: 'account-confirmation-resend' },\n },\n {\n path: '/account-confirmation/email-sent',\n name: 'AccountConfirmationEmailSend',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/AccountConfirmationResendView.vue'\n ),\n props: { action: 'email-sent' },\n },\n {\n path: '/password-reset/sent',\n name: 'PasswordEmailSent',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'request-sent' },\n },\n {\n path: '/password-reset/request',\n name: 'PasswordResetRequest',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'reset-request' },\n },\n {\n path: '/password-reset/password-updated',\n name: 'PasswordUpdated',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'password-updated' },\n },\n {\n path: '/password-reset',\n name: 'PasswordReset',\n component: () =>\n import(\n /* webpackChunkName: 'reset' */ '@/views/user/PasswordResetView.vue'\n ),\n props: { action: 'reset' },\n },\n {\n path: '/email-update',\n name: 'EmailUpdate',\n component: () =>\n import(\n /* webpackChunkName: 'profile' */ '@/views/user/EmailUpdateView.vue'\n ),\n },\n {\n path: '/profile',\n name: 'Profile',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/ProfileView.vue'),\n children: [\n {\n path: '',\n name: 'UserProfile',\n component: Profile,\n props: (route) => ({\n tab: getTabFromPath(route.path),\n }),\n children: [\n {\n path: '',\n name: 'UserInfos',\n component: UserInfos,\n },\n {\n path: 'preferences',\n name: 'UserPreferences',\n component: UserPreferences,\n },\n {\n path: 'sports',\n name: 'UserSportPreferences',\n component: UserSportPreferences,\n props: { isEdition: false },\n },\n {\n path: 'apps',\n name: 'UserApps',\n component: UserApps,\n children: [\n {\n path: '',\n name: 'UserAppsList',\n component: UserAppsList,\n },\n {\n path: ':id',\n name: 'UserApp',\n component: UserApp,\n },\n {\n path: ':id/created',\n name: 'CreatedUserApp',\n component: UserApp,\n props: { afterCreation: true },\n },\n {\n path: 'new',\n name: 'AddUserApp',\n component: AddUserApp,\n },\n {\n path: 'authorize',\n name: 'AuthorizeUserApp',\n component: AuthorizeUserApp,\n },\n ],\n },\n ],\n },\n {\n path: 'edit',\n name: 'UserProfileEdition',\n component: ProfileEdition,\n props: (route) => ({\n tab: getTabFromPath(route.path),\n }),\n children: [\n {\n path: '',\n name: 'UserInfosEdition',\n component: UserInfosEdition,\n },\n {\n path: 'account',\n name: 'UserAccountEdition',\n component: UserAccountEdition,\n },\n {\n path: 'picture',\n name: 'UserPictureEdition',\n component: UserPictureEdition,\n },\n {\n path: 'preferences',\n name: 'UserPreferencesEdition',\n component: UserPreferencesEdition,\n },\n {\n path: 'sports',\n name: 'UserSportPreferencesEdition',\n component: UserSportPreferences,\n props: { isEdition: true },\n },\n ],\n },\n ],\n },\n {\n path: '/statistics',\n name: 'Statistics',\n component: () =>\n import(/* webpackChunkName: 'statistics' */ '@/views/StatisticsView.vue'),\n },\n {\n path: '/users/:username',\n name: 'User',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/UserView.vue'),\n },\n {\n path: '/workouts',\n name: 'Workouts',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/WorkoutsView.vue'\n ),\n },\n {\n path: '/workouts/:workoutId',\n name: 'Workout',\n component: () =>\n import(/* webpackChunkName: 'workouts' */ '@/views/workouts/Workout.vue'),\n props: { displaySegment: false },\n },\n {\n path: '/workouts/:workoutId/edit',\n name: 'EditWorkout',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/EditWorkout.vue'\n ),\n },\n {\n path: '/workouts/:workoutId/segment/:segmentId',\n name: 'WorkoutSegment',\n component: () =>\n import(/* webpackChunkName: 'workouts' */ '@/views/workouts/Workout.vue'),\n props: { displaySegment: true },\n },\n {\n path: '/workouts/add',\n name: 'AddWorkout',\n component: () =>\n import(\n /* webpackChunkName: 'workouts' */ '@/views/workouts/AddWorkout.vue'\n ),\n },\n {\n path: '/admin',\n name: 'Administration',\n component: () =>\n import(/* webpackChunkName: 'admin' */ '@/views/AdminView.vue'),\n children: [\n {\n path: '',\n name: 'AdministrationMenu',\n component: AdminMenu,\n },\n {\n path: 'application',\n name: 'ApplicationAdministration',\n component: AdminApplication,\n },\n {\n path: 'application/edit',\n name: 'ApplicationAdministrationEdition',\n component: AdminApplication,\n props: { edition: true },\n },\n {\n path: 'sports',\n name: 'SportsAdministration',\n component: AdminSports,\n },\n {\n path: 'users/:username',\n name: 'UserFromAdmin',\n component: () =>\n import(/* webpackChunkName: 'profile' */ '@/views/user/UserView.vue'),\n props: { fromAdmin: true },\n },\n {\n path: 'users',\n name: 'UsersAdministration',\n component: AdminUsers,\n },\n ],\n },\n {\n path: '/about',\n name: 'About',\n component: AboutView,\n },\n {\n path: '/:pathMatch(.*)*',\n name: 'not-found',\n component: NotFoundView,\n },\n]\n\nconst router = createRouter({\n history: createWebHistory(process.env.BASE_URL),\n routes,\n})\n\nconst pathsWithoutAuthentication = [\n '/login',\n '/password-reset',\n '/password-reset/password-updated',\n '/password-reset/request',\n '/password-reset/sent',\n '/register',\n '/account-confirmation',\n '/account-confirmation/resend',\n '/account-confirmation/email-sent',\n]\n\nconst pathsWithoutChecks = ['/email-update', '/about']\n\nrouter.beforeEach((to, from, next) => {\n store\n .dispatch(AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER)\n .then(() => {\n if (pathsWithoutChecks.includes(to.path)) {\n return next()\n }\n if (\n store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED] &&\n pathsWithoutAuthentication.includes(to.path)\n ) {\n return next('/')\n }\n if (\n !store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED] &&\n !pathsWithoutAuthentication.includes(to.path)\n ) {\n const path =\n to.path === '/'\n ? { path: '/login' }\n : { path: '/login', query: { from: to.fullPath } }\n next(path)\n } else {\n next()\n }\n })\n .catch((error) => {\n console.error(error)\n next()\n })\n})\n\nexport default router\n","export enum AuthUserActions {\n CHECK_AUTH_USER = 'CHECK_AUTH_USER',\n CONFIRM_ACCOUNT = 'CONFIRM_ACCOUNT',\n CONFIRM_EMAIL = 'CONFIRM_EMAIL',\n DELETE_ACCOUNT = 'DELETE_ACCOUNT',\n DELETE_PICTURE = 'DELETE_PICTURE',\n GET_USER_PROFILE = 'GET_USER_PROFILE',\n LOGIN_OR_REGISTER = 'LOGIN_OR_REGISTER',\n LOGOUT = 'LOGOUT',\n SEND_PASSWORD_RESET_REQUEST = 'SEND_PASSWORD_RESET_REQUEST',\n RESEND_ACCOUNT_CONFIRMATION_EMAIL = 'RESEND_ACCOUNT_CONFIRMATION_EMAIL',\n RESET_USER_PASSWORD = 'RESET_USER_PASSWORD',\n RESET_USER_SPORT_PREFERENCES = 'RESET_USER_SPORT_PREFERENCES',\n UPDATE_USER_ACCOUNT = 'UPDATE_USER_ACCOUNT',\n UPDATE_USER_PICTURE = 'UPDATE_USER_PICTURE',\n UPDATE_USER_PROFILE = 'UPDATE_USER_PROFILE',\n UPDATE_USER_PREFERENCES = 'UPDATE_USER_PREFERENCES',\n UPDATE_USER_SPORT_PREFERENCES = 'UPDATE_USER_SPORT_PREFERENCES',\n}\n\nexport enum AuthUserGetters {\n AUTH_TOKEN = 'AUTH_TOKEN',\n AUTH_USER_PROFILE = 'AUTH_USER_PROFILE',\n IS_ADMIN = 'IS_ADMIN',\n IS_AUTHENTICATED = 'IS_AUTHENTICATED',\n IS_SUCCESS = 'IS_SUCCESS',\n IS_REGISTRATION_SUCCESS = 'IS_REGISTRATION_SUCCESS',\n USER_LOADING = 'USER_LOADING',\n}\n\nexport enum AuthUserMutations {\n CLEAR_AUTH_USER_TOKEN = 'CLEAR_AUTH_USER_TOKEN',\n UPDATE_AUTH_TOKEN = 'UPDATE_AUTH_TOKEN',\n UPDATE_AUTH_USER_PROFILE = 'UPDATE_AUTH_USER_PROFILE',\n UPDATE_IS_SUCCESS = 'UPDATE_USER_IS_SUCCESS',\n UPDATE_IS_REGISTRATION_SUCCESS = 'UPDATE_IS_REGISTRATION_SUCCESS',\n UPDATE_USER_LOADING = 'UPDATE_USER_LOADING',\n}\n","export enum OAuth2Actions {\n AUTHORIZE_CLIENT = 'AUTHORIZE_CLIENT',\n CREATE_CLIENT = 'CREATE_CLIENT',\n DELETE_CLIENT = 'DELETE_CLIENT',\n GET_CLIENTS = 'GET_CLIENTS',\n GET_CLIENT_BY_CLIENT_ID = 'GET_CLIENT_BY_CLIENT_ID',\n GET_CLIENT_BY_ID = 'GET_CLIENT_BY_ID',\n REVOKE_ALL_TOKENS = 'REVOKE_ALL_TOKENS',\n}\n\nexport enum OAuth2Getters {\n CLIENT = 'CLIENT',\n CLIENTS = 'CLIENTS',\n CLIENTS_PAGINATION = 'CLIENTS_PAGINATION',\n REVOCATION_SUCCESSFUL = 'REVOCATION_SUCCESSFUL',\n}\n\nexport enum OAuth2Mutations {\n EMPTY_CLIENT = 'EMPTY_CLIENT',\n SET_CLIENT = 'SET_CLIENT',\n SET_CLIENTS = 'SET_CLIENTS',\n SET_CLIENTS_PAGINATION = 'SET_CLIENTS_PAGINATION',\n SET_REVOCATION_SUCCESSFUL = 'SET_REVOCATION_SUCCESSFUL',\n}\n","export enum RootActions {\n GET_APPLICATION_CONFIG = 'GET_APPLICATION_CONFIG',\n GET_APPLICATION_STATS = 'GET_APPLICATION_STATS',\n UPDATE_APPLICATION_CONFIG = 'UPDATE_APPLICATION_CONFIG',\n UPDATE_APPLICATION_LANGUAGE = 'UPDATE_APPLICATION_LANGUAGE',\n}\n\nexport enum RootGetters {\n APP_CONFIG = 'APP_CONFIG',\n APP_LOADING = 'APP_LOADING',\n APP_STATS = 'APP_STATS',\n ERROR_MESSAGES = 'ERROR_MESSAGES',\n LANGUAGE = 'LANGUAGE',\n LOCALE = 'LOCALE', // date-fns\n}\n\nexport enum RootMutations {\n EMPTY_ERROR_MESSAGES = 'EMPTY_ERROR_MESSAGES',\n SET_ERROR_MESSAGES = 'SET_ERROR_MESSAGES',\n UPDATE_APPLICATION_CONFIG = 'UPDATE_APPLICATION_CONFIG',\n UPDATE_APPLICATION_LOADING = 'UPDATE_APPLICATION_LOADING',\n UPDATE_APPLICATION_STATS = 'UPDATE_APPLICATION_STATS',\n UPDATE_LANG = 'UPDATE_LANG',\n}\n","export enum SportsActions {\n GET_SPORTS = 'GET_SPORTS',\n UPDATE_SPORTS = 'UPDATE_SPORTS',\n}\n\nexport enum SportsGetters {\n SPORTS = 'SPORTS',\n}\n\nexport enum SportsMutation {\n SET_SPORTS = 'SET_SPORTS',\n}\n","export enum StatisticsActions {\n GET_USER_STATS = 'GET_USER_STATS',\n}\n\nexport enum StatisticsGetters {\n USER_STATS = 'USER_STATS',\n}\n\nexport enum StatisticsMutations {\n EMPTY_USER_STATS = 'EMPTY_USER_STATS',\n UPDATE_USER_STATS = 'UPDATE_USER_STATS',\n}\n","export enum UsersActions {\n EMPTY_USER = 'EMPTY_USER',\n EMPTY_USERS = 'EMPTY_USERS',\n GET_USER = 'GET_USER',\n GET_USERS = 'GET_USERS',\n UPDATE_USER = 'UPDATE_USER',\n DELETE_USER_ACCOUNT = 'DELETE_USER_ACCOUNT',\n}\n\nexport enum UsersGetters {\n USER = 'USER',\n USERS = 'USERS',\n USERS_IS_SUCCESS = 'USERS_IS_SUCCESS',\n USERS_LOADING = 'USERS_LOADING',\n USERS_PAGINATION = 'USERS_PAGINATION',\n}\n\nexport enum UsersMutations {\n UPDATE_USER = 'UPDATE_USER',\n UPDATE_USER_IN_USERS = 'UPDATE_USER_IN_USERS',\n UPDATE_USERS = 'UPDATE_USERS',\n UPDATE_USERS_LOADING = 'UPDATE_USERS_LOADING',\n UPDATE_USERS_PAGINATION = 'UPDATE_USERS_PAGINATION',\n UPDATE_IS_SUCCESS = 'UPDATE_IS_SUCCESS',\n}\n","import {\n AuthUserActions,\n AuthUserGetters,\n AuthUserMutations,\n} from '@/store/modules/authUser/enums'\nimport {\n OAuth2Actions,\n OAuth2Getters,\n OAuth2Mutations,\n} from '@/store/modules/oauth2/enums'\nimport {\n RootActions,\n RootGetters,\n RootMutations,\n} from '@/store/modules/root/enums'\nimport {\n SportsActions,\n SportsGetters,\n SportsMutation,\n} from '@/store/modules/sports/enums'\nimport {\n StatisticsActions,\n StatisticsGetters,\n StatisticsMutations,\n} from '@/store/modules/statistics/enums'\nimport {\n UsersActions,\n UsersGetters,\n UsersMutations,\n} from '@/store/modules/users/enums'\nimport {\n WorkoutsActions,\n WorkoutsGetters,\n WorkoutsMutations,\n} from '@/store/modules/workouts/enums'\n\nexport const ROOT_STORE = {\n ACTIONS: RootActions,\n GETTERS: RootGetters,\n MUTATIONS: RootMutations,\n}\n\nexport const SPORTS_STORE = {\n ACTIONS: SportsActions,\n GETTERS: SportsGetters,\n MUTATIONS: SportsMutation,\n}\n\nexport const STATS_STORE = {\n ACTIONS: StatisticsActions,\n GETTERS: StatisticsGetters,\n MUTATIONS: StatisticsMutations,\n}\n\nexport const AUTH_USER_STORE = {\n ACTIONS: AuthUserActions,\n GETTERS: AuthUserGetters,\n MUTATIONS: AuthUserMutations,\n}\nexport const OAUTH2_STORE = {\n ACTIONS: OAuth2Actions,\n GETTERS: OAuth2Getters,\n MUTATIONS: OAuth2Mutations,\n}\n\nexport const USERS_STORE = {\n ACTIONS: UsersActions,\n GETTERS: UsersGetters,\n MUTATIONS: UsersMutations,\n}\n\nexport const WORKOUTS_STORE = {\n ACTIONS: WorkoutsActions,\n GETTERS: WorkoutsGetters,\n MUTATIONS: WorkoutsMutations,\n}\n","import axios from 'axios'\n\nimport { pendingRequests, removeRequestIfPending } from '@/api/pending'\nimport { getApiUrl } from '@/utils'\n\nconst api = axios.create({\n baseURL: getApiUrl(),\n})\n\napi.interceptors.request.use(\n (config) => {\n const controller = new AbortController()\n config.signal = controller.signal\n const requestKey = removeRequestIfPending(config)\n pendingRequests.set(requestKey, controller)\n return config\n },\n (error) => Promise.reject(error)\n)\n\napi.interceptors.response.use(\n (response) => {\n removeRequestIfPending(response.config)\n return response\n },\n (error) => {\n if (error.message !== 'canceled') {\n removeRequestIfPending(error.response.config)\n }\n return Promise.reject(error)\n }\n)\n\nexport default api\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { IUsersActions, IUsersState } from '@/store/modules/users/types'\nimport { TPaginationPayload } from '@/types/api'\nimport { IAdminUserPayload, IUserDeletionPayload } from '@/types/user'\nimport { handleError } from '@/utils'\n\nexport const deleteUserAccount = (\n context:\n | ActionContext\n | ActionContext,\n payload: IUserDeletionPayload\n): void => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .delete(`users/${payload.username}`)\n .then((res) => {\n if (res.status === 204) {\n if (payload.fromAdmin) {\n router.push('/admin/users')\n } else {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.LOGOUT)\n .then(() => router.push('/'))\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree & IUsersActions = {\n [USERS_STORE.ACTIONS.EMPTY_USER](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USER, {})\n },\n [USERS_STORE.ACTIONS.EMPTY_USERS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS, [])\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION, {})\n },\n [USERS_STORE.ACTIONS.GET_USER](\n context: ActionContext,\n username: string\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, true)\n authApi\n .get(`users/${username}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER,\n res.data.data.users[0]\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.GET_USERS](\n context: ActionContext,\n payload: TPaginationPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, true)\n authApi\n .get('users', { params: payload })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USERS,\n res.data.data.users\n )\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION,\n res.data.pagination\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.UPDATE_USER](\n context: ActionContext,\n payload: IAdminUserPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n const data: Record = {}\n if (payload.admin !== undefined) {\n data.admin = payload.admin\n }\n if (payload.resetPassword) {\n data.reset_password = payload.resetPassword\n }\n if (payload.activate) {\n data.activate = payload.activate\n }\n if (payload.new_email !== undefined) {\n data.new_email = payload.new_email\n }\n authApi\n .patch(`users/${payload.username}`, data)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER_IN_USERS,\n res.data.data.users[0]\n )\n if (payload.resetPassword || payload.new_email) {\n context.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n }\n if (payload.activate || payload.new_email) {\n context.commit(\n USERS_STORE.MUTATIONS.UPDATE_USER,\n res.data.data.users[0]\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING, false)\n )\n },\n [USERS_STORE.ACTIONS.DELETE_USER_ACCOUNT](\n context: ActionContext,\n payload: IUserDeletionPayload\n ): void {\n deleteUserAccount(context, {\n username: payload.username,\n fromAdmin: true,\n })\n },\n}\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport api from '@/api/defaultApi'\nimport router from '@/router'\nimport {\n AUTH_USER_STORE,\n ROOT_STORE,\n SPORTS_STORE,\n STATS_STORE,\n USERS_STORE,\n WORKOUTS_STORE,\n} from '@/store/constants'\nimport {\n IAuthUserActions,\n IAuthUserState,\n} from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { deleteUserAccount } from '@/store/modules/users/actions'\nimport {\n ILoginOrRegisterData,\n IUserAccountPayload,\n IUserDeletionPayload,\n IUserAccountUpdatePayload,\n IUserEmailPayload,\n IUserPasswordResetPayload,\n IUserPayload,\n IUserPicturePayload,\n IUserPreferencesPayload,\n IUserSportPreferencesPayload,\n} from '@/types/user'\nimport { handleError } from '@/utils'\n\nconst removeAuthUserData = (\n context: ActionContext\n) => {\n localStorage.removeItem('authToken')\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(STATS_STORE.MUTATIONS.EMPTY_USER_STATS)\n context.commit(AUTH_USER_STORE.MUTATIONS.CLEAR_AUTH_USER_TOKEN)\n context.commit(USERS_STORE.MUTATIONS.UPDATE_USERS, [])\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUTS)\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n router.push('/login')\n}\n\nexport const actions: ActionTree &\n IAuthUserActions = {\n [AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER](\n context: ActionContext\n ): void {\n if (\n window.localStorage.authToken &&\n !context.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n ) {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN,\n window.localStorage.authToken\n )\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n }\n // after logout in another tab\n if (\n !window.localStorage.authToken &&\n context.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n ) {\n removeAuthUserData(context)\n }\n },\n [AUTH_USER_STORE.ACTIONS.CONFIRM_ACCOUNT](\n context: ActionContext,\n payload: IUserAccountUpdatePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/account/confirm', { token: payload.token })\n .then((res) => {\n if (res.data.status === 'success') {\n const token = res.data.auth_token\n window.localStorage.setItem('authToken', token)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN, token)\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n },\n [AUTH_USER_STORE.ACTIONS.CONFIRM_EMAIL](\n context: ActionContext,\n payload: IUserAccountUpdatePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n api\n .post('/auth/email/update', { token: payload.token })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n if (payload.refreshUser) {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => {\n return router.push('/profile/edit/account')\n })\n }\n router.push('/profile/edit/account')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n },\n [AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('auth/profile')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n if (res.data.data.language) {\n context.dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n res.data.data.language\n )\n }\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n removeAuthUserData(context)\n }\n })\n .catch((error) => {\n if (error.message !== 'canceled') {\n handleError(context, error)\n removeAuthUserData(context)\n }\n })\n },\n [AUTH_USER_STORE.ACTIONS.LOGIN_OR_REGISTER](\n context: ActionContext,\n data: ILoginOrRegisterData\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n false\n )\n api\n .post(`/auth/${data.actionType}`, data.formData)\n .then((res) => {\n if (res.data.status === 'success') {\n if (data.actionType === 'login') {\n const token = res.data.auth_token\n window.localStorage.setItem('authToken', token)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN, token)\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() =>\n router.push(\n typeof data.redirectUrl === 'string' ? data.redirectUrl : '/'\n )\n )\n } else {\n router\n .push('/login')\n .then(() =>\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n true\n )\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.LOGOUT](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .post('auth/logout')\n .then((res) => {\n if (res.data.status === 'success') {\n removeAuthUserData(context)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PROFILE](\n context: ActionContext,\n payload: IUserPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n router.push('/profile')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_ACCOUNT](\n context: ActionContext,\n payload: IUserAccountPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n authApi\n .patch('auth/profile/edit/account', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, true)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PREFERENCES](\n context: ActionContext,\n payload: IUserPreferencesPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit/preferences', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE,\n res.data.data\n )\n context\n .dispatch(\n ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE,\n res.data.data.language\n )\n .then(() => router.push('/profile/preferences'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.RESET_USER_SPORT_PREFERENCES](\n context: ActionContext,\n sportId: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .delete(`auth/profile/reset/sports/${sportId}`)\n .then((res) => {\n if (res.status === 204) {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n })\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_SPORT_PREFERENCES](\n context: ActionContext,\n payload: IUserSportPreferencesPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .post('auth/profile/edit/sports', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => {\n handleError(context, error)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n })\n },\n [AUTH_USER_STORE.ACTIONS.UPDATE_USER_PICTURE](\n context: ActionContext,\n payload: IUserPicturePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n if (!payload.picture) {\n throw new Error('No file part')\n }\n const form = new FormData()\n form.append('file', payload.picture)\n authApi\n .post('auth/picture', form, {\n headers: {\n 'content-type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/profile'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.DELETE_ACCOUNT](\n context: ActionContext,\n payload: IUserDeletionPayload\n ): void {\n deleteUserAccount(context, payload)\n },\n [AUTH_USER_STORE.ACTIONS.DELETE_PICTURE](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, true)\n authApi\n .delete(`auth/picture`)\n .then((res) => {\n if (res.status === 204) {\n context\n .dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n .then(() => router.push('/profile'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n )\n },\n [AUTH_USER_STORE.ACTIONS.SEND_PASSWORD_RESET_REQUEST](\n context: ActionContext,\n payload: IUserEmailPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/password/reset-request', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/password-reset/sent')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL](\n context: ActionContext,\n payload: IUserEmailPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/account/resend-confirmation', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/account-confirmation/email-sent')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [AUTH_USER_STORE.ACTIONS.RESET_USER_PASSWORD](\n context: ActionContext,\n payload: IUserPasswordResetPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n api\n .post('auth/password/update', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n router.push('/password-reset/password-updated')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport {\n IAuthUserGetters,\n IAuthUserState,\n} from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree &\n IAuthUserGetters = {\n [AUTH_USER_STORE.GETTERS.AUTH_TOKEN]: (state: IAuthUserState) => {\n return state.authToken\n },\n [AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]: (state: IAuthUserState) => {\n return state.authUserProfile\n },\n [AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]: (state: IAuthUserState) => {\n return state.authToken !== null\n },\n [AUTH_USER_STORE.GETTERS.IS_ADMIN]: (state: IAuthUserState) => {\n return state.authUserProfile && state.authUserProfile.admin\n },\n [AUTH_USER_STORE.GETTERS.IS_REGISTRATION_SUCCESS]: (\n state: IAuthUserState\n ) => {\n return state.isRegistrationSuccess\n },\n [AUTH_USER_STORE.GETTERS.IS_SUCCESS]: (state: IAuthUserState) => {\n return state.isSuccess\n },\n [AUTH_USER_STORE.GETTERS.USER_LOADING]: (state: IAuthUserState) => {\n return state.loading\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { AUTH_USER_STORE } from '@/store/constants'\nimport {\n IAuthUserState,\n TAuthUserMutations,\n} from '@/store/modules/authUser/types'\nimport { IAuthUserProfile } from '@/types/user'\n\nexport const mutations: MutationTree & TAuthUserMutations = {\n [AUTH_USER_STORE.MUTATIONS.CLEAR_AUTH_USER_TOKEN](state: IAuthUserState) {\n state.authToken = null\n state.authUserProfile = {}\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_TOKEN](\n state: IAuthUserState,\n authToken: string\n ) {\n state.authToken = authToken\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_AUTH_USER_PROFILE](\n state: IAuthUserState,\n authUserProfile: IAuthUserProfile\n ) {\n state.authUserProfile = authUserProfile\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS](\n state: IAuthUserState,\n isRegistrationSuccess: boolean\n ) {\n state.isRegistrationSuccess = isRegistrationSuccess\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS](\n state: IAuthUserState,\n isSuccess: boolean\n ) {\n state.isSuccess = isSuccess\n },\n [AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING](\n state: IAuthUserState,\n loading: boolean\n ) {\n state.loading = loading\n },\n}\n","import { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IAuthUserProfile } from '@/types/user'\n\nexport const authUserState: IAuthUserState = {\n authToken: null,\n authUserProfile: {},\n isSuccess: false,\n isRegistrationSuccess: false,\n loading: false,\n}\n","import { Module } from 'vuex'\n\nimport { actions } from '@/store/modules/authUser/actions'\nimport { getters } from '@/store/modules/authUser/getters'\nimport { mutations } from '@/store/modules/authUser/mutations'\nimport { authUserState } from '@/store/modules/authUser/state'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst authUser: Module = {\n state: authUserState,\n actions,\n getters,\n mutations,\n}\n\nexport default authUser\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { OAUTH2_STORE, ROOT_STORE } from '@/store/constants'\nimport { IOAuth2Actions, IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IOauth2ClientsPayload,\n IOAuth2ClientPayload,\n IOAuth2ClientAuthorizePayload,\n} from '@/types/oauth'\nimport { handleError } from '@/utils'\n\nconst get_client = (\n context: ActionContext,\n url: string\n) => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get(url)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(OAUTH2_STORE.MUTATIONS.SET_CLIENT, res.data.data.client)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree & IOAuth2Actions = {\n [OAUTH2_STORE.ACTIONS.AUTHORIZE_CLIENT](\n context: ActionContext,\n payload: IOAuth2ClientAuthorizePayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n const form = new FormData()\n form.set('client_id', payload.client_id)\n form.set('response_type', payload.response_type)\n form.set('scope', payload.scope)\n form.set('confirm', 'true')\n if (payload.state) {\n form.set('state', payload.state)\n }\n if (payload.code_challenge) {\n form.set('code_challenge', payload.code_challenge)\n }\n if (payload.code_challenge_method) {\n form.set('code_challenge_method', payload.code_challenge_method)\n }\n\n authApi\n .post('oauth/authorize', form, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.status == 200 && res.data.redirect_url) {\n window.location.href = res.data.redirect_url\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.CREATE_CLIENT](\n context: ActionContext,\n payload: IOAuth2ClientPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .post('oauth/apps', payload)\n .then((res) => {\n if (res.data.status === 'created') {\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENT,\n res.data.data.client\n )\n router.push(`/profile/apps/${res.data.data.client.id}/created`)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.DELETE_CLIENT](\n context: ActionContext,\n id: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .delete(`oauth/apps/${id}`)\n .then((res) => {\n if (res.status === 204) {\n context\n .dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENTS)\n .then(() => router.push('/profile/apps'))\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_CLIENT_ID](\n context: ActionContext,\n client_id: string\n ): void {\n get_client(context, `oauth/apps/${client_id}`)\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_ID](\n context: ActionContext,\n id: number\n ): void {\n get_client(context, `oauth/apps/${id}/by_id`)\n },\n [OAUTH2_STORE.ACTIONS.GET_CLIENTS](\n context: ActionContext,\n payload: IOauth2ClientsPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('oauth/apps', {\n params: payload,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENTS,\n res.data.data.clients\n )\n context.commit(\n OAUTH2_STORE.MUTATIONS.SET_CLIENTS_PAGINATION,\n res.data.pagination\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [OAUTH2_STORE.ACTIONS.REVOKE_ALL_TOKENS](\n context: ActionContext,\n id: number\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, false)\n authApi\n .post(`oauth/apps/${id}/revoke`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, true)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { OAUTH2_STORE } from '@/store/constants'\nimport { IOAuth2Getters, IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree & IOAuth2Getters = {\n [OAUTH2_STORE.GETTERS.CLIENT]: (state: IOAuth2State) => state.client,\n [OAUTH2_STORE.GETTERS.CLIENTS]: (state: IOAuth2State) => state.clients,\n [OAUTH2_STORE.GETTERS.CLIENTS_PAGINATION]: (state: IOAuth2State) =>\n state.pagination,\n [OAUTH2_STORE.GETTERS.REVOCATION_SUCCESSFUL]: (state: IOAuth2State) =>\n state.revocationSuccessful,\n}\n","import { MutationTree } from 'vuex'\n\nimport { OAUTH2_STORE } from '@/store/constants'\nimport { IOAuth2State, TOAuth2Mutations } from '@/store/modules/oauth2/types'\nimport { IPagination } from '@/types/api'\nimport { IOAuth2Client } from '@/types/oauth'\n\nexport const mutations: MutationTree & TOAuth2Mutations = {\n [OAUTH2_STORE.MUTATIONS.SET_CLIENT](\n state: IOAuth2State,\n client: IOAuth2Client\n ) {\n state.client = client\n },\n [OAUTH2_STORE.MUTATIONS.EMPTY_CLIENT](state: IOAuth2State) {\n state.client = {}\n },\n [OAUTH2_STORE.MUTATIONS.SET_CLIENTS](\n state: IOAuth2State,\n clients: IOAuth2Client[]\n ) {\n state.clients = clients\n },\n [OAUTH2_STORE.MUTATIONS.SET_CLIENTS_PAGINATION](\n state: IOAuth2State,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL](\n state: IOAuth2State,\n revocationSuccessful: boolean\n ) {\n state.revocationSuccessful = revocationSuccessful\n },\n}\n","import { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IPagination } from '@/types/api'\nimport { IOAuth2Client } from '@/types/oauth'\n\nexport const oAuth2State: IOAuth2State = {\n client: {},\n clients: [],\n pagination: {},\n revocationSuccessful: false,\n}\n","import { Module } from 'vuex'\n\nimport { actions } from '@/store/modules/oauth2/actions'\nimport { getters } from '@/store/modules/oauth2/getters'\nimport { mutations } from '@/store/modules/oauth2/mutations'\nimport { oAuth2State } from '@/store/modules/oauth2/state'\nimport { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst oauth2: Module = {\n state: oAuth2State,\n actions,\n getters,\n mutations,\n}\n\nexport default oauth2\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport createI18n from '@/i18n'\nimport router from '@/router'\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootActions, IRootState } from '@/store/modules/root/types'\nimport { TAppConfigForm } from '@/types/application'\nimport { handleError } from '@/utils'\n\nconst { locale } = createI18n.global\n\nexport const actions: ActionTree & IRootActions = {\n [ROOT_STORE.ACTIONS.GET_APPLICATION_CONFIG](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING, true)\n authApi\n .get('config')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG,\n res.data.data\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n .finally(() =>\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING, false)\n )\n },\n [ROOT_STORE.ACTIONS.GET_APPLICATION_STATS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('stats/all')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_STATS,\n res.data.data\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [ROOT_STORE.ACTIONS.UPDATE_APPLICATION_CONFIG](\n context: ActionContext,\n payload: TAppConfigForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .patch('config', payload)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG,\n res.data.data\n )\n router.push('/admin/application')\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [ROOT_STORE.ACTIONS.UPDATE_APPLICATION_LANGUAGE](\n context: ActionContext,\n language: string\n ): void {\n document.querySelector('html')?.setAttribute('lang', language)\n context.commit(ROOT_STORE.MUTATIONS.UPDATE_LANG, language)\n locale.value = language\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootGetters, IRootState } from '@/store/modules/root/types'\n\nexport const getters: GetterTree & IRootGetters = {\n [ROOT_STORE.GETTERS.APP_CONFIG]: (state: IRootState) => {\n return state.application.config\n },\n [ROOT_STORE.GETTERS.APP_LOADING]: (state: IRootState) => {\n return state.appLoading\n },\n [ROOT_STORE.GETTERS.APP_STATS]: (state: IRootState) => {\n return state.application.statistics\n },\n [ROOT_STORE.GETTERS.ERROR_MESSAGES]: (state: IRootState) => {\n return state.errorMessages\n },\n [ROOT_STORE.GETTERS.LANGUAGE]: (state: IRootState) => {\n return state.language\n },\n [ROOT_STORE.GETTERS.LOCALE]: (state: IRootState) => {\n return state.locale\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { ROOT_STORE } from '@/store/constants'\nimport { IRootState, TRootMutations } from '@/store/modules/root/types'\nimport { TAppConfig, IAppStatistics } from '@/types/application'\nimport { localeFromLanguage } from '@/utils/locales'\n\nexport const mutations: MutationTree & TRootMutations = {\n [ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES](state: IRootState) {\n state.errorMessages = null\n },\n [ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES](\n state: IRootState,\n errorMessages: string\n ) {\n state.errorMessages = errorMessages\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_CONFIG](\n state: IRootState,\n config: TAppConfig\n ) {\n state.application.config = config\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_LOADING](\n state: IRootState,\n loading: boolean\n ) {\n state.appLoading = loading\n },\n [ROOT_STORE.MUTATIONS.UPDATE_APPLICATION_STATS](\n state: IRootState,\n statistics: IAppStatistics\n ) {\n state.application.statistics = statistics\n },\n [ROOT_STORE.MUTATIONS.UPDATE_LANG](state: IRootState, language: string) {\n state.language = language\n state.locale = localeFromLanguage[language]\n },\n}\n","import { enUS } from 'date-fns/locale'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { IApplication } from '@/types/application'\n\nexport const state: IRootState = {\n root: true,\n language: 'en',\n locale: enUS,\n errorMessages: null,\n application: {\n statistics: {\n sports: 0,\n uploads_dir_size: 0,\n users: 0,\n workouts: 0,\n },\n },\n appLoading: false,\n}\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport { AUTH_USER_STORE, ROOT_STORE, SPORTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsActions, ISportsState } from '@/store/modules/sports/types'\nimport { ISportPayload } from '@/types/sports'\nimport { handleError } from '@/utils'\n\nexport const actions: ActionTree & ISportsActions = {\n [SPORTS_STORE.ACTIONS.GET_SPORTS](\n context: ActionContext\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('sports')\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n SPORTS_STORE.MUTATIONS.SET_SPORTS,\n res.data.data.sports\n )\n context.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n [SPORTS_STORE.ACTIONS.UPDATE_SPORTS](\n context: ActionContext,\n payload: ISportPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .patch(`sports/${payload.id}`, { is_active: payload.isActive })\n .then((res) => {\n if (res.data.status === 'success') {\n context.dispatch(SPORTS_STORE.ACTIONS.GET_SPORTS)\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { SPORTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsGetters, ISportsState } from '@/store/modules/sports/types'\n\nexport const getters: GetterTree & ISportsGetters = {\n [SPORTS_STORE.GETTERS.SPORTS]: (state: ISportsState) => state.sports,\n}\n","import { MutationTree } from 'vuex'\n\nimport { SPORTS_STORE } from '@/store/constants'\nimport { ISportsState, TSportsMutations } from '@/store/modules/sports/types'\nimport { ISport } from '@/types/sports'\n\nexport const mutations: MutationTree & TSportsMutations = {\n [SPORTS_STORE.MUTATIONS.SET_SPORTS](state: ISportsState, sports: ISport[]) {\n state.sports = sports\n },\n}\n","import { ISportsState } from '@/store/modules/sports/types'\n\nexport const sportsState: ISportsState = {\n sports: [],\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/sports/actions'\nimport { getters } from '@/store/modules/sports/getters'\nimport { mutations } from '@/store/modules/sports/mutations'\nimport { sportsState } from '@/store/modules/sports/state'\nimport { ISportsState } from '@/store/modules/sports/types'\n\nconst sports: Module = {\n state: sportsState,\n actions,\n getters,\n mutations,\n}\n\nexport default sports\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport { STATS_STORE, ROOT_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IStatisticsActions,\n IStatisticsState,\n} from '@/store/modules/statistics/types'\nimport { IUserStatisticsPayload } from '@/types/statistics'\nimport { handleError } from '@/utils'\n\nexport const actions: ActionTree &\n IStatisticsActions = {\n [STATS_STORE.ACTIONS.GET_USER_STATS](\n context: ActionContext,\n payload: IUserStatisticsPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get(`stats/${payload.username}/${payload.filterType}`, {\n params: payload.params,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n STATS_STORE.MUTATIONS.UPDATE_USER_STATS,\n res.data.data.statistics\n )\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { STATS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IStatisticsGetters,\n IStatisticsState,\n} from '@/store/modules/statistics/types'\n\nexport const getters: GetterTree &\n IStatisticsGetters = {\n [STATS_STORE.GETTERS.USER_STATS]: (state: IStatisticsState) => {\n return state.statistics\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { STATS_STORE } from '@/store/constants'\nimport {\n IStatisticsState,\n TStatisticsMutations,\n} from '@/store/modules/statistics/types'\nimport { TStatisticsFromApi } from '@/types/statistics'\n\nexport const mutations: MutationTree & TStatisticsMutations =\n {\n [STATS_STORE.MUTATIONS.UPDATE_USER_STATS](\n state: IStatisticsState,\n statistics: TStatisticsFromApi\n ) {\n state.statistics = statistics\n },\n [STATS_STORE.MUTATIONS.EMPTY_USER_STATS](state: IStatisticsState) {\n state.statistics = {}\n },\n }\n","import { IStatisticsState } from '@/store/modules/statistics/types'\nimport { TStatisticsFromApi } from '@/types/statistics'\n\nexport const statisticsState: IStatisticsState = {\n statistics: {},\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/statistics/actions'\nimport { getters } from '@/store/modules/statistics/getters'\nimport { mutations } from '@/store/modules/statistics/mutations'\nimport { statisticsState } from '@/store/modules/statistics/state'\nimport { IStatisticsState } from '@/store/modules/statistics/types'\n\nconst statistics: Module = {\n state: statisticsState,\n actions,\n getters,\n mutations,\n}\n\nexport default statistics\n","import { GetterTree } from 'vuex'\n\nimport { USERS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { IUsersGetters, IUsersState } from '@/store/modules/users/types'\n\nexport const getters: GetterTree & IUsersGetters = {\n [USERS_STORE.GETTERS.USER]: (state: IUsersState) => {\n return state.user\n },\n [USERS_STORE.GETTERS.USERS]: (state: IUsersState) => {\n return state.users\n },\n [USERS_STORE.GETTERS.USERS_IS_SUCCESS]: (state: IUsersState) => {\n return state.isSuccess\n },\n [USERS_STORE.GETTERS.USERS_LOADING]: (state: IUsersState) => {\n return state.loading\n },\n [USERS_STORE.GETTERS.USERS_PAGINATION]: (state: IUsersState) => {\n return state.pagination\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { USERS_STORE } from '@/store/constants'\nimport { IUsersState, TUsersMutations } from '@/store/modules/users/types'\nimport { IPagination } from '@/types/api'\nimport { IUserProfile } from '@/types/user'\n\nexport const mutations: MutationTree & TUsersMutations = {\n [USERS_STORE.MUTATIONS.UPDATE_USER](state: IUsersState, user: IUserProfile) {\n state.user = user\n },\n [USERS_STORE.MUTATIONS.UPDATE_USER_IN_USERS](\n state: IUsersState,\n updatedUser: IUserProfile\n ) {\n state.users = state.users.map((user) => {\n if (user.username === updatedUser.username) {\n return updatedUser\n }\n return user\n })\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS](\n state: IUsersState,\n users: IUserProfile[]\n ) {\n state.users = users\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS_LOADING](\n state: IUsersState,\n loading: boolean\n ) {\n state.loading = loading\n },\n [USERS_STORE.MUTATIONS.UPDATE_USERS_PAGINATION](\n state: IUsersState,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS](\n state: IUsersState,\n isSuccess: boolean\n ) {\n state.isSuccess = isSuccess\n },\n}\n","import { IUsersState } from '@/store/modules/users/types'\nimport { IPagination } from '@/types/api'\nimport { IUserProfile } from '@/types/user'\n\nexport const usersState: IUsersState = {\n user: {},\n users: [],\n loading: false,\n isSuccess: false,\n pagination: {},\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/users/actions'\nimport { getters } from '@/store/modules/users/getters'\nimport { mutations } from '@/store/modules/users/mutations'\nimport { usersState } from '@/store/modules/users/state'\nimport { IUsersState } from '@/store/modules/users/types'\n\nconst users: Module = {\n state: usersState,\n actions,\n getters,\n mutations,\n}\n\nexport default users\n","import { ActionContext, ActionTree } from 'vuex'\n\nimport authApi from '@/api/authApi'\nimport router from '@/router'\nimport { ROOT_STORE, AUTH_USER_STORE, WORKOUTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport { WorkoutsMutations } from '@/store/modules/workouts/enums'\nimport {\n IWorkoutsActions,\n IWorkoutsState,\n} from '@/store/modules/workouts/types'\nimport {\n IWorkout,\n IWorkoutForm,\n IWorkoutPayload,\n TWorkoutsPayload,\n} from '@/types/workouts'\nimport { handleError } from '@/utils'\n\nconst getWorkouts = (\n context: ActionContext,\n payload: TWorkoutsPayload,\n target: WorkoutsMutations\n): void => {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n authApi\n .get('workouts', {\n params: payload,\n })\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(WORKOUTS_STORE.MUTATIONS[target], res.data.data.workouts)\n if (target === WorkoutsMutations['SET_USER_WORKOUTS']) {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUTS_PAGINATION,\n res.data.pagination\n )\n }\n } else {\n handleError(context, null)\n }\n })\n .catch((error) => handleError(context, error))\n}\n\nexport const actions: ActionTree &\n IWorkoutsActions = {\n [WORKOUTS_STORE.ACTIONS.GET_CALENDAR_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_CALENDAR_WORKOUTS)\n getWorkouts(context, payload, WorkoutsMutations['SET_CALENDAR_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_USER_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['SET_USER_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_TIMELINE_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['SET_TIMELINE_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_MORE_TIMELINE_WORKOUTS](\n context: ActionContext,\n payload: TWorkoutsPayload\n ): void {\n getWorkouts(context, payload, WorkoutsMutations['ADD_TIMELINE_WORKOUTS'])\n },\n [WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n const segmentUrl = payload.segmentId ? `/segment/${payload.segmentId}` : ''\n authApi\n .get(`workouts/${payload.workoutId}`)\n .then((res) => {\n const workout: IWorkout = res.data.data.workouts[0]\n if (res.data.status === 'success') {\n if (\n payload.segmentId &&\n (workout.segments.length === 0 ||\n !workout.segments[+payload.segmentId - 1])\n ) {\n throw new Error('WORKOUT_NOT_FOUND')\n }\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT,\n res.data.data.workouts[0]\n )\n if (res.data.data.workouts[0].with_gpx) {\n authApi\n .get(`workouts/${payload.workoutId}/chart_data${segmentUrl}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_CHART_DATA,\n res.data.data.chart_data\n )\n }\n })\n authApi\n .get(`workouts/${payload.workoutId}/gpx${segmentUrl}`)\n .then((res) => {\n if (res.data.status === 'success') {\n context.commit(\n WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_GPX,\n res.data.data.gpx\n )\n }\n })\n }\n } else {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n handleError(context, null)\n }\n })\n .catch((error) => {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.DELETE_WORKOUT](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .delete(`workouts/${payload.workoutId}`)\n .then(() => {\n context.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n router.push('/')\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.EDIT_WORKOUT](\n context: ActionContext,\n payload: IWorkoutPayload\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .patch(`workouts/${payload.workoutId}`, payload.data)\n .then(() => {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n context\n .dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, {\n workoutId: payload.workoutId,\n })\n .then(() => {\n router.push({\n name: 'Workout',\n params: { workoutId: payload.workoutId },\n })\n })\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.ADD_WORKOUT](\n context: ActionContext,\n payload: IWorkoutForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n if (!payload.file) {\n throw new Error('No file part')\n }\n const form = new FormData()\n form.append('file', payload.file)\n form.append(\n 'data',\n `{\"sport_id\": ${payload.sport_id}, \"notes\": \"${payload.notes}\"}`\n )\n authApi\n .post('workouts', form, {\n headers: {\n 'content-type': 'multipart/form-data',\n },\n })\n .then((res) => {\n if (res.data.status === 'created') {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n const workout: IWorkout = res.data.data.workouts[0]\n router.push(\n res.data.data.workouts.length === 1\n ? `/workouts/${workout.id}`\n : '/'\n )\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n [WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX](\n context: ActionContext,\n payload: IWorkoutForm\n ): void {\n context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, true)\n authApi\n .post('workouts/no_gpx', payload)\n .then((res) => {\n if (res.data.status === 'created') {\n context.dispatch(AUTH_USER_STORE.ACTIONS.GET_USER_PROFILE)\n const workout: IWorkout = res.data.data.workouts[0]\n router.push(`/workouts/${workout.id}`)\n }\n })\n .catch((error) => {\n handleError(context, error)\n })\n .finally(() =>\n context.commit(WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING, false)\n )\n },\n}\n","import { GetterTree } from 'vuex'\n\nimport { WORKOUTS_STORE } from '@/store/constants'\nimport { IRootState } from '@/store/modules/root/types'\nimport {\n IWorkoutsGetters,\n IWorkoutsState,\n} from '@/store/modules/workouts/types'\n\nexport const getters: GetterTree &\n IWorkoutsGetters = {\n [WORKOUTS_STORE.GETTERS.CALENDAR_WORKOUTS]: (state: IWorkoutsState) => {\n return state.calendar_workouts\n },\n [WORKOUTS_STORE.GETTERS.TIMELINE_WORKOUTS]: (state: IWorkoutsState) => {\n return state.timeline_workouts\n },\n [WORKOUTS_STORE.GETTERS.USER_WORKOUTS]: (state: IWorkoutsState) => {\n return state.user_workouts\n },\n [WORKOUTS_STORE.GETTERS.WORKOUT_DATA]: (state: IWorkoutsState) => {\n return state.workoutData\n },\n [WORKOUTS_STORE.GETTERS.WORKOUTS_PAGINATION]: (state: IWorkoutsState) => {\n return state.pagination\n },\n}\n","import { MutationTree } from 'vuex'\n\nimport { WORKOUTS_STORE } from '@/store/constants'\nimport {\n IWorkoutsState,\n TWorkoutsMutations,\n} from '@/store/modules/workouts/types'\nimport { IPagination } from '@/types/api'\nimport { IWorkout, IWorkoutApiChartData } from '@/types/workouts'\n\nexport const mutations: MutationTree & TWorkoutsMutations = {\n [WORKOUTS_STORE.MUTATIONS.ADD_TIMELINE_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.timeline_workouts = state.timeline_workouts.concat(workouts)\n },\n [WORKOUTS_STORE.MUTATIONS.SET_CALENDAR_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.calendar_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_TIMELINE_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.timeline_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_USER_WORKOUTS](\n state: IWorkoutsState,\n workouts: IWorkout[]\n ) {\n state.user_workouts = workouts\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUTS_PAGINATION](\n state: IWorkoutsState,\n pagination: IPagination\n ) {\n state.pagination = pagination\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT](\n state: IWorkoutsState,\n workout: IWorkout\n ) {\n state.workoutData.workout = workout\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_CHART_DATA](\n state: IWorkoutsState,\n chartData: IWorkoutApiChartData[]\n ) {\n state.workoutData.chartData = chartData\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_GPX](\n state: IWorkoutsState,\n gpx: string\n ) {\n state.workoutData.gpx = gpx\n },\n [WORKOUTS_STORE.MUTATIONS.SET_WORKOUT_LOADING](\n state: IWorkoutsState,\n loading: boolean\n ) {\n state.workoutData.loading = loading\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_CALENDAR_WORKOUTS](state: IWorkoutsState) {\n state.calendar_workouts = []\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUTS](state: IWorkoutsState) {\n state.calendar_workouts = []\n state.user_workouts = []\n state.timeline_workouts = []\n },\n [WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT](state: IWorkoutsState) {\n state.workoutData = {\n gpx: '',\n loading: false,\n workout: {},\n chartData: [],\n }\n },\n}\n","import { IWorkoutsState } from '@/store/modules/workouts/types'\nimport { IPagination } from '@/types/api'\nimport { IWorkout } from '@/types/workouts'\n\nexport const workoutsState: IWorkoutsState = {\n calendar_workouts: [],\n timeline_workouts: [],\n pagination: {},\n user_workouts: [],\n workoutData: {\n gpx: '',\n loading: false,\n workout: {},\n chartData: [],\n },\n}\n","import { Module } from 'vuex'\n\nimport { IRootState } from '@/store/modules/root/types'\nimport { actions } from '@/store/modules/workouts/actions'\nimport { getters } from '@/store/modules/workouts/getters'\nimport { mutations } from '@/store/modules/workouts/mutations'\nimport { workoutsState } from '@/store/modules/workouts/state'\nimport { IWorkoutsState } from '@/store/modules/workouts/types'\n\nconst workouts: Module = {\n state: workoutsState,\n actions,\n getters,\n mutations,\n}\n\nexport default workouts\n","import { Module, ModuleTree } from 'vuex'\n\nimport authUserModule from '@/store/modules/authUser'\nimport oAuthModule from '@/store/modules/oauth2'\nimport { actions } from '@/store/modules/root/actions'\nimport { getters } from '@/store/modules/root/getters'\nimport { mutations } from '@/store/modules/root/mutations'\nimport { state } from '@/store/modules/root/state'\nimport { IRootState } from '@/store/modules/root/types'\nimport sportsModule from '@/store/modules/sports'\nimport statsModule from '@/store/modules/statistics'\nimport usersModule from '@/store/modules/users'\nimport workoutsModule from '@/store/modules/workouts'\n\nconst modules: ModuleTree = {\n authUserModule,\n oAuthModule,\n sportsModule,\n statsModule,\n usersModule,\n workoutsModule,\n}\n\nconst root: Module = {\n state,\n actions,\n getters,\n mutations,\n modules,\n}\n\nexport default root\n","import { createStore } from 'vuex'\n\nimport root from '@/store/modules/root'\nimport { IRootState } from '@/store/modules/root/types'\n\nconst store = createStore(root)\n\nexport default store\n","export enum WorkoutsActions {\n ADD_WORKOUT = 'ADD_WORKOUT',\n ADD_WORKOUT_WITHOUT_GPX = 'ADD_WORKOUT_WITHOUT_GPX',\n DELETE_WORKOUT = 'DELETE_WORKOUT',\n EDIT_WORKOUT = 'EDIT_WORKOUT',\n GET_CALENDAR_WORKOUTS = 'GET_CALENDAR_WORKOUTS',\n GET_USER_WORKOUTS = 'GET_USER_WORKOUTS',\n GET_TIMELINE_WORKOUTS = 'GET_TIMELINE_WORKOUTS',\n GET_MORE_TIMELINE_WORKOUTS = 'GET_MORE_TIMELINE_WORKOUTS',\n GET_WORKOUT_DATA = 'GET_WORKOUT_DATA',\n}\n\nexport enum WorkoutsGetters {\n CALENDAR_WORKOUTS = 'CALENDAR_WORKOUTS',\n TIMELINE_WORKOUTS = 'TIMELINE_WORKOUTS',\n USER_WORKOUTS = 'USER_WORKOUTS',\n WORKOUT_DATA = 'WORKOUT_DATA',\n WORKOUTS_PAGINATION = 'WORKOUTS_PAGINATION',\n}\n\nexport enum WorkoutsMutations {\n ADD_TIMELINE_WORKOUTS = 'ADD_TIMELINE_WORKOUTS',\n EMPTY_WORKOUTS = 'EMPTY_WORKOUTS',\n EMPTY_CALENDAR_WORKOUTS = 'EMPTY_CALENDAR_WORKOUTS',\n EMPTY_WORKOUT = 'EMPTY_WORKOUT',\n SET_CALENDAR_WORKOUTS = 'SET_CALENDAR_WORKOUTS',\n SET_TIMELINE_WORKOUTS = 'SET_TIMELINE_WORKOUTS',\n SET_USER_WORKOUTS = 'SET_USER_WORKOUTS',\n SET_WORKOUT = 'SET_WORKOUT',\n SET_WORKOUT_GPX = 'SET_WORKOUT_GPX',\n SET_WORKOUT_CHART_DATA = 'SET_WORKOUT_CHART_DATA',\n SET_WORKOUT_LOADING = 'SET_WORKOUT_LOADING',\n SET_WORKOUTS_PAGINATION = 'SET_WORKOUTS_PAGINATION',\n}\n","import { useStore as VuexStore } from 'vuex'\n\nimport { Store } from '@/store/types'\n\nexport function useStore(): Store {\n return VuexStore() as Store\n}\n","import { LocationQuery } from 'vue-router'\n\nimport { IQueryOptions, TPaginationPayload } from '@/types/api'\n\nexport const sortList: string[] = ['asc', 'desc']\nexport const defaultPage = 1\nexport const defaultPerPage = 10\n\nexport const getNumberQueryValue = (\n queryValue: string | (string | null)[] | null,\n defaultValue: number\n): number => {\n return queryValue && typeof queryValue === 'string' && +queryValue > 0\n ? +queryValue\n : defaultValue\n}\n\nexport const getStringQueryValue = (\n queryValue: string | (string | null)[] | null,\n availableValues: string[],\n defaultValue: string\n): string => {\n return queryValue &&\n typeof queryValue === 'string' &&\n availableValues.includes(queryValue)\n ? queryValue\n : defaultValue\n}\n\nexport const getQuery = (\n locationQuery: LocationQuery,\n orderByList: string[],\n defaultOrderBy: string,\n options?: IQueryOptions\n): TPaginationPayload => {\n const queryOptions = options || {}\n const defaultSort = queryOptions.defaultSort || 'asc'\n const query = {}\n\n query.page = getNumberQueryValue(locationQuery.page, defaultPage)\n query.per_page = getNumberQueryValue(locationQuery.per_page, defaultPerPage)\n query.order = getStringQueryValue(locationQuery.order, sortList, defaultSort)\n query.order_by = getStringQueryValue(\n locationQuery.order_by,\n orderByList,\n defaultOrderBy\n )\n if (typeof locationQuery.q === 'string') {\n query.q = locationQuery.q\n } else {\n delete query.q\n }\n\n return query\n}\n\nexport const workoutsPayloadKeys = [\n 'from',\n 'to',\n 'ave_speed_from',\n 'ave_speed_to',\n 'max_speed_from',\n 'max_speed_to',\n 'distance_from',\n 'distance_to',\n 'duration_from',\n 'duration_to',\n 'sport_id',\n]\n\nconst getRange = (stop: number, start = 1): number[] => {\n return Array.from({ length: stop - start + 1 }, (_, i) => start + i)\n}\n\nexport const rangePagination = (\n pages: number,\n currentPage: number\n): (string | number)[] => {\n if (pages < 0) {\n return []\n }\n\n if (pages < 9) {\n return getRange(pages)\n }\n\n let pagination: (string | number)[] = [1, 2]\n if (currentPage < 4) {\n pagination = pagination.concat([3, 4, 5])\n } else if (currentPage < 6) {\n pagination = pagination.concat(getRange(currentPage + 2, 3))\n } else {\n pagination = pagination.concat(['...'])\n if (currentPage < pages - 2) {\n pagination = pagination.concat(getRange(currentPage + 2, currentPage - 2))\n }\n }\n if (currentPage + 2 <= pages - 2) {\n pagination = pagination.concat(['...'])\n pagination = pagination.concat(getRange(pages, pages - 1))\n } else {\n if (\n pagination[pagination.length - 1] !== '...' &&\n pagination[pagination.length - 1] >= pages - 2 &&\n pagination[pagination.length - 1] < pages\n ) {\n pagination = pagination.concat(\n getRange(pages, +pagination[pagination.length - 1] + 1)\n )\n } else {\n pagination = pagination.concat(\n getRange(\n pages,\n currentPage < pages - 3 ? currentPage + 3 : currentPage - 5\n )\n )\n }\n }\n\n return pagination\n}\n","import {\n addDays,\n addMonths,\n addYears,\n endOfMonth,\n endOfWeek,\n format,\n startOfMonth,\n startOfWeek,\n startOfYear,\n} from 'date-fns'\nimport { utcToZonedTime } from 'date-fns-tz'\n\nimport createI18n from '@/i18n'\nimport { localeFromLanguage } from '@/utils/locales'\n\nconst { locale } = createI18n.global\n\nexport const getStartDate = (\n duration: string,\n day: Date,\n weekStartingMonday: boolean\n): Date => {\n switch (duration) {\n case 'week':\n return startOfWeek(day, { weekStartsOn: weekStartingMonday ? 1 : 0 })\n case 'year':\n return startOfYear(day)\n case 'month':\n return startOfMonth(day)\n default:\n throw new Error(\n `Invalid duration, expected: \"week\", \"month\", \"year\", got: \"${duration}\"`\n )\n }\n}\n\nexport const incrementDate = (duration: string, day: Date): Date => {\n switch (duration) {\n case 'week':\n return addDays(day, 7)\n case 'year':\n return addYears(day, 1)\n case 'month':\n return addMonths(day, 1)\n default:\n throw new Error(\n `Invalid duration, expected: \"week\", \"month\", \"year\", got: \"${duration}\"`\n )\n }\n}\n\nexport const getDateWithTZ = (dateInUTC: string, tz: string): Date => {\n return utcToZonedTime(new Date(dateInUTC), tz)\n}\n\nexport const getCalendarStartAndEnd = (\n date: Date,\n weekStartingMonday: boolean\n): Record => {\n const monthStart = startOfMonth(date)\n const monthEnd = endOfMonth(date)\n const weekStartsOn = weekStartingMonday ? 1 : 0\n return {\n start: startOfWeek(monthStart, { weekStartsOn }),\n end: endOfWeek(monthEnd, { weekStartsOn }),\n }\n}\n\nexport const formatWorkoutDate = (\n dateTime: Date,\n dateFormat: string | null = null,\n timeFormat: string | null = null\n): Record => {\n if (!dateFormat) {\n dateFormat = 'yyyy/MM/dd'\n }\n dateFormat = getDateFormat(dateFormat, locale.value)\n if (!timeFormat) {\n timeFormat = 'HH:mm'\n }\n return {\n workout_date: format(dateTime, dateFormat, {\n locale: localeFromLanguage[locale.value],\n }),\n workout_time: format(dateTime, timeFormat),\n }\n}\n\nconst availableDateFormats = [\n 'MM/dd/yyyy',\n 'dd/MM/yyyy',\n 'yyyy-MM-dd',\n 'date_string',\n]\nconst dateStringFormats: Record = {\n de: 'do MMM yyyy',\n en: 'MMM. do, yyyy',\n fr: 'd MMM yyyy',\n // nb: 'do MMM yyyy',\n}\n\nexport const getDateFormat = (dateFormat: string, language: string): string => {\n return dateFormat === 'date_string' ? dateStringFormats[language] : dateFormat\n}\n\nexport const formatDate = (\n dateString: string,\n timezone: string,\n dateFormat: string,\n withTime = true,\n language: string | null = null\n): string => {\n if (!language) {\n language = locale.value\n }\n return format(\n getDateWithTZ(dateString, timezone),\n `${getDateFormat(dateFormat, language)}${withTime ? ' HH:mm' : ''}`,\n { locale: localeFromLanguage[language] }\n )\n}\n\nexport const availableDateFormatOptions = (\n inputDate: string,\n timezone: string,\n language: string | null = null\n) => {\n const l: string = language ? language : locale.value\n const options: Record[] = []\n availableDateFormats.map((df) => {\n const dateFormat = getDateFormat(df, l)\n options.push({\n label: `${dateFormat} - ${formatDate(\n inputDate,\n timezone,\n dateFormat,\n false,\n l\n )}`,\n value: df,\n })\n })\n return options\n}\n","const suffixes = ['bytes', 'KB', 'MB', 'GB', 'TB']\n\nexport const getReadableFileSize = (\n fileSize: number,\n asText = true\n): string | Record => {\n const i = Math.floor(Math.log(fileSize) / Math.log(1024))\n if (!fileSize) {\n return asText ? '0 bytes' : { size: '0', suffix: 'bytes' }\n }\n const size = (fileSize / Math.pow(1024, i)).toFixed(1)\n const suffix = suffixes[i]\n return asText ? `${size}${suffix}` : { size, suffix }\n}\n\nexport const getFileSizeInMB = (fileSize: number): number => {\n const value = fileSize / 1048576\n return (!fileSize && 0) || +value.toFixed(2)\n}\n","import { AxiosError } from 'axios'\nimport { ActionContext } from 'vuex'\n\nimport { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\nimport { IAuthUserState } from '@/store/modules/authUser/types'\nimport { IOAuth2State } from '@/store/modules/oauth2/types'\nimport { IRootState } from '@/store/modules/root/types'\nimport { ISportsState } from '@/store/modules/sports/types'\nimport { IStatisticsState } from '@/store/modules/statistics/types'\nimport { IUsersState } from '@/store/modules/users/types'\nimport { IWorkoutsState } from '@/store/modules/workouts/types'\n\nexport const getApiUrl = (): string => {\n return process.env.NODE_ENV === 'production'\n ? '/api/'\n : `${process.env.VUE_APP_API_URL}/api/`\n}\n\nexport const handleError = (\n context:\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext\n | ActionContext,\n error: AxiosError | null,\n msg = 'UNKNOWN'\n): void => {\n // if request is cancelled, no error to display\n if (error && error.message === 'canceled') {\n return\n }\n\n // if stored token is blacklisted, disconnect user\n if (\n error?.response?.status === 401 &&\n error.response.data.error === 'invalid_token'\n ) {\n localStorage.removeItem('authToken')\n context.dispatch(AUTH_USER_STORE.ACTIONS.CHECK_AUTH_USER)\n return\n }\n\n const errorMessages = !error\n ? msg\n : error.response\n ? error.response.status === 413\n ? 'file size is greater than the allowed size'\n : error.response.data.message\n ? error.response.data.message\n : msg\n : error.message\n ? error.message\n : msg\n context.commit(\n ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES,\n errorMessages.includes('\\n')\n ? errorMessages\n .split('\\n')\n .filter((m: string) => m !== '')\n .map((m: string) => `api.ERROR.${m}`)\n : `api.ERROR.${errorMessages}`\n )\n}\n","/* eslint-disable import/no-duplicates */\nimport { Locale } from 'date-fns'\nimport { de, enUS, fr } from 'date-fns/locale'\n\nimport createI18n from '@/i18n'\n\nexport const localeFromLanguage: Record = {\n de: de,\n en: enUS,\n fr: fr,\n // nb: nb, // disabled for now\n}\n\nexport const languageLabels: Record = {\n de: 'Deutsch',\n en: 'English',\n fr: 'Français',\n // nb: 'Norsk bokmål', // disabled for now\n}\n\nconst { availableLocales } = createI18n.global\nexport const availableLanguages = availableLocales.map((l) => {\n return { label: languageLabels[l], value: l }\n})\n","import { ISport, ITranslatedSport, TActiveStatus } from '@/types/sports'\nimport { IWorkout } from '@/types/workouts'\n\nexport const sportColors: Record = {\n 'Cycling (Sport)': '#4c9792',\n 'Cycling (Transport)': '#88af98',\n 'Cycling (Virtual)': '#64a360',\n Hiking: '#bb757c',\n 'Mountain Biking': '#d4b371',\n 'Mountain Biking (Electric)': '#fc9d6f',\n Rowing: '#fcce72',\n Running: '#835b83',\n 'Skiing (Alpine)': '#67a4bd',\n 'Skiing (Cross Country)': '#9498d0',\n Snowshoes: '#5780a8',\n Trail: '#09a98a',\n Walking: '#838383',\n}\n\nexport const sportIdColors = (sports: ISport[]): Record => {\n const colors: Record = {}\n sports.map(\n (sport) =>\n (colors[sport.id] = sport.color ? sport.color : sportColors[sport.label])\n )\n return colors\n}\n\nconst sortSports = (a: ITranslatedSport, b: ITranslatedSport): number => {\n const sportATranslatedLabel = a.translatedLabel.toLowerCase()\n const sportBTranslatedLabel = b.translatedLabel.toLowerCase()\n return sportATranslatedLabel > sportBTranslatedLabel\n ? 1\n : sportATranslatedLabel < sportBTranslatedLabel\n ? -1\n : 0\n}\n\nexport const translateSports = (\n sports: ISport[],\n t: CallableFunction,\n activeStatus: TActiveStatus = 'all',\n sportsToInclude: number[] = []\n): ITranslatedSport[] =>\n sports\n .filter((sport) =>\n activeStatus === 'all'\n ? true\n : sportsToInclude.includes(sport.id) || sport[activeStatus]\n )\n .map((sport) => ({\n ...sport,\n translatedLabel: t(`sports.${sport.label}.LABEL`),\n }))\n .sort(sortSports)\n\nexport const getSportLabel = (workout: IWorkout, sports: ISport[]): string => {\n return sports\n .filter((sport) => sport.id === workout.sport_id)\n .map((sport) => sport.label)[0]\n}\n\nexport const getSportColor = (\n workout: IWorkout,\n sports: ISport[]\n): string | null => {\n return sports\n .filter((sport) => sport.id === workout.sport_id)\n .map((sport) => sport.color)[0]\n}\n","import {\n addMonths,\n addWeeks,\n addYears,\n endOfMonth,\n endOfWeek,\n endOfYear,\n format,\n startOfMonth,\n startOfWeek,\n startOfYear,\n subMonths,\n subWeeks,\n subYears,\n} from 'date-fns'\n\nimport createI18n from '@/i18n'\nimport { IChartDataset } from '@/types/chart'\nimport { ISport } from '@/types/sports'\nimport {\n IStatisticsChartData,\n IStatisticsDateParams,\n TStatisticsDatasetKeys,\n TStatisticsDatasets,\n TStatisticsFromApi,\n} from '@/types/statistics'\nimport { incrementDate, getStartDate, getDateFormat } from '@/utils/dates'\nimport { localeFromLanguage } from '@/utils/locales'\nimport { sportColors } from '@/utils/sports'\nimport { convertStatsDistance } from '@/utils/units'\n\nconst { locale } = createI18n.global\n\nconst dateFormats: Record> = {\n week: {\n api: 'yyyy-MM-dd',\n chart: 'MM/dd/yyyy',\n },\n month: {\n api: 'yyyy-MM',\n chart: 'MM/yyyy',\n },\n year: {\n api: 'yyyy',\n chart: 'yyyy',\n },\n}\n\nexport const datasetKeys: TStatisticsDatasetKeys[] = [\n 'average_speed',\n 'nb_workouts',\n 'total_duration',\n 'total_distance',\n 'total_ascent',\n 'total_descent',\n]\n\nexport const getDateKeys = (\n params: IStatisticsDateParams,\n weekStartingMonday: boolean\n): Date[] => {\n const days = []\n for (\n let day = getStartDate(params.duration, params.start, weekStartingMonday);\n day <= params.end;\n day = incrementDate(params.duration, day)\n ) {\n days.push(day)\n }\n return days\n}\n\nconst getStatisticsChartDataset = (\n sportLabel: string,\n color: string,\n isLineChart = false\n): IChartDataset => {\n const dataset: IChartDataset = {\n label: sportLabel,\n backgroundColor: [color],\n data: [],\n }\n if (isLineChart) {\n dataset.type = 'line'\n dataset.borderColor = [color]\n dataset.spanGaps = true\n }\n return dataset\n}\n\nexport const getDatasets = (displayedSports: ISport[]): TStatisticsDatasets => {\n const datasets: TStatisticsDatasets = {\n average_speed: [],\n nb_workouts: [],\n total_distance: [],\n total_duration: [],\n total_ascent: [],\n total_descent: [],\n }\n displayedSports.map((sport) => {\n const color = sport.color ? sport.color : sportColors[sport.label]\n datasets.average_speed.push(\n getStatisticsChartDataset(sport.label, color, true)\n )\n datasets.nb_workouts.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_distance.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_duration.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_ascent.push(getStatisticsChartDataset(sport.label, color))\n datasets.total_descent.push(getStatisticsChartDataset(sport.label, color))\n })\n return datasets\n}\n\nexport const convertStatsValue = (\n datasetKey: TStatisticsDatasetKeys,\n value: number,\n useImperialUnits: boolean\n): number => {\n switch (datasetKey) {\n case 'average_speed':\n case 'total_distance':\n case 'total_ascent':\n case 'total_descent':\n return convertStatsDistance(\n ['average_speed', 'total_distance'].includes(datasetKey) ? 'km' : 'm',\n value,\n useImperialUnits\n )\n default:\n case 'nb_workouts':\n case 'total_duration':\n return value\n }\n}\n\nexport const formatStats = (\n params: IStatisticsDateParams,\n weekStartingMonday: boolean,\n sports: ISport[],\n displayedSportsId: number[],\n apiStats: TStatisticsFromApi,\n useImperialUnits: boolean,\n userDateFormat: string\n): IStatisticsChartData => {\n const dayKeys = getDateKeys(params, weekStartingMonday)\n const dateFormat = dateFormats[params.duration]\n const displayedSports = sports.filter((sport) =>\n displayedSportsId.includes(sport.id)\n )\n const labels: string[] = []\n const datasets = getDatasets(displayedSports)\n const sportsId: Record = {}\n displayedSports.map(\n (displayedSport) => (sportsId[displayedSport.label] = displayedSport.id)\n )\n\n dayKeys.map((key) => {\n const date: string = format(key, dateFormat.api)\n const label: string = format(\n key,\n params.duration === 'week'\n ? getDateFormat(userDateFormat, locale.value)\n : dateFormat.chart,\n { locale: localeFromLanguage[locale.value] }\n )\n labels.push(label)\n datasetKeys.map((datasetKey) => {\n datasets[datasetKey].map((dataset) => {\n dataset.data.push(\n date in apiStats && sportsId[dataset.label] in apiStats[date]\n ? convertStatsValue(\n datasetKey,\n apiStats[date][sportsId[dataset.label]][datasetKey],\n useImperialUnits\n )\n : datasetKey === 'average_speed'\n ? null\n : 0\n )\n })\n })\n })\n return {\n labels,\n datasets,\n }\n}\n\nexport const getStatsDateParams = (\n date: Date,\n timeFrame: string,\n weekStartingMonday: boolean\n): IStatisticsDateParams => {\n const weekStartsOn = weekStartingMonday ? 1 : 0\n const start =\n timeFrame === 'year'\n ? startOfYear(subYears(date, 9))\n : timeFrame === 'week'\n ? startOfWeek(subMonths(date, 2), { weekStartsOn })\n : startOfMonth(subMonths(date, 11)) // month\n const end =\n timeFrame === 'year'\n ? endOfYear(date)\n : timeFrame === 'week'\n ? endOfWeek(date, { weekStartsOn })\n : endOfMonth(date) // month\n return {\n duration: timeFrame,\n end,\n start,\n }\n}\n\nexport const updateChartParams = (\n chartParams: IStatisticsDateParams,\n backward: boolean,\n weekStartingMonday: boolean\n): IStatisticsDateParams => {\n const { duration, start, end } = chartParams\n const weekStartsOn = weekStartingMonday ? 1 : 0\n return {\n duration,\n end:\n duration === 'year'\n ? endOfYear(backward ? subYears(end, 1) : addYears(end, 1))\n : duration === 'week'\n ? endOfWeek(backward ? subWeeks(end, 1) : addWeeks(end, 1), {\n weekStartsOn,\n })\n : endOfMonth(backward ? subMonths(end, 1) : addMonths(end, 1)),\n start:\n duration === 'year'\n ? startOfYear(backward ? subYears(start, 1) : addYears(start, 1))\n : duration === 'week'\n ? startOfWeek(backward ? subWeeks(start, 1) : addWeeks(start, 1), {\n weekStartsOn,\n })\n : startOfMonth(backward ? subMonths(start, 1) : addMonths(start, 1)),\n }\n}\n","import { IUnit, TFactor, TUnit } from '@/types/units'\n\nexport const units: Record = {\n ft: {\n unit: 'ft',\n system: 'imperial',\n multiplier: 1,\n defaultTarget: 'm',\n },\n mi: {\n unit: 'mi',\n system: 'imperial',\n multiplier: 5280,\n defaultTarget: 'km',\n },\n m: {\n unit: 'm',\n system: 'metric',\n multiplier: 1,\n defaultTarget: 'ft',\n },\n km: {\n unit: 'm',\n system: 'metric',\n multiplier: 1000,\n defaultTarget: 'mi',\n },\n}\n\nconst factors: TFactor = {\n metric: {\n imperial: 3.280839895,\n metric: 1,\n },\n imperial: {\n metric: 1 / 3.280839895,\n imperial: 1,\n },\n}\n\nexport const convertDistance = (\n distance: number,\n from: TUnit,\n to: TUnit,\n digits: number | null = 3\n): number => {\n const unitFrom = units[from]\n const unitTo = units[to]\n const convertedDistance =\n (distance * unitFrom.multiplier * factors[unitFrom.system][unitTo.system]) /\n unitTo.multiplier\n if (digits !== null) {\n return parseFloat(convertedDistance.toFixed(digits))\n }\n return convertedDistance\n}\n\nexport const convertStatsDistance = (\n unitFrom: TUnit,\n value: number,\n useImperialUnits: boolean\n): number => {\n const unitTo = useImperialUnits ? units[unitFrom].defaultTarget : unitFrom\n return useImperialUnits ? convertDistance(value, unitFrom, unitTo, 2) : value\n}\n","import {\n IWorkout,\n IWorkoutApiChartData,\n IWorkoutChartData,\n TCoordinates,\n TWorkoutDatasets,\n} from '@/types/workouts'\nimport { convertStatsDistance } from '@/utils/units'\n\nexport const getDatasets = (\n chartData: IWorkoutApiChartData[],\n t: CallableFunction,\n useImperialUnits: boolean\n): IWorkoutChartData => {\n const datasets: TWorkoutDatasets = {\n speed: {\n label: t('workouts.SPEED'),\n backgroundColor: ['#FFFFFF'],\n borderColor: ['#8884d8'],\n borderWidth: 2,\n data: [],\n yAxisID: 'ySpeed',\n },\n elevation: {\n label: t('workouts.ELEVATION'),\n backgroundColor: ['#e5e5e5'],\n borderColor: ['#cccccc'],\n borderWidth: 1,\n fill: true,\n data: [],\n yAxisID: 'yElevation',\n },\n }\n const distance_labels: unknown[] = []\n const duration_labels: unknown[] = []\n const coordinates: TCoordinates[] = []\n\n chartData.map((data) => {\n distance_labels.push(data.distance)\n duration_labels.push(data.duration)\n datasets.speed.data.push(\n convertStatsDistance('km', data.speed, useImperialUnits)\n )\n datasets.elevation.data.push(\n convertStatsDistance('m', data.elevation, useImperialUnits)\n )\n coordinates.push({ latitude: data.latitude, longitude: data.longitude })\n })\n\n return { distance_labels, duration_labels, datasets, coordinates }\n}\n\nexport const getDonutDatasets = (\n workouts: IWorkout[]\n): Record> => {\n const total = workouts.length\n if (total === 0) {\n return {}\n }\n\n const datasets: Record> = {}\n workouts.map((workout) => {\n if (!datasets[workout.sport_id]) {\n datasets[workout.sport_id] = {\n count: 0,\n percentage: 0,\n }\n }\n datasets[workout.sport_id].count += 1\n datasets[workout.sport_id].percentage =\n datasets[workout.sport_id].count / total\n })\n\n return datasets\n}\n\nexport const defaultOrder = {\n order: 'desc',\n order_by: 'workout_date',\n}\n","\n\n\n","import { render } from \"./Card.vue?vue&type=template&id=ad374c24\"\nconst script = {}\n\nimport \"./Card.vue?vue&type=style&index=0&id=ad374c24&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-72463173\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"table-selects\" }\nconst _hoisted_2 = [\"value\"]\nconst _hoisted_3 = [\"value\"]\nconst _hoisted_4 = [\"value\"]\nconst _hoisted_5 = [\"value\"]\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = [\"value\"]\n\nimport { toRefs } from 'vue'\n\n import { TPaginationPayload } from '@/types/api'\n\n interface Props {\n order_by: string[]\n query: TPaginationPayload\n sort: string[]\n message: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'FilterSelects',\n props: {\n order_by: null,\n query: null,\n sort: null,\n message: null\n },\n emits: ['updateSelect'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n order_by: string[]\n query: TPaginationPayload\n sort: string[]\n message: string\n }\n\n \n\n \n\n const { order_by, query, sort, message } = toRefs(props)\n const perPage = [10, 25, 50, 100]\n\n function onSelectUpdate(event: Event & { target: HTMLInputElement }) {\n emit('updateSelect', event.target.id, event.target.value)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.ORDER_BY.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"order_by\",\n id: \"order_by\",\n value: _unref(query).order_by,\n onChange: onSelectUpdate\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(order_by), (order) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: order,\n key: order\n }, _toDisplayString(_ctx.$t(`${_unref(message)}.${order.toUpperCase()}`)), 9, _hoisted_3))\n }), 128))\n ], 40, _hoisted_2)\n ]),\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.ORDER.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"order\",\n id: \"order\",\n value: _unref(query).order,\n onChange: onSelectUpdate\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(sort), (order) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: order,\n key: order\n }, _toDisplayString(_ctx.$t(`common.SELECTS.ORDER.${order.toUpperCase()}`)), 9, _hoisted_5))\n }), 128))\n ], 40, _hoisted_4)\n ]),\n _createElementVNode(\"label\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t('common.SELECTS.PER_PAGE.LABEL')) + \": \", 1),\n _createElementVNode(\"select\", {\n name: \"per_page\",\n id: \"per_page\",\n value: _unref(query).per_page,\n onChange: onSelectUpdate\n }, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(perPage, (nb) => {\n return _createElementVNode(\"option\", {\n value: nb,\n key: nb\n }, _toDisplayString(nb), 9, _hoisted_7)\n }), 64))\n ], 40, _hoisted_6)\n ])\n ]))\n}\n}\n\n})","import script from \"./FilterSelects.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./FilterSelects.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./FilterSelects.vue?vue&type=style&index=0&id=72463173&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-72463173\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./ErrorImg.vue?vue&type=template&id=e620aed4\"\nimport script from \"./ErrorImg.vue?vue&type=script&lang=js\"\nexport * from \"./ErrorImg.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-b60bfa80\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"error\" }\nconst _hoisted_2 = { class: \"error-content\" }\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n title: string\n message: string\n buttonText: string\n path?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Error',\n props: {\n title: null,\n message: null,\n buttonText: null,\n path: { default: '/' }\n },\n setup(__props: any) {\n\nconst props = __props as { title: string, message: string, buttonText: string, path: string }\n\n \n const { buttonText, title, message, path } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"h1\", null, _toDisplayString(_unref(title)), 1),\n _createElementVNode(\"p\", null, _toDisplayString(_unref(message)), 1),\n (_unref(buttonText))\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.push(_unref(path)))),\n class: \"upper\"\n }, _toDisplayString(_unref(buttonText)), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./Error.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Error.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Error.vue?vue&type=style&index=0&id=b60bfa80&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b60bfa80\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nimport { Ref, onMounted, ref, toRefs, withDefaults, onUnmounted } from 'vue'\n\n import Error from '@/components/Common/Error.vue'\n interface Props {\n target?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'NotFound',\n props: {\n target: { default: 'PAGE' }\n },\n setup(__props: any) {\n\nconst props = __props as { target: string }\n\n \n const { target } = toRefs(props)\n const timer = ref()\n const errorDisplayed: Ref = ref(false)\n\n onMounted(() => displayError())\n\n function displayError() {\n timer.value = setTimeout(() => {\n errorDisplayed.value = true\n }, 500)\n }\n\n onUnmounted(() => {\n if (timer.value) {\n clearTimeout(timer.value)\n }\n })\n\nreturn (_ctx: any,_cache: any) => {\n return (errorDisplayed.value)\n ? (_openBlock(), _createBlock(Error, {\n key: 0,\n title: \"404\",\n message: _ctx.$t(`error.NOT_FOUND.${_unref(target)}`),\n \"button-text\": _ctx.$t('common.HOME')\n }, null, 8, [\"message\", \"button-text\"]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./NotFound.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./NotFound.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderSlot as _renderSlot, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3a9a4a65\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n class: \"pagination-center\",\n \"aria-label\": \"navigation\"\n}\nconst _hoisted_2 = { class: \"pagination\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { toRefs } from 'vue'\n\n import { IPagination, TPaginationPayload } from '@/types/api'\n import { IOauth2ClientsPayload } from '@/types/oauth'\n import { TWorkoutsPayload } from '@/types/workouts'\n import { rangePagination } from '@/utils/api'\n\n interface Props {\n pagination: IPagination\n path: string\n query: TWorkoutsPayload | TPaginationPayload | IOauth2ClientsPayload\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Pagination',\n props: {\n pagination: null,\n path: null,\n query: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n pagination: IPagination\n path: string\n query: TWorkoutsPayload | TPaginationPayload | IOauth2ClientsPayload\n }\n\n \n\n const { pagination, path, query } = toRefs(props)\n\n function getQuery(\n page: number,\n cursor?: number\n ): TPaginationPayload | IOauth2ClientsPayload {\n const newQuery = Object.assign({}, query.value)\n newQuery.page = cursor ? page + cursor : page\n return newQuery\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"nav\", _hoisted_1, [\n _createElementVNode(\"ul\", _hoisted_2, [\n _createElementVNode(\"li\", {\n class: _normalizeClass([\"page-prev\", { disabled: !_unref(pagination).has_prev }])\n }, [\n _createVNode(_component_router_link, {\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(_unref(pagination).page, -1) },\n disabled: !_unref(pagination).has_prev\n }, {\n default: _withCtx(({ navigate }) => [\n _renderSlot(_ctx.$slots, \"default\", {\n onClick: ($event: any) => (_unref(pagination).has_next ? navigate : null)\n }, () => [\n _createTextVNode(_toDisplayString(_ctx.$t('api.PAGINATION.PREVIOUS')) + \" \", 1),\n _hoisted_3\n ])\n ]),\n _: 3\n }, 8, [\"to\", \"disabled\"])\n ], 2),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(rangePagination)(_unref(pagination).pages, _unref(pagination).page), (page) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: page,\n class: _normalizeClass([\"page\", { active: page === _unref(pagination).page }])\n }, [\n (page === '...')\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, \" ... \"))\n : (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(+page) }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(page), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]))\n ], 2))\n }), 128)),\n _createElementVNode(\"li\", {\n class: _normalizeClass([\"page-next\", { disabled: !_unref(pagination).has_next }])\n }, [\n _createVNode(_component_router_link, {\n class: \"page-link\",\n to: { path: _unref(path), query: getQuery(_unref(pagination).page, 1) },\n disabled: !_unref(pagination).has_next\n }, {\n default: _withCtx(({ navigate }) => [\n _renderSlot(_ctx.$slots, \"default\", {\n onClick: ($event: any) => (_unref(pagination).has_next ? navigate : null)\n }, () => [\n _createTextVNode(_toDisplayString(_ctx.$t('api.PAGINATION.NEXT')) + \" \", 1),\n _hoisted_5\n ])\n ]),\n _: 3\n }, 8, [\"to\", \"disabled\"])\n ], 2)\n ])\n ]))\n}\n}\n\n})","import script from \"./Pagination.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Pagination.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Pagination.vue?vue&type=style&index=0&id=3a9a4a65&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3a9a4a65\"]])\n\nexport default __exports__","import { zxcvbnOptions } from '@zxcvbn-ts/core'\n\nexport const setZxcvbnOptions = async (language: string) => {\n const zxcvbnCommonPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-common'\n )\n const zxcvbnEnPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-en'\n )\n const zxcvbnFrPackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-fr'\n )\n const zxcvbnDePackage = await import(\n /* webpackChunkName: \"password\" */ '@zxcvbn-ts/language-de'\n )\n const zxcvbnLangPackages: Record = {\n de: zxcvbnDePackage,\n en: zxcvbnEnPackage,\n fr: zxcvbnFrPackage,\n // no package available for norwegian bokmal, fallback on english\n nb: zxcvbnEnPackage,\n }\n const zxcvbnPackage = zxcvbnLangPackages[language]\n const options = {\n graphs: zxcvbnCommonPackage.default.adjacencyGraphs,\n dictionary: {\n ...zxcvbnCommonPackage.default.dictionary,\n ...zxcvbnPackage.default.dictionary,\n },\n }\n zxcvbnOptions.setOptions(options)\n}\n\nexport const getPasswordStrength = (strength: number): string => {\n switch (strength) {\n case 2:\n return 'AVERAGE'\n case 3:\n return 'GOOD'\n case 4:\n return 'STRONG'\n default:\n return 'WEAK'\n }\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74e71df5\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"password-strength\" }\nconst _hoisted_2 = [\"value\"]\nconst _hoisted_3 = {\n key: 0,\n class: \"password-strength-details\"\n}\nconst _hoisted_4 = { class: \"password-strength-value\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"info-box\"\n}\nconst _hoisted_6 = { class: \"password-feedback\" }\n\nimport { zxcvbn } from '@zxcvbn-ts/core'\n import {\n ComputedRef,\n Ref,\n computed,\n ref,\n onBeforeMount,\n toRefs,\n watch,\n } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { useStore } from '@/use/useStore'\n import { getPasswordStrength, setZxcvbnOptions } from '@/utils/password'\n\n interface Props {\n password: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordStength',\n props: {\n password: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n password: string\n }\n\n \n const { password } = toRefs(props)\n\n const store = useStore()\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const passwordScore: Ref = ref(0)\n const passwordStrength: Ref = ref('')\n const passwordSuggestions: Ref = ref([])\n const backgroundSize = ref('0% 100%')\n\n onBeforeMount(async () => await setZxcvbnOptions(language.value))\n\n function calculatePasswordStrength(password: string) {\n const zxcvbnResult = zxcvbn(password)\n passwordScore.value = zxcvbnResult.score\n passwordStrength.value = getPasswordStrength(passwordScore.value)\n passwordSuggestions.value = zxcvbnResult.feedback.suggestions\n backgroundSize.value = (passwordScore.value * 100) / 4 + '% 100%'\n }\n\n watch(\n () => language.value,\n async (newLanguageValue) => {\n await setZxcvbnOptions(newLanguageValue)\n }\n )\n watch(\n () => password.value,\n async (newPassword) => {\n if (isSuccess.value) {\n passwordStrength.value = ''\n } else {\n calculatePasswordStrength(newPassword)\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"input\", {\n class: _normalizeClass([\"password-slider\", `strength-${passwordScore.value}`]),\n style: _normalizeStyle({ backgroundSize: backgroundSize.value }),\n type: \"range\",\n value: passwordScore.value,\n min: \"0\",\n max: \"4\",\n step: \"1\"\n }, null, 14, _hoisted_2),\n (passwordStrength.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('user.PASSWORD_STRENGTH.LABEL')) + \": \" + _toDisplayString(_ctx.$t(`user.PASSWORD_STRENGTH.${passwordStrength.value}`)), 1),\n (passwordSuggestions.value.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"ul\", _hoisted_6, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(passwordSuggestions.value, (suggestion) => {\n return (_openBlock(), _createElementBlock(\"li\", { key: suggestion }, _toDisplayString(_ctx.$t(`user.PASSWORD_STRENGTH.SUGGESTIONS.${suggestion}`)), 1))\n }), 128))\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./PasswordStength.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordStength.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordStength.vue?vue&type=style&index=0&id=74e71df5&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74e71df5\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, vModelDynamic as _vModelDynamic, createElementVNode as _createElementVNode, withDirectives as _withDirectives, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5a126514\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"password-input\" }\nconst _hoisted_2 = [\"id\", \"disabled\", \"placeholder\", \"required\", \"type\"]\nconst _hoisted_3 = {\n key: 0,\n class: \"form-info\"\n}\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\n\nimport { Ref, ref, toRefs, watch, withDefaults } from 'vue'\n\n import PasswordStrength from '@/components/Common/PasswordStength.vue'\n\n interface Props {\n checkStrength?: boolean\n disabled?: boolean\n id?: string\n password?: string\n placeholder?: string\n required?: boolean\n }\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordInput',\n props: {\n checkStrength: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n id: { default: 'password' },\n password: { default: '' },\n placeholder: null,\n required: { type: Boolean, default: false }\n },\n emits: ['updatePassword', 'passwordError'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { checkStrength: boolean, disabled: boolean, id: string, password: string, placeholder?: string, required: boolean }\n\n \n const { checkStrength, disabled, id, password, placeholder, required } =\n toRefs(props)\n\n const showPassword: Ref = ref(false)\n const passwordValue: Ref = ref('')\n\n \n\n function togglePassword() {\n showPassword.value = !showPassword.value\n }\n function updatePassword(event: Event & { target: HTMLInputElement }) {\n emit('updatePassword', event.target.value)\n }\n function invalidPassword() {\n emit('passwordError')\n }\n\n watch(\n () => password.value,\n (newPassword) => {\n if (newPassword === '') {\n passwordValue.value = ''\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _withDirectives(_createElementVNode(\"input\", {\n id: _unref(id),\n disabled: _unref(disabled),\n placeholder: _unref(placeholder),\n required: _unref(required),\n type: showPassword.value ? 'text' : 'password',\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((passwordValue).value = $event)),\n minlength: \"8\",\n onInput: updatePassword,\n onInvalid: invalidPassword\n }, null, 40, _hoisted_2), [\n [_vModelDynamic, passwordValue.value]\n ]),\n _createElementVNode(\"div\", {\n class: \"show-password\",\n onClick: togglePassword\n }, [\n _createTextVNode(_toDisplayString(_ctx.$t(`user.${showPassword.value ? 'HIDE' : 'SHOW'}_PASSWORD`)) + \" \", 1),\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa\", `fa-eye${showPassword.value ? '-slash' : ''}`]),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n (_unref(checkStrength))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _hoisted_4,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.PASSWORD_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(checkStrength))\n ? (_openBlock(), _createBlock(PasswordStrength, {\n key: 1,\n password: passwordValue.value\n }, null, 8, [\"password\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./PasswordInput.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordInput.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordInput.vue?vue&type=style&index=0&id=5a126514&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5a126514\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"map-attribution\" }, [\n /*#__PURE__*/_createElementVNode(\"span\", { class: \"map-attribution-text\" }, \"©\"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n class: \"map-attribution-text\",\n href: \"https://www.openstreetmap.org/copyright\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \" OpenStreetMap \")\n], -1)\n\nimport { toRefs, withDefaults } from 'vue'\n\n import { IWorkout } from '@/types/workouts'\n import { getApiUrl } from '@/utils'\n\n interface Props {\n workout: IWorkout\n displayHover?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StaticMap',\n props: {\n workout: null,\n displayHover: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { workout: IWorkout, displayHover: boolean }\n\n \n const { displayHover } = toRefs(props)\n const imageUrl = `${getApiUrl()}workouts/map/${props.workout.map}`\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"static-map\", { 'display-hover': _unref(displayHover) }])\n }, [\n (_unref(displayHover))\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: imageUrl,\n alt: \"\"\n }))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"bg-map-image\",\n style: _normalizeStyle({\n backgroundImage: `url(${imageUrl})`,\n })\n }, null, 4)),\n _hoisted_1\n ], 2))\n}\n}\n\n})","import script from \"./StaticMap.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StaticMap.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StaticMap.vue?vue&type=style&index=0&id=6b7e4baf&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-d5e9b348\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"start-chart\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { key: 1 }\nconst _hoisted_4 = { class: \"chart-radio\" }\nconst _hoisted_5 = [\"checked\"]\nconst _hoisted_6 = [\"checked\"]\nconst _hoisted_7 = [\"checked\"]\nconst _hoisted_8 = { key: 0 }\nconst _hoisted_9 = [\"checked\"]\nconst _hoisted_10 = { key: 1 }\nconst _hoisted_11 = [\"checked\"]\nconst _hoisted_12 = { key: 2 }\nconst _hoisted_13 = [\"checked\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Chart = _resolveComponent(\"Chart\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.hideChartIfNoData && _ctx.emptyStats)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('workouts.NO_WORKOUTS')), 1))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_distance\",\n checked: _ctx.displayedData === 'total_distance',\n onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_5),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_duration\",\n checked: _ctx.displayedData === 'total_duration',\n onClick: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_6),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DURATION')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"nb_workouts\",\n checked: _ctx.displayedData === 'nb_workouts',\n onClick: _cache[2] || (_cache[2] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_7),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.WORKOUT', 2)), 1)\n ]),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_8, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"average_speed\",\n checked: _ctx.displayedData === 'average_speed',\n onClick: _cache[3] || (_cache[3] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_9),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.AVERAGE_SPEED')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_10, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_ascent\",\n checked: _ctx.displayedData === 'total_ascent',\n onClick: _cache[4] || (_cache[4] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_11),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.ASCENT')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.fullStats)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_12, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"total_descent\",\n checked: _ctx.displayedData === 'total_descent',\n onClick: _cache[5] || (_cache[5] = \n//@ts-ignore\n(...args) => (_ctx.updateDisplayData && _ctx.updateDisplayData(...args)))\n }, null, 8, _hoisted_13),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DESCENT')), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n (_ctx.labels.length > 0)\n ? (_openBlock(), _createBlock(_component_Chart, {\n key: 0,\n datasets: _ctx.datasets,\n labels: _ctx.labels,\n displayedData: _ctx.displayedData,\n displayedSportIds: _ctx.displayedSportIds,\n fullStats: _ctx.fullStats,\n useImperialUnits: _ctx.user.imperial_units\n }, null, 8, [\"datasets\", \"labels\", \"displayedData\", \"displayedSportIds\", \"fullStats\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n}","import { resolveComponent as _resolveComponent, mergeProps as _mergeProps, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"chart\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BarChart = _resolveComponent(\"BarChart\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_BarChart, _mergeProps(_ctx.barChartProps, { class: \"bar-chart\" }), null, 16)\n ]))\n}","export const formatDuration = (\n totalSeconds: number,\n formatWithUnits = false\n): string => {\n let days = '0'\n if (formatWithUnits) {\n days = String(Math.floor(totalSeconds / 86400))\n totalSeconds %= 86400\n }\n const hours = String(Math.floor(totalSeconds / 3600)).padStart(2, '0')\n totalSeconds %= 3600\n const minutes = String(Math.floor(totalSeconds / 60)).padStart(2, '0')\n const seconds = String(totalSeconds % 60).padStart(2, '0')\n if (formatWithUnits) {\n return `${days === '0' ? '' : `${days}d `}${\n hours === '00' ? '' : `${hours}h `\n }${minutes}m ${seconds}s`\n }\n return `${hours === '00' ? '' : `${hours}:`}${minutes}:${seconds}`\n}\n","import { TStatisticsDatasetKeys } from '@/types/statistics'\nimport { formatDuration } from '@/utils/duration'\nimport { units } from '@/utils/units'\n\nexport const formatTooltipValue = (\n displayedData: TStatisticsDatasetKeys,\n value: number,\n useImperialUnits: boolean,\n formatWithUnits = true,\n unitFrom = 'km'\n): string => {\n const unitTo = useImperialUnits ? units[unitFrom].defaultTarget : unitFrom\n switch (displayedData) {\n case 'average_speed':\n return `${value.toFixed(2)} ${unitTo}/h`\n case 'total_duration':\n return formatDuration(value, formatWithUnits)\n case 'total_distance':\n case 'total_ascent':\n case 'total_descent':\n return `${value.toFixed(2)} ${unitTo}`\n default:\n return value.toString()\n }\n}\n","\n import { ChartData, ChartOptions, LayoutItem } from 'chart.js'\n import { ComputedRef, PropType, computed, defineComponent } from 'vue'\n import { BarChart, useBarChart } from 'vue-chart-3'\n import { useI18n } from 'vue-i18n'\n\n import { IChartDataset } from '@/types/chart'\n import { TStatisticsDatasetKeys } from '@/types/statistics'\n import { formatTooltipValue } from '@/utils/tooltip'\n\n export default defineComponent({\n name: 'Chart',\n components: {\n BarChart,\n },\n props: {\n datasets: {\n type: Object as PropType,\n required: true,\n },\n labels: {\n type: Object as PropType,\n required: true,\n },\n displayedData: {\n type: String as PropType,\n required: true,\n },\n displayedSportIds: {\n type: Array as PropType,\n required: true,\n },\n fullStats: {\n type: Boolean,\n required: true,\n },\n useImperialUnits: {\n type: Boolean,\n required: true,\n },\n },\n setup(props) {\n const { t } = useI18n()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function getNumber(value: any): number {\n return isNaN(value) ? 0 : +value\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function getSum(total: any, value: any): number {\n return getNumber(total) + getNumber(value)\n }\n function getUnit(displayedData: string) {\n return ['total_ascent', 'total_descent'].includes(displayedData)\n ? 'm'\n : 'km'\n }\n const chartData: ComputedRef> = computed(() => ({\n labels: props.labels,\n // workaround to avoid dataset modification\n datasets: JSON.parse(JSON.stringify(props.datasets)),\n }))\n const options = computed>(() => ({\n responsive: true,\n maintainAspectRatio: true,\n animation: false,\n layout: {\n padding: {\n top: props.fullStats ? 40 : 22,\n },\n },\n scales: {\n x: {\n stacked: true,\n grid: {\n drawOnChartArea: false,\n },\n },\n y: {\n stacked: props.displayedData !== 'average_speed',\n grid: {\n drawOnChartArea: false,\n },\n ticks: {\n maxTicksLimit: 6,\n callback: function (value) {\n return formatTooltipValue(\n props.displayedData,\n +value,\n props.useImperialUnits,\n false,\n getUnit(props.displayedData)\n )\n },\n },\n afterFit: function (scale: LayoutItem) {\n scale.width = props.fullStats ? 90 : 60\n },\n },\n },\n plugins: {\n datalabels: {\n anchor: 'end',\n align: 'end',\n color: function (context) {\n return props.displayedData === 'average_speed' &&\n context.dataset.backgroundColor\n ? // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n context.dataset.backgroundColor[0]\n : '#666666'\n },\n rotation: function (context) {\n return props.fullStats && context.chart.chartArea.width < 580\n ? 310\n : 0\n },\n display: function (context) {\n return props.fullStats && context.chart.chartArea.width < 300\n ? false\n : props.displayedData === 'average_speed'\n ? props.displayedSportIds.length == 1\n ? 'auto'\n : false\n : true\n },\n formatter: function (value, context) {\n if (props.displayedData === 'average_speed') {\n return formatTooltipValue(\n props.displayedData,\n value,\n props.useImperialUnits,\n false\n )\n } else {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const total: number = context.chart.data.datasets\n .map((d) => d.data[context.dataIndex])\n .reduce((total, value) => getSum(total, value), 0)\n return context.datasetIndex ===\n props.displayedSportIds.length - 1 && total > 0\n ? formatTooltipValue(\n props.displayedData,\n total,\n props.useImperialUnits,\n false,\n getUnit(props.displayedData)\n )\n : null\n }\n },\n },\n legend: {\n display: false,\n },\n tooltip: {\n interaction: {\n intersect: true,\n mode: 'index',\n position:\n props.displayedData === 'average_speed' ? 'nearest' : 'average',\n },\n filter: function (tooltipItem) {\n return tooltipItem.formattedValue !== '0'\n },\n callbacks: {\n label: function (context) {\n let label = t(`sports.${context.dataset.label}.LABEL`) || ''\n if (label) {\n label += ': '\n }\n if (context.parsed.y !== null) {\n label += formatTooltipValue(\n props.displayedData,\n context.parsed.y,\n props.useImperialUnits,\n true,\n getUnit(props.displayedData)\n )\n }\n return label\n },\n footer: function (tooltipItems) {\n if (props.displayedData === 'average_speed') {\n return ''\n }\n let sum = 0\n tooltipItems.map((tooltipItem) => {\n sum += tooltipItem.parsed.y\n })\n return (\n `${t('common.TOTAL')}: ` +\n formatTooltipValue(\n props.displayedData,\n sum,\n props.useImperialUnits,\n true,\n getUnit(props.displayedData)\n )\n )\n },\n },\n },\n },\n }))\n const { barChartProps } = useBarChart({\n chartData,\n options,\n })\n return { barChartProps }\n },\n })\n","import { render } from \"./Chart.vue?vue&type=template&id=6c8b76cd&ts=true\"\nimport script from \"./Chart.vue?vue&type=script&lang=ts\"\nexport * from \"./Chart.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n import { format } from 'date-fns'\n import {\n ComputedRef,\n PropType,\n Ref,\n computed,\n defineComponent,\n ref,\n watch,\n onBeforeMount,\n } from 'vue'\n\n import Chart from '@/components/Common/StatsChart/Chart.vue'\n import { STATS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import {\n IStatisticsChartData,\n TStatisticsDatasetKeys,\n IStatisticsDateParams,\n TStatisticsFromApi,\n IStatisticsParams,\n } from '@/types/statistics'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatStats } from '@/utils/statistics'\n\n export default defineComponent({\n name: 'UserMonthStats',\n components: {\n Chart,\n },\n props: {\n sports: {\n type: Object as PropType,\n required: true,\n },\n user: {\n type: Object as PropType,\n required: true,\n },\n chartParams: {\n type: Object as PropType,\n required: true,\n },\n displayedSportIds: {\n type: Array as PropType,\n default: () => [],\n },\n fullStats: {\n type: Boolean,\n default: false,\n },\n hideChartIfNoData: {\n type: Boolean,\n default: false,\n },\n },\n setup(props) {\n const store = useStore()\n\n const displayedData: Ref = ref('total_distance')\n const statistics: ComputedRef = computed(\n () => store.getters[STATS_STORE.GETTERS.USER_STATS]\n )\n const formattedStats: ComputedRef = computed(() =>\n formatStats(\n props.chartParams,\n props.user.weekm,\n props.sports,\n props.displayedSportIds,\n statistics.value,\n props.user.imperial_units,\n props.user.date_format\n )\n )\n\n onBeforeMount(() =>\n getStatistics(getApiParams(props.chartParams, props.user))\n )\n\n function getStatistics(apiParams: IStatisticsParams) {\n store.dispatch(STATS_STORE.ACTIONS.GET_USER_STATS, {\n username: props.user.username,\n filterType: 'by_time',\n params: apiParams,\n })\n }\n function updateDisplayData(\n event: Event & {\n target: HTMLInputElement & { name: TStatisticsDatasetKeys }\n }\n ) {\n displayedData.value = event.target.name\n }\n function getApiParams(\n chartParams: IStatisticsDateParams,\n user: IAuthUserProfile\n ): IStatisticsParams {\n return {\n from: format(chartParams.start, 'yyyy-MM-dd'),\n to: format(chartParams.end, 'yyyy-MM-dd'),\n time:\n chartParams.duration === 'week'\n ? `week${user.weekm ? 'm' : ''}`\n : chartParams.duration,\n }\n }\n\n watch(\n () => props.chartParams,\n async (newParams) => {\n getStatistics(getApiParams(newParams, props.user))\n }\n )\n\n return {\n datasets: computed(\n () => formattedStats.value.datasets[displayedData.value]\n ),\n labels: computed(() => formattedStats.value.labels),\n emptyStats: computed(() => Object.keys(statistics.value).length === 0),\n displayedData,\n updateDisplayData,\n }\n },\n })\n","import { render } from \"./index.vue?vue&type=template&id=d5e9b348&scoped=true&ts=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=d5e9b348&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-d5e9b348\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-20291951\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"box user-header\" }\nconst _hoisted_2 = { class: \"user-details\" }\nconst _hoisted_3 = { class: \"user-name\" }\nconst _hoisted_4 = { class: \"user-stats\" }\nconst _hoisted_5 = { class: \"user-stat\" }\nconst _hoisted_6 = { class: \"stat-number\" }\nconst _hoisted_7 = { class: \"stat-label\" }\nconst _hoisted_8 = { class: \"user-stat\" }\nconst _hoisted_9 = { class: \"stat-label\" }\nconst _hoisted_10 = { class: \"user-stat hide-small\" }\nconst _hoisted_11 = { class: \"stat-number\" }\nconst _hoisted_12 = { class: \"stat-label\" }\n\nimport { computed, ComputedRef, toRefs } from 'vue'\n\n import UserPicture from '@/components/User/UserPicture.vue'\n import { AUTH_USER_STORE } from '@/store/constants'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserHeader',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const { user } = toRefs(props)\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(UserPicture, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_unref(user).username), 1),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"span\", _hoisted_6, _toDisplayString(_unref(user).nb_workouts), 1),\n _createElementVNode(\"span\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.WORKOUT', _unref(user).nb_workouts)), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createVNode(_component_Distance, {\n distance: _unref(user).total_distance,\n unitFrom: \"km\",\n digits: 0,\n displayUnit: false,\n useImperialUnits: _unref(authUser).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createElementVNode(\"span\", _hoisted_9, _toDisplayString(_unref(authUser).imperial_units ? 'miles' : 'km'), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_unref(user).nb_sports), 1),\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.$t('workouts.SPORT', _unref(user).nb_sports)), 1)\n ])\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./UserHeader.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserHeader.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserHeader.vue?vue&type=style&index=0&id=20291951&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-20291951\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-217519af\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"user-infos\",\n class: \"description-list\"\n}\nconst _hoisted_2 = {\n key: 1,\n class: \"info-box success-message\"\n}\nconst _hoisted_3 = {\n key: 4,\n class: \"email-form form-box\"\n}\nconst _hoisted_4 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_5 = {\n class: \"form-items\",\n for: \"email\"\n}\nconst _hoisted_6 = { class: \"form-buttons\" }\nconst _hoisted_7 = {\n class: \"confirm\",\n type: \"submit\"\n}\nconst _hoisted_8 = [\"onClick\"]\nconst _hoisted_9 = { key: 5 }\nconst _hoisted_10 = { class: \"user-bio\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"profile-buttons\"\n}\nconst _hoisted_12 = [\"onClick\"]\nconst _hoisted_13 = {\n key: 1,\n class: \"profile-buttons\"\n}\n\nimport { format } from 'date-fns'\n import {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n withDefaults,\n watch,\n onUnmounted,\n } from 'vue'\n\n import { AUTH_USER_STORE, ROOT_STORE, USERS_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { IAuthUserProfile, IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { formatDate, getDateFormat } from '@/utils/dates'\n import { localeFromLanguage } from '@/utils/locales'\n\n interface Props {\n user: IUserProfile\n fromAdmin?: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserInfos',\n props: {\n user: null,\n fromAdmin: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { user: IUserProfile, fromAdmin: boolean }\n\n \n\n const store = useStore()\n\n const { user, fromAdmin } = toRefs(props)\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const registrationDate = computed(() =>\n props.user.created_at\n ? formatDate(\n props.user.created_at,\n authUser.value.timezone,\n authUser.value.date_format\n )\n : ''\n )\n const birthDate = computed(() =>\n props.user.birth_date\n ? format(\n new Date(props.user.birth_date),\n `${getDateFormat(authUser.value.date_format, language.value)}`,\n { locale: localeFromLanguage[language.value] }\n )\n : ''\n )\n const isSuccess = computed(\n () => store.getters[USERS_STORE.GETTERS.USERS_IS_SUCCESS]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const displayModal: Ref = ref('')\n const formErrors = ref(false)\n const displayUserEmailForm: Ref = ref(false)\n const newUserEmail: Ref = ref('')\n const currentAction: Ref = ref('')\n\n function updateDisplayModal(value: string) {\n displayModal.value = value\n if (value !== '') {\n store.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n }\n }\n function deleteUserAccount(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.DELETE_USER_ACCOUNT, { username })\n }\n function resetUserPassword(username: string) {\n currentAction.value = 'password-reset'\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n resetPassword: true,\n })\n }\n function confirmUserAccount(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n activate: true,\n })\n }\n function displayEmailForm() {\n resetErrorsAndSuccess()\n newUserEmail.value = user.value.email_to_confirm\n ? user.value.email_to_confirm\n : ''\n displayUserEmailForm.value = true\n currentAction.value = 'email-update'\n }\n function hideEmailForm() {\n newUserEmail.value = ''\n displayUserEmailForm.value = false\n }\n function updateUserEmail(username: string) {\n store.dispatch(USERS_STORE.ACTIONS.UPDATE_USER, {\n username,\n new_email: newUserEmail.value,\n })\n }\n function resetErrorsAndSuccess() {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(USERS_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n currentAction.value = ''\n }\n\n onUnmounted(() => resetErrorsAndSuccess())\n\n watch(\n () => isSuccess.value,\n (newIsSuccess) => {\n if (newIsSuccess) {\n updateDisplayModal('')\n hideEmailForm()\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_AlertMessage = _resolveComponent(\"AlertMessage\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: \n displayModal.value === 'delete'\n ? 'admin.CONFIRM_USER_ACCOUNT_DELETION'\n : 'admin.CONFIRM_USER_PASSWORD_RESET'\n ,\n strongMessage: _unref(user).username,\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (\n displayModal.value === 'delete'\n ? deleteUserAccount(_unref(user).username)\n : resetUserPassword(_unref(user).username)\n )),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal('')))\n }, null, 8, [\"title\", \"message\", \"strongMessage\"]))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\n `admin.${\n currentAction.value === 'password-reset'\n ? 'PASSWORD_RESET'\n : 'USER_EMAIL_UPDATE'\n }_SUCCESSFUL`\n )), 1))\n : _createCommentVNode(\"\", true),\n (!_unref(user).is_active)\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 2,\n message: \"user.THIS_USER_ACCOUNT_IS_INACTIVE\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 3,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (displayUserEmailForm.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _cache[4] || (_cache[4] = _withModifiers(($event: any) => (updateUserEmail(_unref(user).username)), [\"prevent\"]))\n }, [\n _createElementVNode(\"label\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.CURRENT_EMAIL')) + \" \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"email\",\n type: \"email\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_unref(user).email) = $event)),\n disabled: \"\"\n }, null, 512), [\n [_vModelText, _unref(user).email]\n ])\n ]),\n _createElementVNode(\"label\", _hoisted_5, [\n _createTextVNode(_toDisplayString(_ctx.$t('admin.NEW_EMAIL')) + \"* \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"new-email\",\n type: \"email\",\n required: \"\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((newUserEmail).value = $event))\n }, null, 512), [\n [_vModelText, newUserEmail.value]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"button\", _hoisted_7, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 1),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(hideEmailForm, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_8)\n ])\n ], 34)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createElementVNode(\"dl\", null, [\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.REGISTRATION_DATE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(registrationDate)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.FIRST_NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).first_name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LAST_NAME')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).last_name), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.BIRTH_DATE')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(birthDate)), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.LOCATION')) + \":\", 1),\n _createElementVNode(\"dd\", null, _toDisplayString(_unref(user).location), 1),\n _createElementVNode(\"dt\", null, _toDisplayString(_ctx.$t('user.PROFILE.BIO')) + \":\", 1),\n _createElementVNode(\"dd\", _hoisted_10, _toDisplayString(_unref(user).bio), 1)\n ]),\n (_unref(fromAdmin))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n (_unref(authUser).username !== _unref(user).username)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"danger\",\n onClick: _cache[5] || (_cache[5] = _withModifiers(($event: any) => (updateDisplayModal('delete')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.DELETE_USER')), 1))\n : _createCommentVNode(\"\", true),\n (!_unref(user).is_active)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 1,\n onClick: _cache[6] || (_cache[6] = _withModifiers(($event: any) => (confirmUserAccount(_unref(user).username)), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.ACTIVATE_USER_ACCOUNT')), 1))\n : _createCommentVNode(\"\", true),\n (_unref(authUser).username !== _unref(user).username)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 2,\n onClick: _withModifiers(displayEmailForm, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('admin.UPDATE_USER_EMAIL')), 9, _hoisted_12))\n : _createCommentVNode(\"\", true),\n (\n _unref(authUser).username !== _unref(user).username &&\n _unref(appConfig).is_email_sending_enabled\n )\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 3,\n onClick: _cache[7] || (_cache[7] = _withModifiers(($event: any) => (updateDisplayModal('reset')), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('admin.RESET_USER_PASSWORD')), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", {\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.$router.go(-1)))\n }, _toDisplayString(_ctx.$t('buttons.BACK')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createElementVNode(\"button\", {\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.$router.push('/profile/edit')))\n }, _toDisplayString(_ctx.$t('user.PROFILE.EDIT')), 1),\n _createElementVNode(\"button\", {\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.$router.push('/')))\n }, _toDisplayString(_ctx.$t('common.HOME')), 1)\n ]))\n ]))\n ]))\n}\n}\n\n})","import script from \"./UserInfos.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserInfos.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserInfos.vue?vue&type=style&index=0&id=217519af&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-217519af\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, vModelText as _vModelText, withDirectives as _withDirectives, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-b3c885de\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"user-form\" }\nconst _hoisted_2 = {\n key: 2,\n class: \"info-box success-message\"\n}\nconst _hoisted_3 = { class: \"form-items\" }\nconst _hoisted_4 = [\"disabled\", \"placeholder\"]\nconst _hoisted_5 = {\n key: 1,\n class: \"form-info\"\n}\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_7 = [\"disabled\", \"placeholder\"]\nconst _hoisted_8 = {\n key: 3,\n class: \"form-info\"\n}\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-info-circle\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = { key: 3 }\nconst _hoisted_12 = { key: 0 }\nconst _hoisted_13 = { key: 4 }\nconst _hoisted_14 = { class: \"account\" }\nconst _hoisted_15 = { key: 5 }\n\nimport {\n ComputedRef,\n computed,\n onUnmounted,\n reactive,\n ref,\n toRefs,\n watch,\n withDefaults,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import PasswordInput from '@/components/Common/PasswordInput.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { ILoginRegisterFormData } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n action: string\n token?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserAuthForm',\n props: {\n action: null,\n token: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { action: string, token: string }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { action } = toRefs(props)\n const formData: ILoginRegisterFormData = reactive({\n username: '',\n email: '',\n password: '',\n })\n const buttonText: ComputedRef = computed(() =>\n getButtonText(props.action)\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const isRegistrationSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_REGISTRATION_SUCCESS]\n )\n const isSuccess: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_SUCCESS]\n )\n const appConfig: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const language: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n const registration_disabled: ComputedRef = computed(\n () =>\n props.action === 'register' && !appConfig.value.is_registration_enabled\n )\n const sendingEmailDisabled: ComputedRef = computed(\n () =>\n ['reset-request', 'account-confirmation-resend'].includes(props.action) &&\n !appConfig.value.is_email_sending_enabled\n )\n const formErrors = ref(false)\n\n function getButtonText(action: string): string {\n switch (action) {\n case 'reset-request':\n case 'reset':\n return 'buttons.SUBMIT'\n default:\n return `buttons.${props.action.toUpperCase()}`\n }\n }\n function invalidateForm() {\n formErrors.value = true\n }\n function updatePassword(password: string) {\n formData.password = password\n }\n function onSubmit(actionType: string) {\n switch (actionType) {\n case 'reset':\n if (!props.token) {\n return store.commit(\n ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES,\n 'user.INVALID_TOKEN'\n )\n }\n return store.dispatch(AUTH_USER_STORE.ACTIONS.RESET_USER_PASSWORD, {\n password: formData.password,\n token: props.token,\n })\n case 'reset-request':\n return store.dispatch(\n AUTH_USER_STORE.ACTIONS.SEND_PASSWORD_RESET_REQUEST,\n {\n email: formData.email,\n }\n )\n case 'account-confirmation-resend':\n return store.dispatch(\n AUTH_USER_STORE.ACTIONS.RESEND_ACCOUNT_CONFIRMATION_EMAIL,\n {\n email: formData.email,\n }\n )\n default:\n formData['language'] = language.value\n store.dispatch(AUTH_USER_STORE.ACTIONS.LOGIN_OR_REGISTER, {\n actionType,\n formData,\n redirectUrl: route.query.from,\n })\n }\n }\n function resetFormData() {\n formData.username = ''\n formData.email = ''\n formData.password = ''\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\n watch(\n () => route.path,\n async () => {\n store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)\n store.commit(AUTH_USER_STORE.MUTATIONS.UPDATE_IS_SUCCESS, false)\n store.commit(\n AUTH_USER_STORE.MUTATIONS.UPDATE_IS_REGISTRATION_SUCCESS,\n false\n )\n formErrors.value = false\n resetFormData()\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_AlertMessage = _resolveComponent(\"AlertMessage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n id: \"user-auth-form\",\n class: _normalizeClass(`${\n ['reset', 'reset-request'].includes(_unref(action)) ? _unref(action) : 'user-form'\n }`)\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"form-box\", {\n disabled: _unref(registration_disabled),\n }])\n }, [\n (_unref(registration_disabled))\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 0,\n message: \"user.REGISTER_DISABLED\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(sendingEmailDisabled))\n ? (_openBlock(), _createBlock(_component_AlertMessage, {\n key: 1,\n message: \"admin.EMAIL_SENDING_DISABLED\"\n }))\n : _createCommentVNode(\"\", true),\n (_unref(isSuccess) || _unref(isRegistrationSuccess))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\n `user.PROFILE.SUCCESSFUL_${\n _unref(isRegistrationSuccess)\n ? `REGISTRATION${\n _unref(appConfig).is_email_sending_enabled ? '_WITH_EMAIL' : ''\n }`\n : 'UPDATE'\n }`\n )), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (onSubmit(_unref(action))), [\"prevent\"]))\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(action) === 'register')\n ? _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n id: \"username\",\n disabled: _unref(registration_disabled),\n required: \"\",\n pattern: \"[a-zA-Z0-9_]+\",\n minlength: \"3\",\n maxlength: \"30\",\n onInvalid: invalidateForm,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((formData.username) = $event)),\n placeholder: _ctx.$t('user.USERNAME')\n }, null, 40, _hoisted_4)), [\n [_vModelText, formData.username]\n ])\n : _createCommentVNode(\"\", true),\n (_unref(action) === 'register')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _hoisted_6,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.USERNAME_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(action) !== 'reset')\n ? _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 2,\n id: \"email\",\n disabled: _unref(registration_disabled) || _unref(sendingEmailDisabled),\n required: \"\",\n onInvalid: invalidateForm,\n type: \"email\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((formData.email) = $event)),\n placeholder: _ctx.$t('user.EMAIL')\n }, null, 40, _hoisted_7)), [\n [_vModelText, formData.email]\n ])\n : _createCommentVNode(\"\", true),\n (\n [\n 'reset-request',\n 'register',\n 'account-confirmation-resend',\n ].includes(_unref(action))\n )\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _hoisted_9,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('user.EMAIL_INFO')), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (\n !['account-confirmation-resend', 'reset-request'].includes(\n _unref(action)\n )\n )\n ? (_openBlock(), _createBlock(PasswordInput, {\n key: 4,\n disabled: _unref(registration_disabled),\n required: true,\n placeholder: \n _unref(action) === 'reset'\n ? _ctx.$t('user.ENTER_PASSWORD')\n : _ctx.$t('user.PASSWORD')\n ,\n password: formData.password,\n checkStrength: ['reset', 'register'].includes(_unref(action)),\n onUpdatePassword: updatePassword,\n onPasswordError: invalidateForm\n }, null, 8, [\"disabled\", \"placeholder\", \"password\", \"checkStrength\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"button\", {\n type: \"submit\",\n disabled: _unref(registration_disabled) || _unref(sendingEmailDisabled)\n }, _toDisplayString(_ctx.$t(_unref(buttonText))), 9, _hoisted_10)\n ], 34),\n (_unref(action) === 'login')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/register\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.REGISTER')), 1)\n ]),\n _: 1\n }),\n (_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_12, \"-\"))\n : _createCommentVNode(\"\", true),\n (_unref(appConfig).is_email_sending_enabled)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n class: \"links\",\n to: \"/password-reset/request\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.PASSWORD_FORGOTTEN')), 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(action) === 'register')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('user.ALREADY_HAVE_ACCOUNT')), 1),\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/login\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.LOGIN')), 1)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (\n ['login', 'register'].includes(_unref(action)) &&\n _unref(appConfig).is_email_sending_enabled\n )\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/account-confirmation/resend\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.ACCOUNT_CONFIRMATION_NOT_RECEIVED')), 1)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 6,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ])\n ], 2))\n}\n}\n\n})","import script from \"./UserAuthForm.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserAuthForm.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserAuthForm.vue?vue&type=style&index=0&id=b3c885de&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b3c885de\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"user-picture\" }\nconst _hoisted_2 = [\"alt\", \"src\"]\nconst _hoisted_3 = {\n key: 1,\n class: \"no-picture\"\n}\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-user-circle-o\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_5 = [\n _hoisted_4\n]\n\nimport { computed } from 'vue'\n\n import { IUserProfile } from '@/types/user'\n import { getApiUrl } from '@/utils'\n\n interface Props {\n user: IUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserPicture',\n props: {\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IUserProfile\n }\n\n \n\n const authUserPictureUrl = computed(() =>\n props.user.picture\n ? `${getApiUrl()}users/${props.user.username}/picture?${Date.now()}`\n : ''\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(authUserPictureUrl) !== '')\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n class: \"profile-user-img\",\n alt: _ctx.$t('user.USER_PICTURE'),\n src: _unref(authUserPictureUrl)\n }, null, 8, _hoisted_2))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _hoisted_5))\n ]))\n}\n}\n\n})","import script from \"./UserPicture.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserPicture.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserPicture.vue?vue&type=style&index=0&id=26bea286&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","\n\n\n","import { render } from \"./NoWorkouts.vue?vue&type=template&id=4b4d15fb&scoped=true\"\nconst script = {}\n\nimport \"./NoWorkouts.vue?vue&type=style&index=0&id=4b4d15fb&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4b4d15fb\"]])\n\nexport default __exports__","var map = {\n\t\"./de/de.ts\": 9923,\n\t\"./en/en.ts\": 8757,\n\t\"./fr/fr.ts\": 6625,\n\t\"./nb/nb.ts\": 8891\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 4612;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + ({\"24\":\"reset\",\"193\":\"statistics\",\"328\":\"admin\",\"401\":\"workouts\",\"845\":\"profile\",\"881\":\"password\"}[chunkId] || chunkId) + \".\" + {\"24\":\"112f801c\",\"93\":\"02cf293c\",\"193\":\"04a17f2e\",\"243\":\"e551248f\",\"328\":\"9bc68088\",\"401\":\"71e8fef0\",\"431\":\"e5102e07\",\"633\":\"81a8ddc8\",\"845\":\"430ae7df\",\"858\":\"3f2a93f2\",\"881\":\"43430dfc\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/css/\" + {\"24\":\"reset\",\"193\":\"statistics\",\"328\":\"admin\",\"401\":\"workouts\",\"845\":\"profile\"}[chunkId] + \".\" + {\"24\":\"e2527ec6\",\"193\":\"40e24e75\",\"328\":\"73df498d\",\"401\":\"41709693\",\"845\":\"203e78e2\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"fittrackee_client:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"24\":1,\"193\":1,\"328\":1,\"401\":1,\"845\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkfittrackee_client\"] = self[\"webpackChunkfittrackee_client\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(4970); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["authApi","axios","baseURL","getApiUrl","interceptors","request","use","config","controller","AbortController","signal","requestKey","removeRequestIfPending","pendingRequests","authToken","store","AUTH_USER_STORE","auth","headers","Authorization","error","Promise","reject","response","message","Map","generateRequestKey","method","url","params","data","JSON","stringify","join","has","get","abort","delete","disabledLanguages","loadLocaleMessages","locales","require","messages","keys","forEach","key","matched","match","length","includes","locale","default","createI18n","legacy","fallbackLocale","globalInjection","ctx","normalize","_normalize","interpolate","_interpolate","list","_list","plural","_plural","about","AboutTranslations","admin","AdministrationTranslations","api","ApiTranslations","buttons","ButtonsTranslations","common","CommonTranslations","dashboard","DashboardTranslations","ErrorTranslations","oauth2","OAuth2Translations","sports","SportsTranslations","statistics","StatisticsTranslations","user","UserTranslations","workouts","WorkoutsTranslations","register","ready","console","log","registered","cached","updatefound","updated","offline","_withScopeId","n","_pushScopeId","_popScopeId","_hoisted_1","id","_hoisted_2","class","_hoisted_3","_hoisted_4","_createElementVNode","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","href","target","rel","_defineComponent","__name","props","version","adminContact","setup","__props","toRefs","_ctx","_cache","_component_router_link","_resolveComponent","_openBlock","_createElementBlock","_createTextVNode","_toDisplayString","_unref","_createVNode","to","_withCtx","$t","_","_createCommentVNode","__exports__","emits","emit","useStore","authUser","computed","getters","isAuthenticated","language","ROOT_STORE","isMenuOpen","ref","openMenu","value","closeMenu","updateLanguage","option","dispatch","toString","logout","_component_Dropdown","onClick","$event","$router","push","_normalizeClass","capitalize","_createBlock","UserPicture","username","availableLanguages","options","selected","onSelected","ErrorImg","innerHTML","appConfig","appLoading","hideScrollBar","displayScrollButton","updateHideScrollBar","isScrolledToBottom","element","getBoundingClientRect","top","window","innerHeight","bottom","scroll","onscroll","document","querySelector","scrollToTop","scrollTo","behavior","setTimeout","initLanguage","navigatorLanguage","navigator","split","localeFromLanguage","e","onBeforeMount","onMounted","_component_Loader","_component_router_view","_Fragment","NavBar","onMenuInteraction","NoConfig","Footer","admin_contact","name","charLimit","disabled","type","Boolean","input","text","updateText","event","watch","_withDirectives","maxLenght","onInput","_vModelText","distance","unitFrom","useImperialUnits","digits","displayUnit","speed","strong","unitTo","units","defaultTarget","convertedDistance","convertDistance","parseFloat","toFixed","route","useRoute","isOpen","dropdownOptions","map","toggleDropdown","updateSelected","path","_renderSlot","$slots","_renderList","index","label","Array","isArray","subMessage","xmlns","x","y","viewBox","style","d","render","cx","cy","r","sportLabel","color","title","sportColors","inject","_normalizeStyle","fill","CyclingSport","CyclingTransport","CyclingVirtual","Hiking","MountainBiking","MountainBikingElectric","Rowing","Running","SkiingAlpine","SkiingCrossCountry","Snowshoes","Trail","Walking","script","strongMessage","errorMessages","onUnmounted","commit","_component_i18n_t","_component_ErrorMessage","_component_Card","content","keypath","customComponents","AlertMessage","Card","CustomTextArea","Distance","Dropdown","ErrorMessage","Loader","Modal","SportImage","clickOutsideDirective","mounted","binding","clickOutsideEvent","contains","body","addEventListener","unmounted","removeEventListener","undefined","Chart","BarElement","LineElement","PointElement","Legend","Title","Tooltip","Filler","BarController","CategoryScale","LineController","LinearScale","ChartDataLabels","app","createApp","App","provide","i18n","router","VueFullscreen","directive","component","mount","for","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","edition","useRouter","appData","reactive","max_users","max_single_file_size","max_zip_file_size","gpx_limit_import","updateForm","Object","getFileSizeInMB","onCancel","onSubmit","formData","assign","_withModifiers","min","step","icon","appStatistics","uploadDirSize","getReadableFileSize","uploads_dir_size","StatCard","users","size","suffix","AppStatsCards","is_registration_enabled","is_email_sending_enabled","t","useI18n","translatedSports","translateSports","SPORTS_STORE","updateSportStatus","isActive","_component_SportImage","sport","translatedLabel","is_active","danger","has_workouts","query","q","searchUsers","resetFilter","onKeyup","_withKeys","placeholder","trim","orderByList","defaultOrderBy","getQuery","USERS_STORE","pagination","loadUsers","queryParams","reloadUsers","updateUser","queryParam","queryValue","page","newQuery","UsersNameFilter","onFilterOnUsername","FilterSelects","sort","sortList","order_by","onUpdateSelect","email","formatDate","created_at","timezone","date_format","nb_workouts","Pagination","tabs","selectedTab","getPath","tab","toLocaleLowerCase","checked","UserHeader","UserProfileTabs","appLanguage","userLanguage","languageLabels","fistDayOfWeek","weekm","display_ascent","getDateFormat","imperial_units","loading","userForm","password","new_password","isSuccess","emailUpdate","formErrors","displayModal","invalidateForm","updateUserForm","updatePassword","updateNewPassword","updateProfile","payload","updateDisplayModal","deleteAccount","async","isSuccessValue","_component_Modal","onConfirmAction","onCancelAction","errors","required","onInvalid","PasswordInput","onUpdatePassword","onPasswordError","checkStrength","first_name","last_name","birth_date","location","bio","registrationDate","format","Date","updateBio","_component_CustomTextArea","onUpdateValue","fileSizeLimit","pictureFile","deleteUserPicture","updatePictureFile","files","updateUserPicture","picture","accept","timeZones","tzList","focusItemIndex","matchTimezone","toLowerCase","onMouseOver","onUpdateTimezone","onEnter","preventDefault","firstElementChild","openDropdown","onKeydown","ref_key","filter","tz","focus","onMouseover","autofocus","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","weekStart","imperialUnits","ascentData","dateFormatOptions","availableDateFormatOptions","toUTCString","updateTZ","updateAscentDisplay","updateImperialUnit","updateWeekM","lang","_vModelSelect","TimezoneDropdown","dateFormat","start","unit","status","oauth2_scopes","admin_oauth2_scopes","appForm","client_name","client_uri","client_description","redirect_uri","scopes","filtered_scopes","getScopes","redirect_uris","scope","OAUTH2_STORE","updateDescription","updateScopes","indexOf","splice","admin_scopes","description","onChange","client","loadApp","client_id","authorizeApp","response_type","state","code_challenge","code_challenge_method","afterCreation","revocationSuccessful","messageToDisplay","idCopied","secretCopied","clipboardSupport","loadClient","updateMessageToDisplay","forDelete","confirmAction","clientId","copyIdToClipboard","clipboard","writeText","copySecretToClipboard","client_secret","newValue","issued_at","website","clients","getClientsQuery","clientsQuery","getNumberQueryValue","defaultPage","loadClients","isEdition","defaultColor","sports_list","sportPayload","sport_id","stopped_speed_threshold","updateSportInEdition","is_active_for_user","resetSportPayload","isSportInEdition","sportId","updateColor","updateThreshold","updateIsActive","updateSport","resetSport","newIsLoading","src","alt","BikePic","About","workout","_component_Distance","workoutId","workout_date","formatDistance","addSuffix","with_gpx","StaticMap","moving","min_alt","max_alt","ascent","descent","per_page","initWorkoutsCount","loadWorkouts","WORKOUTS_STORE","moreWorkoutsExist","previous_workout","defaultOrder","loadMoreWorkouts","WorkoutCard","s","NoWorkouts","displayHARecord","sportColor","records","record","record_type","height","width","colors","datasets","angleOffset","radius","circumference","Math","PI","calculateStrokeDashOffset","percentage","returnCircleTransformValue","rotation","entries","stroke","transform","isHidden","togglePane","stopPropagation","_directive_click_outside","_resolveDirective","DonutChart","CalendarWorkout","getSportLabel","getSportColor","chartDatasets","getDonutDatasets","sportIdColors","displayedWorkoutCount","slice","CalendarWorkoutsChart","currentDay","endDate","startDate","weekStartingMonday","rows","getDays","day","days","i","addDays","isWeekEnd","filterWorkouts","isSameDay","getDateWithTZ","reverse","row","isSameMonth","today","isToday","CalendarWorkouts","localeOptions","calendarDates","getCalendarStartAndEnd","calendarWorkouts","getCalendarWorkouts","apiParams","from","end","displayNextMonth","addMonths","displayPreviousMonth","subMonths","CalendarHeader","onDisplayNextMonth","onDisplayPreviousMonth","CalendarDays","CalendarCells","date","chartParams","duration","startOfMonth","endOfMonth","selectedSportIds","StatChart","formatRecord","distanceUnitFrom","distanceUnitTo","ascentUnitFrom","ascentUnitTo","Error","workout_id","sortRecords","a","b","recordALabel","recordBLabel","getRecordsBySports","reduce","sportList","find","sportTranslatedLabel","getTranslatedRecords","translatedRecords","recordsBySport","RecordsCard","userTotalDuration","total_duration","totalDuration","get_duration","totalDistance","total_distance","totalAscent","total_ascent","nb_sports","isSelected","updateDisplayColumn","UserStatsCards","UserMonthStats","UserRecords","UserCalendar","Timeline","NotFound","action","LoginOrRegisterForm","getTabFromPath","regex","tag","replace","toUpperCase","routes","Dashboard","LoginOrRegister","children","Profile","UserInfos","UserPreferences","UserSportPreferences","UserApps","UserAppsList","UserApp","AddUserApp","AuthorizeUserApp","ProfileEdition","UserInfosEdition","UserAccountEdition","UserPictureEdition","UserPreferencesEdition","displaySegment","AdminMenu","AdminApplication","AdminSports","fromAdmin","AdminUsers","AboutView","NotFoundView","createRouter","history","createWebHistory","process","pathsWithoutAuthentication","pathsWithoutChecks","beforeEach","next","then","fullPath","catch","AuthUserActions","AuthUserGetters","AuthUserMutations","OAuth2Actions","OAuth2Getters","OAuth2Mutations","RootActions","RootGetters","RootMutations","SportsActions","SportsGetters","SportsMutation","StatisticsActions","StatisticsGetters","StatisticsMutations","UsersActions","UsersGetters","UsersMutations","ACTIONS","GETTERS","MUTATIONS","STATS_STORE","WorkoutsActions","WorkoutsGetters","WorkoutsMutations","deleteUserAccount","context","res","handleError","actions","finally","resetPassword","reset_password","activate","new_email","removeAuthUserData","localStorage","removeItem","token","auth_token","setItem","refreshUser","actionType","redirectUrl","form","FormData","append","authUserProfile","isRegistrationSuccess","mutations","authUserState","get_client","set","redirect_url","oAuth2State","setAttribute","application","root","enUS","sportsState","filterType","statisticsState","updatedUser","usersState","getWorkouts","segmentUrl","segmentId","segments","chart_data","gpx","file","notes","calendar_workouts","timeline_workouts","user_workouts","workoutData","concat","chartData","workoutsState","modules","authUserModule","oAuthModule","sportsModule","statsModule","usersModule","workoutsModule","createStore","VuexStore","defaultPerPage","defaultValue","getStringQueryValue","availableValues","locationQuery","queryOptions","defaultSort","order","workoutsPayloadKeys","getRange","stop","rangePagination","pages","currentPage","getStartDate","startOfWeek","weekStartsOn","startOfYear","incrementDate","addYears","dateInUTC","utcToZonedTime","monthStart","monthEnd","endOfWeek","formatWorkoutDate","dateTime","timeFormat","workout_time","availableDateFormats","dateStringFormats","de","en","fr","dateString","withTime","inputDate","l","df","suffixes","fileSize","asText","floor","pow","msg","m","availableLocales","sortSports","sportATranslatedLabel","sportBTranslatedLabel","activeStatus","sportsToInclude","dateFormats","week","chart","month","year","datasetKeys","getDateKeys","getStatisticsChartDataset","isLineChart","dataset","backgroundColor","borderColor","spanGaps","getDatasets","displayedSports","average_speed","total_descent","convertStatsValue","datasetKey","convertStatsDistance","formatStats","displayedSportsId","apiStats","userDateFormat","dayKeys","labels","sportsId","displayedSport","getStatsDateParams","timeFrame","subYears","endOfYear","updateChartParams","backward","subWeeks","addWeeks","ft","system","multiplier","mi","km","factors","metric","imperial","borderWidth","yAxisID","elevation","distance_labels","duration_labels","coordinates","latitude","longitude","total","count","perPage","onSelectUpdate","nb","buttonText","timer","errorDisplayed","displayError","clearTimeout","cursor","has_prev","navigate","has_next","active","setZxcvbnOptions","zxcvbnCommonPackage","zxcvbnEnPackage","zxcvbnFrPackage","zxcvbnDePackage","zxcvbnLangPackages","zxcvbnPackage","graphs","adjacencyGraphs","dictionary","zxcvbnOptions","getPasswordStrength","strength","passwordScore","passwordStrength","passwordSuggestions","backgroundSize","calculatePasswordStrength","zxcvbnResult","zxcvbn","score","feedback","suggestions","newLanguageValue","newPassword","max","suggestion","showPassword","passwordValue","togglePassword","invalidPassword","minlength","_vModelDynamic","PasswordStrength","displayHover","imageUrl","backgroundImage","$props","$setup","$data","$options","_component_Chart","hideChartIfNoData","emptyStats","displayedData","args","updateDisplayData","fullStats","displayedSportIds","_component_BarChart","_mergeProps","barChartProps","formatDuration","totalSeconds","formatWithUnits","String","hours","padStart","minutes","seconds","formatTooltipValue","defineComponent","components","BarChart","getNumber","isNaN","getSum","getUnit","parse","responsive","maintainAspectRatio","animation","layout","padding","scales","stacked","grid","drawOnChartArea","ticks","maxTicksLimit","callback","afterFit","scale","plugins","datalabels","anchor","align","chartArea","display","formatter","dataIndex","datasetIndex","legend","tooltip","interaction","intersect","mode","position","tooltipItem","formattedValue","callbacks","parsed","footer","tooltipItems","sum","useBarChart","formattedStats","getStatistics","getApiParams","time","newParams","birthDate","displayUserEmailForm","newUserEmail","currentAction","resetUserPassword","confirmUserAccount","displayEmailForm","resetErrorsAndSuccess","email_to_confirm","hideEmailForm","updateUserEmail","newIsSuccess","_component_AlertMessage","go","getButtonText","registration_disabled","sendingEmailDisabled","resetFormData","pattern","maxlength","authUserPictureUrl","now","webpackContext","req","webpackContextResolve","__webpack_require__","o","code","resolve","module","exports","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","call","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","getter","__esModule","leafPrototypes","getProto","getPrototypeOf","obj","__proto__","this","ns","create","def","current","getOwnPropertyNames","definition","defineProperty","enumerable","f","chunkId","all","promises","u","miniCssF","g","globalThis","Function","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","done","needAttach","scripts","getElementsByTagName","getAttribute","createElement","charset","timeout","nc","onScriptComplete","prev","onerror","onload","doneFns","parentNode","removeChild","bind","head","appendChild","Symbol","toStringTag","p","createStylesheet","fullhref","linkTag","onLinkComplete","errorType","realHref","err","findStylesheet","existingLinkTags","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","promise","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/fittrackee/dist/static/js/profile.ff8ee2f9.js b/fittrackee/dist/static/js/profile.430ae7df.js similarity index 98% rename from fittrackee/dist/static/js/profile.ff8ee2f9.js rename to fittrackee/dist/static/js/profile.430ae7df.js index 67f590bd..380e1baa 100644 --- a/fittrackee/dist/static/js/profile.ff8ee2f9.js +++ b/fittrackee/dist/static/js/profile.430ae7df.js @@ -1,2 +1,2 @@ "use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[845],{4264:function(e,t,r){r.r(t),r.d(t,{default:function(){return m}});r(7658);var n=r(6252),a=r(2262),s=r(3577),u=r(2201),o=r(7167),i=r(5801),c=r(9917);const l={key:0,id:"account-confirmation",class:"center-card with-margin"},E={class:"error-message"};var _=(0,n.aZ)({__name:"AccountConfirmationView",setup(e){const t=(0,u.yj)(),r=(0,u.tv)(),_=(0,c.o)(),d=(0,n.Fl)((()=>_.getters[i.SY.GETTERS.ERROR_MESSAGES])),S=(0,n.Fl)((()=>t.query.token));function m(){S.value?_.dispatch(i.YN.ACTIONS.CONFIRM_ACCOUNT,{token:S.value}):r.push("/")}return(0,n.wF)((()=>m())),(0,n.Ah)((()=>_.commit(i.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(e,t)=>{const r=(0,n.up)("router-link");return(0,a.SU)(d)?((0,n.wg)(),(0,n.iD)("div",l,[(0,n.Wm)(o.Z),(0,n._)("p",E,[(0,n._)("span",null,(0,s.zw)(e.$t("error.SOMETHING_WRONG"))+".",1),(0,n.Wm)(r,{class:"links",to:"/account-confirmation/resend"},{default:(0,n.w5)((()=>[(0,n.Uk)((0,s.zw)(e.$t("buttons.ACCOUNT-CONFIRMATION-RESEND"))+"? ",1)])),_:1})])])):(0,n.kq)("",!0)}}}),d=r(3744);const S=(0,d.Z)(_,[["__scopeId","data-v-785df978"]]);var m=S},8160:function(e,t,r){r.r(t),r.d(t,{default:function(){return m}});r(7658);var n=r(6252),a=r(2262),s=r(3577),u=r(2201),o=r(7167),i=r(5801),c=r(9917);const l={key:0,id:"email-update",class:"center-card with-margin"},E={class:"error-message"};var _=(0,n.aZ)({__name:"EmailUpdateView",setup(e){const t=(0,u.yj)(),r=(0,u.tv)(),_=(0,c.o)(),d=(0,n.Fl)((()=>_.getters[i.YN.GETTERS.AUTH_USER_PROFILE])),S=(0,n.Fl)((()=>_.getters[i.YN.GETTERS.IS_AUTHENTICATED])),m=(0,n.Fl)((()=>_.getters[i.SY.GETTERS.ERROR_MESSAGES])),p=(0,n.Fl)((()=>t.query.token));function R(){p.value?_.dispatch(i.YN.ACTIONS.CONFIRM_EMAIL,{token:p.value,refreshUser:S.value}):r.push("/")}return(0,n.wF)((()=>R())),(0,n.Ah)((()=>_.commit(i.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(0,n.YP)((()=>m.value),(e=>{d.value.username&&e&&r.push("/")})),(e,t)=>{const r=(0,n.up)("router-link"),u=(0,n.up)("i18n-t");return(0,a.SU)(m)&&!(0,a.SU)(d).username?((0,n.wg)(),(0,n.iD)("div",l,[(0,n.Wm)(o.Z),(0,n._)("p",E,[(0,n._)("span",null,(0,s.zw)(e.$t("error.SOMETHING_WRONG"))+".",1),(0,n._)("span",null,[(0,n.Wm)(u,{keypath:"user.PROFILE.ERRORED_EMAIL_UPDATE"},{default:(0,n.w5)((()=>[(0,n.Wm)(r,{to:"/login"},{default:(0,n.w5)((()=>[(0,n.Uk)((0,s.zw)(e.$t("user.LOG_IN")),1)])),_:1})])),_:1})])])])):(0,n.kq)("",!0)}}}),d=r(3744);const S=(0,d.Z)(_,[["__scopeId","data-v-8c2ec9ce"]]);var m=S},6266:function(e,t,r){r.r(t),r.d(t,{default:function(){return d}});var n=r(6252),a=r(2262),s=r(5801),u=r(9917);const o=e=>((0,n.dD)("data-v-05463732"),e=e(),(0,n.Cn)(),e),i={key:0,id:"profile",class:"container view"},c=o((()=>(0,n._)("div",{id:"bottom"},null,-1)));var l=(0,n.aZ)({__name:"ProfileView",setup(e){const t=(0,u.o)(),r=(0,n.Fl)((()=>t.getters[s.YN.GETTERS.AUTH_USER_PROFILE]));return(e,t)=>{const s=(0,n.up)("router-view");return(0,a.SU)(r).username?((0,n.wg)(),(0,n.iD)("div",i,[(0,n.Wm)(s,{user:(0,a.SU)(r)},null,8,["user"]),c])):(0,n.kq)("",!0)}}}),E=r(3744);const _=(0,E.Z)(l,[["__scopeId","data-v-05463732"]]);var d=_},9453:function(e,t,r){r.r(t),r.d(t,{default:function(){return m}});var n=r(6252),a=r(2262),s=r(2201),u=r(2179),o=r(1585),i=r(5801),c=r(9917);const l={key:0,id:"user",class:"view"},E={class:"box"};var _=(0,n.aZ)({__name:"UserView",props:{fromAdmin:{type:Boolean}},setup(e){const t=e,{fromAdmin:r}=(0,a.BK)(t),_=(0,s.yj)(),d=(0,c.o)(),S=(0,n.Fl)((()=>d.getters[i.RT.GETTERS.USER]));return(0,n.wF)((()=>{_.params.username&&"string"===typeof _.params.username&&d.dispatch(i.RT.ACTIONS.GET_USER,_.params.username)})),(0,n.Jd)((()=>{d.dispatch(i.RT.ACTIONS.EMPTY_USER)})),(e,t)=>(0,a.SU)(S).username?((0,n.wg)(),(0,n.iD)("div",l,[(0,n.Wm)(u.Z,{user:(0,a.SU)(S)},null,8,["user"]),(0,n._)("div",E,[(0,n.Wm)(o.Z,{user:(0,a.SU)(S),"from-admin":(0,a.SU)(r)},null,8,["user","from-admin"])])])):(0,n.kq)("",!0)}}),d=r(3744);const S=(0,d.Z)(_,[["__scopeId","data-v-af7007f4"]]);var m=S}}]); -//# sourceMappingURL=profile.ff8ee2f9.js.map \ No newline at end of file +//# sourceMappingURL=profile.430ae7df.js.map \ No newline at end of file diff --git a/fittrackee/dist/static/js/profile.ff8ee2f9.js.map b/fittrackee/dist/static/js/profile.430ae7df.js.map similarity index 99% rename from fittrackee/dist/static/js/profile.ff8ee2f9.js.map rename to fittrackee/dist/static/js/profile.430ae7df.js.map index 97b1e846..6e39c452 100644 --- a/fittrackee/dist/static/js/profile.ff8ee2f9.js.map +++ b/fittrackee/dist/static/js/profile.430ae7df.js.map @@ -1 +1 @@ -{"version":3,"file":"static/js/profile.ff8ee2f9.js","mappings":"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","sources":["webpack://fittrackee_client/./src/views/user/AccountConfirmationView.vue?226f","webpack://fittrackee_client/./src/views/user/AccountConfirmationView.vue","webpack://fittrackee_client/./src/views/user/EmailUpdateView.vue?502c","webpack://fittrackee_client/./src/views/user/EmailUpdateView.vue","webpack://fittrackee_client/./src/views/user/ProfileView.vue?f4e9","webpack://fittrackee_client/./src/views/user/ProfileView.vue","webpack://fittrackee_client/./src/views/user/UserView.vue?8f92","webpack://fittrackee_client/./src/views/user/UserView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-785df978\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"account-confirmation\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = { class: \"error-message\" }\n\nimport { computed, ComputedRef, onBeforeMount, onUnmounted } from 'vue'\n import { useRoute, LocationQueryValue, useRouter } from 'vue-router'\n\n import ErrorImg from '@/components/Common/Images/ErrorImg.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AccountConfirmationView',\n setup(__props) {\n\n const route = useRoute()\n const router = useRouter()\n const store = useStore()\n\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const token: ComputedRef =\n computed(() => route.query.token)\n\n onBeforeMount(() => confirmAccount())\n\n function confirmAccount() {\n if (token.value) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.CONFIRM_ACCOUNT, {\n token: token.value,\n })\n } else {\n router.push('/')\n }\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_unref(errorMessages))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(ErrorImg),\n _createElementVNode(\"p\", _hoisted_2, [\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('error.SOMETHING_WRONG')) + \".\", 1),\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/account-confirmation/resend\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('buttons.ACCOUNT-CONFIRMATION-RESEND')) + \"? \", 1)\n ]),\n _: 1\n })\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./AccountConfirmationView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AccountConfirmationView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AccountConfirmationView.vue?vue&type=style&index=0&id=785df978&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-785df978\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8c2ec9ce\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"email-update\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = { class: \"error-message\" }\n\nimport { computed, ComputedRef, onBeforeMount, onUnmounted, watch } from 'vue'\n import { useRoute, LocationQueryValue, useRouter } from 'vue-router'\n\n import ErrorImg from '@/components/Common/Images/ErrorImg.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'EmailUpdateView',\n setup(__props) {\n\n const route = useRoute()\n const router = useRouter()\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const isAuthenticated: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const token: ComputedRef =\n computed(() => route.query.token)\n\n onBeforeMount(() => confirmEmail())\n\n function confirmEmail() {\n if (token.value) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.CONFIRM_EMAIL, {\n token: token.value,\n refreshUser: isAuthenticated.value,\n })\n } else {\n router.push('/')\n }\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\n watch(\n () => errorMessages.value,\n (newValue) => {\n if (authUser.value.username && newValue) {\n router.push('/')\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n\n return (_unref(errorMessages) && !_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(ErrorImg),\n _createElementVNode(\"p\", _hoisted_2, [\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('error.SOMETHING_WRONG')) + \".\", 1),\n _createElementVNode(\"span\", null, [\n _createVNode(_component_i18n_t, { keypath: \"user.PROFILE.ERRORED_EMAIL_UPDATE\" }, {\n default: _withCtx(() => [\n _createVNode(_component_router_link, { to: \"/login\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.LOG_IN')), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./EmailUpdateView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./EmailUpdateView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./EmailUpdateView.vue?vue&type=style&index=0&id=8c2ec9ce&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8c2ec9ce\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-05463732\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"profile\",\n class: \"container view\"\n}\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\n\nimport { ComputedRef, computed } from 'vue'\n\n import { AUTH_USER_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'ProfileView',\n setup(__props) {\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_router_view, { user: _unref(authUser) }, null, 8, [\"user\"]),\n _hoisted_2\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./ProfileView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ProfileView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./ProfileView.vue?vue&type=style&index=0&id=05463732&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-05463732\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-af7007f4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"user\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"box\" }\n\nimport {\n ComputedRef,\n computed,\n onBeforeMount,\n onBeforeUnmount,\n toRefs,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import UserHeader from '@/components/User/ProfileDisplay/UserHeader.vue'\n import UserInfos from '@/components/User/ProfileDisplay/UserInfos.vue'\n import { USERS_STORE } from '@/store/constants'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n fromAdmin: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserView',\n props: {\n fromAdmin: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n fromAdmin: boolean\n }\n\n \n const { fromAdmin } = toRefs(props)\n\n const route = useRoute()\n const store = useStore()\n\n const user: ComputedRef = computed(\n () => store.getters[USERS_STORE.GETTERS.USER]\n )\n\n onBeforeMount(() => {\n if (route.params.username && typeof route.params.username === 'string') {\n store.dispatch(USERS_STORE.ACTIONS.GET_USER, route.params.username)\n }\n })\n\n onBeforeUnmount(() => {\n store.dispatch(USERS_STORE.ACTIONS.EMPTY_USER)\n })\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(user).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(UserHeader, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(UserInfos, {\n user: _unref(user),\n \"from-admin\": _unref(fromAdmin)\n }, null, 8, [\"user\", \"from-admin\"])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./UserView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserView.vue?vue&type=style&index=0&id=af7007f4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-af7007f4\"]])\n\nexport default __exports__"],"names":["_hoisted_1","key","id","class","_hoisted_2","_defineComponent","__name","setup","__props","route","useRoute","router","useRouter","store","useStore","errorMessages","computed","getters","ROOT_STORE","token","query","confirmAccount","value","dispatch","AUTH_USER_STORE","push","onBeforeMount","onUnmounted","commit","_ctx","_cache","_component_router_link","_resolveComponent","_unref","_openBlock","_createElementBlock","_createVNode","ErrorImg","_createElementVNode","_toDisplayString","$t","to","default","_withCtx","_createTextVNode","_","_createCommentVNode","__exports__","authUser","isAuthenticated","confirmEmail","refreshUser","watch","newValue","username","_component_i18n_t","keypath","_withScopeId","n","_pushScopeId","_popScopeId","_component_router_view","user","props","fromAdmin","type","Boolean","toRefs","USERS_STORE","params","onBeforeUnmount","UserHeader","UserInfos"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/profile.430ae7df.js","mappings":"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","sources":["webpack://fittrackee_client/./src/views/user/AccountConfirmationView.vue?226f","webpack://fittrackee_client/./src/views/user/AccountConfirmationView.vue","webpack://fittrackee_client/./src/views/user/EmailUpdateView.vue?502c","webpack://fittrackee_client/./src/views/user/EmailUpdateView.vue","webpack://fittrackee_client/./src/views/user/ProfileView.vue?f4e9","webpack://fittrackee_client/./src/views/user/ProfileView.vue","webpack://fittrackee_client/./src/views/user/UserView.vue?8f92","webpack://fittrackee_client/./src/views/user/UserView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-785df978\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"account-confirmation\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = { class: \"error-message\" }\n\nimport { computed, ComputedRef, onBeforeMount, onUnmounted } from 'vue'\n import { useRoute, LocationQueryValue, useRouter } from 'vue-router'\n\n import ErrorImg from '@/components/Common/Images/ErrorImg.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AccountConfirmationView',\n setup(__props) {\n\n const route = useRoute()\n const router = useRouter()\n const store = useStore()\n\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const token: ComputedRef =\n computed(() => route.query.token)\n\n onBeforeMount(() => confirmAccount())\n\n function confirmAccount() {\n if (token.value) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.CONFIRM_ACCOUNT, {\n token: token.value,\n })\n } else {\n router.push('/')\n }\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_unref(errorMessages))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(ErrorImg),\n _createElementVNode(\"p\", _hoisted_2, [\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('error.SOMETHING_WRONG')) + \".\", 1),\n _createVNode(_component_router_link, {\n class: \"links\",\n to: \"/account-confirmation/resend\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('buttons.ACCOUNT-CONFIRMATION-RESEND')) + \"? \", 1)\n ]),\n _: 1\n })\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./AccountConfirmationView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AccountConfirmationView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AccountConfirmationView.vue?vue&type=style&index=0&id=785df978&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-785df978\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8c2ec9ce\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"email-update\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = { class: \"error-message\" }\n\nimport { computed, ComputedRef, onBeforeMount, onUnmounted, watch } from 'vue'\n import { useRoute, LocationQueryValue, useRouter } from 'vue-router'\n\n import ErrorImg from '@/components/Common/Images/ErrorImg.vue'\n import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'EmailUpdateView',\n setup(__props) {\n\n const route = useRoute()\n const router = useRouter()\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const isAuthenticated: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.IS_AUTHENTICATED]\n )\n const errorMessages: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const token: ComputedRef =\n computed(() => route.query.token)\n\n onBeforeMount(() => confirmEmail())\n\n function confirmEmail() {\n if (token.value) {\n store.dispatch(AUTH_USER_STORE.ACTIONS.CONFIRM_EMAIL, {\n token: token.value,\n refreshUser: isAuthenticated.value,\n })\n } else {\n router.push('/')\n }\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\n watch(\n () => errorMessages.value,\n (newValue) => {\n if (authUser.value.username && newValue) {\n router.push('/')\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n\n return (_unref(errorMessages) && !_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(ErrorImg),\n _createElementVNode(\"p\", _hoisted_2, [\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('error.SOMETHING_WRONG')) + \".\", 1),\n _createElementVNode(\"span\", null, [\n _createVNode(_component_i18n_t, { keypath: \"user.PROFILE.ERRORED_EMAIL_UPDATE\" }, {\n default: _withCtx(() => [\n _createVNode(_component_router_link, { to: \"/login\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.LOG_IN')), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./EmailUpdateView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./EmailUpdateView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./EmailUpdateView.vue?vue&type=style&index=0&id=8c2ec9ce&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8c2ec9ce\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-05463732\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"profile\",\n class: \"container view\"\n}\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\n\nimport { ComputedRef, computed } from 'vue'\n\n import { AUTH_USER_STORE } from '@/store/constants'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'ProfileView',\n setup(__props) {\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_router_view, { user: _unref(authUser) }, null, 8, [\"user\"]),\n _hoisted_2\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./ProfileView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ProfileView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./ProfileView.vue?vue&type=style&index=0&id=05463732&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-05463732\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-af7007f4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"user\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"box\" }\n\nimport {\n ComputedRef,\n computed,\n onBeforeMount,\n onBeforeUnmount,\n toRefs,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import UserHeader from '@/components/User/ProfileDisplay/UserHeader.vue'\n import UserInfos from '@/components/User/ProfileDisplay/UserInfos.vue'\n import { USERS_STORE } from '@/store/constants'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n fromAdmin: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserView',\n props: {\n fromAdmin: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n fromAdmin: boolean\n }\n\n \n const { fromAdmin } = toRefs(props)\n\n const route = useRoute()\n const store = useStore()\n\n const user: ComputedRef = computed(\n () => store.getters[USERS_STORE.GETTERS.USER]\n )\n\n onBeforeMount(() => {\n if (route.params.username && typeof route.params.username === 'string') {\n store.dispatch(USERS_STORE.ACTIONS.GET_USER, route.params.username)\n }\n })\n\n onBeforeUnmount(() => {\n store.dispatch(USERS_STORE.ACTIONS.EMPTY_USER)\n })\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(user).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(UserHeader, { user: _unref(user) }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(UserInfos, {\n user: _unref(user),\n \"from-admin\": _unref(fromAdmin)\n }, null, 8, [\"user\", \"from-admin\"])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./UserView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./UserView.vue?vue&type=style&index=0&id=af7007f4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-af7007f4\"]])\n\nexport default __exports__"],"names":["_hoisted_1","key","id","class","_hoisted_2","_defineComponent","__name","setup","__props","route","useRoute","router","useRouter","store","useStore","errorMessages","computed","getters","ROOT_STORE","token","query","confirmAccount","value","dispatch","AUTH_USER_STORE","push","onBeforeMount","onUnmounted","commit","_ctx","_cache","_component_router_link","_resolveComponent","_unref","_openBlock","_createElementBlock","_createVNode","ErrorImg","_createElementVNode","_toDisplayString","$t","to","default","_withCtx","_createTextVNode","_","_createCommentVNode","__exports__","authUser","isAuthenticated","confirmEmail","refreshUser","watch","newValue","username","_component_i18n_t","keypath","_withScopeId","n","_pushScopeId","_popScopeId","_component_router_view","user","props","fromAdmin","type","Boolean","toRefs","USERS_STORE","params","onBeforeUnmount","UserHeader","UserInfos"],"sourceRoot":""} \ No newline at end of file diff --git a/fittrackee/dist/static/js/reset.f6540a23.js b/fittrackee/dist/static/js/reset.112f801c.js similarity index 99% rename from fittrackee/dist/static/js/reset.f6540a23.js rename to fittrackee/dist/static/js/reset.112f801c.js index 15b9fbb4..dc7c1f87 100644 --- a/fittrackee/dist/static/js/reset.f6540a23.js +++ b/fittrackee/dist/static/js/reset.112f801c.js @@ -1,2 +1,2 @@ "use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[24],{3228:function(t,c,n){n.d(c,{Z:function(){return d}});var a=n(6252);const e={version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 345.834 345.834",style:{"enable-background":"new 0 0 345.834 345.834"},"xml:space":"preserve"},s=(0,a._)("g",null,[(0,a._)("path",{d:"M339.798,260.429c0.13-0.026,0.257-0.061,0.385-0.094c0.109-0.028,0.219-0.051,0.326-0.084\n\t\tc0.125-0.038,0.247-0.085,0.369-0.129c0.108-0.039,0.217-0.074,0.324-0.119c0.115-0.048,0.226-0.104,0.338-0.157\n\t\tc0.109-0.052,0.22-0.1,0.327-0.158c0.107-0.057,0.208-0.122,0.312-0.184c0.107-0.064,0.215-0.124,0.319-0.194\n\t\tc0.111-0.074,0.214-0.156,0.321-0.236c0.09-0.067,0.182-0.13,0.27-0.202c0.162-0.133,0.316-0.275,0.466-0.421\n\t\tc0.027-0.026,0.056-0.048,0.083-0.075c0.028-0.028,0.052-0.059,0.079-0.088c0.144-0.148,0.284-0.3,0.416-0.46\n\t\tc0.077-0.094,0.144-0.192,0.216-0.289c0.074-0.1,0.152-0.197,0.221-0.301c0.074-0.111,0.139-0.226,0.207-0.34\n\t\tc0.057-0.096,0.118-0.19,0.171-0.289c0.062-0.115,0.114-0.234,0.169-0.351c0.049-0.104,0.101-0.207,0.146-0.314\n\t\tc0.048-0.115,0.086-0.232,0.128-0.349c0.041-0.114,0.085-0.227,0.12-0.343c0.036-0.118,0.062-0.238,0.092-0.358\n\t\tc0.029-0.118,0.063-0.234,0.086-0.353c0.028-0.141,0.045-0.283,0.065-0.425c0.014-0.1,0.033-0.199,0.043-0.3\n\t\tc0.025-0.249,0.038-0.498,0.038-0.748V92.76c0-4.143-3.357-7.5-7.5-7.5h-236.25c-0.066,0-0.13,0.008-0.196,0.01\n\t\tc-0.143,0.004-0.285,0.01-0.427,0.022c-0.113,0.009-0.225,0.022-0.337,0.037c-0.128,0.016-0.255,0.035-0.382,0.058\n\t\tc-0.119,0.021-0.237,0.046-0.354,0.073c-0.119,0.028-0.238,0.058-0.356,0.092c-0.117,0.033-0.232,0.069-0.346,0.107\n\t\tc-0.117,0.04-0.234,0.082-0.349,0.128c-0.109,0.043-0.216,0.087-0.322,0.135c-0.118,0.053-0.235,0.11-0.351,0.169\n\t\tc-0.099,0.051-0.196,0.103-0.292,0.158c-0.116,0.066-0.23,0.136-0.343,0.208c-0.093,0.06-0.184,0.122-0.274,0.185\n\t\tc-0.106,0.075-0.211,0.153-0.314,0.235c-0.094,0.075-0.186,0.152-0.277,0.231c-0.09,0.079-0.179,0.158-0.266,0.242\n\t\tc-0.099,0.095-0.194,0.194-0.288,0.294c-0.047,0.05-0.097,0.094-0.142,0.145c-0.027,0.03-0.048,0.063-0.074,0.093\n\t\tc-0.094,0.109-0.182,0.223-0.27,0.338c-0.064,0.084-0.13,0.168-0.19,0.254c-0.078,0.112-0.15,0.227-0.222,0.343\n\t\tc-0.059,0.095-0.12,0.189-0.174,0.286c-0.063,0.112-0.118,0.227-0.175,0.342c-0.052,0.105-0.106,0.21-0.153,0.317\n\t\tc-0.049,0.113-0.092,0.23-0.135,0.345c-0.043,0.113-0.087,0.225-0.124,0.339c-0.037,0.115-0.067,0.232-0.099,0.349\n\t\tc-0.032,0.12-0.066,0.239-0.093,0.36c-0.025,0.113-0.042,0.228-0.062,0.342c-0.022,0.13-0.044,0.26-0.06,0.39\n\t\tc-0.013,0.108-0.019,0.218-0.027,0.328c-0.01,0.14-0.019,0.28-0.021,0.421c-0.001,0.041-0.006,0.081-0.006,0.122v46.252\n\t\tc0,4.143,3.357,7.5,7.5,7.5s7.5-3.357,7.5-7.5v-29.595l66.681,59.037c-0.348,0.245-0.683,0.516-0.995,0.827l-65.687,65.687v-49.288\n\t\tc0-4.143-3.357-7.5-7.5-7.5s-7.5,3.357-7.5,7.5v9.164h-38.75c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h38.75v43.231\n\t\tc0,4.143,3.357,7.5,7.5,7.5h236.25c0.247,0,0.494-0.013,0.74-0.037c0.115-0.011,0.226-0.033,0.339-0.049\n\t\tC339.542,260.469,339.67,260.454,339.798,260.429z M330.834,234.967l-65.688-65.687c-0.042-0.042-0.087-0.077-0.13-0.117\n\t\tl49.383-41.897c3.158-2.68,3.546-7.412,0.866-10.571c-2.678-3.157-7.41-3.547-10.571-0.866l-84.381,71.59l-98.444-87.158h208.965\n\t\tV234.967z M185.878,179.888c0.535-0.535,0.969-1.131,1.308-1.765l28.051,24.835c1.418,1.255,3.194,1.885,4.972,1.885\n\t\tc1.726,0,3.451-0.593,4.853-1.781l28.587-24.254c0.26,0.38,0.553,0.743,0.89,1.08l65.687,65.687H120.191L185.878,179.888z"}),(0,a._)("path",{d:"M7.5,170.676h126.667c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5H7.5c-4.143,0-7.5,3.357-7.5,7.5\n\t\tS3.357,170.676,7.5,170.676z"}),(0,a._)("path",{d:"M20.625,129.345H77.5c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5H20.625c-4.143,0-7.5,3.357-7.5,7.5\n\t\tS16.482,129.345,20.625,129.345z"}),(0,a._)("path",{d:"M62.5,226.51h-55c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h55c4.143,0,7.5-3.357,7.5-7.5S66.643,226.51,62.5,226.51z"})],-1),o=[s];function r(t,c,n,s,r,i){return(0,a.wg)(),(0,a.iD)("svg",e,o)}var i={name:"EmailSent"},l=n(3744);const u=(0,l.Z)(i,[["render",r]]);var d=u},5639:function(t,c,n){n.r(c),n.d(c,{default:function(){return S}});var a=n(6252),e=n(2262),s=n(3577),o=n(3228),r=n(2411);const i={id:"account-confirmation-email",class:"center-card with-margin"},l={key:0,class:"email-sent"},u={class:"email-sent-message"},d={key:1};var v=(0,a.aZ)({__name:"AccountConfirmationEmail",props:{action:null},setup(t){const c=t,{action:n}=(0,e.BK)(c);return(t,c)=>{const v=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",i,["email-sent"===(0,e.SU)(n)?((0,a.wg)(),(0,a.iD)("div",l,[(0,a.Wm)(o.Z),(0,a._)("div",u,(0,s.zw)(t.$t("user.ACCOUNT_CONFIRMATION_SENT")),1)])):((0,a.wg)(),(0,a.iD)("div",d,[(0,a.Wm)(v,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(t.$t("user.RESENT_ACCOUNT_CONFIRMATION")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(r.Z,{action:(0,e.SU)(n)},null,8,["action"])])),_:1})]))])}}}),p=n(3744);const w=(0,p.Z)(v,[["__scopeId","data-v-66aca424"]]);var g=w;const _={id:"account-confirmation",class:"view"},h={class:"container"};var m=(0,a.aZ)({__name:"AccountConfirmationResendView",props:{action:null},setup(t){const c=t,{action:n}=(0,e.BK)(c);return(t,c)=>((0,a.wg)(),(0,a.iD)("div",_,[(0,a._)("div",h,[(0,a.Wm)(g,{action:(0,e.SU)(n)},null,8,["action"])])]))}});const k=(0,p.Z)(m,[["__scopeId","data-v-35aad344"]]);var S=k},1627:function(t,c,n){n.r(c),n.d(c,{default:function(){return A}});n(7658);var a=n(6252),e=n(2262),s=n(2201),o=n(3577),r=n(3228);const i={version:"1.1",id:"Layer_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 512.001 512.001",style:{"enable-background":"new 0 0 512.001 512.001"},"xml:space":"preserve"},l=(0,a.uE)('',7),u=[l];function d(t,c,n,e,s,o){return(0,a.wg)(),(0,a.iD)("svg",i,u)}var v={name:"Password"},p=n(3744);const w=(0,p.Z)(v,[["render",d]]);var g=w;const _={id:"password-action-done",class:"center-card with-margin"},h={class:"password-message"},m={key:0};var k=(0,a.aZ)({__name:"PasswordActionDone",props:{action:null},setup(t){const c=t,{action:n}=(0,e.BK)(c);return(t,c)=>{const s=(0,a.up)("router-link"),i=(0,a.up)("i18n-t");return(0,a.wg)(),(0,a.iD)("div",_,["request-sent"===(0,e.SU)(n)?((0,a.wg)(),(0,a.j4)(r.Z,{key:0})):((0,a.wg)(),(0,a.j4)(g,{key:1})),(0,a._)("div",h,["request-sent"===(0,e.SU)(n)?((0,a.wg)(),(0,a.iD)("span",m,(0,o.zw)(t.$t("user.PASSWORD_SENT_EMAIL_TEXT")),1)):((0,a.wg)(),(0,a.j4)(i,{key:1,keypath:"user.PASSWORD_UPDATED"},{default:(0,a.w5)((()=>[(0,a.Wm)(s,{to:"/login"},{default:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.$t("common.HERE")),1)])),_:1})])),_:1}))])])}}});const S=(0,p.Z)(k,[["__scopeId","data-v-eac78356"]]);var C=S,f=n(2411);const x={id:"password-reset-request",class:"center-card with-margin"};var z=(0,a.aZ)({__name:"PasswordResetForm",props:{action:null,token:{default:""}},setup(t){const c=t,{action:n,token:s}=(0,e.BK)(c);return(t,c)=>{const r=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",x,[(0,a.Wm)(r,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,o.zw)(t.$t("user.RESET_PASSWORD")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(f.Z,{action:(0,e.SU)(n),token:(0,e.SU)(s)},null,8,["action","token"])])),_:1})])}}});const U=(0,p.Z)(z,[["__scopeId","data-v-68377e44"]]);var Z=U;const y={id:"password-reset",class:"view"},D={class:"container"};var M=(0,a.aZ)({__name:"PasswordResetView",props:{action:null},setup(t){const c=t,n=(0,s.yj)(),o=(0,s.tv)(),{action:r}=(0,e.BK)(c),i=(0,a.Fl)((()=>n.query.token));return(0,a.wF)((()=>{"reset"!==c.action||i.value||o.push("/")})),(t,c)=>((0,a.wg)(),(0,a.iD)("div",y,[(0,a._)("div",D,[(0,e.SU)(r).startsWith("reset")?((0,a.wg)(),(0,a.j4)(Z,{key:0,action:(0,e.SU)(r),token:(0,e.SU)(i)},null,8,["action","token"])):((0,a.wg)(),(0,a.j4)(C,{key:1,action:(0,e.SU)(r)},null,8,["action"]))])]))}});const E=(0,p.Z)(M,[["__scopeId","data-v-a1cc55c4"]]);var A=E}}]); -//# sourceMappingURL=reset.f6540a23.js.map \ No newline at end of file +//# sourceMappingURL=reset.112f801c.js.map \ No newline at end of file diff --git a/fittrackee/dist/static/js/reset.f6540a23.js.map b/fittrackee/dist/static/js/reset.112f801c.js.map similarity index 99% rename from fittrackee/dist/static/js/reset.f6540a23.js.map rename to fittrackee/dist/static/js/reset.112f801c.js.map index 35fb8fea..dec369d7 100644 --- a/fittrackee/dist/static/js/reset.f6540a23.js.map +++ b/fittrackee/dist/static/js/reset.112f801c.js.map @@ -1 +1 @@ -{"version":3,"file":"static/js/reset.f6540a23.js","mappings":"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","sources":["webpack://fittrackee_client/./src/components/Common/Images/EmailSent.vue","webpack://fittrackee_client/./src/components/Common/Images/EmailSent.vue?2d84","webpack://fittrackee_client/./src/components/User/AccountConfirmationEmail.vue?37ef","webpack://fittrackee_client/./src/components/User/AccountConfirmationEmail.vue","webpack://fittrackee_client/./src/views/user/AccountConfirmationResendView.vue?3fd8","webpack://fittrackee_client/./src/views/user/AccountConfirmationResendView.vue","webpack://fittrackee_client/./src/components/Common/Images/Password.vue","webpack://fittrackee_client/./src/components/Common/Images/Password.vue?2ae3","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordActionDone.vue?977e","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordActionDone.vue","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordResetForm.vue?e08b","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordResetForm.vue","webpack://fittrackee_client/./src/views/user/PasswordResetView.vue?1ecf","webpack://fittrackee_client/./src/views/user/PasswordResetView.vue"],"sourcesContent":["\n\n\n","import { render } from \"./EmailSent.vue?vue&type=template&id=3377e6a0\"\nimport script from \"./EmailSent.vue?vue&type=script&lang=js\"\nexport * from \"./EmailSent.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-66aca424\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"account-confirmation-email\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"email-sent\"\n}\nconst _hoisted_3 = { class: \"email-sent-message\" }\nconst _hoisted_4 = { key: 1 }\n\nimport { toRefs } from 'vue'\n\n import EmailSent from '@/components/Common/Images/EmailSent.vue'\n import UserAuthForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AccountConfirmationEmail',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(action) === 'email-sent')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(EmailSent),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('user.ACCOUNT_CONFIRMATION_SENT')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.RESENT_ACCOUNT_CONFIRMATION')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserAuthForm, { action: _unref(action) }, null, 8, [\"action\"])\n ]),\n _: 1\n })\n ]))\n ]))\n}\n}\n\n})","import script from \"./AccountConfirmationEmail.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AccountConfirmationEmail.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AccountConfirmationEmail.vue?vue&type=style&index=0&id=66aca424&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-66aca424\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-35aad344\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"account-confirmation\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { toRefs } from 'vue'\n\n import AccountConfirmationResend from '@/components/User/AccountConfirmationEmail.vue'\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AccountConfirmationResendView',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(AccountConfirmationResend, { action: _unref(action) }, null, 8, [\"action\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./AccountConfirmationResendView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AccountConfirmationResendView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AccountConfirmationResendView.vue?vue&type=style&index=0&id=35aad344&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-35aad344\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Password.vue?vue&type=template&id=356e77a2\"\nimport script from \"./Password.vue?vue&type=script&lang=js\"\nexport * from \"./Password.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-eac78356\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-action-done\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = { class: \"password-message\" }\nconst _hoisted_3 = { key: 0 }\n\nimport { toRefs } from 'vue'\n\n import EmailSent from '@/components/Common/Images/EmailSent.vue'\n import Password from '@/components/Common/Images/Password.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordActionDone',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(action) === 'request-sent')\n ? (_openBlock(), _createBlock(EmailSent, { key: 0 }))\n : (_openBlock(), _createBlock(Password, { key: 1 })),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(action) === 'request-sent')\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('user.PASSWORD_SENT_EMAIL_TEXT')), 1))\n : (_openBlock(), _createBlock(_component_i18n_t, {\n key: 1,\n keypath: \"user.PASSWORD_UPDATED\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_router_link, { to: \"/login\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('common.HERE')), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }))\n ])\n ]))\n}\n}\n\n})","import script from \"./PasswordActionDone.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordActionDone.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordActionDone.vue?vue&type=style&index=0&id=eac78356&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-eac78356\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-68377e44\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-reset-request\",\n class: \"center-card with-margin\"\n}\n\nimport { toRefs, withDefaults } from 'vue'\n\n import UserAuthForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n token?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordResetForm',\n props: {\n action: null,\n token: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { action: string, token: string }\n\n \n\n const { action, token } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.RESET_PASSWORD')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserAuthForm, {\n action: _unref(action),\n token: _unref(token)\n }, null, 8, [\"action\", \"token\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./PasswordResetForm.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordResetForm.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordResetForm.vue?vue&type=style&index=0&id=68377e44&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-68377e44\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-a1cc55c4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-reset\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { computed, toRefs, onBeforeMount } from 'vue'\n import { useRoute, useRouter } from 'vue-router'\n\n import PasswordEmailSent from '@/components/User/PasswordReset/PasswordActionDone.vue'\n import PasswordResetRequest from '@/components/User/PasswordReset/PasswordResetForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordResetView',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const route = useRoute()\n const router = useRouter()\n\n const { action } = toRefs(props)\n const token = computed(() => route.query.token)\n\n onBeforeMount(() => {\n if (props.action === 'reset' && !token.value) {\n router.push('/')\n }\n })\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(action).startsWith('reset'))\n ? (_openBlock(), _createBlock(PasswordResetRequest, {\n key: 0,\n action: _unref(action),\n token: _unref(token)\n }, null, 8, [\"action\", \"token\"]))\n : (_openBlock(), _createBlock(PasswordEmailSent, {\n key: 1,\n action: _unref(action)\n }, null, 8, [\"action\"]))\n ])\n ]))\n}\n}\n\n})","import script from \"./PasswordResetView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordResetView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordResetView.vue?vue&type=style&index=0&id=a1cc55c4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-a1cc55c4\"]])\n\nexport default __exports__"],"names":["version","id","xmlns","x","y","viewBox","style","_createElementVNode","d","_hoisted_2","_createElementBlock","_hoisted_1","name","__exports__","render","class","key","_hoisted_3","_hoisted_4","_defineComponent","__name","props","action","setup","__props","toRefs","_ctx","_cache","_component_Card","_resolveComponent","_openBlock","_unref","_createVNode","EmailSent","_toDisplayString","$t","title","_withCtx","_createTextVNode","content","UserAuthForm","_","AccountConfirmationResend","_component_router_link","_component_i18n_t","_createBlock","Password","keypath","default","to","token","route","useRoute","router","useRouter","computed","query","onBeforeMount","value","push","startsWith","PasswordResetRequest","PasswordEmailSent"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/reset.112f801c.js","mappings":"uLAEIA,QAAQ,MACRC,GAAG,SACHC,MAAM,6BACN,cAAY,+BACZC,EAAE,MACFC,EAAE,MACFC,QAAQ,sBACRC,MAAA,gDACA,YAAU,Y,GAEVC,EAAAA,EAAAA,GA0CI,WAzCFA,EAAAA,EAAAA,GA6BE,QA5BAC,EAAE,upGA6BJD,EAAAA,EAAAA,GAGE,QAFAC,EAAE,uIAGJD,EAAAA,EAAAA,GAGE,QAFAC,EAAE,8IAGJD,EAAAA,EAAAA,GAEE,QADAC,EAAE,4HAAuH,G,GAxC7HC,G,0CAXFC,EAAAA,EAAAA,IAsDM,MAtDNC,EAsDM,E,CAIN,OACEC,KAAM,a,UCvDV,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,KAEpE,O,0HCJA,MACMH,EAAa,CACjBV,GAAI,6BACJc,MAAO,2BAEHN,EAAa,CACjBO,IAAK,EACLD,MAAO,cAEHE,EAAa,CAAEF,MAAO,sBACtBG,EAAa,CAAEF,IAAK,GAW1B,OAA4BG,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,2BACRC,MAAO,CACLC,OAAQ,MAEVC,MAAMC,GAER,MAAMH,EAAQG,GAMN,OAAEF,IAAWG,EAAAA,EAAAA,IAAOJ,GAE5B,MAAO,CAACK,EAAUC,KAChB,MAAMC,GAAkBC,EAAAA,EAAAA,IAAkB,QAE1C,OAAQC,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOC,EAAY,CACvC,gBAAnBoB,EAAAA,EAAAA,IAAOT,KACHQ,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOD,EAAY,EACpDuB,EAAAA,EAAAA,IAAaC,EAAAA,IACb1B,EAAAA,EAAAA,GAAoB,MAAOU,GAAYiB,EAAAA,EAAAA,IAAiBR,EAAKS,GAAG,mCAAoC,QAErGL,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOQ,EAAY,EACpDc,EAAAA,EAAAA,IAAaJ,EAAiB,KAAM,CAClCQ,OAAOC,EAAAA,EAAAA,KAAS,IAAM,EACpBC,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAiBR,EAAKS,GAAG,qCAAsC,MAElFI,SAASF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,IAAaQ,EAAAA,EAAc,CAAElB,QAAQS,EAAAA,EAAAA,IAAOT,IAAW,KAAM,EAAG,CAAC,cAEnEmB,EAAG,QAGX,CAEJ,I,UCvDA,MAAM5B,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,QCLA,MACMF,EAAa,CACjBV,GAAI,uBACJc,MAAO,QAEHN,EAAa,CAAEM,MAAO,aAS5B,OAA4BI,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,gCACRC,MAAO,CACLC,OAAQ,MAEVC,MAAMC,GAER,MAAMH,EAAQG,GAKN,OAAEF,IAAWG,EAAAA,EAAAA,IAAOJ,GAE5B,MAAO,CAACK,EAAUC,MACRG,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOC,EAAY,EAC3DJ,EAAAA,EAAAA,GAAoB,MAAOE,EAAY,EACrCuB,EAAAA,EAAAA,IAAaU,EAA2B,CAAEpB,QAAQS,EAAAA,EAAAA,IAAOT,IAAW,KAAM,EAAG,CAAC,eAIpF,IChCA,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,O,2ICNItB,QAAQ,MACRC,GAAG,UACHC,MAAM,6BACN,cAAY,+BACZC,EAAE,MACFC,EAAE,MACFC,QAAQ,sBACRC,MAAA,gDACA,YAAU,Y,mqHAEVG,G,0CAXFC,EAAAA,EAAAA,IAqFM,MArFNC,EAqFM,E,CAIN,OACEC,KAAM,Y,UCtFV,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,KAEpE,QCJA,MACMH,EAAa,CACjBV,GAAI,uBACJc,MAAO,2BAEHN,EAAa,CAAEM,MAAO,oBACtBE,EAAa,CAAED,IAAK,GAW1B,OAA4BG,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,qBACRC,MAAO,CACLC,OAAQ,MAEVC,MAAMC,GAER,MAAMH,EAAQG,GAMN,OAAEF,IAAWG,EAAAA,EAAAA,IAAOJ,GAE5B,MAAO,CAACK,EAAUC,KAChB,MAAMgB,GAAyBd,EAAAA,EAAAA,IAAkB,eAC3Ce,GAAoBf,EAAAA,EAAAA,IAAkB,UAE5C,OAAQC,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOC,EAAY,CACvC,kBAAnBoB,EAAAA,EAAAA,IAAOT,KACHQ,EAAAA,EAAAA,OAAce,EAAAA,EAAAA,IAAaZ,EAAAA,EAAW,CAAEjB,IAAK,OAC7Cc,EAAAA,EAAAA,OAAce,EAAAA,EAAAA,IAAaC,EAAU,CAAE9B,IAAK,MACjDT,EAAAA,EAAAA,GAAoB,MAAOE,EAAY,CACjB,kBAAnBsB,EAAAA,EAAAA,IAAOT,KACHQ,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,OAAQO,GAAYiB,EAAAA,EAAAA,IAAiBR,EAAKS,GAAG,kCAAmC,MAClHL,EAAAA,EAAAA,OAAce,EAAAA,EAAAA,IAAaD,EAAmB,CAC7C5B,IAAK,EACL+B,QAAS,yBACR,CACDC,SAASX,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,IAAaW,EAAwB,CAAEM,GAAI,UAAY,CACrDD,SAASX,EAAAA,EAAAA,KAAS,IAAM,EACtBC,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAiBR,EAAKS,GAAG,gBAAiB,MAE7DM,EAAG,OAGPA,EAAG,QAGX,CAEJ,ICzDA,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,Q,UCLA,MACM9B,EAAa,CACjBV,GAAI,yBACJc,MAAO,2BAYT,OAA4BI,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,oBACRC,MAAO,CACLC,OAAQ,KACR4B,MAAO,CAAEF,QAAS,KAEpBzB,MAAMC,GAER,MAAMH,EAAQG,GAIN,OAAEF,EAAM,MAAE4B,IAAUzB,EAAAA,EAAAA,IAAOJ,GAEnC,MAAO,CAACK,EAAUC,KAChB,MAAMC,GAAkBC,EAAAA,EAAAA,IAAkB,QAE1C,OAAQC,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOC,EAAY,EAC3DqB,EAAAA,EAAAA,IAAaJ,EAAiB,KAAM,CAClCQ,OAAOC,EAAAA,EAAAA,KAAS,IAAM,EACpBC,EAAAA,EAAAA,KAAiBJ,EAAAA,EAAAA,IAAiBR,EAAKS,GAAG,wBAAyB,MAErEI,SAASF,EAAAA,EAAAA,KAAS,IAAM,EACtBL,EAAAA,EAAAA,IAAaQ,EAAAA,EAAc,CACzBlB,QAAQS,EAAAA,EAAAA,IAAOT,GACf4B,OAAOnB,EAAAA,EAAAA,IAAOmB,IACb,KAAM,EAAG,CAAC,SAAU,aAEzBT,EAAG,KAEL,CAEJ,IC5CA,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,QCLA,MACM9B,EAAa,CACjBV,GAAI,iBACJc,MAAO,QAEHN,EAAa,CAAEM,MAAO,aAY5B,OAA4BI,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,oBACRC,MAAO,CACLC,OAAQ,MAEVC,MAAMC,GAER,MAAMH,EAAQG,EAMN2B,GAAQC,EAAAA,EAAAA,MACRC,GAASC,EAAAA,EAAAA,OAET,OAAEhC,IAAWG,EAAAA,EAAAA,IAAOJ,GACpB6B,GAAQK,EAAAA,EAAAA,KAAS,IAAMJ,EAAMK,MAAMN,QAQ3C,OANEO,EAAAA,EAAAA,KAAc,KACS,UAAjBpC,EAAMC,QAAuB4B,EAAMQ,OACrCL,EAAOM,KAAK,I,IAIX,CAACjC,EAAUC,MACRG,EAAAA,EAAAA,OAAcpB,EAAAA,EAAAA,IAAoB,MAAOC,EAAY,EAC3DJ,EAAAA,EAAAA,GAAoB,MAAOE,EAAY,EACpCsB,EAAAA,EAAAA,IAAOT,GAAQsC,WAAW,WACtB9B,EAAAA,EAAAA,OAAce,EAAAA,EAAAA,IAAagB,EAAsB,CAChD7C,IAAK,EACLM,QAAQS,EAAAA,EAAAA,IAAOT,GACf4B,OAAOnB,EAAAA,EAAAA,IAAOmB,IACb,KAAM,EAAG,CAAC,SAAU,aACtBpB,EAAAA,EAAAA,OAAce,EAAAA,EAAAA,IAAaiB,EAAmB,CAC7C9C,IAAK,EACLM,QAAQS,EAAAA,EAAAA,IAAOT,IACd,KAAM,EAAG,CAAC,gBAIvB,ICvDA,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE,O","sources":["webpack://fittrackee_client/./src/components/Common/Images/EmailSent.vue","webpack://fittrackee_client/./src/components/Common/Images/EmailSent.vue?2d84","webpack://fittrackee_client/./src/components/User/AccountConfirmationEmail.vue?37ef","webpack://fittrackee_client/./src/components/User/AccountConfirmationEmail.vue","webpack://fittrackee_client/./src/views/user/AccountConfirmationResendView.vue?3fd8","webpack://fittrackee_client/./src/views/user/AccountConfirmationResendView.vue","webpack://fittrackee_client/./src/components/Common/Images/Password.vue","webpack://fittrackee_client/./src/components/Common/Images/Password.vue?2ae3","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordActionDone.vue?977e","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordActionDone.vue","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordResetForm.vue?e08b","webpack://fittrackee_client/./src/components/User/PasswordReset/PasswordResetForm.vue","webpack://fittrackee_client/./src/views/user/PasswordResetView.vue?1ecf","webpack://fittrackee_client/./src/views/user/PasswordResetView.vue"],"sourcesContent":["\n\n\n","import { render } from \"./EmailSent.vue?vue&type=template&id=3377e6a0\"\nimport script from \"./EmailSent.vue?vue&type=script&lang=js\"\nexport * from \"./EmailSent.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-66aca424\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"account-confirmation-email\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"email-sent\"\n}\nconst _hoisted_3 = { class: \"email-sent-message\" }\nconst _hoisted_4 = { key: 1 }\n\nimport { toRefs } from 'vue'\n\n import EmailSent from '@/components/Common/Images/EmailSent.vue'\n import UserAuthForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AccountConfirmationEmail',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(action) === 'email-sent')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(EmailSent),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('user.ACCOUNT_CONFIRMATION_SENT')), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.RESENT_ACCOUNT_CONFIRMATION')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserAuthForm, { action: _unref(action) }, null, 8, [\"action\"])\n ]),\n _: 1\n })\n ]))\n ]))\n}\n}\n\n})","import script from \"./AccountConfirmationEmail.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AccountConfirmationEmail.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AccountConfirmationEmail.vue?vue&type=style&index=0&id=66aca424&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-66aca424\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-35aad344\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"account-confirmation\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { toRefs } from 'vue'\n\n import AccountConfirmationResend from '@/components/User/AccountConfirmationEmail.vue'\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AccountConfirmationResendView',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(AccountConfirmationResend, { action: _unref(action) }, null, 8, [\"action\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./AccountConfirmationResendView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AccountConfirmationResendView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AccountConfirmationResendView.vue?vue&type=style&index=0&id=35aad344&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-35aad344\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Password.vue?vue&type=template&id=356e77a2\"\nimport script from \"./Password.vue?vue&type=script&lang=js\"\nexport * from \"./Password.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-eac78356\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-action-done\",\n class: \"center-card with-margin\"\n}\nconst _hoisted_2 = { class: \"password-message\" }\nconst _hoisted_3 = { key: 0 }\n\nimport { toRefs } from 'vue'\n\n import EmailSent from '@/components/Common/Images/EmailSent.vue'\n import Password from '@/components/Common/Images/Password.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordActionDone',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const { action } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_i18n_t = _resolveComponent(\"i18n-t\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(action) === 'request-sent')\n ? (_openBlock(), _createBlock(EmailSent, { key: 0 }))\n : (_openBlock(), _createBlock(Password, { key: 1 })),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(action) === 'request-sent')\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('user.PASSWORD_SENT_EMAIL_TEXT')), 1))\n : (_openBlock(), _createBlock(_component_i18n_t, {\n key: 1,\n keypath: \"user.PASSWORD_UPDATED\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_router_link, { to: \"/login\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('common.HERE')), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }))\n ])\n ]))\n}\n}\n\n})","import script from \"./PasswordActionDone.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordActionDone.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordActionDone.vue?vue&type=style&index=0&id=eac78356&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-eac78356\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-68377e44\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-reset-request\",\n class: \"center-card with-margin\"\n}\n\nimport { toRefs, withDefaults } from 'vue'\n\n import UserAuthForm from '@/components/User/UserAuthForm.vue'\n\n interface Props {\n action: string\n token?: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordResetForm',\n props: {\n action: null,\n token: { default: '' }\n },\n setup(__props: any) {\n\nconst props = __props as { action: string, token: string }\n\n \n\n const { action, token } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('user.RESET_PASSWORD')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(UserAuthForm, {\n action: _unref(action),\n token: _unref(token)\n }, null, 8, [\"action\", \"token\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./PasswordResetForm.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordResetForm.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordResetForm.vue?vue&type=style&index=0&id=68377e44&scoped=true&lang=scss\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-68377e44\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-a1cc55c4\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"password-reset\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { computed, toRefs, onBeforeMount } from 'vue'\n import { useRoute, useRouter } from 'vue-router'\n\n import PasswordEmailSent from '@/components/User/PasswordReset/PasswordActionDone.vue'\n import PasswordResetRequest from '@/components/User/PasswordReset/PasswordResetForm.vue'\n\n interface Props {\n action: string\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'PasswordResetView',\n props: {\n action: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n action: string\n }\n\n \n\n const route = useRoute()\n const router = useRouter()\n\n const { action } = toRefs(props)\n const token = computed(() => route.query.token)\n\n onBeforeMount(() => {\n if (props.action === 'reset' && !token.value) {\n router.push('/')\n }\n })\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(action).startsWith('reset'))\n ? (_openBlock(), _createBlock(PasswordResetRequest, {\n key: 0,\n action: _unref(action),\n token: _unref(token)\n }, null, 8, [\"action\", \"token\"]))\n : (_openBlock(), _createBlock(PasswordEmailSent, {\n key: 1,\n action: _unref(action)\n }, null, 8, [\"action\"]))\n ])\n ]))\n}\n}\n\n})","import script from \"./PasswordResetView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PasswordResetView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./PasswordResetView.vue?vue&type=style&index=0&id=a1cc55c4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-a1cc55c4\"]])\n\nexport default __exports__"],"names":["version","id","xmlns","x","y","viewBox","style","_createElementVNode","d","_hoisted_2","_createElementBlock","_hoisted_1","name","__exports__","render","class","key","_hoisted_3","_hoisted_4","_defineComponent","__name","props","action","setup","__props","toRefs","_ctx","_cache","_component_Card","_resolveComponent","_openBlock","_unref","_createVNode","EmailSent","_toDisplayString","$t","title","_withCtx","_createTextVNode","content","UserAuthForm","_","AccountConfirmationResend","_component_router_link","_component_i18n_t","_createBlock","Password","keypath","default","to","token","route","useRoute","router","useRouter","computed","query","onBeforeMount","value","push","startsWith","PasswordResetRequest","PasswordEmailSent"],"sourceRoot":""} \ No newline at end of file diff --git a/fittrackee/dist/static/js/statistics.faaccb1e.js b/fittrackee/dist/static/js/statistics.04a17f2e.js similarity index 98% rename from fittrackee/dist/static/js/statistics.faaccb1e.js rename to fittrackee/dist/static/js/statistics.04a17f2e.js index 373f59e9..961bf8f9 100644 --- a/fittrackee/dist/static/js/statistics.faaccb1e.js +++ b/fittrackee/dist/static/js/statistics.04a17f2e.js @@ -1,2 +1,2 @@ "use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[193],{7885:function(e,s,t){t.r(s),t.d(s,{default:function(){return A}});var a=t(6252),r=t(2262),l=t(3577),o=(t(7658),t(9150)),n=t(3170);const c={class:"chart-menu"},i={class:"chart-arrow"},u={class:"time-frames custom-checkboxes-group"},d={class:"time-frames-checkboxes custom-checkboxes"},p=["id","name","checked","onInput"],m={class:"chart-arrow"};var v=(0,a.aZ)({__name:"StatsMenu",emits:["arrowClick","timeFrameUpdate"],setup(e,{emit:s}){const t=(0,r.iH)("month"),o=["week","month","year"];function n(e){t.value=e,s("timeFrameUpdate",e)}return(e,r)=>((0,a.wg)(),(0,a.iD)("div",c,[(0,a._)("div",i,[(0,a._)("i",{class:"fa fa-chevron-left","aria-hidden":"true",onClick:r[0]||(r[0]=e=>s("arrowClick",!0))})]),(0,a._)("div",u,[(0,a._)("div",d,[((0,a.wg)(),(0,a.iD)(a.HY,null,(0,a.Ko)(o,(s=>(0,a._)("div",{class:"time-frame custom-checkbox",key:s},[(0,a._)("label",null,[(0,a._)("input",{type:"radio",id:s,name:s,checked:t.value===s,onInput:e=>n(s)},null,40,p),(0,a._)("span",null,(0,l.zw)(e.$t(`statistics.TIME_FRAMES.${s}`)),1)])]))),64))])]),(0,a._)("div",m,[(0,a._)("i",{class:"fa fa-chevron-right","aria-hidden":"true",onClick:r[1]||(r[1]=e=>s("arrowClick",!1))})])]))}}),k=t(3744);const _=(0,k.Z)(v,[["__scopeId","data-v-22d55de2"]]);var S=_,w=t(631);const f={class:"sports-menu"},h=["id","name","checked","onInput"],U={class:"sport-label"};var b=(0,a.aZ)({__name:"StatsSportsMenu",props:{userSports:null,selectedSportIds:{default:()=>[]}},emits:["selectedSportIdsUpdate"],setup(e,{emit:s}){const t=e,{t:n}=(0,o.QT)(),c=(0,a.f3)("sportColors"),{selectedSportIds:i}=(0,r.BK)(t),u=(0,a.Fl)((()=>(0,w.xH)(t.userSports,n)));function d(e){s("selectedSportIdsUpdate",e)}return(e,s)=>{const t=(0,a.up)("SportImage");return(0,a.wg)(),(0,a.iD)("div",f,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,r.SU)(u),(e=>((0,a.wg)(),(0,a.iD)("label",{type:"checkbox",key:e.id,style:(0,l.j5)({color:e.color?e.color:(0,r.SU)(c)[e.label]})},[(0,a._)("input",{type:"checkbox",id:e.id,name:e.label,checked:(0,r.SU)(i).includes(e.id),onInput:s=>d(e.id)},null,40,h),(0,a.Wm)(t,{"sport-label":e.label,color:e.color},null,8,["sport-label","color"]),(0,a._)("span",U,(0,l.zw)(e.translatedLabel),1)],4)))),128))])}}});const I=b;var g=I,T=t(9318);const y={key:0,id:"user-statistics"};var C=(0,a.aZ)({__name:"index",props:{sports:null,user:null},setup(e){const s=e,{t:t}=(0,o.QT)(),{sports:l,user:c}=(0,r.BK)(s),i=(0,r.iH)("month"),u=(0,r.iH)(v(i.value)),d=(0,a.Fl)((()=>(0,w.xH)(s.sports,t))),p=(0,r.iH)(_(s.sports));function m(e){i.value=e,u.value=v(i.value)}function v(e){return(0,T.aZ)(new Date,e,s.user.weekm)}function k(e){u.value=(0,T.FN)(u.value,e,s.user.weekm)}function _(e){return e.map((e=>e.id))}function f(e){p.value.includes(e)?p.value=p.value.filter((s=>s!==e)):p.value.push(e)}return(0,a.YP)((()=>s.sports),(e=>{p.value=_(e)})),(e,s)=>(0,r.SU)(d)?((0,a.wg)(),(0,a.iD)("div",y,[(0,a.Wm)(S,{onTimeFrameUpdate:m,onArrowClick:k}),(0,a.Wm)(n.Z,{sports:(0,r.SU)(l),user:(0,r.SU)(c),chartParams:u.value,"displayed-sport-ids":p.value,fullStats:!0},null,8,["sports","user","chartParams","displayed-sport-ids"]),(0,a.Wm)(g,{"selected-sport-ids":p.value,"user-sports":(0,r.SU)(l),onSelectedSportIdsUpdate:f},null,8,["selected-sport-ids","user-sports"])])):(0,a.kq)("",!0)}});const F=(0,k.Z)(C,[["__scopeId","data-v-30799d13"]]);var Z=F,x=t(5630),D=t(5801),H=t(9917);const E={id:"statistics",class:"view"},R={key:0,class:"container"};var W=(0,a.aZ)({__name:"StatisticsView",setup(e){const s=(0,H.o)(),t=(0,a.Fl)((()=>s.getters[D.YN.GETTERS.AUTH_USER_PROFILE])),o=(0,a.Fl)((()=>s.getters[D.O8.GETTERS.SPORTS].filter((e=>t.value.sports_list.includes(e.id)))));return(e,s)=>{const n=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",E,[(0,r.SU)(t).username?((0,a.wg)(),(0,a.iD)("div",R,[(0,a.Wm)(n,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,l.zw)(e.$t("statistics.STATISTICS")),1)])),content:(0,a.w5)((()=>[(0,a.Wm)(Z,{class:(0,l.C_)({"stats-disabled":0===(0,r.SU)(t).nb_workouts}),user:(0,r.SU)(t),sports:(0,r.SU)(o)},null,8,["class","user","sports"])])),_:1}),0===(0,r.SU)(t).nb_workouts?((0,a.wg)(),(0,a.j4)(x.Z,{key:0})):(0,a.kq)("",!0)])):(0,a.kq)("",!0)])}}});const P=(0,k.Z)(W,[["__scopeId","data-v-2e341d4e"]]);var A=P}}]); -//# sourceMappingURL=statistics.faaccb1e.js.map \ No newline at end of file +//# sourceMappingURL=statistics.04a17f2e.js.map \ No newline at end of file diff --git a/fittrackee/dist/static/js/statistics.faaccb1e.js.map b/fittrackee/dist/static/js/statistics.04a17f2e.js.map similarity index 99% rename from fittrackee/dist/static/js/statistics.faaccb1e.js.map rename to fittrackee/dist/static/js/statistics.04a17f2e.js.map index 85558cfd..2d0db841 100644 --- a/fittrackee/dist/static/js/statistics.faaccb1e.js.map +++ b/fittrackee/dist/static/js/statistics.04a17f2e.js.map @@ -1 +1 @@ -{"version":3,"file":"static/js/statistics.faaccb1e.js","mappings":"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","sources":["webpack://fittrackee_client/./src/components/Statistics/StatsMenu.vue?b88a","webpack://fittrackee_client/./src/components/Statistics/StatsMenu.vue","webpack://fittrackee_client/./src/components/Statistics/StatsSportsMenu.vue?57e4","webpack://fittrackee_client/./src/components/Statistics/StatsSportsMenu.vue","webpack://fittrackee_client/./src/components/Statistics/index.vue?2efa","webpack://fittrackee_client/./src/components/Statistics/index.vue","webpack://fittrackee_client/./src/views/StatisticsView.vue?9d34","webpack://fittrackee_client/./src/views/StatisticsView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-22d55de2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"chart-menu\" }\nconst _hoisted_2 = { class: \"chart-arrow\" }\nconst _hoisted_3 = { class: \"time-frames custom-checkboxes-group\" }\nconst _hoisted_4 = { class: \"time-frames-checkboxes custom-checkboxes\" }\nconst _hoisted_5 = [\"id\", \"name\", \"checked\", \"onInput\"]\nconst _hoisted_6 = { class: \"chart-arrow\" }\n\nimport { ref } from 'vue'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatsMenu',\n emits: ['arrowClick', 'timeFrameUpdate'],\n setup(__props, { emit }) {\n\n \n\n const selectedTimeFrame = ref('month')\n const timeFrames = ['week', 'month', 'year']\n\n function onUpdateTimeFrame(timeFrame: string) {\n selectedTimeFrame.value = timeFrame\n emit('timeFrameUpdate', timeFrame)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('arrowClick', true)))\n })\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(timeFrames, (frame) => {\n return _createElementVNode(\"div\", {\n class: \"time-frame custom-checkbox\",\n key: frame\n }, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: frame,\n name: frame,\n checked: selectedTimeFrame.value === frame,\n onInput: ($event: any) => (onUpdateTimeFrame(frame))\n }, null, 40, _hoisted_5),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`statistics.TIME_FRAMES.${frame}`)), 1)\n ])\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('arrowClick', false)))\n })\n ])\n ]))\n}\n}\n\n})","import script from \"./StatsMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatsMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatsMenu.vue?vue&type=style&index=0&id=22d55de2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-22d55de2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = { class: \"sports-menu\" }\nconst _hoisted_2 = [\"id\", \"name\", \"checked\", \"onInput\"]\nconst _hoisted_3 = { class: \"sport-label\" }\n\nimport { ComputedRef, computed, inject, withDefaults, toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n userSports: ISport[]\n selectedSportIds?: number[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatsSportsMenu',\n props: {\n userSports: null,\n selectedSportIds: { default: () => [] }\n },\n emits: ['selectedSportIdsUpdate'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { userSports: ISport[], selectedSportIds: number[] }\n\n \n\n \n\n const { t } = useI18n()\n\n const sportColors = inject('sportColors')\n const { selectedSportIds } = toRefs(props)\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.userSports, t)\n )\n\n function updateSelectedSportIds(sportId: number) {\n emit('selectedSportIdsUpdate', sportId)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"label\", {\n type: \"checkbox\",\n key: sport.id,\n style: _normalizeStyle({ color: sport.color ? sport.color : _unref(sportColors)[sport.label] })\n }, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n id: sport.id,\n name: sport.label,\n checked: _unref(selectedSportIds).includes(sport.id),\n onInput: ($event: any) => (updateSelectedSportIds(sport.id))\n }, null, 40, _hoisted_2),\n _createVNode(_component_SportImage, {\n \"sport-label\": sport.label,\n color: sport.color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(sport.translatedLabel), 1)\n ], 4))\n }), 128))\n ]))\n}\n}\n\n})","import script from \"./StatsSportsMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatsSportsMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatsSportsMenu.vue?vue&type=style&index=0&id=31a8ca60&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-30799d13\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"user-statistics\"\n}\n\nimport { ComputedRef, Ref, computed, ref, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import StatChart from '@/components/Common/StatsChart/index.vue'\n import StatsMenu from '@/components/Statistics/StatsMenu.vue'\n import SportsMenu from '@/components/Statistics/StatsSportsMenu.vue'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IStatisticsDateParams } from '@/types/statistics'\n import { IAuthUserProfile } from '@/types/user'\n import { translateSports } from '@/utils/sports'\n import { getStatsDateParams, updateChartParams } from '@/utils/statistics'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const { sports, user } = toRefs(props)\n const selectedTimeFrame = ref('month')\n const chartParams: Ref = ref(\n getChartParams(selectedTimeFrame.value)\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.sports, t)\n )\n const selectedSportIds: Ref = ref(getSports(props.sports))\n\n function updateTimeFrame(timeFrame: string) {\n selectedTimeFrame.value = timeFrame\n chartParams.value = getChartParams(selectedTimeFrame.value)\n }\n function getChartParams(timeFrame: string): IStatisticsDateParams {\n return getStatsDateParams(new Date(), timeFrame, props.user.weekm)\n }\n function handleOnClickArrows(backward: boolean) {\n chartParams.value = updateChartParams(\n chartParams.value,\n backward,\n props.user.weekm\n )\n }\n function getSports(sports: ISport[]) {\n return sports.map((sport) => sport.id)\n }\n function updateSelectedSportIds(sportId: number) {\n if (selectedSportIds.value.includes(sportId)) {\n selectedSportIds.value = selectedSportIds.value.filter(\n (id) => id !== sportId\n )\n } else {\n selectedSportIds.value.push(sportId)\n }\n }\n\n watch(\n () => props.sports,\n (newSports) => {\n selectedSportIds.value = getSports(newSports)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(translatedSports))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatsMenu, {\n onTimeFrameUpdate: updateTimeFrame,\n onArrowClick: handleOnClickArrows\n }),\n _createVNode(StatChart, {\n sports: _unref(sports),\n user: _unref(user),\n chartParams: chartParams.value,\n \"displayed-sport-ids\": selectedSportIds.value,\n fullStats: true\n }, null, 8, [\"sports\", \"user\", \"chartParams\", \"displayed-sport-ids\"]),\n _createVNode(SportsMenu, {\n \"selected-sport-ids\": selectedSportIds.value,\n \"user-sports\": _unref(sports),\n onSelectedSportIdsUpdate: updateSelectedSportIds\n }, null, 8, [\"selected-sport-ids\", \"user-sports\"])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=30799d13&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-30799d13\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2e341d4e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"statistics\",\n class: \"view\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"container\"\n}\n\nimport { ComputedRef, computed } from 'vue'\n\n import Statistics from '@/components/Statistics/index.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatisticsView',\n setup(__props) {\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(() =>\n store.getters[SPORTS_STORE.GETTERS.SPORTS].filter((sport) =>\n authUser.value.sports_list.includes(sport.id)\n )\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('statistics.STATISTICS')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(Statistics, {\n class: _normalizeClass({ 'stats-disabled': _unref(authUser).nb_workouts === 0 }),\n user: _unref(authUser),\n sports: _unref(sports)\n }, null, 8, [\"class\", \"user\", \"sports\"])\n ]),\n _: 1\n }),\n (_unref(authUser).nb_workouts === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./StatisticsView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatisticsView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatisticsView.vue?vue&type=style&index=0&id=2e341d4e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2e341d4e\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_defineComponent","__name","emits","setup","__props","emit","selectedTimeFrame","ref","timeFrames","onUpdateTimeFrame","timeFrame","value","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","onClick","$event","_Fragment","_renderList","frame","key","type","id","name","checked","onInput","_toDisplayString","$t","__exports__","props","userSports","selectedSportIds","default","t","useI18n","sportColors","inject","toRefs","translatedSports","computed","translateSports","updateSelectedSportIds","sportId","_component_SportImage","_resolveComponent","_unref","sport","style","_normalizeStyle","color","label","includes","_createVNode","translatedLabel","sports","user","chartParams","getChartParams","getSports","updateTimeFrame","getStatsDateParams","Date","weekm","handleOnClickArrows","backward","updateChartParams","map","filter","push","watch","newSports","StatsMenu","onTimeFrameUpdate","onArrowClick","StatChart","fullStats","SportsMenu","onSelectedSportIdsUpdate","_createCommentVNode","store","useStore","authUser","getters","AUTH_USER_STORE","SPORTS_STORE","sports_list","_component_Card","username","title","_withCtx","_createTextVNode","content","Statistics","_normalizeClass","nb_workouts","_","_createBlock","NoWorkouts"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/statistics.04a17f2e.js","mappings":"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","sources":["webpack://fittrackee_client/./src/components/Statistics/StatsMenu.vue?b88a","webpack://fittrackee_client/./src/components/Statistics/StatsMenu.vue","webpack://fittrackee_client/./src/components/Statistics/StatsSportsMenu.vue?57e4","webpack://fittrackee_client/./src/components/Statistics/StatsSportsMenu.vue","webpack://fittrackee_client/./src/components/Statistics/index.vue?2efa","webpack://fittrackee_client/./src/components/Statistics/index.vue","webpack://fittrackee_client/./src/views/StatisticsView.vue?9d34","webpack://fittrackee_client/./src/views/StatisticsView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-22d55de2\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"chart-menu\" }\nconst _hoisted_2 = { class: \"chart-arrow\" }\nconst _hoisted_3 = { class: \"time-frames custom-checkboxes-group\" }\nconst _hoisted_4 = { class: \"time-frames-checkboxes custom-checkboxes\" }\nconst _hoisted_5 = [\"id\", \"name\", \"checked\", \"onInput\"]\nconst _hoisted_6 = { class: \"chart-arrow\" }\n\nimport { ref } from 'vue'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatsMenu',\n emits: ['arrowClick', 'timeFrameUpdate'],\n setup(__props, { emit }) {\n\n \n\n const selectedTimeFrame = ref('month')\n const timeFrames = ['week', 'month', 'year']\n\n function onUpdateTimeFrame(timeFrame: string) {\n selectedTimeFrame.value = timeFrame\n emit('timeFrameUpdate', timeFrame)\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (emit('arrowClick', true)))\n })\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(timeFrames, (frame) => {\n return _createElementVNode(\"div\", {\n class: \"time-frame custom-checkbox\",\n key: frame\n }, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n id: frame,\n name: frame,\n checked: selectedTimeFrame.value === frame,\n onInput: ($event: any) => (onUpdateTimeFrame(frame))\n }, null, 40, _hoisted_5),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`statistics.TIME_FRAMES.${frame}`)), 1)\n ])\n ])\n }), 64))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (emit('arrowClick', false)))\n })\n ])\n ]))\n}\n}\n\n})","import script from \"./StatsMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatsMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatsMenu.vue?vue&type=style&index=0&id=22d55de2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-22d55de2\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = { class: \"sports-menu\" }\nconst _hoisted_2 = [\"id\", \"name\", \"checked\", \"onInput\"]\nconst _hoisted_3 = { class: \"sport-label\" }\n\nimport { ComputedRef, computed, inject, withDefaults, toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { translateSports } from '@/utils/sports'\n\n interface Props {\n userSports: ISport[]\n selectedSportIds?: number[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatsSportsMenu',\n props: {\n userSports: null,\n selectedSportIds: { default: () => [] }\n },\n emits: ['selectedSportIdsUpdate'],\n setup(__props: any, { emit }) {\n\nconst props = __props as { userSports: ISport[], selectedSportIds: number[] }\n\n \n\n \n\n const { t } = useI18n()\n\n const sportColors = inject('sportColors')\n const { selectedSportIds } = toRefs(props)\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.userSports, t)\n )\n\n function updateSelectedSportIds(sportId: number) {\n emit('selectedSportIdsUpdate', sportId)\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"label\", {\n type: \"checkbox\",\n key: sport.id,\n style: _normalizeStyle({ color: sport.color ? sport.color : _unref(sportColors)[sport.label] })\n }, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n id: sport.id,\n name: sport.label,\n checked: _unref(selectedSportIds).includes(sport.id),\n onInput: ($event: any) => (updateSelectedSportIds(sport.id))\n }, null, 40, _hoisted_2),\n _createVNode(_component_SportImage, {\n \"sport-label\": sport.label,\n color: sport.color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(sport.translatedLabel), 1)\n ], 4))\n }), 128))\n ]))\n}\n}\n\n})","import script from \"./StatsSportsMenu.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatsSportsMenu.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatsSportsMenu.vue?vue&type=style&index=0&id=31a8ca60&lang=scss\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-30799d13\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"user-statistics\"\n}\n\nimport { ComputedRef, Ref, computed, ref, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import StatChart from '@/components/Common/StatsChart/index.vue'\n import StatsMenu from '@/components/Statistics/StatsMenu.vue'\n import SportsMenu from '@/components/Statistics/StatsSportsMenu.vue'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IStatisticsDateParams } from '@/types/statistics'\n import { IAuthUserProfile } from '@/types/user'\n import { translateSports } from '@/utils/sports'\n import { getStatsDateParams, updateChartParams } from '@/utils/statistics'\n\n interface Props {\n sports: ISport[]\n user: IAuthUserProfile\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n sports: null,\n user: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n sports: ISport[]\n user: IAuthUserProfile\n }\n\n \n\n const { t } = useI18n()\n\n const { sports, user } = toRefs(props)\n const selectedTimeFrame = ref('month')\n const chartParams: Ref = ref(\n getChartParams(selectedTimeFrame.value)\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.sports, t)\n )\n const selectedSportIds: Ref = ref(getSports(props.sports))\n\n function updateTimeFrame(timeFrame: string) {\n selectedTimeFrame.value = timeFrame\n chartParams.value = getChartParams(selectedTimeFrame.value)\n }\n function getChartParams(timeFrame: string): IStatisticsDateParams {\n return getStatsDateParams(new Date(), timeFrame, props.user.weekm)\n }\n function handleOnClickArrows(backward: boolean) {\n chartParams.value = updateChartParams(\n chartParams.value,\n backward,\n props.user.weekm\n )\n }\n function getSports(sports: ISport[]) {\n return sports.map((sport) => sport.id)\n }\n function updateSelectedSportIds(sportId: number) {\n if (selectedSportIds.value.includes(sportId)) {\n selectedSportIds.value = selectedSportIds.value.filter(\n (id) => id !== sportId\n )\n } else {\n selectedSportIds.value.push(sportId)\n }\n }\n\n watch(\n () => props.sports,\n (newSports) => {\n selectedSportIds.value = getSports(newSports)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(translatedSports))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(StatsMenu, {\n onTimeFrameUpdate: updateTimeFrame,\n onArrowClick: handleOnClickArrows\n }),\n _createVNode(StatChart, {\n sports: _unref(sports),\n user: _unref(user),\n chartParams: chartParams.value,\n \"displayed-sport-ids\": selectedSportIds.value,\n fullStats: true\n }, null, 8, [\"sports\", \"user\", \"chartParams\", \"displayed-sport-ids\"]),\n _createVNode(SportsMenu, {\n \"selected-sport-ids\": selectedSportIds.value,\n \"user-sports\": _unref(sports),\n onSelectedSportIdsUpdate: updateSelectedSportIds\n }, null, 8, [\"selected-sport-ids\", \"user-sports\"])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=30799d13&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-30799d13\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2e341d4e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"statistics\",\n class: \"view\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"container\"\n}\n\nimport { ComputedRef, computed } from 'vue'\n\n import Statistics from '@/components/Statistics/index.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'StatisticsView',\n setup(__props) {\n\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(() =>\n store.getters[SPORTS_STORE.GETTERS.SPORTS].filter((sport) =>\n authUser.value.sports_list.includes(sport.id)\n )\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('statistics.STATISTICS')), 1)\n ]),\n content: _withCtx(() => [\n _createVNode(Statistics, {\n class: _normalizeClass({ 'stats-disabled': _unref(authUser).nb_workouts === 0 }),\n user: _unref(authUser),\n sports: _unref(sports)\n }, null, 8, [\"class\", \"user\", \"sports\"])\n ]),\n _: 1\n }),\n (_unref(authUser).nb_workouts === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./StatisticsView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./StatisticsView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./StatisticsView.vue?vue&type=style&index=0&id=2e341d4e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2e341d4e\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_defineComponent","__name","emits","setup","__props","emit","selectedTimeFrame","ref","timeFrames","onUpdateTimeFrame","timeFrame","value","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","onClick","$event","_Fragment","_renderList","frame","key","type","id","name","checked","onInput","_toDisplayString","$t","__exports__","props","userSports","selectedSportIds","default","t","useI18n","sportColors","inject","toRefs","translatedSports","computed","translateSports","updateSelectedSportIds","sportId","_component_SportImage","_resolveComponent","_unref","sport","style","_normalizeStyle","color","label","includes","_createVNode","translatedLabel","sports","user","chartParams","getChartParams","getSports","updateTimeFrame","getStatsDateParams","Date","weekm","handleOnClickArrows","backward","updateChartParams","map","filter","push","watch","newSports","StatsMenu","onTimeFrameUpdate","onArrowClick","StatChart","fullStats","SportsMenu","onSelectedSportIdsUpdate","_createCommentVNode","store","useStore","authUser","getters","AUTH_USER_STORE","SPORTS_STORE","sports_list","_component_Card","username","title","_withCtx","_createTextVNode","content","Statistics","_normalizeClass","nb_workouts","_","_createBlock","NoWorkouts"],"sourceRoot":""} \ No newline at end of file diff --git a/fittrackee/dist/static/js/workouts.f1d6cc45.js b/fittrackee/dist/static/js/workouts.71e8fef0.js similarity index 99% rename from fittrackee/dist/static/js/workouts.f1d6cc45.js rename to fittrackee/dist/static/js/workouts.71e8fef0.js index d3118812..1184962e 100644 --- a/fittrackee/dist/static/js/workouts.f1d6cc45.js +++ b/fittrackee/dist/static/js/workouts.71e8fef0.js @@ -1,2 +1,2 @@ "use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[401],{2528:function(t,e,o){o.d(e,{Z:function(){return Q}});o(7658);var a=o(6252),n=o(3577),l=o(2262),r=o(9963),s=o(9150),i=o(2201),u=o(5801),d=o(9917),c=o(6558),p=o(8966),m=o(631),w=o(3649);const k={id:"workout-form"},f=["onSubmit"],_={class:"form-items"},v={key:0,class:"form-item-radio"},g=["checked","disabled"],y={for:"withGpx"},S=["checked","disabled"],U={for:"withoutGpx"},h={class:"form-item"},b=["disabled"],T=["value"],E={key:1,class:"form-item"},D={for:"gpxFile"},O=["disabled"],I={class:"files-help info-box"},A={key:2,class:"form-item"},C={for:"title"},R=["required","disabled"],$={key:3},N={class:"workout-date-duration"},x={class:"form-item"},z={class:"workout-date-time"},L=["disabled"],j=["disabled"],W={class:"form-item"},P=["disabled"],B=["disabled"],F=["disabled"],H={class:"form-item"},M=["disabled"],Z={class:"form-item"},q={key:1},G={key:2,class:"form-buttons"},K=["disabled"],Y=["onClick"];var V=(0,a.aZ)({__name:"WorkoutEdition",props:{authUser:null,sports:null,isCreation:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},workout:{default:()=>({})}},setup(t){const e=t,{t:o}=(0,s.QT)(),V=(0,d.o)(),J=(0,i.tv)(),{authUser:X,workout:Q,isCreation:tt,loading:et}=(0,l.BK)(e),ot=(0,a.Fl)((()=>(0,m.xH)(e.sports,o,"is_active_for_user",Q.value.id?[Q.value.sport_id]:[]))),at=(0,a.Fl)((()=>V.getters[u.SY.GETTERS.APP_CONFIG])),nt=at.value.max_single_file_size?(0,p.Z)(at.value.max_single_file_size):"",lt=at.value.gpx_limit_import,rt=at.value.max_zip_file_size?(0,p.Z)(at.value.max_zip_file_size):"",st=(0,a.Fl)((()=>V.getters[u.SY.GETTERS.ERROR_MESSAGES])),it=(0,l.qj)({sport_id:"",title:"",notes:"",workoutDate:"",workoutTime:"",workoutDurationHour:"",workoutDurationMinutes:"",workoutDurationSeconds:"",workoutDistance:""}),ut=(0,l.iH)(e.workout.id?e.workout.with_gpx:e.isCreation);let dt=null;const ct=(0,l.iH)(!1);function pt(t){it.notes=t}function mt(){ut.value=!ut.value,ct.value=!1}function wt(t){t.target.files&&(dt=t.target.files[0])}function kt(t){if(it.sport_id=`${t.sport_id}`,it.title=t.title,it.notes=t.notes,!t.with_gpx){const o=(0,c.Jo)((0,c.eB)(t.workout_date,e.authUser.timezone),"yyyy-MM-dd"),a=t.duration.split(":");it.workoutDistance=`${X.value.imperial_units?(0,w.sC)(t.distance,"km","mi",2):parseFloat(t.distance.toFixed(2))}`,it.workoutDate=o.workout_date,it.workoutTime=o.workout_time,it.workoutDurationHour=a[0],it.workoutDurationMinutes=a[1],it.workoutDurationSeconds=a[2]}}function ft(t){t.title=it.title,t.distance=X.value.imperial_units?(0,w.sC)(+it.workoutDistance,"mi","km",3):+it.workoutDistance,t.duration=3600*+it.workoutDurationHour+60*+it.workoutDurationMinutes+ +it.workoutDurationSeconds,t.workout_date=`${it.workoutDate} ${it.workoutTime}`}function _t(){const t={sport_id:+it.sport_id,notes:it.notes};if(e.workout.id)e.workout.with_gpx?t.title=it.title:ft(t),V.dispatch(u.aX.ACTIONS.EDIT_WORKOUT,{workoutId:e.workout.id,data:t});else if(ut.value){if(!dt){const t="workouts.NO_FILE_PROVIDED";return void V.commit(u.SY.MUTATIONS.SET_ERROR_MESSAGES,t)}t.file=dt,V.dispatch(u.aX.ACTIONS.ADD_WORKOUT,t)}else ft(t),V.dispatch(u.aX.ACTIONS.ADD_WORKOUT_WITHOUT_GPX,t)}function vt(){e.workout.id?J.push({name:"Workout",params:{workoutId:e.workout.id}}):J.go(-1)}function gt(){ct.value=!0}return(0,a.bv)((()=>{e.workout.id&&kt(e.workout)})),(0,a.Ah)((()=>V.commit(u.SY.MUTATIONS.EMPTY_ERROR_MESSAGES))),(0,a.YP)((()=>e.workout),(async(t,e)=>{t!==e&&t&&t.id&&kt(t)})),(t,e)=>{const o=(0,a.up)("CustomTextArea"),s=(0,a.up)("ErrorMessage"),i=(0,a.up)("Loader"),u=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",{id:"workout-edition",class:(0,n.C_)(["center-card with-margin",{"center-form":(0,l.SU)(Q)&&(0,l.SU)(Q).with_gpx}])},[(0,a.Wm)(u,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,n.zw)(t.$t(`workouts.${(0,l.SU)(tt)?"ADD":"EDIT"}_WORKOUT`)),1)])),content:(0,a.w5)((()=>[(0,a._)("div",k,[(0,a._)("form",{class:(0,n.C_)({errors:ct.value}),onSubmit:(0,r.iM)(_t,["prevent"])},[(0,a._)("div",_,[(0,l.SU)(tt)?((0,a.wg)(),(0,a.iD)("div",v,[(0,a._)("div",null,[(0,a._)("input",{id:"withGpx",type:"radio",checked:ut.value,disabled:(0,l.SU)(et),onClick:mt},null,8,g),(0,a._)("label",y,(0,n.zw)(t.$t("workouts.WITH_GPX")),1)]),(0,a._)("div",null,[(0,a._)("input",{id:"withoutGpx",type:"radio",checked:!ut.value,disabled:(0,l.SU)(et),onClick:mt},null,8,S),(0,a._)("label",U,(0,n.zw)(t.$t("workouts.WITHOUT_GPX")),1)])])):(0,a.kq)("",!0),(0,a._)("div",h,[(0,a._)("label",null,(0,n.zw)(t.$t("workouts.SPORT",1))+": ",1),(0,a.wy)((0,a._)("select",{id:"sport",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[0]||(e[0]=t=>it.sport_id=t)},[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,l.SU)(ot),(t=>((0,a.wg)(),(0,a.iD)("option",{value:t.id,key:t.id},(0,n.zw)(t.translatedLabel),9,T)))),128))],40,b),[[r.bM,it.sport_id]])]),(0,l.SU)(tt)&&ut.value?((0,a.wg)(),(0,a.iD)("div",E,[(0,a._)("label",D,(0,n.zw)(t.$t("workouts.GPX_FILE"))+" "+(0,n.zw)(t.$t("workouts.ZIP_ARCHIVE_DESCRIPTION"))+": ",1),(0,a._)("input",{id:"gpxFile",name:"gpxFile",type:"file",accept:".gpx, .zip",disabled:(0,l.SU)(et),required:"",onInvalid:gt,onInput:wt},null,40,O),(0,a._)("div",I,[(0,a._)("div",null,[(0,a._)("strong",null,(0,n.zw)(t.$t("workouts.GPX_FILE"))+":",1),(0,a._)("ul",null,[(0,a._)("li",null,(0,n.zw)(t.$t("workouts.MAX_SIZE"))+": "+(0,n.zw)((0,l.SU)(nt)),1)])]),(0,a._)("div",null,[(0,a._)("strong",null,(0,n.zw)(t.$t("workouts.ZIP_ARCHIVE"))+":",1),(0,a._)("ul",null,[(0,a._)("li",null,(0,n.zw)(t.$t("workouts.NO_FOLDER")),1),(0,a._)("li",null,(0,n.zw)(t.$t("workouts.MAX_FILES"))+": "+(0,n.zw)((0,l.SU)(lt)),1),(0,a._)("li",null,(0,n.zw)(t.$t("workouts.MAX_SIZE"))+": "+(0,n.zw)((0,l.SU)(rt)),1)])])])])):((0,a.wg)(),(0,a.iD)("div",A,[(0,a._)("label",C,(0,n.zw)(t.$t("workouts.TITLE"))+": ",1),(0,a.wy)((0,a._)("input",{id:"title",name:"title",type:"text",required:!(0,l.SU)(tt),onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[1]||(e[1]=t=>it.title=t)},null,40,R),[[r.nr,it.title]])])),ut.value?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("div",$,[(0,a._)("div",N,[(0,a._)("div",x,[(0,a._)("label",null,(0,n.zw)(t.$t("workouts.WORKOUT_DATE"))+":",1),(0,a._)("div",z,[(0,a.wy)((0,a._)("input",{id:"workout-date",name:"workout-date",type:"date",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[2]||(e[2]=t=>it.workoutDate=t)},null,40,L),[[r.nr,it.workoutDate]]),(0,a.wy)((0,a._)("input",{id:"workout-time",name:"workout-time",class:"workout-time",type:"time",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[3]||(e[3]=t=>it.workoutTime=t)},null,40,j),[[r.nr,it.workoutTime]])])]),(0,a._)("div",W,[(0,a._)("label",null,(0,n.zw)(t.$t("workouts.DURATION"))+":",1),(0,a._)("div",null,[(0,a.wy)((0,a._)("input",{id:"workout-duration-hour",name:"workout-duration-hour",class:"workout-duration",type:"text",placeholder:"HH",minlength:"1",maxlength:"2",pattern:"^([0-1]?[0-9]|2[0-3])$",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[4]||(e[4]=t=>it.workoutDurationHour=t)},null,40,P),[[r.nr,it.workoutDurationHour]]),(0,a.Uk)(" : "),(0,a.wy)((0,a._)("input",{id:"workout-duration-minutes",name:"workout-duration-minutes",class:"workout-duration",type:"text",pattern:"^([0-5][0-9])$",minlength:"2",maxlength:"2",placeholder:"MM",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[5]||(e[5]=t=>it.workoutDurationMinutes=t)},null,40,B),[[r.nr,it.workoutDurationMinutes]]),(0,a.Uk)(" : "),(0,a.wy)((0,a._)("input",{id:"workout-duration-seconds",name:"workout-duration-seconds",class:"workout-duration",type:"text",pattern:"^([0-5][0-9])$",minlength:"2",maxlength:"2",placeholder:"SS",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[6]||(e[6]=t=>it.workoutDurationSeconds=t)},null,40,F),[[r.nr,it.workoutDurationSeconds]])])])]),(0,a._)("div",H,[(0,a._)("label",null,(0,n.zw)(t.$t("workouts.DISTANCE"))+" ("+(0,n.zw)((0,l.SU)(X).imperial_units?"mi":"km")+"): ",1),(0,a.wy)((0,a._)("input",{name:"workout-distance",type:"number",min:"0",step:"0.001",required:"",onInvalid:gt,disabled:(0,l.SU)(et),"onUpdate:modelValue":e[7]||(e[7]=t=>it.workoutDistance=t)},null,40,M),[[r.nr,it.workoutDistance]])])])),(0,a._)("div",Z,[(0,a._)("label",null,(0,n.zw)(t.$t("workouts.NOTES"))+": ",1),(0,a.Wm)(o,{name:"notes",input:it.notes,disabled:(0,l.SU)(et),onUpdateValue:pt},null,8,["input","disabled"])])]),(0,l.SU)(st)?((0,a.wg)(),(0,a.j4)(s,{key:0,message:(0,l.SU)(st)},null,8,["message"])):(0,a.kq)("",!0),(0,l.SU)(et)?((0,a.wg)(),(0,a.iD)("div",q,[(0,a.Wm)(i)])):((0,a.wg)(),(0,a.iD)("div",G,[(0,a._)("button",{class:"confirm",type:"submit",disabled:(0,l.SU)(et)},(0,n.zw)(t.$t("buttons.SUBMIT")),9,K),(0,a._)("button",{class:"cancel",onClick:(0,r.iM)(vt,["prevent"])},(0,n.zw)(t.$t("buttons.CANCEL")),9,Y)]))],42,f)])])),_:1})],2)}}}),J=o(3744);const X=(0,J.Z)(V,[["__scopeId","data-v-886f93f6"]]);var Q=X},4189:function(t,e,o){o.r(e),o.d(e,{default:function(){return p}});var a=o(6252),n=o(2262),l=o(2528),r=o(5801),s=o(9917);const i={id:"add-workout",class:"view"},u={class:"container"};var d=(0,a.aZ)({__name:"AddWorkout",setup(t){const e=(0,s.o)(),o=(0,a.Fl)((()=>e.getters[r.O8.GETTERS.SPORTS])),d=(0,a.Fl)((()=>e.getters[r.YN.GETTERS.AUTH_USER_PROFILE])),c=(0,a.Fl)((()=>e.getters[r.aX.GETTERS.WORKOUT_DATA]));return(t,e)=>((0,a.wg)(),(0,a.iD)("div",i,[(0,a._)("div",u,[(0,a.Wm)(l.Z,{authUser:(0,n.SU)(d),sports:(0,n.SU)(o),isCreation:!0,loading:(0,n.SU)(c).loading},null,8,["authUser","sports","loading"])])]))}});const c=d;var p=c},8237:function(t,e,o){o.r(e),o.d(e,{default:function(){return m}});var a=o(6252),n=o(2262),l=o(2201),r=o(2528),s=o(5801),i=o(9917);const u={id:"edit-workout",class:"view"},d={class:"container"};var c=(0,a.aZ)({__name:"EditWorkout",setup(t){const e=(0,l.yj)(),o=(0,i.o)(),c=(0,a.Fl)((()=>o.getters[s.YN.GETTERS.AUTH_USER_PROFILE])),p=(0,a.Fl)((()=>o.getters[s.O8.GETTERS.SPORTS])),m=(0,a.Fl)((()=>o.getters[s.aX.GETTERS.WORKOUT_DATA]));return(0,a.wF)((()=>{o.dispatch(s.aX.ACTIONS.GET_WORKOUT_DATA,{workoutId:e.params.workoutId})})),(0,a.YP)((()=>e.params.workoutId),(async t=>{t||o.commit(s.aX.MUTATIONS.EMPTY_WORKOUT)})),(t,e)=>((0,a.wg)(),(0,a.iD)("div",u,[(0,a._)("div",d,[(0,n.SU)(m).workout.id?((0,a.wg)(),(0,a.j4)(r.Z,{key:0,authUser:(0,n.SU)(c),sports:(0,n.SU)(p),workout:(0,n.SU)(m).workout,loading:(0,n.SU)(m).loading},null,8,["authUser","sports","workout","loading"])):(0,a.kq)("",!0)])]))}});const p=c;var m=p},4915:function(t,e,o){o.r(e),o.d(e,{default:function(){return Yo}});var a=o(6252),n=o(2262),l=o(2201),r=o(8273),s=(o(7658),o(3577)),i=o(9963),u=o(5167);const d=t=>((0,a.dD)("data-v-4d9f9a8a"),t=t(),(0,a.Cn)(),t),c={id:"workout-card-title"},p=["title"],m=d((()=>(0,a._)("i",{class:"fa fa-chevron-left","aria-hidden":"true"},null,-1))),w=[m],k={class:"workout-card-title"},f={class:"workout-title-date"},_={key:0,class:"workout-title"},v={key:1,class:"workout-title"},g={class:"workout-segment"},y=d((()=>(0,a._)("i",{class:"fa fa-map-marker","aria-hidden":"true"},null,-1))),S={class:"workout-date"},U={class:"workout-link"},h=["title"],b=d((()=>(0,a._)("i",{class:"fa fa-chevron-right","aria-hidden":"true"},null,-1))),T=[b];var E=(0,a.aZ)({__name:"WorkoutCardTitle",props:{sport:null,workoutObject:null},emits:["displayModal"],setup(t,{emit:e}){const o=t,{sport:l,workoutObject:r}=(0,n.BK)(o);async function d(t){await u.Z.get(`workouts/${t}/gpx/download`,{responseType:"blob"}).then((e=>{const o=window.URL.createObjectURL(new Blob([e.data],{type:"application/gpx+xml"})),a=document.createElement("a");a.href=o,a.setAttribute("download",`${t}.gpx`),document.body.appendChild(a),a.click()}))}return(t,o)=>{const u=(0,a.up)("SportImage"),m=(0,a.up)("router-link");return(0,a.wg)(),(0,a.iD)("div",c,[(0,a._)("div",{class:(0,s.C_)(["workout-previous workout-arrow",{inactive:!(0,n.SU)(r).previousUrl}]),title:(0,n.SU)(r).previousUrl?t.$t(`workouts.PREVIOUS_${(0,n.SU)(r).type}`):t.$t(`workouts.NO_PREVIOUS_${(0,n.SU)(r).type}`),onClick:o[0]||(o[0]=e=>(0,n.SU)(r).previousUrl?t.$router.push((0,n.SU)(r).previousUrl):null)},w,10,p),(0,a._)("div",k,[(0,a.Wm)(u,{"sport-label":(0,n.SU)(l).label,color:(0,n.SU)(l).color},null,8,["sport-label","color"]),(0,a._)("div",f,["WORKOUT"===(0,n.SU)(r).type?((0,a.wg)(),(0,a.iD)("div",_,[(0,a._)("span",null,(0,s.zw)((0,n.SU)(r).title),1),(0,a._)("i",{class:"fa fa-edit","aria-hidden":"true",onClick:o[1]||(o[1]=e=>t.$router.push({name:"EditWorkout",params:{workoutId:(0,n.SU)(r).workoutId}}))}),(0,n.SU)(r).with_gpx?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-download","aria-hidden":"true",onClick:o[2]||(o[2]=(0,i.iM)((t=>d((0,n.SU)(r).workoutId)),["prevent"]))})):(0,a.kq)("",!0),(0,a._)("i",{class:"fa fa-trash","aria-hidden":"true",onClick:o[3]||(o[3]=t=>e("displayModal",!0))})])):((0,a.wg)(),(0,a.iD)("div",v,[(0,a.Uk)((0,s.zw)((0,n.SU)(r).title)+" ",1),(0,a._)("span",g,[(0,a.Uk)(" — "),y,(0,a.Uk)(" "+(0,s.zw)(t.$t("workouts.SEGMENT"))+" "+(0,s.zw)((0,n.SU)(r).segmentId+1),1)])])),(0,a._)("div",S,[(0,a.Uk)((0,s.zw)((0,n.SU)(r).workoutDate)+" - "+(0,s.zw)((0,n.SU)(r).workoutTime)+" ",1),(0,a._)("span",U,["SEGMENT"===(0,n.SU)(r).type?((0,a.wg)(),(0,a.j4)(m,{key:0,to:{name:"Workout",params:{workoutId:(0,n.SU)(r).workoutId}}},{default:(0,a.w5)((()=>[(0,a.Uk)(" > "+(0,s.zw)(t.$t("workouts.BACK_TO_WORKOUT")),1)])),_:1},8,["to"])):(0,a.kq)("",!0)])])])]),(0,a._)("div",{class:(0,s.C_)(["workout-next workout-arrow",{inactive:!(0,n.SU)(r).nextUrl}]),title:(0,n.SU)(r).nextUrl?t.$t(`workouts.NEXT_${(0,n.SU)(r).type}`):t.$t(`workouts.NO_NEXT_${(0,n.SU)(r).type}`),onClick:o[4]||(o[4]=e=>(0,n.SU)(r).nextUrl?t.$router.push((0,n.SU)(r).nextUrl):null)},T,10,h)])}}}),D=o(3744);const O=(0,D.Z)(E,[["__scopeId","data-v-4d9f9a8a"]]);var I=O;const A=t=>((0,a.dD)("data-v-1a5282f6"),t=t(),(0,a.Cn)(),t),C={key:0,class:"workout-record"},R=A((()=>(0,a._)("sup",null,[(0,a._)("i",{class:"fa fa-trophy","aria-hidden":"true"})],-1))),$=[R];var N=(0,a.aZ)({__name:"WorkoutRecord",props:{recordType:null,workoutObject:null},setup(t){const e=t,{recordType:o,workoutObject:l}=(0,n.BK)(e);return(t,e)=>(0,n.SU)(l).records&&(0,n.SU)(l).records.find((t=>t.record_type===(0,n.SU)(o)))?((0,a.wg)(),(0,a.iD)("span",C,$)):(0,a.kq)("",!0)}});const x=(0,D.Z)(N,[["__scopeId","data-v-1a5282f6"]]);var z=x,L=o(9150);const j=["N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"],W=t=>{const e=Math.floor(t/22.5+.5);return j[e%16]},P={class:"wind"},B={class:"wind-bearing"},F=["title"];var H=(0,a.aZ)({__name:"WeatherWind",props:{weather:null,useImperialUnits:{type:Boolean}},setup(t){const e=t,{useImperialUnits:o,weather:l}=(0,n.BK)(e),{t:r}=(0,L.QT)();function i(t){return r(`workouts.WEATHER.WIND_DIRECTIONS.${W(t)}`)}return(t,e)=>{const r=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",P,[(0,a.Wm)(r,{distance:(0,n.SU)(l).wind,unitFrom:"m",digits:1,displayUnit:!1,useImperialUnits:(0,n.SU)(o)},null,8,["distance","useImperialUnits"]),(0,a.Uk)(" "+(0,s.zw)((0,n.SU)(o)?"ft":"m")+"/s ",1),(0,a._)("div",B,[(0,n.SU)(l).windBearing?((0,a.wg)(),(0,a.iD)("i",{key:0,class:"fa fa-long-arrow-down",style:(0,s.j5)({transform:`rotate(${(0,n.SU)(l).windBearing}deg)`}),"aria-hidden":"true",title:i((0,n.SU)(l).windBearing)},null,12,F)):(0,a.kq)("",!0)])])}}});const M=(0,D.Z)(H,[["__scopeId","data-v-46a7c31c"]]);var Z=M;const q=t=>((0,a.dD)("data-v-76e9ab62"),t=t(),(0,a.Cn)(),t),G={key:0,id:"workout-weather"},K={class:"weather-table"},Y=q((()=>(0,a._)("th",null,null,-1))),V={class:"weather-th"},J=["src","alt","title"],X={class:"weather-th"},Q=["src","alt","title"],tt=["alt","title"],et=["alt","title"],ot=["alt","title"];var at=(0,a.aZ)({__name:"WorkoutWeather",props:{workoutObject:null,useImperialUnits:{type:Boolean}},setup(t){const e=t,{useImperialUnits:o,workoutObject:l}=(0,n.BK)(e);return(t,e)=>(0,n.SU)(l).weatherStart&&(0,n.SU)(l).weatherEnd?((0,a.wg)(),(0,a.iD)("div",G,[(0,a._)("table",K,[(0,a._)("thead",null,[(0,a._)("tr",null,[Y,(0,a._)("th",null,[(0,a._)("div",V,[(0,a.Uk)((0,s.zw)(t.$t("workouts.START"))+" ",1),(0,a._)("img",{class:"weather-img",src:`/img/weather/${(0,n.SU)(l).weatherStart.icon}.svg`,alt:t.$t(`workouts.WEATHER.DARK_SKY.${(0,n.SU)(l).weatherStart.icon}`),title:t.$t(`workouts.WEATHER.DARK_SKY.${(0,n.SU)(l).weatherStart.icon}`)},null,8,J)])]),(0,a._)("th",null,[(0,a._)("div",X,[(0,a.Uk)((0,s.zw)(t.$t("workouts.END"))+" ",1),(0,a._)("img",{class:"weather-img",src:`/img/weather/${(0,n.SU)(l).weatherEnd.icon}.svg`,alt:t.$t(`workouts.WEATHER.DARK_SKY.${(0,n.SU)(l).weatherEnd.icon}`),title:t.$t(`workouts.WEATHER.DARK_SKY.${(0,n.SU)(l).weatherEnd.icon}`)},null,8,Q)])])])]),(0,a._)("tbody",null,[(0,a._)("tr",null,[(0,a._)("td",null,[(0,a._)("img",{class:"weather-img weather-img-small",src:"/img/weather/temperature.svg",alt:t.$t("workouts.WEATHER.TEMPERATURE"),title:t.$t("workouts.WEATHER.TEMPERATURE")},null,8,tt)]),(0,a._)("td",null,(0,s.zw)(Number((0,n.SU)(l).weatherStart.temperature).toFixed(1))+"°C ",1),(0,a._)("td",null,(0,s.zw)(Number((0,n.SU)(l).weatherEnd.temperature).toFixed(1))+"°C ",1)]),(0,a._)("tr",null,[(0,a._)("td",null,[(0,a._)("img",{class:"weather-img weather-img-small",src:"/img/weather/pour-rain.svg",alt:t.$t("workouts.WEATHER.HUMIDITY"),title:t.$t("workouts.WEATHER.HUMIDITY")},null,8,et)]),(0,a._)("td",null,(0,s.zw)(Number(100*(0,n.SU)(l).weatherStart.humidity).toFixed(1))+"% ",1),(0,a._)("td",null,(0,s.zw)(Number(100*(0,n.SU)(l).weatherEnd.humidity).toFixed(1))+"% ",1)]),(0,a._)("tr",null,[(0,a._)("td",null,[(0,a._)("img",{class:"weather-img weather-img-small",src:"/img/weather/breeze.svg",alt:t.$t("workouts.WEATHER.WIND"),title:t.$t("workouts.WEATHER.WIND")},null,8,ot)]),(0,a._)("td",null,[(0,a.Wm)(Z,{weather:(0,n.SU)(l).weatherStart,useImperialUnits:(0,n.SU)(o)},null,8,["weather","useImperialUnits"])]),(0,a._)("td",null,[(0,a.Wm)(Z,{weather:(0,n.SU)(l).weatherEnd,useImperialUnits:(0,n.SU)(o)},null,8,["weather","useImperialUnits"])])])])])])):(0,a.kq)("",!0)}});const nt=(0,D.Z)(at,[["__scopeId","data-v-76e9ab62"]]);var lt=nt;const rt=t=>((0,a.dD)("data-v-74c5993b"),t=t(),(0,a.Cn)(),t),st={id:"workout-info"},it={class:"workout-data"},ut=rt((()=>(0,a._)("i",{class:"fa fa-clock-o","aria-hidden":"true"},null,-1))),dt={class:"label"},ct={class:"value"},pt={key:0},mt={class:"value"},wt={class:"value"},kt={class:"workout-data"},ft=rt((()=>(0,a._)("i",{class:"fa fa-road","aria-hidden":"true"},null,-1))),_t={class:"label"},vt={class:"workout-data"},gt=rt((()=>(0,a._)("i",{class:"fa fa-tachometer","aria-hidden":"true"},null,-1))),yt={class:"label"},St=rt((()=>(0,a._)("br",null,null,-1))),Ut={class:"label"},ht={key:0,class:"workout-data"},bt=["alt"],Tt={class:"label"},Et=rt((()=>(0,a._)("br",null,null,-1))),Dt={class:"label"},Ot={key:1,class:"workout-data"},It=rt((()=>(0,a._)("i",{class:"fa fa-location-arrow","aria-hidden":"true"},null,-1))),At={class:"label"},Ct=rt((()=>(0,a._)("br",null,null,-1))),Rt={class:"label"};var $t=(0,a.aZ)({__name:"WorkoutData",props:{workoutObject:null,useImperialUnits:{type:Boolean},displayHARecord:{type:Boolean}},setup(t){const e=t,{displayHARecord:o,workoutObject:l,useImperialUnits:r}=(0,n.BK)(e),i=(0,a.Fl)((()=>"0:00:00"!==e.workoutObject.pauses&&null!==e.workoutObject.pauses));return(t,e)=>{const u=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",st,[(0,a._)("div",it,[ut,(0,a._)("span",dt,(0,s.zw)(t.$t("workouts.DURATION")),1),(0,a.Uk)(": "),(0,a._)("span",ct,(0,s.zw)((0,n.SU)(l).moving),1),(0,a.Wm)(z,{workoutObject:(0,n.SU)(l),recordType:"LD"},null,8,["workoutObject"]),(0,n.SU)(i)?((0,a.wg)(),(0,a.iD)("div",pt,[(0,a.Uk)(" ("+(0,s.zw)(t.$t("workouts.PAUSES"))+": ",1),(0,a._)("span",mt,(0,s.zw)((0,n.SU)(l).pauses),1),(0,a.Uk)(" - "+(0,s.zw)(t.$t("workouts.TOTAL_DURATION"))+": ",1),(0,a._)("span",wt,(0,s.zw)((0,n.SU)(l).duration)+")",1)])):(0,a.kq)("",!0)]),(0,a._)("div",kt,[ft,(0,a._)("span",_t,(0,s.zw)(t.$t("workouts.DISTANCE")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).distance,digits:3,unitFrom:"km",strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"]),(0,a.Wm)(z,{workoutObject:(0,n.SU)(l),recordType:"FD"},null,8,["workoutObject"])]),(0,a._)("div",vt,[gt,(0,a._)("span",yt,(0,s.zw)(t.$t("workouts.AVERAGE_SPEED")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).aveSpeed,unitFrom:"km",speed:!0,strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"]),(0,a.Wm)(z,{workoutObject:(0,n.SU)(l),recordType:"AS"},null,8,["workoutObject"]),St,(0,a._)("span",Ut,(0,s.zw)(t.$t("workouts.MAX_SPEED")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).maxSpeed,unitFrom:"km",speed:!0,strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"]),(0,a.Wm)(z,{workoutObject:(0,n.SU)(l),recordType:"MS"},null,8,["workoutObject"])]),null!==(0,n.SU)(l).maxAlt&&null!==(0,n.SU)(l).minAlt?((0,a.wg)(),(0,a.iD)("div",ht,[(0,a._)("img",{class:"mountains",src:"/img/workouts/mountains.svg",alt:t.$t("workouts.ELEVATION")},null,8,bt),(0,a._)("span",Tt,(0,s.zw)(t.$t("workouts.MIN_ALTITUDE")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).minAlt,unitFrom:"m",strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"]),Et,(0,a._)("span",Dt,(0,s.zw)(t.$t("workouts.MAX_ALTITUDE")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).maxAlt,unitFrom:"m",strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"])])):(0,a.kq)("",!0),null!==(0,n.SU)(l).ascent&&null!==(0,n.SU)(l).descent?((0,a.wg)(),(0,a.iD)("div",Ot,[It,(0,a._)("span",At,(0,s.zw)(t.$t("workouts.ASCENT")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).ascent,unitFrom:"m",strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"]),(0,n.SU)(o)?((0,a.wg)(),(0,a.j4)(z,{key:0,workoutObject:(0,n.SU)(l),recordType:"HA"},null,8,["workoutObject"])):(0,a.kq)("",!0),Ct,(0,a._)("span",Rt,(0,s.zw)(t.$t("workouts.DESCENT")),1),(0,a.Uk)(": "),(0,a.Wm)(u,{distance:(0,n.SU)(l).descent,unitFrom:"m",strong:!0,useImperialUnits:(0,n.SU)(r)},null,8,["distance","useImperialUnits"])])):(0,a.kq)("",!0),(0,a.Wm)(lt,{workoutObject:(0,n.SU)(l),useImperialUnits:(0,n.SU)(r)},null,8,["workoutObject","useImperialUnits"])])}}});const Nt=(0,D.Z)($t,[["__scopeId","data-v-74c5993b"]]);var xt=Nt;function zt(t,e){return Array.from(t.getElementsByTagName(e))}function Lt(t){return t?.normalize(),t&&t.textContent||""}function jt(t,e,o){const a=t.getElementsByTagName(e),n=a.length?a[0]:null;return n&&o&&o(n),n}function Wt(t,e,o){const a={};if(!t)return a;const n=t.getElementsByTagName(e),l=n.length?n[0]:null;return l&&o?o(l,a):a}function Pt(t,e,o){const a=Lt(jt(t,e));return a&&o&&o(a)||{}}function Bt(t,e,o){const a=parseFloat(Lt(jt(t,e)));if(!isNaN(a))return a&&o&&o(a)||{}}function Ft(t,e,o){const a=parseFloat(Lt(jt(t,e)));if(!isNaN(a))return a&&o&&o(a),a}function Ht(t,e){const o={};for(const a of e)Pt(t,a,(t=>{o[a]=t}));return o}function Mt(t){return 1===t?.nodeType}function Zt(t){return Wt(t,"line",(t=>{const e=Object.assign({},Pt(t,"color",(t=>({stroke:`#${t}`}))),Bt(t,"opacity",(t=>({"stroke-opacity":t}))),Bt(t,"width",(t=>({"stroke-width":96*t/25.4}))));return e}))}function qt(t){let e=[];if(null===t)return e;for(const o of Array.from(t.childNodes)){if(!Mt(o))continue;const t=Gt(o.nodeName);if("gpxtpx:TrackPointExtension"===t)e=e.concat(qt(o));else{const a=Lt(o);e.push([t,Kt(a)])}}return e}function Gt(t){return["heart","gpxtpx:hr","hr"].includes(t)?"heart":t}function Kt(t){const e=parseFloat(t);return isNaN(e)?t:e}function Yt(t){const e=[parseFloat(t.getAttribute("lon")||""),parseFloat(t.getAttribute("lat")||"")];if(isNaN(e[0])||isNaN(e[1]))return null;Ft(t,"ele",(t=>{e.push(t)}));const o=jt(t,"time");return{coordinates:e,time:o?Lt(o):null,extendedValues:qt(jt(t,"extensions"))}}function Vt(t){const e=Ht(t,["name","cmt","desc","type","time","keywords"]),o=Array.from(t.getElementsByTagNameNS("http://www.garmin.com/xmlschemas/GpxExtensions/v3","*"));for(const n of o)n.parentNode?.parentNode===t&&(e[n.tagName.replace(":","_")]=Lt(n));const a=zt(t,"link");return a.length&&(e.links=a.map((t=>Object.assign({href:t.getAttribute("href")},Ht(t,["text","type"]))))),e}function Jt(t,e){const o=zt(t,e),a=[],n=[],l={};for(let r=0;r1,r=Object.assign({_gpxType:"trk"},Vt(t),Zt(jt(t,"extensions")),a.length?{coordinateProperties:{times:l?a:a[0]}}:{});for(const s of n){o.push(s.line),r.coordinateProperties||(r.coordinateProperties={});const t=r.coordinateProperties,e=Object.entries(s.extendedValues);for(let o=0;onew Array(t.line.length).fill(null)))),t[a][o]=r):t[a]=r}}return{type:"Feature",properties:r,geometry:l?{type:"MultiLineString",coordinates:o}:{type:"LineString",coordinates:o[0]}}}function te(t){const e=Object.assign(Vt(t),Ht(t,["sym"])),o=Yt(t);return o?{type:"Feature",properties:e,geometry:{type:"Point",coordinates:o.coordinates}}:null}function*ee(t){for(const e of zt(t,"trk")){const t=Qt(e);t&&(yield t)}for(const e of zt(t,"rte")){const t=Xt(e);t&&(yield t)}for(const e of zt(t,"wpt")){const t=te(e);t&&(yield t)}}function oe(t){return{type:"FeatureCollection",features:Array.from(ee(t))}}Math.PI;const ae=(t,e)=>{let o;return function(...a){const n=this;o&&clearTimeout(o),o=setTimeout((()=>{t.apply(n,a),o=null}),e)}},ne=t=>t&&"function"===typeof t.charAt?t.charAt(0).toUpperCase()+t.slice(1):t,le=(t,e,o)=>{for(const n in o){const l="set"+ne(n);t[l]?(0,a.YP)((()=>o[n]),((e,o)=>{t[l](e,o)})):e[l]&&(0,a.YP)((()=>o[n]),(t=>{e[l](t)}))}},re=t=>{const e={};for(const o in t)if(o.startsWith("on")&&!o.startsWith("onUpdate")&&"onReady"!==o){const a=o.slice(2).toLocaleLowerCase();e[a]=t[o]}return e},se=async t=>{const e=await Promise.all([o.e(431).then(o.t.bind(o,6431,17)),o.e(93).then(o.t.bind(o,7093,17)),o.e(858).then(o.t.bind(o,8858,17))]);delete t.Default.prototype._getIconUrl,t.Default.mergeOptions({iconRetinaUrl:e[0].default,iconUrl:e[1].default,shadowUrl:e[2].default})},ie=t=>{const e=(0,n.iH)((()=>console.warn(`Method ${t} has been invoked without being replaced`))),o=(...t)=>e.value(...t);return o.wrapped=e,(0,a.JJ)(t,o),o},ue=(t,e)=>t.wrapped.value=e,de="object"===typeof self&&self.self===self&&self||"object"===typeof o.g&&o.g.global===o.g&&o.g||void 0,ce="useGlobalLeaflet",pe={options:{type:Object,default:()=>({})}},me=t=>({options:t.options,methods:{}}),we={...pe,pane:{type:String,default:"overlayPane"},attribution:{type:String,default:null},name:{type:String,custom:!0,default:void 0},layerType:{type:String,custom:!0,default:void 0},visible:{type:Boolean,custom:!0,default:!0}},ke=(t,e,o)=>{const n=(0,a.f3)("addLayer"),l=(0,a.f3)("removeLayer"),{options:r,methods:s}=me(t),i={...r,attribution:t.attribution,pane:t.pane},u=()=>n({leafletObject:e.value}),d=()=>l({leafletObject:e.value}),c={...s,setAttribution(t,e){const o=this.$parent.leafletObject.attributionControl;o.removeAttribution(e).addAttribution(t)},setName(){d(),t.visible&&u()},setLayerType(){d(),t.visible&&u()},setVisible(t){e.value&&(t?u():d())},bindPopup({leafletObject:t}){e.value.bindPopup(t)},bindTooltip({leafletObject:t}){e.value.bindTooltip(t)},unbindTooltip(){const t=e.value?e.value.getTooltip():null;t&&t.unbindTooltip()},unbindPopup(){const t=e.value?e.value.getPopup():null;t&&t.unbindPopup()},updateVisibleProp(t){o.emit("update:visible",t)}};return(0,a.JJ)("bindPopup",c.bindPopup),(0,a.JJ)("bindTooltip",c.bindTooltip),(0,a.JJ)("unbindTooltip",c.unbindTooltip),(0,a.JJ)("unbindPopup",c.unbindPopup),(0,a.Ah)((()=>{c.unbindPopup(),c.unbindTooltip(),d()})),{options:i,methods:c}},fe=(t,e)=>{if(t&&e.default)return(0,a.h)("div",{style:{display:"none"}},e.default())},_e={...pe,interactive:{type:Boolean,default:!0},bubblingMouseEvents:{type:Boolean,default:!0}},ve={...we,..._e,stroke:{type:Boolean,custom:!0,default:!0},color:{type:String,custom:!0,default:"#3388ff"},weight:{type:Number,custom:!0,default:3},opacity:{type:Number,custom:!0,default:1},lineCap:{type:String,custom:!0,default:"round"},lineJoin:{type:String,custom:!0,default:"round"},dashArray:{type:String,custom:!0,default:null},dashOffset:{type:String,custom:!0,default:null},fill:{type:Boolean,custom:!0,default:!1},fillColor:{type:String,custom:!0,default:"#3388ff"},fillOpacity:{type:Number,custom:!0,default:.2},fillRule:{type:String,custom:!0,default:"evenodd"},className:{type:String,custom:!0,default:null}},ge={...ve,latLng:{type:[Object,Array],custom:!0,default:null},radius:{type:Number,default:null}};const ye={...pe,position:{type:String,default:"topright"}},Se=(t,e)=>{const{options:o,methods:n}=me(t),l={...o,position:t.position},r={...n,setPosition(t){e.value&&e.value.setPosition(t)}};return(0,a.Ah)((()=>{e.value&&e.value.remove()})),{options:l,methods:r}},Ue=t=>t.default?(0,a.h)("div",{ref:"root"},t.default()):null;var he={name:"LControl",props:{...ye,disableClickPropagation:{type:Boolean,custom:!0,default:!0},disableScrollPropagation:{type:Boolean,custom:!0,default:!1}},setup(t,e){const l=(0,n.iH)({}),r=(0,n.iH)(null),s=(0,a.f3)(ce),i=(0,a.f3)("registerControl"),{options:u,methods:d}=Se(t,l);return(0,a.bv)((async()=>{const{Control:n,DomEvent:c}=s?de.L:await o.e(633).then(o.bind(o,6633)),p=n.extend({onAdd(){return r.value}});l.value=new p(u),le(d,l.value,t),i({leafletObject:l.value}),t.disableClickPropagation&&c.disableClickPropagation(r.value),t.disableScrollPropagation&&c.disableScrollPropagation(r.value),(0,a.Y3)((()=>e.emit("ready",l.value)))})),{root:r,leafletObject:l}},render(){return Ue(this.$slots)},__file:"src/components/LControl.vue"};const be={...ye,collapsed:{type:Boolean,default:!0},autoZIndex:{type:Boolean,default:!0},hideSingleBase:{type:Boolean,default:!1},sortLayers:{type:Boolean,default:!1},sortFunction:{type:Function,default:void 0}},Te=(t,e)=>{const{options:o}=Se(t,e),a={...o,collapsed:t.collapsed,autoZIndex:t.autoZIndex,hideSingleBase:t.hideSingleBase,sortLayers:t.sortLayers,sortFunction:t.sortFunction},n={addLayer(t){"base"===t.layerType?e.value.addBaseLayer(t.leafletObject,t.name):"overlay"===t.layerType&&e.value.addOverlay(t.leafletObject,t.name)},removeLayer(t){e.value.removeLayer(t.leafletObject)}};return{options:a,methods:n}};var Ee={name:"LControlLayers",props:be,setup(t,e){const l=(0,n.iH)({}),r=(0,a.f3)(ce),s=(0,a.f3)("registerLayerControl"),{options:i,methods:u}=Te(t,l);return(0,a.bv)((async()=>{const{control:n}=r?de.L:await o.e(633).then(o.bind(o,6633));l.value=n.layers(null,null,i),le(u,l.value,t),s({...t,...u,leafletObject:l.value}),(0,a.Y3)((()=>e.emit("ready",l.value)))})),{leafletObject:l.value}},render(){return null},__file:"src/components/LControlLayers.vue"};Boolean,Boolean,Boolean;const De={...we},Oe=(t,e,o)=>{const{options:n,methods:l}=ke(t,e,o),r={...n},s={...l,addLayer(t){e.value.addLayer(t.leafletObject)},removeLayer(t){e.value.removeLayer(t.leafletObject)}};return(0,a.JJ)("addLayer",s.addLayer),(0,a.JJ)("removeLayer",s.removeLayer),{options:r,methods:s}};const Ie={...De,geojson:{type:[Object,Array],default:()=>({})}},Ae=(t,e)=>{const{options:o,methods:a}=Oe(t,e),n={...o,...t},l={...a,setGeojson(t){e.value.clearLayers(),e.value.addData(t)},getGeoJSONData(){return e.value.toGeoJSON()},getBounds(){return e.value.getBounds()}};return{options:n,methods:l}};var Ce={props:Ie,setup(t,e){const l=(0,n.iH)({}),r=(0,n.iH)(!1),s=(0,a.f3)(ce),i=(0,a.f3)("addLayer"),{methods:u,options:d}=Ae(t,l);return(0,a.bv)((async()=>{const{geoJSON:n,DomEvent:c}=s?de.L:await o.e(633).then(o.bind(o,6633));l.value=n(t.geojson,d);const p=re(e.attrs);c.on(l.value,p),le(u,l.value,t),i({...t,...u,leafletObject:l.value}),r.value=!0,(0,a.Y3)((()=>e.emit("ready",l.value)))})),{ready:r,leafletObject:l}},render(){return fe(this.ready,this.$slots)},__file:"src/components/LGeoJson.vue"};const Re={...we,pane:{type:String,default:"tilePane"},opacity:{type:Number,custom:!1,default:1},zIndex:{type:Number,default:1},tileSize:{type:Number,default:256},noWrap:{type:Boolean,default:!1},minZoom:{type:Number,default:0},maxZoom:{type:Number,default:void 0}},$e=(t,e,o)=>{const{options:a,methods:n}=ke(t,e,o),l={...a,pane:t.pane,opacity:t.opacity,zIndex:t.zIndex,tileSize:t.tileSize,noWrap:t.noWrap,minZoom:t.minZoom,maxZoom:t.maxZoom};return{options:l,methods:{...n}}};const Ne={iconUrl:{type:String,custom:!0,default:null},iconRetinaUrl:{type:String,custom:!0,default:null},iconSize:{type:[Object,Array],custom:!0,default:null},iconAnchor:{type:[Object,Array],custom:!0,default:null},popupAnchor:{type:[Object,Array],custom:!0,default:()=>[0,0]},tooltipAnchor:{type:[Object,Array],custom:!0,default:()=>[0,0]},shadowUrl:{type:String,custom:!0,default:null},shadowRetinaUrl:{type:String,custom:!0,default:null},shadowSize:{type:[Object,Array],custom:!0,default:null},shadowAnchor:{type:[Object,Array],custom:!0,default:null},bgPos:{type:[Object,Array],custom:!0,default:()=>[0,0]},className:{type:String,custom:!0,default:""},options:{type:Object,custom:!0,default:()=>({})}};var xe={name:"LIcon",props:{...Ne,...pe},setup(t,e){const l=(0,n.iH)(null),r=(0,a.f3)(ce),s=(0,a.f3)("canSetParentHtml"),i=(0,a.f3)("setParentHtml"),u=(0,a.f3)("setIcon");let d,c,p,m,w;const k=(o,a,n)=>{const l=o&&o.innerHTML;if(!a)return void(n&&w&&s()&&i(l));const r=re(e.attrs);w&&c(w,r);const{options:k}=me(t),f={...k,iconUrl:t.iconUrl,iconRetinaUrl:t.iconRetinaUrl,iconSize:t.iconSize,iconAnchor:t.iconAnchor,popupAnchor:t.popupAnchor,tooltipAnchor:t.tooltipAnchor,shadowUrl:t.shadowUrl,shadowRetinaUrl:t.shadowRetinaUrl,shadowSize:t.shadowSize,shadowAnchor:t.shadowAnchor,bgPos:t.bgPos,className:t.className,html:l||t.html};w=f.html?p(f):m(f),d(w,r),u(w)},f=()=>{(0,a.Y3)((()=>k(l.value,!0,!1)))},_=()=>{(0,a.Y3)((()=>k(l.value,!1,!0)))},v={setIconUrl:f,setIconRetinaUrl:f,setIconSize:f,setIconAnchor:f,setPopupAnchor:f,setTooltipAnchor:f,setShadowUrl:f,setShadowRetinaUrl:f,setShadowAnchor:f,setBgPos:f,setClassName:f,setHtml:f};return(0,a.bv)((async()=>{const{DomEvent:e,divIcon:a,icon:n}=r?de.L:await o.e(633).then(o.bind(o,6633));d=e.on,c=e.off,p=a,m=n,le(v,{},t);const s=new MutationObserver(_);s.observe(l.value,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),f()})),{root:l}},render(){const t=this.$slots.default?this.$slots.default():void 0;return(0,a.h)("div",{ref:"root"},t)},__file:"src/components/LIcon.vue"};Boolean,Boolean;var ze={props:De,setup(t,e){const l=(0,n.iH)({}),r=(0,n.iH)(!1),s=(0,a.f3)(ce),i=(0,a.f3)("addLayer"),{methods:u}=Oe(t,l,e);return(0,a.bv)((async()=>{const{layerGroup:n,DomEvent:d}=s?de.L:await o.e(633).then(o.bind(o,6633));l.value=n(t.options);const c=re(e.attrs);d.on(l.value,c),le(u,l.value,t),i({...t,...u,leafletObject:l.value}),r.value=!0,(0,a.Y3)((()=>e.emit("ready",l.value)))})),{ready:r,leafletObject:l}},render(){return fe(this.ready,this.$slots)},__file:"src/components/LLayerGroup.vue"},Le={emits:["ready","update:zoom","update:center","update:bounds"],props:{...pe,center:{type:[Object,Array],default:()=>[0,0]},bounds:{type:[Array,Object],default:void 0},maxBounds:{type:[Array,Object],default:void 0},zoom:{type:Number,default:0},minZoom:{type:Number,default:void 0},maxZoom:{type:Number,default:void 0},paddingBottomRight:{type:Array,default:void 0},paddingTopLeft:{type:Array,default:void 0},padding:{type:Array,default:void 0},worldCopyJump:{type:Boolean,default:!1},crs:{type:[String,Object],default:"EPSG3857"},maxBoundsViscosity:{type:Number,default:void 0},inertia:{type:Boolean,default:void 0},inertiaDeceleration:{type:Number,default:void 0},inertiaMaxSpeed:{type:Number,default:void 0},easeLinearity:{type:Number,default:void 0},zoomAnimation:{type:Boolean,default:void 0},zoomAnimationThreshold:{type:Number,default:void 0},fadeAnimation:{type:Boolean,default:void 0},markerZoomAnimation:{type:Boolean,default:void 0},noBlockingAnimations:{type:Boolean,default:!1},useGlobalLeaflet:{type:Boolean,default:!1}},setup(t,e){const l=(0,n.iH)(null),r=(0,n.qj)({ready:!1,leafletRef:{},layersToAdd:[],layersInControl:[]}),{options:s}=me(t),i={...s,minZoom:t.minZoom,maxZoom:t.maxZoom,maxBounds:t.maxBounds,maxBoundsViscosity:t.maxBoundsViscosity,worldCopyJump:t.worldCopyJump,crs:t.crs,center:t.center,zoom:t.zoom,inertia:t.inertia,inertiaDeceleration:t.inertiaDeceleration,inertiaMaxSpeed:t.inertiaMaxSpeed,easeLinearity:t.easeLinearity,zoomAnimation:t.zoomAnimation,zoomAnimationThreshold:t.zoomAnimationThreshold,fadeAnimation:t.fadeAnimation,markerZoomAnimation:t.markerZoomAnimation},u=ie("addLayer"),d=ie("removeLayer"),c=ie("registerControl"),p=ie("registerLayerControl");(0,a.JJ)(ce,t.useGlobalLeaflet);const m={moveEndHandler(){e.emit("update:zoom",r.leafletRef.getZoom()),e.emit("update:center",r.leafletRef.getCenter()),e.emit("update:bounds",r.leafletRef.getBounds())},overlayAddHandler(t){const e=r.layersInControl.find((e=>e.name===t.name));e&&e.updateVisibleProp(!0)},overlayRemoveHandler(t){const e=r.layersInControl.find((e=>e.name===t.name));e&&e.updateVisibleProp(!1)}};(0,a.bv)((async()=>{t.useGlobalLeaflet&&(de.L=de.L||await o.e(243).then(o.t.bind(o,5243,23)));const{map:n,CRS:s,Icon:w,latLngBounds:k,latLng:f,DomEvent:_}=t.useGlobalLeaflet?de.L:await o.e(633).then(o.bind(o,6633));try{i.beforeMapMount&&await i.beforeMapMount()}catch(S){console.error(`The following error occurred running the provided beforeMapMount hook ${S.message}`)}await se(w);const v="string"==typeof i.crs?s[i.crs]:i.crs;i.crs=v||s.EPSG3857;const g={addLayer(t){if(void 0!==t.layerType)if(void 0===r.layerControl)r.layersToAdd.push(t);else{const e=r.layersInControl.find((e=>e.leafletObject._leaflet_id===t.leafletObject._leaflet_id));e||(r.layerControl.addLayer(t),r.layersInControl.push(t))}!1!==t.visible&&r.leafletRef.addLayer(t.leafletObject)},removeLayer(t){void 0!==t.layerType&&(void 0===r.layerControl?r.layersToAdd=r.layersToAdd.filter((e=>e.name!==t.name)):(r.layerControl.removeLayer(t.leafletObject),r.layersInControl=r.layersInControl.filter((e=>e.leafletObject._leaflet_id!==t.leafletObject._leaflet_id)))),r.leafletRef.removeLayer(t.leafletObject)},registerLayerControl(t){r.layerControl=t,r.layersToAdd.forEach((t=>{r.layerControl.addLayer(t)})),r.layersToAdd=[],c(t)},registerControl(t){r.leafletRef.addControl(t.leafletObject)},setZoom(e){const o=r.leafletRef.getZoom();e!==o&&r.leafletRef.setZoom(e,{animate:!t.noBlockingAnimations&&null})},setPaddingBottomRight(t){r.paddingBottomRight=t},setPaddingTopLeft(t){r.paddingTopLeft=t},setPadding(t){r.padding=t},setCrs(t){const e=r.leafletRef.getBounds();r.leafletRef.options.crs=t,r.leafletRef.fitBounds(e,{animate:!1,padding:[0,0]})},fitBounds(t){r.leafletRef.fitBounds(t,{animate:!this.noBlockingAnimations&&null})},setBounds(t){if(!t)return;const e=k(t);if(!e.isValid())return;const o=r.lastSetBounds||r.leafletRef.getBounds(),a=!o.equals(e,0);a&&(r.lastSetBounds=e,r.leafletRef.fitBounds(e,this.fitBoundsOptions))},setCenter(t){if(null==t)return;const e=f(t),o=r.lastSetCenter||r.leafletRef.getCenter();o.lat===e.lat&&o.lng===e.lng||(r.lastSetCenter=e,r.leafletRef.panTo(e,{animate:!this.noBlockingAnimations&&null}))}};ue(u,g.addLayer),ue(d,g.removeLayer),ue(c,g.registerControl),ue(p,g.registerLayerControl),r.leafletRef=n(l.value,i),le(g,r.leafletRef,t);const y=re(e.attrs);r.leafletRef.on("moveend",ae(m.moveEndHandler,100)),r.leafletRef.on("overlayadd",m.overlayAddHandler),r.leafletRef.on("overlayremove",m.overlayRemoveHandler),_.on(r.leafletRef,y),r.ready=!0,(0,a.Y3)((()=>e.emit("ready",r.leafletRef)))})),(0,a.Jd)((()=>{r.leafletRef&&r.leafletRef.remove()}));const w=(0,a.Fl)((()=>r.leafletRef)),k=(0,a.Fl)((()=>r.ready));return{root:l,ready:k,leafletObject:w}},render(){return(0,a.h)("div",{style:{width:"100%",height:"100%"},ref:"root"},this.ready?this.$slots.default():{})},__file:"src/components/LMap.vue"};const je={...we,pane:{type:String,default:"markerPane"},draggable:{type:Boolean,custom:!0,default:!1},latLng:{type:[Object,Array],custom:!0,default:null},icon:{type:[Object],default:()=>{},custom:!1},zIndexOffset:{type:Number,custom:!1,default:null}},We=(t,e,o)=>{const{options:a,methods:n}=ke(t,e,o),l={...a,...t},r={...n,setDraggable(t){e.value.dragging&&(t?e.value.dragging.enable():e.value.dragging.disable())},latLngSync(t){o.emit("update:latLng",t.latlng),o.emit("update:lat-lng",t.latlng)},setLatLng(t){if(null!=t&&e.value){const o=e.value.getLatLng();o&&o.equals(t)||e.value.setLatLng(t)}}};return{options:l,methods:r}};var Pe={name:"LMarker",props:je,setup(t,e){const l=(0,n.iH)({}),r=(0,n.iH)(!1),s=(0,a.f3)(ce),i=(0,a.f3)("addLayer");(0,a.JJ)("canSetParentHtml",(()=>!!l.value.getElement())),(0,a.JJ)("setParentHtml",(t=>l.value.getElement().innerHTML=t)),(0,a.JJ)("setIcon",(t=>l.value.setIcon&&l.value.setIcon(t)));const{options:u,methods:d}=We(t,l,e);return void 0===u.icon&&delete u.icon,(0,a.bv)((async()=>{const{marker:n,DomEvent:c}=s?de.L:await o.e(633).then(o.bind(o,6633));l.value=n(t.latLng,u);const p=re(e.attrs);c.on(l.value,p),l.value.on("move",ae(d.latLngSync,100)),le(d,l.value,t),i({...t,...d,leafletObject:l.value}),r.value=!0,(0,a.Y3)((()=>e.emit("ready",l.value)))})),{ready:r,leafletObject:l}},render(){return fe(this.ready,this.$slots)},__file:"src/components/LMarker.vue"};const Be={...ve,latLngs:{type:Array,default:()=>[]},smoothFactor:{type:Number,custom:!0,default:1},noClip:{type:Boolean,custom:!0,default:!1}},Fe={...Be};const He={...pe,content:{type:String,default:null}};const Me={...Re,tms:{type:Boolean,default:!1},subdomains:{type:String,default:"abc"},detectRetina:{type:Boolean,default:!1},url:{type:String,default:null}},Ze=(t,e)=>{const{options:o,methods:a}=$e(t,e),n={...o,tms:t.tms,subdomains:t.subdomains,detectRetina:t.detectRetina};return{options:n,methods:{...a}}};var qe={props:Me,setup(t,e){const l=(0,n.iH)({}),r=(0,a.f3)(ce),s=(0,a.f3)("addLayer"),{options:i,methods:u}=Ze(t,l);return(0,a.bv)((async()=>{const{tileLayer:n,DomEvent:d}=r?de.L:await o.e(633).then(o.bind(o,6633));l.value=n(t.url,i);const c=re(e.attrs);d.on(l.value,c),le(u,l.value,t),s({...t,...u,leafletObject:l.value}),(0,a.Y3)((()=>e.emit("ready",l.value)))})),{leafletObject:l}},render(){return null},__file:"src/components/LTileLayer.vue"};Boolean,Boolean;var Ge=(0,a.aZ)({__name:"CustomMarker",props:{markerCoordinates:null,isStart:{type:Boolean}},setup(t){const e=t,{isStart:o,markerCoordinates:l}=(0,n.BK)(e);return(t,e)=>(0,n.SU)(l).latitude?((0,a.wg)(),(0,a.j4)((0,n.SU)(Pe),{key:0,"lat-lng":[(0,n.SU)(l).latitude,(0,n.SU)(l).longitude]},{default:(0,a.w5)((()=>[(0,a.Wm)((0,n.SU)(xe),{"icon-url":`/img/workouts/${(0,n.SU)(o)?"start":"finish"}.svg`,iconSize:[15,15]},null,8,["icon-url"])])),_:1},8,["lat-lng"])):(0,a.kq)("",!0)}});const Ke=Ge;var Ye=Ke,Ve=o(5801),Je=o(9917),Xe=o(2024);const Qe=t=>((0,a.dD)("data-v-6b490f5d"),t=t(),(0,a.Cn)(),t),to={id:"workout-map"},eo={key:0,class:"leaflet-container"},oo={key:1},ao=Qe((()=>(0,a._)("i",{class:"fa fa-refresh","aria-hidden":"true"},null,-1))),no={key:1,class:"no-map"};var lo=(0,a.aZ)({__name:"index",props:{workoutData:null,markerCoordinates:{default:()=>({})}},setup(t){const e=t,o=(0,Je.o)(),{workoutData:l,markerCoordinates:r}=(0,n.BK)(e),i=(0,n.iH)(null),u=(0,a.Fl)((()=>g())),d=(0,a.Fl)((()=>o.getters[Ve.SY.GETTERS.APP_CONFIG])),c=(0,a.Fl)((()=>_(u))),p=(0,a.Fl)((()=>e.workoutData&&e.workoutData.gpx?f(e.workoutData.gpx):{})),m=(0,a.Fl)((()=>e.workoutData&&e.workoutData.chartData.length>0?{latitude:e.workoutData.chartData[0].latitude,longitude:e.workoutData.chartData[0].longitude}:{})),w=(0,a.Fl)((()=>e.workoutData&&e.workoutData.chartData.length>0?{latitude:e.workoutData.chartData[e.workoutData.chartData.length-1].latitude,longitude:e.workoutData.chartData[e.workoutData.chartData.length-1].longitude}:{})),k=(0,n.iH)(!1);function f(t){if(!t||""!==t)try{const e=oe((new DOMParser).parseFromString(t,"text/xml"));return{jsonData:e}}catch(e){return console.error("Invalid gpx content"),{}}return{}}function _(t){return[(t.value[0][0]+t.value[1][0])/2,(t.value[0][1]+t.value[1][1])/2]}function v(t){i.value?.leafletObject&&i.value?.leafletObject.fitBounds(t)}function g(){return e.workoutData?[[e.workoutData.workout.bounds[0],e.workoutData.workout.bounds[1]],[e.workoutData.workout.bounds[2],e.workoutData.workout.bounds[3]]]:[]}function y(){i.value?.leafletObject.fitBounds(g())}function S(){k.value=!k.value,k.value||setTimeout((()=>{y()}),100)}return(t,e)=>{const o=(0,a.up)("VFullscreen");return(0,a.wg)(),(0,a.iD)("div",to,[(0,n.SU)(l).loading?((0,a.wg)(),(0,a.iD)("div",eo)):((0,a.wg)(),(0,a.iD)("div",oo,[(0,n.SU)(l).workout.with_gpx?((0,a.wg)(),(0,a.j4)(o,{key:0,modelValue:k.value,"onUpdate:modelValue":e[1]||(e[1]=t=>k.value=t)},{default:(0,a.w5)((()=>[(0,a._)("div",{class:(0,s.C_)(["leaflet-container",{"fullscreen-map":k.value}])},[(0,n.SU)(p).jsonData&&(0,n.SU)(c)&&2===(0,n.SU)(u).length?((0,a.wg)(),(0,a.j4)((0,n.SU)(Le),{key:0,zoom:13,maxZoom:19,center:(0,n.SU)(c),bounds:(0,n.SU)(u),ref_key:"workoutMap",ref:i,onReady:e[0]||(e[0]=t=>v((0,n.SU)(u)))},{default:(0,a.w5)((()=>[(0,a.Wm)((0,n.SU)(Ee)),(0,a.Wm)((0,n.SU)(he),{position:"topleft",class:"map-control",onClick:y},{default:(0,a.w5)((()=>[ao])),_:1}),(0,a.Wm)((0,n.SU)(he),{position:"topleft",class:"map-control",onClick:S},{default:(0,a.w5)((()=>[(0,a._)("i",{class:(0,s.C_)("fa fa-"+(k.value?"compress":"arrows-alt")),"aria-hidden":"true"},null,2)])),_:1}),(0,a.Wm)((0,n.SU)(qe),{url:`${(0,n.SU)(Xe.k)()}workouts/map_tile/{s}/{z}/{x}/{y}.png`,attribution:(0,n.SU)(d).map_attribution,bounds:(0,n.SU)(u)},null,8,["url","attribution","bounds"]),(0,a.Wm)((0,n.SU)(Ce),{geojson:(0,n.SU)(p).jsonData},null,8,["geojson"]),(0,n.SU)(r).latitude?((0,a.wg)(),(0,a.j4)((0,n.SU)(Pe),{key:0,"lat-lng":[(0,n.SU)(r).latitude,(0,n.SU)(r).longitude]},null,8,["lat-lng"])):(0,a.kq)("",!0),(0,a.Wm)((0,n.SU)(ze),{name:t.$t("workouts.START_AND_FINISH"),"layer-type":"overlay"},{default:(0,a.w5)((()=>[(0,n.SU)(m).latitude?((0,a.wg)(),(0,a.j4)(Ye,{key:0,markerCoordinates:(0,n.SU)(m),isStart:!0},null,8,["markerCoordinates"])):(0,a.kq)("",!0),(0,n.SU)(w).latitude?((0,a.wg)(),(0,a.j4)(Ye,{key:1,markerCoordinates:(0,n.SU)(w),isStart:!1},null,8,["markerCoordinates"])):(0,a.kq)("",!0)])),_:1},8,["name"])])),_:1},8,["center","bounds"])):(0,a.kq)("",!0)],2)])),_:1},8,["modelValue"])):((0,a.wg)(),(0,a.iD)("div",no,(0,s.zw)(t.$t("workouts.NO_MAP")),1))]))])}}});const ro=(0,D.Z)(lo,[["__scopeId","data-v-6b490f5d"]]);var so=ro,io=o(6558);const uo={class:"workout-detail"};var co=(0,a.aZ)({__name:"index",props:{authUser:null,displaySegment:{type:Boolean},sports:null,workoutData:null,markerCoordinates:{default:()=>({})}},setup(t){const e=t,o=(0,l.yj)(),r=(0,Je.o)(),{authUser:s,markerCoordinates:i,workoutData:u}=(0,n.BK)(e),d=(0,a.Fl)((()=>e.workoutData.workout)),c=(0,n.iH)(o.params.workoutId?+o.params.segmentId:null),p=(0,a.Fl)((()=>d.value.segments.length>0&&c.value?d.value.segments[+c.value-1]:null)),m=(0,n.iH)(!1),w=(0,a.Fl)((()=>e.sports?e.sports.find((t=>t.id===e.workoutData.workout.sport_id)):{})),k=(0,a.Fl)((()=>_(d.value,p.value)));function f(t,e,o){const a=e&&o&&1!==o?`/workouts/${t.id}/segment/${o-1}`:!e&&t.previous_workout?`/workouts/${t.previous_workout}`:null,n=e&&o&&oo.params.segmentId),(async t=>{t&&(c.value=+t)})),(t,e)=>{const o=(0,a.up)("Modal"),l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",uo,[m.value?((0,a.wg)(),(0,a.j4)(o,{key:0,title:t.$t("common.CONFIRMATION"),message:t.$t("workouts.WORKOUT_DELETION_CONFIRMATION"),onConfirmAction:e[0]||(e[0]=t=>g((0,n.SU)(k).workoutId)),onCancelAction:e[1]||(e[1]=t=>v(!1))},null,8,["title","message"])):(0,a.kq)("",!0),(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Wm)(I,{sport:(0,n.SU)(w),workoutObject:(0,n.SU)(k),onDisplayModal:e[2]||(e[2]=t=>v(!0))},null,8,["sport","workoutObject"])])),content:(0,a.w5)((()=>[(0,a.Wm)(so,{workoutData:(0,n.SU)(u),markerCoordinates:(0,n.SU)(i)},null,8,["workoutData","markerCoordinates"]),(0,a.Wm)(xt,{workoutObject:(0,n.SU)(k),useImperialUnits:(0,n.SU)(s).imperial_units,displayHARecord:(0,n.SU)(s).display_ascent},null,8,["workoutObject","useImperialUnits","displayHARecord"])])),_:1})])}}});const po=(0,D.Z)(co,[["__scopeId","data-v-9fc0bab8"]]);var mo=po,wo=o(6518);const ko=t=>{const e=document.getElementById(t);if(e){let t=e.querySelector("ul");return t||(t=document.createElement("ul"),e.appendChild(t)),t}throw new Error("No legend container")},fo={id:"htmlLegend",afterUpdate(t,e,o){const a=ko(o.containerID);while(a.firstChild)a.firstChild.remove();const n=t.options.plugins?.legend?.labels?.generateLabels?t.options.plugins?.legend?.labels?.generateLabels(t):[];n.forEach((e=>{const o=document.createElement("li");o.onclick=()=>{void 0!==e.datasetIndex&&(t.setDatasetVisibility(e.datasetIndex,!t.isDatasetVisible(e.datasetIndex)),t.update())};const n=document.createElement("input");n&&(n.type="checkbox",n.id=e.text,n.checked=!e.hidden);const l=document.createTextNode(e.text),r=document.createElement("span");r&&(r.style.background=String(e.fillStyle),r.style.borderColor=String(e.strokeStyle)),o.appendChild(n),o.appendChild(l),o.appendChild(r),a.appendChild(o)}))}};var _o=o(3649),vo=o(3768);const go=t=>((0,a.dD)("data-v-dcea1168"),t=t(),(0,a.Cn)(),t),yo={id:"workout-chart"},So={class:"chart-radio"},Uo=["checked"],ho=["checked"],bo=go((()=>(0,a._)("div",{id:"chart-legend"},null,-1))),To={class:"chart-info"},Eo={class:"no-data-cleaning"},Do={class:"elevation-start"},Oo=["checked"];var Io=(0,a.aZ)({__name:"index",props:{authUser:null,workoutData:null},emits:["getCoordinates"],setup(t,{emit:e}){const o=t,{t:l}=(0,L.QT)(),r=(0,n.iH)(!0),i=(0,n.iH)(!0),u=(0,a.Fl)((()=>(0,vo.EX)(o.workoutData.chartData,l,o.authUser.imperial_units))),d=y("km"),c=y("m"),p=(0,a.Fl)((()=>({labels:r.value?u.value.distance_labels:u.value.duration_labels,datasets:JSON.parse(JSON.stringify([u.value.datasets.speed,u.value.datasets.elevation]))}))),m=(0,a.Fl)((()=>u.value.coordinates)),w=(0,a.Fl)((()=>({responsive:!0,maintainAspectRatio:!0,animation:!1,layout:{padding:{top:22}},scales:{[r.value?"xDistance":"xDuration"]:{grid:{drawOnChartArea:!1},ticks:{count:10,callback:function(t){return r.value?Number(t).toFixed(2):_(t)}},type:"linear",bounds:"data",title:{display:!0,text:r.value?l("workouts.DISTANCE")+` (${d})`:l("workouts.DURATION")}},ySpeed:{grid:{drawOnChartArea:!1},position:"left",title:{display:!0,text:l("workouts.SPEED")+` (${d}/h)`}},yElevation:{beginAtZero:i.value,grid:{drawOnChartArea:!1},position:"right",title:{display:!0,text:l("workouts.ELEVATION")+` (${c})`}}},elements:{point:{pointStyle:"circle",pointRadius:0}},plugins:{datalabels:{display:!1},tooltip:{interaction:{intersect:!1,mode:"index"},callbacks:{label:function(t){const e=` ${t.dataset.label}: ${t.formattedValue}`;return"yElevation"===t.dataset.yAxisID?e+` ${c}`:e+` ${d}/h`},title:function(t){return t.length>0&&v(m.value[t[0].dataIndex]),0===t.length?"":r.value?`${l("workouts.DISTANCE")}: ${t[0].label} ${d}`:`${l("workouts.DURATION")}: ${_(t[0].label.replace(",",""))}`}}},legend:{display:!1},htmlLegend:{containerID:"chart-legend"}}}))),{lineChartProps:k}=(0,wo.tn)({chartData:p,options:w,plugins:[fo]});function f(){r.value=!r.value}function _(t){return new Date(1e3*+t).toISOString().substr(11,8)}function v(t){e("getCoordinates",t)}function g(){v({latitude:null,longitude:null})}function y(t){return o.authUser.imperial_units?_o.Dl[t].defaultTarget:t}return(t,e)=>{const o=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",yo,[(0,a.Wm)(o,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(t.$t("workouts.ANALYSIS")),1)])),content:(0,a.w5)((()=>[(0,a._)("div",So,[(0,a._)("label",null,[(0,a._)("input",{type:"radio",name:"distance",checked:r.value,onClick:f},null,8,Uo),(0,a.Uk)(" "+(0,s.zw)(t.$t("workouts.DISTANCE")),1)]),(0,a._)("label",null,[(0,a._)("input",{type:"radio",name:"duration",checked:!r.value,onClick:f},null,8,ho),(0,a.Uk)(" "+(0,s.zw)(t.$t("workouts.DURATION")),1)])]),bo,(0,a.Wm)((0,n.SU)(wo.wW),(0,a.dG)((0,n.SU)(k),{class:"line-chart",onMouseleave:g}),null,16),(0,a._)("div",To,[(0,a._)("div",Eo,(0,s.zw)(t.$t("workouts.NO_DATA_CLEANING")),1),(0,a._)("div",Do,[(0,a._)("label",null,[(0,a._)("input",{type:"checkbox",checked:i.value,onClick:e[0]||(e[0]=t=>i.value=!i.value)},null,8,Oo),(0,a.Uk)(" "+(0,s.zw)(t.$t("workouts.START_ELEVATION_AT_ZERO")),1)])])])])),_:1})])}}});const Ao=(0,D.Z)(Io,[["__scopeId","data-v-dcea1168"]]);var Co=Ao;const Ro={id:"workout-note"};var $o=(0,a.aZ)({__name:"WorkoutNotes",props:{notes:{default:()=>null}},setup(t){const e=t,{notes:o}=(0,n.BK)(e);return(t,e)=>{const l=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",Ro,[(0,a.Wm)(l,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(t.$t("workouts.NOTES")),1)])),content:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)((0,n.SU)(o)&&""!==(0,n.SU)(o)?(0,n.SU)(o):t.$t("workouts.NO_NOTES")),1)])),_:1})])}}});const No=(0,D.Z)($o,[["__scopeId","data-v-028ad527"]]);var xo=No;const zo={id:"workout-segments"};var Lo=(0,a.aZ)({__name:"WorkoutSegments",props:{segments:null,useImperialUnits:{type:Boolean}},setup(t){const e=t,{segments:o,useImperialUnits:l}=(0,n.BK)(e);return(t,e)=>{const r=(0,a.up)("router-link"),i=(0,a.up)("Distance"),u=(0,a.up)("Card");return(0,a.wg)(),(0,a.iD)("div",zo,[(0,a.Wm)(u,null,{title:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(t.$t("workouts.SEGMENT",2)),1)])),content:(0,a.w5)((()=>[(0,a._)("ul",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,n.SU)(o),((e,o)=>((0,a.wg)(),(0,a.iD)("li",{key:e.segment_id},[(0,a.Wm)(r,{to:{name:"WorkoutSegment",params:{workoutId:e.workout_id,segmentId:o+1}}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(t.$t("workouts.SEGMENT",1))+" "+(0,s.zw)(o+1),1)])),_:2},1032,["to"]),(0,a.Uk)(" ("+(0,s.zw)(t.$t("workouts.DISTANCE"))+": ",1),(0,a.Wm)(i,{distance:e.distance,unitFrom:"km",useImperialUnits:(0,n.SU)(l)},null,8,["distance","useImperialUnits"]),(0,a.Uk)(", "+(0,s.zw)(t.$t("workouts.DURATION"))+": "+(0,s.zw)(e.duration)+") ",1)])))),128))])])),_:1})])}}});const jo=(0,D.Z)(Lo,[["__scopeId","data-v-6b8a27cd"]]);var Wo=jo;const Po=t=>((0,a.dD)("data-v-53c4e53a"),t=t(),(0,a.Cn)(),t),Bo={id:"workout",class:"view"},Fo={class:"container"},Ho={key:0,class:"workout-container"},Mo={key:0},Zo=Po((()=>(0,a._)("div",{id:"bottom"},null,-1))),qo={key:1};var Go=(0,a.aZ)({__name:"Workout",props:{displaySegment:{type:Boolean}},setup(t){const e=t,o=(0,l.yj)(),s=(0,Je.o)(),{displaySegment:i}=(0,n.BK)(e),u=(0,a.Fl)((()=>s.getters[Ve.aX.GETTERS.WORKOUT_DATA])),d=(0,a.Fl)((()=>s.getters[Ve.YN.GETTERS.AUTH_USER_PROFILE])),c=(0,a.Fl)((()=>s.getters[Ve.O8.GETTERS.SPORTS])),p=(0,n.iH)({latitude:null,longitude:null});function m(t){p.value={latitude:t.latitude,longitude:t.longitude}}return(0,a.wF)((()=>{const t={workoutId:o.params.workoutId};e.displaySegment&&(t.segmentId=o.params.segmentId),s.dispatch(Ve.aX.ACTIONS.GET_WORKOUT_DATA,t)})),(0,a.Ah)((()=>{s.commit(Ve.aX.MUTATIONS.EMPTY_WORKOUT)})),(0,a.YP)((()=>o.params.workoutId),(async t=>{t&&s.dispatch(Ve.aX.ACTIONS.GET_WORKOUT_DATA,{workoutId:t})})),(0,a.YP)((()=>o.params.segmentId),(async t=>{if(o.params.workoutId){const e={workoutId:o.params.workoutId};t&&(e.segmentId=t),s.dispatch(Ve.aX.ACTIONS.GET_WORKOUT_DATA,e)}})),(t,e)=>((0,a.wg)(),(0,a.iD)("div",Bo,[(0,a._)("div",Fo,[(0,n.SU)(c).length>0?((0,a.wg)(),(0,a.iD)("div",Ho,[(0,n.SU)(u).workout.id?((0,a.wg)(),(0,a.iD)("div",Mo,[(0,a.Wm)(mo,{workoutData:(0,n.SU)(u),sports:(0,n.SU)(c),authUser:(0,n.SU)(d),markerCoordinates:p.value,displaySegment:(0,n.SU)(i)},null,8,["workoutData","sports","authUser","markerCoordinates","displaySegment"]),(0,n.SU)(u).workout.with_gpx&&(0,n.SU)(u).chartData.length>0?((0,a.wg)(),(0,a.j4)(Co,{key:0,workoutData:(0,n.SU)(u),authUser:(0,n.SU)(d),displaySegment:(0,n.SU)(i),onGetCoordinates:m},null,8,["workoutData","authUser","displaySegment"])):(0,a.kq)("",!0),!(0,n.SU)(i)&&(0,n.SU)(u).workout.segments.length>1?((0,a.wg)(),(0,a.j4)(Wo,{key:1,segments:(0,n.SU)(u).workout.segments,useImperialUnits:(0,n.SU)(d).imperial_units},null,8,["segments","useImperialUnits"])):(0,a.kq)("",!0),(0,n.SU)(i)?(0,a.kq)("",!0):((0,a.wg)(),(0,a.j4)(xo,{key:2,notes:(0,n.SU)(u).workout.notes},null,8,["notes"])),Zo])):((0,a.wg)(),(0,a.iD)("div",qo,[(0,n.SU)(u).loading?(0,a.kq)("",!0):((0,a.wg)(),(0,a.j4)(r.Z,{key:0,target:"WORKOUT"}))]))])):(0,a.kq)("",!0)])]))}});const Ko=(0,D.Z)(Go,[["__scopeId","data-v-53c4e53a"]]);var Yo=Ko},5651:function(t,e,o){o.r(e),o.d(e,{default:function(){return Bt}});var a=o(6252),n=o(2262),l=o(3577),r=o(9150),s=(o(7658),o(2201)),i=o(631),u=o(3649);const d=t=>((0,a.dD)("data-v-6c38593a"),t=t(),(0,a.Cn)(),t),c={class:"workouts-filters"},p={class:"box"},m={class:"form"},w={class:"form-items-group"},k={class:"form-item"},f=["value"],_={class:"form-item"},v=["value"],g={class:"form-items-group"},y={class:"form-item"},S=["value"],U=d((()=>(0,a._)("option",{value:""},null,-1))),h=["value"],b={class:"form-items-group"},T={class:"form-item"},E={class:"form-inputs-group"},D=["value"],O=["value"],I={class:"form-items-group"},A={class:"form-item"},C={class:"form-inputs-group"},R=["value"],$=["value"],N={class:"form-items-group"},x={class:"form-item"},z={class:"form-inputs-group"},L=["value"],j=["value"],W={class:"form-items-group"},P={class:"form-item"},B={class:"form-inputs-group"},F=["value"],H=["value"],M={class:"form-button"};var Z=(0,a.aZ)({__name:"WorkoutsFilters",props:{authUser:null,sports:null},emits:["filter"],setup(t,{emit:e}){const o=t,{t:d}=(0,r.QT)(),Z=(0,s.yj)(),q=(0,s.tv)(),{authUser:G}=(0,n.BK)(o),K=G.value.imperial_units?u.Dl.km.defaultTarget:"km",Y=(0,a.Fl)((()=>(0,i.xH)(o.sports,d)));let V=Object.assign({},Z.query);function J(t){""===t.target.value?delete V[t.target.name]:V[t.target.name]=t.target.value}function X(){e("filter"),"page"in V&&(V["page"]="1"),q.push({path:"/workouts",query:V})}function Q(){e("filter"),q.push({path:"/workouts",query:{}})}return(0,a.YP)((()=>Z.query),(t=>{V=Object.assign({},t)})),(t,e)=>((0,a.wg)(),(0,a.iD)("div",c,[(0,a._)("div",p,[(0,a._)("div",m,[(0,a._)("div",w,[(0,a._)("div",k,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.FROM"))+": ",1),(0,a._)("input",{name:"from",type:"date",value:t.$route.query.from,onChange:J},null,40,f)]),(0,a._)("div",_,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.TO"))+": ",1),(0,a._)("input",{name:"to",type:"date",value:t.$route.query.to,onChange:J},null,40,v)])]),(0,a._)("div",g,[(0,a._)("div",y,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.SPORT",1))+":",1),(0,a._)("select",{name:"sport_id",value:t.$route.query.sport_id,onChange:J},[U,((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,n.SU)(Y).filter((t=>(0,n.SU)(G).sports_list.includes(t.id))),(t=>((0,a.wg)(),(0,a.iD)("option",{value:t.id,key:t.id},(0,l.zw)(t.translatedLabel),9,h)))),128))],40,S)])]),(0,a._)("div",b,[(0,a._)("div",T,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.DISTANCE"))+" ("+(0,l.zw)((0,n.SU)(K))+"): ",1),(0,a._)("div",E,[(0,a._)("input",{name:"distance_from",type:"number",min:"0",step:"0.1",value:t.$route.query.distance_from,onChange:J},null,40,D),(0,a._)("span",null,(0,l.zw)(t.$t("workouts.TO")),1),(0,a._)("input",{name:"distance_to",type:"number",min:"0",step:"0.1",value:t.$route.query.distance_to,onChange:J},null,40,O)])])]),(0,a._)("div",I,[(0,a._)("div",A,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.DURATION"))+": ",1),(0,a._)("div",C,[(0,a._)("input",{name:"duration_from",value:t.$route.query.duration_from,onChange:J,pattern:"^([0-9]*[0-9]):([0-5][0-9])$",placeholder:"hh:mm",type:"text"},null,40,R),(0,a._)("span",null,(0,l.zw)(t.$t("workouts.TO")),1),(0,a._)("input",{name:"duration_to",value:t.$route.query.duration_to,onChange:J,pattern:"^([0-9]*[0-9]):([0-5][0-9])$",placeholder:"hh:mm",type:"text"},null,40,$)])])]),(0,a._)("div",N,[(0,a._)("div",x,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.AVE_SPEED"))+" ("+(0,l.zw)((0,n.SU)(K))+"/h): ",1),(0,a._)("div",z,[(0,a._)("input",{min:"0",name:"ave_speed_from",value:t.$route.query.ave_speed_from,onChange:J,step:"0.1",type:"number"},null,40,L),(0,a._)("span",null,(0,l.zw)(t.$t("workouts.TO")),1),(0,a._)("input",{min:"0",name:"ave_speed_to",value:t.$route.query.ave_speed_to,onChange:J,step:"0.1",type:"number"},null,40,j)])])]),(0,a._)("div",W,[(0,a._)("div",P,[(0,a._)("label",null,(0,l.zw)(t.$t("workouts.MAX_SPEED"))+" ("+(0,l.zw)((0,n.SU)(K))+"/h): ",1),(0,a._)("div",B,[(0,a._)("input",{min:"0",name:"max_speed_from",value:t.$route.query.max_speed_from,onChange:J,step:"0.1",type:"number"},null,40,F),(0,a._)("span",null,(0,l.zw)(t.$t("workouts.TO")),1),(0,a._)("input",{min:"0",name:"max_speed_to",value:t.$route.query.max_speed_to,onChange:J,step:"0.1",type:"number"},null,40,H)])])])]),(0,a._)("div",M,[(0,a._)("button",{class:"confirm",onClick:X},(0,l.zw)(t.$t("buttons.FILTER")),1),(0,a._)("button",{class:"confirm",onClick:Q},(0,l.zw)(t.$t("buttons.CLEAR_FILTER")),1)])])]))}}),q=o(3744);const G=(0,q.Z)(Z,[["__scopeId","data-v-6c38593a"]]);var K=G,Y=o(8626),V=o(5020),J=o(2056),X=o(5630),Q=o(5801),tt=o(9917),et=o(2766),ot=o(6558),at=o(3768);const nt=t=>((0,a.dD)("data-v-0f8ea7b0"),t=t(),(0,a.Cn)(),t),lt={class:"workouts-list"},rt={class:"total"},st={class:"total-label"},it={key:0},ut={key:0,class:"workouts-table responsive-table"},dt=nt((()=>(0,a._)("th",{class:"sport-col"},null,-1))),ct={class:"sport-col"},pt={class:"cell-heading"},mt=["onMouseover"],wt={class:"cell-heading"},kt={key:0,class:"fa fa-map-o","aria-hidden":"true"},ft={class:"title"},_t={class:"workout-date"},vt={class:"cell-heading"},gt={class:"text-right"},yt={class:"cell-heading"},St={class:"text-right"},Ut={class:"cell-heading"},ht={class:"text-right"},bt={class:"cell-heading"},Tt={class:"text-right"},Et={class:"cell-heading"},Dt={class:"text-right"},Ot={class:"cell-heading"},It={class:"text-right"},At={class:"cell-heading"},Ct=nt((()=>(0,a._)("div",{id:"bottom"},null,-1)));var Rt=(0,a.aZ)({__name:"WorkoutsList",props:{user:null,sports:null},setup(t){const e=t,o=(0,tt.o)(),r=(0,s.yj)(),d=(0,s.tv)(),{user:c,sports:p}=(0,n.BK)(e),m=["ave_speed","distance","duration","workout_date"],w=(0,a.Fl)((()=>o.getters[Q.aX.GETTERS.USER_WORKOUTS])),k=(0,a.Fl)((()=>o.getters[Q.aX.GETTERS.WORKOUTS_PAGINATION])),f=(0,a.Fl)((()=>o.getters[Q.SY.GETTERS.LANGUAGE]));let _=S(r.query);const v=(0,n.iH)(null);function g(t){o.dispatch(Q.aX.ACTIONS.GET_USER_WORKOUTS,c.value.imperial_units?U(t):t)}function y(t,e){const o=Object.assign({},r.query);o[t]=e,"per_page"===t&&(o["page"]="1"),_=S(o),d.push({path:"/workouts",query:_})}function S(t){const e=(0,et.pm)(t,m,at.eR.order_by,{defaultSort:at.eR.order});return Object.keys(t).filter((t=>et.Ne.includes(t))).map((o=>{"string"===typeof t[o]&&(e[o]=t[o])})),e}function U(t){const e={...t};return Object.entries(e).map((t=>{t[0].match("speed|distance")&&t[1]&&(e[t[0]]=(0,u.sC)(+t[1],"mi","km"))})),e}function h(t){v.value=t}return(0,a.wF)((()=>{g(_)})),(0,a.YP)((()=>r.query),(async t=>{_=S(t),g(_)})),(t,e)=>{const o=(0,a.up)("SportImage"),r=(0,a.up)("router-link"),s=(0,a.up)("Distance");return(0,a.wg)(),(0,a.iD)("div",lt,[(0,a._)("div",{class:(0,l.C_)(["box",{"empty-table":0===(0,n.SU)(w).length}])},[(0,a._)("div",rt,[(0,a._)("span",st,(0,l.zw)(t.$t("common.TOTAL").toLowerCase())+": ",1),null!==(0,n.SU)(k).total?((0,a.wg)(),(0,a.iD)("span",it,(0,l.zw)((0,n.SU)(k).total)+" "+(0,l.zw)(t.$t("workouts.WORKOUT",(0,n.SU)(k).total)),1)):(0,a.kq)("",!0)]),(0,a.Wm)(Y.Z,{sort:(0,n.SU)(et.fS),order_by:m,query:(0,n.SU)(_),message:"workouts",onUpdateSelect:y},null,8,["sort","query"]),(0,n.SU)(w).length>0?((0,a.wg)(),(0,a.iD)("div",ut,[(0,a.Wm)(V.Z,{class:"top-pagination",pagination:(0,n.SU)(k),path:"/workouts",query:(0,n.SU)(_)},null,8,["pagination","query"]),(0,a._)("table",null,[(0,a._)("thead",{class:(0,l.C_)({smaller:"de"===(0,n.SU)(f)})},[(0,a._)("tr",null,[dt,(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.WORKOUT",1))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.DATE"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.DISTANCE"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.DURATION"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.AVE_SPEED"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.MAX_SPEED"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.ASCENT"))),1),(0,a._)("th",null,(0,l.zw)((0,l.kC)(t.$t("workouts.DESCENT"))),1)])],2),(0,a._)("tbody",null,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,n.SU)(w),(u=>((0,a.wg)(),(0,a.iD)("tr",{key:u.id},[(0,a._)("td",ct,[(0,a._)("span",pt,(0,l.zw)(t.$t("workouts.SPORT",1)),1),(0,n.SU)(p).length>0?((0,a.wg)(),(0,a.j4)(o,{key:0,title:(0,n.SU)(p).find((t=>t.id===u.sport_id)).translatedLabel,"sport-label":(0,n.SU)(i.PA)(u,(0,n.SU)(p)),color:(0,n.SU)(i.CM)(u,(0,n.SU)(p))},null,8,["title","sport-label","color"])):(0,a.kq)("",!0)]),(0,a._)("td",{class:"workout-title",onMouseover:t=>h(u.id),onMouseleave:e[0]||(e[0]=t=>h(null))},[(0,a._)("span",wt,(0,l.zw)((0,l.kC)(t.$t("workouts.WORKOUT",1))),1),(0,a.Wm)(r,{class:"nav-item",to:{name:"Workout",params:{workoutId:u.id}}},{default:(0,a.w5)((()=>[u.with_gpx?((0,a.wg)(),(0,a.iD)("i",kt)):(0,a.kq)("",!0),(0,a._)("span",ft,(0,l.zw)(u.title),1)])),_:2},1032,["to"]),u.with_gpx&&v.value===u.id?((0,a.wg)(),(0,a.j4)(J.Z,{key:0,workout:u,"display-hover":!0},null,8,["workout"])):(0,a.kq)("",!0)],40,mt),(0,a._)("td",_t,[(0,a._)("span",vt,(0,l.zw)(t.$t("workouts.DATE")),1),(0,a.Uk)(" "+(0,l.zw)((0,n.SU)(ot.p6)(u.workout_date,(0,n.SU)(c).timezone,(0,n.SU)(c).date_format)),1)]),(0,a._)("td",gt,[(0,a._)("span",yt,(0,l.zw)(t.$t("workouts.DISTANCE")),1),(0,a.Wm)(s,{distance:u.distance,unitFrom:"km",useImperialUnits:(0,n.SU)(c).imperial_units},null,8,["distance","useImperialUnits"])]),(0,a._)("td",St,[(0,a._)("span",Ut,(0,l.zw)(t.$t("workouts.DURATION")),1),(0,a.Uk)(" "+(0,l.zw)(u.moving),1)]),(0,a._)("td",ht,[(0,a._)("span",bt,(0,l.zw)(t.$t("workouts.AVE_SPEED")),1),(0,a.Wm)(s,{distance:u.ave_speed,unitFrom:"km",speed:!0,useImperialUnits:(0,n.SU)(c).imperial_units},null,8,["distance","useImperialUnits"])]),(0,a._)("td",Tt,[(0,a._)("span",Et,(0,l.zw)(t.$t("workouts.MAX_SPEED")),1),(0,a.Wm)(s,{distance:u.max_speed,unitFrom:"km",speed:!0,useImperialUnits:(0,n.SU)(c).imperial_units},null,8,["distance","useImperialUnits"])]),(0,a._)("td",Dt,[(0,a._)("span",Ot,(0,l.zw)(t.$t("workouts.ASCENT")),1),u.with_gpx?((0,a.wg)(),(0,a.j4)(s,{key:0,distance:u.ascent,unitFrom:"m",useImperialUnits:(0,n.SU)(c).imperial_units},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)]),(0,a._)("td",It,[(0,a._)("span",At,(0,l.zw)(t.$t("workouts.DESCENT")),1),u.with_gpx?((0,a.wg)(),(0,a.j4)(s,{key:0,distance:u.descent,unitFrom:"m",useImperialUnits:(0,n.SU)(c).imperial_units},null,8,["distance","useImperialUnits"])):(0,a.kq)("",!0)])])))),128))])]),(0,a.Wm)(V.Z,{pagination:(0,n.SU)(k),path:"/workouts",query:(0,n.SU)(_)},null,8,["pagination","query"])])):(0,a.kq)("",!0)],2),0===(0,n.SU)(w).length?((0,a.wg)(),(0,a.j4)(X.Z,{key:0})):(0,a.kq)("",!0),Ct])}}});const $t=(0,q.Z)(Rt,[["__scopeId","data-v-0f8ea7b0"]]);var Nt=$t;const xt={key:0,id:"workouts",class:"view"},zt={class:"container workouts-container"},Lt={class:"display-filters"},jt={class:"list-container"};var Wt=(0,a.aZ)({__name:"WorkoutsView",setup(t){const{t:e}=(0,r.QT)(),o=(0,tt.o)(),s=(0,a.Fl)((()=>o.getters[Q.YN.GETTERS.AUTH_USER_PROFILE])),u=(0,a.Fl)((()=>o.getters[Q.O8.GETTERS.SPORTS])),d=(0,a.Fl)((()=>(0,i.xH)(u.value,e))),c=(0,n.iH)(!0);function p(){c.value=!c.value}return(t,e)=>(0,n.SU)(s).username?((0,a.wg)(),(0,a.iD)("div",xt,[(0,a._)("div",zt,[(0,a._)("div",{class:(0,l.C_)(["filters-container",{hidden:c.value}])},[(0,a.Wm)(K,{sports:(0,n.SU)(d),authUser:(0,n.SU)(s),onFilter:p},null,8,["sports","authUser"])],2),(0,a._)("div",Lt,[(0,a._)("div",{onClick:p},[(0,a._)("i",{class:(0,l.C_)("fa fa-caret-"+(c.value?"down":"up")),"aria-hidden":"true"},null,2),(0,a._)("span",null,(0,l.zw)(t.$t(`workouts.${c.value?"DISPLAY":"HIDE"}_FILTERS`)),1)])]),(0,a._)("div",jt,[(0,a.Wm)(Nt,{user:(0,n.SU)(s),sports:(0,n.SU)(d)},null,8,["user","sports"])])])])):(0,a.kq)("",!0)}});const Pt=(0,q.Z)(Wt,[["__scopeId","data-v-77e54012"]]);var Bt=Pt}}]); -//# sourceMappingURL=workouts.f1d6cc45.js.map \ No newline at end of file +//# sourceMappingURL=workouts.71e8fef0.js.map \ No newline at end of file diff --git a/fittrackee/dist/static/js/workouts.f1d6cc45.js.map b/fittrackee/dist/static/js/workouts.71e8fef0.js.map similarity index 99% rename from fittrackee/dist/static/js/workouts.f1d6cc45.js.map rename to fittrackee/dist/static/js/workouts.71e8fef0.js.map index 0e192ce4..a4c9e8ea 100644 --- a/fittrackee/dist/static/js/workouts.f1d6cc45.js.map +++ b/fittrackee/dist/static/js/workouts.71e8fef0.js.map @@ -1 +1 @@ -{"version":3,"file":"static/js/workouts.f1d6cc45.js","mappings":"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","sources":["webpack://fittrackee_client/./src/components/Workout/WorkoutEdition.vue?1df7","webpack://fittrackee_client/./src/components/Workout/WorkoutEdition.vue","webpack://fittrackee_client/./src/views/workouts/AddWorkout.vue?212d","webpack://fittrackee_client/./src/views/workouts/AddWorkout.vue","webpack://fittrackee_client/./src/views/workouts/EditWorkout.vue?ba9e","webpack://fittrackee_client/./src/views/workouts/EditWorkout.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutCardTitle.vue?4e0b","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutCardTitle.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutRecord.vue?0a89","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutRecord.vue","webpack://fittrackee_client/./src/utils/weather.ts","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WeatherWind.vue?bd35","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WeatherWind.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutWeather.vue?84e1","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutWeather.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutData.vue?ef29","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutData.vue","webpack://fittrackee_client/./node_modules/@tmcw/togeojson/dist/togeojson.es.mjs","webpack://fittrackee_client/./node_modules/@vue-leaflet/vue-leaflet/dist/vue-leaflet.esm.js","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue?3193","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/index.vue?a62d","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/index.vue?8ebb","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/legend.ts","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/index.vue?65aa","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutNotes.vue?a827","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutNotes.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutSegments.vue?037e","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutSegments.vue","webpack://fittrackee_client/./src/views/workouts/Workout.vue?3305","webpack://fittrackee_client/./src/views/workouts/Workout.vue","webpack://fittrackee_client/./src/components/Workouts/WorkoutsFilters.vue?c3bc","webpack://fittrackee_client/./src/components/Workouts/WorkoutsFilters.vue","webpack://fittrackee_client/./src/components/Workouts/WorkoutsList.vue?72e6","webpack://fittrackee_client/./src/components/Workouts/WorkoutsList.vue","webpack://fittrackee_client/./src/views/workouts/WorkoutsView.vue?ee31","webpack://fittrackee_client/./src/views/workouts/WorkoutsView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, vModelSelect as _vModelSelect, withDirectives as _withDirectives, vModelText as _vModelText, resolveComponent as _resolveComponent, createVNode as _createVNode, createBlock as _createBlock, withModifiers as _withModifiers, normalizeClass as _normalizeClass, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-886f93f6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-form\" }\nconst _hoisted_2 = [\"onSubmit\"]\nconst _hoisted_3 = { class: \"form-items\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"form-item-radio\"\n}\nconst _hoisted_5 = [\"checked\", \"disabled\"]\nconst _hoisted_6 = { for: \"withGpx\" }\nconst _hoisted_7 = [\"checked\", \"disabled\"]\nconst _hoisted_8 = { for: \"withoutGpx\" }\nconst _hoisted_9 = { class: \"form-item\" }\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = [\"value\"]\nconst _hoisted_12 = {\n key: 1,\n class: \"form-item\"\n}\nconst _hoisted_13 = { for: \"gpxFile\" }\nconst _hoisted_14 = [\"disabled\"]\nconst _hoisted_15 = { class: \"files-help info-box\" }\nconst _hoisted_16 = {\n key: 2,\n class: \"form-item\"\n}\nconst _hoisted_17 = { for: \"title\" }\nconst _hoisted_18 = [\"required\", \"disabled\"]\nconst _hoisted_19 = { key: 3 }\nconst _hoisted_20 = { class: \"workout-date-duration\" }\nconst _hoisted_21 = { class: \"form-item\" }\nconst _hoisted_22 = { class: \"workout-date-time\" }\nconst _hoisted_23 = [\"disabled\"]\nconst _hoisted_24 = [\"disabled\"]\nconst _hoisted_25 = { class: \"form-item\" }\nconst _hoisted_26 = [\"disabled\"]\nconst _hoisted_27 = [\"disabled\"]\nconst _hoisted_28 = [\"disabled\"]\nconst _hoisted_29 = { class: \"form-item\" }\nconst _hoisted_30 = [\"disabled\"]\nconst _hoisted_31 = { class: \"form-item\" }\nconst _hoisted_32 = { key: 1 }\nconst _hoisted_33 = {\n key: 2,\n class: \"form-buttons\"\n}\nconst _hoisted_34 = [\"disabled\"]\nconst _hoisted_35 = [\"onClick\"]\n\nimport {\n ComputedRef,\n computed,\n reactive,\n ref,\n toRefs,\n watch,\n onMounted,\n onUnmounted,\n withDefaults,\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 { IAuthUserProfile } 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 import { convertDistance } from '@/utils/units'\n\n interface Props {\n authUser: IAuthUserProfile\n sports: ISport[]\n isCreation?: boolean\n loading?: boolean\n workout?: IWorkout\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutEdition',\n props: {\n authUser: null,\n sports: null,\n isCreation: { type: Boolean, default: false },\n loading: { type: Boolean, default: false },\n workout: { default: () => ({} as IWorkout) }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, sports: ISport[], isCreation: boolean, loading: boolean, workout: IWorkout }\n\n \n\n const { t } = useI18n()\n const store = useStore()\n const router = useRouter()\n\n const { authUser, workout, isCreation, loading } = toRefs(props)\n const translatedSports: ComputedRef = computed(() =>\n translateSports(\n props.sports,\n t,\n 'is_active_for_user',\n workout.value.id ? [workout.value.sport_id] : []\n )\n )\n const appConfig: ComputedRef = 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 = 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 const withGpx = ref(\n props.workout.id ? props.workout.with_gpx : props.isCreation\n )\n let gpxFile: File | null = null\n const formErrors = ref(false)\n\n onMounted(() => {\n if (props.workout.id) {\n formatWorkoutForm(props.workout)\n }\n })\n\n function updateNotes(value: string) {\n workoutForm.notes = value\n }\n function updateWithGpx() {\n withGpx.value = !withGpx.value\n formErrors.value = false\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 = `${\n authUser.value.imperial_units\n ? convertDistance(workout.distance, 'km', 'mi', 2)\n : parseFloat(workout.distance.toFixed(2))\n }`\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 = authUser.value.imperial_units\n ? convertDistance(+workoutForm.workoutDistance, 'mi', 'km', 3)\n : +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.id) {\n if (props.workout.with_gpx) {\n payload.title = workoutForm.title\n } else {\n formatPayload(payload)\n }\n store.dispatch(WORKOUTS_STORE.ACTIONS.EDIT_WORKOUT, {\n workoutId: props.workout.id,\n data: payload,\n })\n } else {\n if (withGpx.value) {\n if (!gpxFile) {\n const errorMessage = 'workouts.NO_FILE_PROVIDED'\n store.commit(ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES, errorMessage)\n return\n }\n payload.file = gpxFile\n store.dispatch(WORKOUTS_STORE.ACTIONS.ADD_WORKOUT, payload)\n } else {\n formatPayload(payload)\n store.dispatch(WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX, payload)\n }\n }\n }\n function onCancel() {\n if (props.workout.id) {\n router.push({\n name: 'Workout',\n params: { workoutId: props.workout.id },\n })\n } else {\n router.go(-1)\n }\n }\n function invalidateForm() {\n formErrors.value = true\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\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\nreturn (_ctx: any,_cache: any) => {\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Loader = _resolveComponent(\"Loader\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n id: \"workout-edition\",\n class: _normalizeClass([\"center-card with-margin\", { 'center-form': _unref(workout) && _unref(workout).with_gpx }])\n }, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(`workouts.${_unref(isCreation) ? 'ADD' : 'EDIT'}_WORKOUT`)), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _withModifiers(updateWorkout, [\"prevent\"])\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(isCreation))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"input\", {\n id: \"withGpx\",\n type: \"radio\",\n checked: withGpx.value,\n disabled: _unref(loading),\n onClick: updateWithGpx\n }, null, 8, _hoisted_5),\n _createElementVNode(\"label\", _hoisted_6, _toDisplayString(_ctx.$t('workouts.WITH_GPX')), 1)\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"input\", {\n id: \"withoutGpx\",\n type: \"radio\",\n checked: !withGpx.value,\n disabled: _unref(loading),\n onClick: updateWithGpx\n }, null, 8, _hoisted_7),\n _createElementVNode(\"label\", _hoisted_8, _toDisplayString(_ctx.$t('workouts.WITHOUT_GPX')), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.SPORT', 1)) + \": \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"sport\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((workoutForm.sport_id) = $event))\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: sport.id,\n key: sport.id\n }, _toDisplayString(sport.translatedLabel), 9, _hoisted_11))\n }), 128))\n ], 40, _hoisted_10), [\n [_vModelSelect, workoutForm.sport_id]\n ])\n ]),\n (_unref(isCreation) && withGpx.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n _createElementVNode(\"label\", _hoisted_13, _toDisplayString(_ctx.$t('workouts.GPX_FILE')) + \" \" + _toDisplayString(_ctx.$t('workouts.ZIP_ARCHIVE_DESCRIPTION')) + \": \", 1),\n _createElementVNode(\"input\", {\n id: \"gpxFile\",\n name: \"gpxFile\",\n type: \"file\",\n accept: \".gpx, .zip\",\n disabled: _unref(loading),\n required: \"\",\n onInvalid: invalidateForm,\n onInput: updateFile\n }, null, 40, _hoisted_14),\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.$t('workouts.GPX_FILE')) + \":\", 1),\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(fileSizeLimit)), 1)\n ])\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.$t('workouts.ZIP_ARCHIVE')) + \":\", 1),\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.NO_FOLDER')), 1),\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_FILES')) + \": \" + _toDisplayString(_unref(gpx_limit_import)), 1),\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(zipSizeLimit)), 1)\n ])\n ])\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_16, [\n _createElementVNode(\"label\", _hoisted_17, _toDisplayString(_ctx.$t('workouts.TITLE')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"title\",\n name: \"title\",\n type: \"text\",\n required: !_unref(isCreation),\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((workoutForm.title) = $event))\n }, null, 40, _hoisted_18), [\n [_vModelText, workoutForm.title]\n ])\n ])),\n (!withGpx.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_19, [\n _createElementVNode(\"div\", _hoisted_20, [\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.WORKOUT_DATE')) + \":\", 1),\n _createElementVNode(\"div\", _hoisted_22, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-date\",\n name: \"workout-date\",\n type: \"date\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((workoutForm.workoutDate) = $event))\n }, null, 40, _hoisted_23), [\n [_vModelText, workoutForm.workoutDate]\n ]),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-time\",\n name: \"workout-time\",\n class: \"workout-time\",\n type: \"time\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((workoutForm.workoutTime) = $event))\n }, null, 40, _hoisted_24), [\n [_vModelText, workoutForm.workoutTime]\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_25, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DURATION')) + \":\", 1),\n _createElementVNode(\"div\", null, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-duration-hour\",\n name: \"workout-duration-hour\",\n class: \"workout-duration\",\n type: \"text\",\n placeholder: \"HH\",\n minlength: \"1\",\n maxlength: \"2\",\n pattern: \"^([0-1]?[0-9]|2[0-3])$\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((workoutForm.workoutDurationHour) = $event))\n }, null, 40, _hoisted_26), [\n [_vModelText, workoutForm.workoutDurationHour]\n ]),\n _createTextVNode(\" : \"),\n _withDirectives(_createElementVNode(\"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 minlength: \"2\",\n maxlength: \"2\",\n placeholder: \"MM\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = ($event: any) => ((workoutForm.workoutDurationMinutes) = $event))\n }, null, 40, _hoisted_27), [\n [_vModelText, workoutForm.workoutDurationMinutes]\n ]),\n _createTextVNode(\" : \"),\n _withDirectives(_createElementVNode(\"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 minlength: \"2\",\n maxlength: \"2\",\n placeholder: \"SS\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = ($event: any) => ((workoutForm.workoutDurationSeconds) = $event))\n }, null, 40, _hoisted_28), [\n [_vModelText, workoutForm.workoutDurationSeconds]\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_29, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \" (\" + _toDisplayString(_unref(authUser).imperial_units ? 'mi' : 'km') + \"): \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n name: \"workout-distance\",\n type: \"number\",\n min: \"0\",\n step: \"0.001\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => ((workoutForm.workoutDistance) = $event))\n }, null, 40, _hoisted_30), [\n [_vModelText, workoutForm.workoutDistance]\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_31, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.NOTES')) + \": \", 1),\n _createVNode(_component_CustomTextArea, {\n name: \"notes\",\n input: workoutForm.notes,\n disabled: _unref(loading),\n onUpdateValue: updateNotes\n }, null, 8, [\"input\", \"disabled\"])\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(loading))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [\n _createVNode(_component_Loader)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_33, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n type: \"submit\",\n disabled: _unref(loading)\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_34),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(onCancel, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_35)\n ]))\n ], 42, _hoisted_2)\n ])\n ]),\n _: 1\n })\n ], 2))\n}\n}\n\n})","import script from \"./WorkoutEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutEdition.vue?vue&type=style&index=0&id=886f93f6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-886f93f6\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"add-workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { ComputedRef, computed } from 'vue'\n\n import WorkoutEdition from '@/components/Workout/WorkoutEdition.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AddWorkout',\n setup(__props) {\n\n const store = useStore()\n\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(WorkoutEdition, {\n authUser: _unref(authUser),\n sports: _unref(sports),\n isCreation: true,\n loading: _unref(workoutData).loading\n }, null, 8, [\"authUser\", \"sports\", \"loading\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./AddWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AddWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"edit-workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { computed, watch, onBeforeMount, ComputedRef } from 'vue'\n import { useRoute } from 'vue-router'\n\n import WorkoutEdition from '@/components/Workout/WorkoutEdition.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'EditWorkout',\n setup(__props) {\n\n const route = useRoute()\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n\n onBeforeMount(() => {\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, {\n workoutId: route.params.workoutId,\n })\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\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(workoutData).workout.id)\n ? (_openBlock(), _createBlock(WorkoutEdition, {\n key: 0,\n authUser: _unref(authUser),\n sports: _unref(sports),\n workout: _unref(workoutData).workout,\n loading: _unref(workoutData).loading\n }, null, 8, [\"authUser\", \"sports\", \"workout\", \"loading\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./EditWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./EditWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, withModifiers as _withModifiers, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4d9f9a8a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-card-title\" }\nconst _hoisted_2 = [\"title\"]\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = [\n _hoisted_3\n]\nconst _hoisted_5 = { class: \"workout-card-title\" }\nconst _hoisted_6 = { class: \"workout-title-date\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"workout-title\"\n}\nconst _hoisted_8 = {\n key: 1,\n class: \"workout-title\"\n}\nconst _hoisted_9 = { class: \"workout-segment\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-map-marker\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { class: \"workout-date\" }\nconst _hoisted_12 = { class: \"workout-link\" }\nconst _hoisted_13 = [\"title\"]\nconst _hoisted_14 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_15 = [\n _hoisted_14\n]\n\nimport { toRefs } from 'vue'\n\n import authApi from '@/api/authApi'\n import { ISport } from '@/types/sports'\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n sport: ISport\n workoutObject: IWorkoutObject\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutCardTitle',\n props: {\n sport: null,\n workoutObject: null\n },\n emits: ['displayModal'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n sport: ISport\n workoutObject: IWorkoutObject\n }\n\n \n\n \n\n const { sport, workoutObject } = toRefs(props)\n\n async function downloadGpx(workoutId: string) {\n await authApi\n .get(`workouts/${workoutId}/gpx/download`, {\n responseType: 'blob',\n })\n .then((response) => {\n const gpxFileUrl = window.URL.createObjectURL(\n new Blob([response.data], { type: 'application/gpx+xml' })\n )\n const gpxLink = document.createElement('a')\n gpxLink.href = gpxFileUrl\n gpxLink.setAttribute('download', `${workoutId}.gpx`)\n document.body.appendChild(gpxLink)\n gpxLink.click()\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-previous workout-arrow\", { inactive: !_unref(workoutObject).previousUrl }]),\n title: \n _unref(workoutObject).previousUrl\n ? _ctx.$t(`workouts.PREVIOUS_${_unref(workoutObject).type}`)\n : _ctx.$t(`workouts.NO_PREVIOUS_${_unref(workoutObject).type}`)\n ,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _unref(workoutObject).previousUrl\n ? _ctx.$router.push(_unref(workoutObject).previousUrl)\n : null\n ))\n }, _hoisted_4, 10, _hoisted_2),\n _createElementVNode(\"div\", _hoisted_5, [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(sport).label,\n color: _unref(sport).color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createElementVNode(\"div\", _hoisted_6, [\n (_unref(workoutObject).type === 'WORKOUT')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(workoutObject).title), 1),\n _createElementVNode(\"i\", {\n class: \"fa fa-edit\",\n \"aria-hidden\": \"true\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (\n _ctx.$router.push({\n name: 'EditWorkout',\n params: { workoutId: _unref(workoutObject).workoutId },\n })\n ))\n }),\n (_unref(workoutObject).with_gpx)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-download\",\n \"aria-hidden\": \"true\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (downloadGpx(_unref(workoutObject).workoutId)), [\"prevent\"]))\n }))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"i\", {\n class: \"fa fa-trash\",\n \"aria-hidden\": \"true\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (emit('displayModal', true)))\n })\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_unref(workoutObject).title) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_9, [\n _createTextVNode(\" — \"),\n _hoisted_10,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.SEGMENT')) + \" \" + _toDisplayString(_unref(workoutObject).segmentId + 1), 1)\n ])\n ])),\n _createElementVNode(\"div\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_unref(workoutObject).workoutDate) + \" - \" + _toDisplayString(_unref(workoutObject).workoutTime) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_12, [\n (_unref(workoutObject).type === 'SEGMENT')\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n to: {\n name: 'Workout',\n params: { workoutId: _unref(workoutObject).workoutId },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" > \" + _toDisplayString(_ctx.$t('workouts.BACK_TO_WORKOUT')), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-next workout-arrow\", { inactive: !_unref(workoutObject).nextUrl }]),\n title: \n _unref(workoutObject).nextUrl\n ? _ctx.$t(`workouts.NEXT_${_unref(workoutObject).type}`)\n : _ctx.$t(`workouts.NO_NEXT_${_unref(workoutObject).type}`)\n ,\n onClick: _cache[4] || (_cache[4] = ($event: any) => (\n _unref(workoutObject).nextUrl ? _ctx.$router.push(_unref(workoutObject).nextUrl) : null\n ))\n }, _hoisted_15, 10, _hoisted_13)\n ]))\n}\n}\n\n})","import script from \"./WorkoutCardTitle.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutCardTitle.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutCardTitle.vue?vue&type=style&index=0&id=4d9f9a8a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4d9f9a8a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1a5282f6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n class: \"workout-record\"\n}\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"sup\", null, [\n /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy\",\n \"aria-hidden\": \"true\"\n })\n], -1))\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nimport { toRefs } from 'vue'\n\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n recordType: string\n workoutObject: IWorkoutObject\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutRecord',\n props: {\n recordType: null,\n workoutObject: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n recordType: string\n workoutObject: IWorkoutObject\n }\n\n \n\n const { recordType, workoutObject } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (\n _unref(workoutObject).records &&\n _unref(workoutObject).records.find((record) => record.record_type === _unref(recordType))\n )\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_1, _hoisted_3))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutRecord.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutRecord.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutRecord.vue?vue&type=style&index=0&id=1a5282f6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1a5282f6\"]])\n\nexport default __exports__","const directions = [\n 'N',\n 'NNE',\n 'NE',\n 'ENE',\n 'E',\n 'ESE',\n 'SE',\n 'SSE',\n 'S',\n 'SSW',\n 'SW',\n 'WSW',\n 'W',\n 'WNW',\n 'NW',\n 'NNW',\n]\n\nexport const convertDegreeToDirection = (angle: number): string => {\n const value = Math.floor(angle / 22.5 + 0.5)\n return directions[value % 16]\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-46a7c31c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"wind\" }\nconst _hoisted_2 = { class: \"wind-bearing\" }\nconst _hoisted_3 = [\"title\"]\n\nimport { toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { IWeather } from '@/types/workouts'\n import { convertDegreeToDirection } from '@/utils/weather'\n\n interface Props {\n weather: IWeather\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WeatherWind',\n props: {\n weather: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n weather: IWeather\n useImperialUnits: boolean\n }\n\n \n\n const { useImperialUnits, weather } = toRefs(props)\n const { t } = useI18n()\n\n function getWindDirectionTitle(windBearing: number): string {\n return t(\n `workouts.WEATHER.WIND_DIRECTIONS.${convertDegreeToDirection(\n windBearing\n )}`\n )\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Distance, {\n distance: _unref(weather).wind,\n unitFrom: \"m\",\n digits: 1,\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createTextVNode(\" \" + _toDisplayString(_unref(useImperialUnits) ? 'ft' : 'm') + \"/s \", 1),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(weather).windBearing)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-long-arrow-down\",\n style: _normalizeStyle({\n transform: `rotate(${_unref(weather).windBearing}deg)`,\n }),\n \"aria-hidden\": \"true\",\n title: getWindDirectionTitle(_unref(weather).windBearing)\n }, null, 12, _hoisted_3))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./WeatherWind.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WeatherWind.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WeatherWind.vue?vue&type=style&index=0&id=46a7c31c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-46a7c31c\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-76e9ab62\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"workout-weather\"\n}\nconst _hoisted_2 = { class: \"weather-table\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, null, -1))\nconst _hoisted_4 = { class: \"weather-th\" }\nconst _hoisted_5 = [\"src\", \"alt\", \"title\"]\nconst _hoisted_6 = { class: \"weather-th\" }\nconst _hoisted_7 = [\"src\", \"alt\", \"title\"]\nconst _hoisted_8 = [\"alt\", \"title\"]\nconst _hoisted_9 = [\"alt\", \"title\"]\nconst _hoisted_10 = [\"alt\", \"title\"]\n\nimport { toRefs } from 'vue'\n\n import WeatherWind from '@/components/Workout/WorkoutDetail/WeatherWind.vue'\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutWeather',\n props: {\n workoutObject: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n }\n\n \n\n const { useImperialUnits, workoutObject } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(workoutObject).weatherStart && _unref(workoutObject).weatherEnd)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"table\", _hoisted_2, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_3,\n _createElementVNode(\"th\", null, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.START')) + \" \", 1),\n _createElementVNode(\"img\", {\n class: \"weather-img\",\n src: `/img/weather/${_unref(workoutObject).weatherStart.icon}.svg`,\n alt: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherStart.icon}`\n )\n ,\n title: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherStart.icon}`\n )\n \n }, null, 8, _hoisted_5)\n ])\n ]),\n _createElementVNode(\"th\", null, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.END')) + \" \", 1),\n _createElementVNode(\"img\", {\n class: \"weather-img\",\n src: `/img/weather/${_unref(workoutObject).weatherEnd.icon}.svg`,\n alt: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherEnd.icon}`\n )\n ,\n title: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherEnd.icon}`\n )\n \n }, null, 8, _hoisted_7)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/temperature.svg\",\n alt: _ctx.$t(`workouts.WEATHER.TEMPERATURE`),\n title: _ctx.$t(`workouts.WEATHER.TEMPERATURE`)\n }, null, 8, _hoisted_8)\n ]),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherStart.temperature).toFixed(1)) + \"°C \", 1),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherEnd.temperature).toFixed(1)) + \"°C \", 1)\n ]),\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/pour-rain.svg\",\n alt: _ctx.$t(`workouts.WEATHER.HUMIDITY`),\n title: _ctx.$t(`workouts.WEATHER.HUMIDITY`)\n }, null, 8, _hoisted_9)\n ]),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherStart.humidity * 100).toFixed(1)) + \"% \", 1),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherEnd.humidity * 100).toFixed(1)) + \"% \", 1)\n ]),\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/breeze.svg\",\n alt: _ctx.$t(`workouts.WEATHER.WIND`),\n title: _ctx.$t(`workouts.WEATHER.WIND`)\n }, null, 8, _hoisted_10)\n ]),\n _createElementVNode(\"td\", null, [\n _createVNode(WeatherWind, {\n weather: _unref(workoutObject).weatherStart,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"weather\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createVNode(WeatherWind, {\n weather: _unref(workoutObject).weatherEnd,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"weather\", \"useImperialUnits\"])\n ])\n ])\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutWeather.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutWeather.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutWeather.vue?vue&type=style&index=0&id=76e9ab62&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-76e9ab62\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, unref as _unref, createVNode as _createVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74c5993b\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-info\" }\nconst _hoisted_2 = { class: \"workout-data\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-clock-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { class: \"label\" }\nconst _hoisted_5 = { class: \"value\" }\nconst _hoisted_6 = { key: 0 }\nconst _hoisted_7 = { class: \"value\" }\nconst _hoisted_8 = { class: \"value\" }\nconst _hoisted_9 = { class: \"workout-data\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-road\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { class: \"label\" }\nconst _hoisted_12 = { class: \"workout-data\" }\nconst _hoisted_13 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-tachometer\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_14 = { class: \"label\" }\nconst _hoisted_15 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_16 = { class: \"label\" }\nconst _hoisted_17 = {\n key: 0,\n class: \"workout-data\"\n}\nconst _hoisted_18 = [\"alt\"]\nconst _hoisted_19 = { class: \"label\" }\nconst _hoisted_20 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_21 = { class: \"label\" }\nconst _hoisted_22 = {\n key: 1,\n class: \"workout-data\"\n}\nconst _hoisted_23 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-location-arrow\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_24 = { class: \"label\" }\nconst _hoisted_25 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_26 = { class: \"label\" }\n\nimport { computed, toRefs } 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 interface Props {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n displayHARecord: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutData',\n props: {\n workoutObject: null,\n useImperialUnits: { type: Boolean },\n displayHARecord: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n displayHARecord: boolean\n }\n\n \n\n const { displayHARecord, workoutObject, useImperialUnits } = toRefs(props)\n const withPause = computed(\n () =>\n props.workoutObject.pauses !== '0:00:00' &&\n props.workoutObject.pauses !== null\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('workouts.DURATION')), 1),\n _createTextVNode(\": \"),\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_unref(workoutObject).moving), 1),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"LD\"\n }, null, 8, [\"workoutObject\"]),\n (_unref(withPause))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createTextVNode(\" (\" + _toDisplayString(_ctx.$t('workouts.PAUSES')) + \": \", 1),\n _createElementVNode(\"span\", _hoisted_7, _toDisplayString(_unref(workoutObject).pauses), 1),\n _createTextVNode(\" - \" + _toDisplayString(_ctx.$t('workouts.TOTAL_DURATION')) + \": \", 1),\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_unref(workoutObject).duration) + \")\", 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).distance,\n digits: 3,\n unitFrom: \"km\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"FD\"\n }, null, 8, [\"workoutObject\"])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _hoisted_13,\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('workouts.AVERAGE_SPEED')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).aveSpeed,\n unitFrom: \"km\",\n speed: true,\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"AS\"\n }, null, 8, [\"workoutObject\"]),\n _hoisted_15,\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).maxSpeed,\n unitFrom: \"km\",\n speed: true,\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"MS\"\n }, null, 8, [\"workoutObject\"])\n ]),\n (_unref(workoutObject).maxAlt !== null && _unref(workoutObject).minAlt !== null)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createElementVNode(\"img\", {\n class: \"mountains\",\n src: \"/img/workouts/mountains.svg\",\n alt: _ctx.$t('workouts.ELEVATION')\n }, null, 8, _hoisted_18),\n _createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('workouts.MIN_ALTITUDE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).minAlt,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _hoisted_20,\n _createElementVNode(\"span\", _hoisted_21, _toDisplayString(_ctx.$t('workouts.MAX_ALTITUDE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).maxAlt,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(workoutObject).ascent !== null && _unref(workoutObject).descent !== null)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_22, [\n _hoisted_23,\n _createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('workouts.ASCENT')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).ascent,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n (_unref(displayHARecord))\n ? (_openBlock(), _createBlock(WorkoutRecord, {\n key: 0,\n workoutObject: _unref(workoutObject),\n recordType: \"HA\"\n }, null, 8, [\"workoutObject\"]))\n : _createCommentVNode(\"\", true),\n _hoisted_25,\n _createElementVNode(\"span\", _hoisted_26, _toDisplayString(_ctx.$t('workouts.DESCENT')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).descent,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(WorkoutWeather, {\n workoutObject: _unref(workoutObject),\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"workoutObject\", \"useImperialUnits\"])\n ]))\n}\n}\n\n})","import script from \"./WorkoutData.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutData.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutData.vue?vue&type=style&index=0&id=74c5993b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74c5993b\"]])\n\nexport default __exports__","function $(element, tagName) {\n return Array.from(element.getElementsByTagName(tagName));\n}\nfunction normalizeId(id) {\n return id[0] === \"#\" ? id : `#${id}`;\n}\nfunction $ns(element, tagName, ns) {\n return Array.from(element.getElementsByTagNameNS(ns, tagName));\n}\n/**\n * get the content of a text node, if any\n */\nfunction nodeVal(node) {\n node?.normalize();\n return (node && node.textContent) || \"\";\n}\n/**\n * Get one Y child of X, if any, otherwise null\n */\nfunction get1(node, tagName, callback) {\n const n = node.getElementsByTagName(tagName);\n const result = n.length ? n[0] : null;\n if (result && callback)\n callback(result);\n return result;\n}\nfunction get(node, tagName, callback) {\n const properties = {};\n if (!node)\n return properties;\n const n = node.getElementsByTagName(tagName);\n const result = n.length ? n[0] : null;\n if (result && callback) {\n return callback(result, properties);\n }\n return properties;\n}\nfunction val1(node, tagName, callback) {\n const val = nodeVal(get1(node, tagName));\n if (val && callback)\n return callback(val) || {};\n return {};\n}\nfunction $num(node, tagName, callback) {\n const val = parseFloat(nodeVal(get1(node, tagName)));\n if (isNaN(val))\n return undefined;\n if (val && callback)\n return callback(val) || {};\n return {};\n}\nfunction num1(node, tagName, callback) {\n const val = parseFloat(nodeVal(get1(node, tagName)));\n if (isNaN(val))\n return undefined;\n if (val && callback)\n callback(val);\n return val;\n}\nfunction getMulti(node, propertyNames) {\n const properties = {};\n for (const property of propertyNames) {\n val1(node, property, (val) => {\n properties[property] = val;\n });\n }\n return properties;\n}\nfunction isElement(node) {\n return node?.nodeType === 1;\n}\n\nfunction getLineStyle(node) {\n return get(node, \"line\", (lineStyle) => {\n const val = Object.assign({}, val1(lineStyle, \"color\", (color) => {\n return { stroke: `#${color}` };\n }), $num(lineStyle, \"opacity\", (opacity) => {\n return { \"stroke-opacity\": opacity };\n }), $num(lineStyle, \"width\", (width) => {\n // GPX width is in mm, convert to px with 96 px per inch\n return { \"stroke-width\": (width * 96) / 25.4 };\n }));\n return val;\n });\n}\n\nfunction getExtensions(node) {\n let values = [];\n if (node === null)\n return values;\n for (const child of Array.from(node.childNodes)) {\n if (!isElement(child))\n continue;\n const name = abbreviateName(child.nodeName);\n if (name === \"gpxtpx:TrackPointExtension\") {\n // loop again for nested garmin extensions (eg. \"gpxtpx:hr\")\n values = values.concat(getExtensions(child));\n }\n else {\n // push custom extension (eg. \"power\")\n const val = nodeVal(child);\n values.push([name, parseNumeric(val)]);\n }\n }\n return values;\n}\nfunction abbreviateName(name) {\n return [\"heart\", \"gpxtpx:hr\", \"hr\"].includes(name) ? \"heart\" : name;\n}\nfunction parseNumeric(val) {\n const num = parseFloat(val);\n return isNaN(num) ? val : num;\n}\n\nfunction coordPair$1(node) {\n const ll = [\n parseFloat(node.getAttribute(\"lon\") || \"\"),\n parseFloat(node.getAttribute(\"lat\") || \"\"),\n ];\n if (isNaN(ll[0]) || isNaN(ll[1])) {\n return null;\n }\n num1(node, \"ele\", (val) => {\n ll.push(val);\n });\n const time = get1(node, \"time\");\n return {\n coordinates: ll,\n time: time ? nodeVal(time) : null,\n extendedValues: getExtensions(get1(node, \"extensions\")),\n };\n}\n\nfunction extractProperties(node) {\n const properties = getMulti(node, [\n \"name\",\n \"cmt\",\n \"desc\",\n \"type\",\n \"time\",\n \"keywords\",\n ]);\n const extensions = Array.from(node.getElementsByTagNameNS(\"http://www.garmin.com/xmlschemas/GpxExtensions/v3\", \"*\"));\n for (const child of extensions) {\n if (child.parentNode?.parentNode === node) {\n properties[child.tagName.replace(\":\", \"_\")] = nodeVal(child);\n }\n }\n const links = $(node, \"link\");\n if (links.length) {\n properties.links = links.map((link) => Object.assign({ href: link.getAttribute(\"href\") }, getMulti(link, [\"text\", \"type\"])));\n }\n return properties;\n}\n\n/**\n * Extract points from a trkseg or rte element.\n */\nfunction getPoints$1(node, pointname) {\n const pts = $(node, pointname);\n const line = [];\n const times = [];\n const extendedValues = {};\n for (let i = 0; i < pts.length; i++) {\n const c = coordPair$1(pts[i]);\n if (!c) {\n continue;\n }\n line.push(c.coordinates);\n if (c.time)\n times.push(c.time);\n for (const [name, val] of c.extendedValues) {\n const plural = name === \"heart\" ? name : name.replace(\"gpxtpx:\", \"\") + \"s\";\n if (!extendedValues[plural]) {\n extendedValues[plural] = Array(pts.length).fill(null);\n }\n extendedValues[plural][i] = val;\n }\n }\n if (line.length < 2)\n return; // Invalid line in GeoJSON\n return {\n line: line,\n times: times,\n extendedValues: extendedValues,\n };\n}\n/**\n * Extract a LineString geometry from a rte\n * element.\n */\nfunction getRoute(node) {\n const line = getPoints$1(node, \"rtept\");\n if (!line)\n return;\n return {\n type: \"Feature\",\n properties: Object.assign({ _gpxType: \"rte\" }, extractProperties(node), getLineStyle(get1(node, \"extensions\"))),\n geometry: {\n type: \"LineString\",\n coordinates: line.line,\n },\n };\n}\nfunction getTrack(node) {\n const segments = $(node, \"trkseg\");\n const track = [];\n const times = [];\n const extractedLines = [];\n for (const segment of segments) {\n const line = getPoints$1(segment, \"trkpt\");\n if (line) {\n extractedLines.push(line);\n if (line.times && line.times.length)\n times.push(line.times);\n }\n }\n if (extractedLines.length === 0)\n return null;\n const multi = extractedLines.length > 1;\n const properties = Object.assign({ _gpxType: \"trk\" }, extractProperties(node), getLineStyle(get1(node, \"extensions\")), times.length\n ? {\n coordinateProperties: {\n times: multi ? times : times[0],\n },\n }\n : {});\n for (const line of extractedLines) {\n track.push(line.line);\n if (!properties.coordinateProperties) {\n properties.coordinateProperties = {};\n }\n const props = properties.coordinateProperties;\n const entries = Object.entries(line.extendedValues);\n for (let i = 0; i < entries.length; i++) {\n const [name, val] = entries[i];\n if (multi) {\n if (!props[name]) {\n props[name] = extractedLines.map((line) => new Array(line.line.length).fill(null));\n }\n props[name][i] = val;\n }\n else {\n props[name] = val;\n }\n }\n }\n return {\n type: \"Feature\",\n properties: properties,\n geometry: multi\n ? {\n type: \"MultiLineString\",\n coordinates: track,\n }\n : {\n type: \"LineString\",\n coordinates: track[0],\n },\n };\n}\n/**\n * Extract a point, if possible, from a given node,\n * which is usually a wpt or trkpt\n */\nfunction getPoint(node) {\n const properties = Object.assign(extractProperties(node), getMulti(node, [\"sym\"]));\n const pair = coordPair$1(node);\n if (!pair)\n return null;\n return {\n type: \"Feature\",\n properties,\n geometry: {\n type: \"Point\",\n coordinates: pair.coordinates,\n },\n };\n}\n/**\n * Convert GPX to GeoJSON incrementally, returning\n * a [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)\n * that yields output feature by feature.\n */\nfunction* gpxGen(node) {\n for (const track of $(node, \"trk\")) {\n const feature = getTrack(track);\n if (feature)\n yield feature;\n }\n for (const route of $(node, \"rte\")) {\n const feature = getRoute(route);\n if (feature)\n yield feature;\n }\n for (const waypoint of $(node, \"wpt\")) {\n const point = getPoint(waypoint);\n if (point)\n yield point;\n }\n}\n/**\n *\n * Convert a GPX document to GeoJSON. The first argument, `doc`, must be a GPX\n * document as an XML DOM - not as a string. You can get this using jQuery's default\n * `.ajax` function or using a bare XMLHttpRequest with the `.response` property\n * holding an XML DOM.\n *\n * The output is a JavaScript object of GeoJSON data, same as `.kml` outputs, with the\n * addition of a `_gpxType` property on each `LineString` feature that indicates whether\n * the feature was encoded as a route (`rte`) or track (`trk`) in the GPX document.\n */\nfunction gpx(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(gpxGen(node)),\n };\n}\n\nconst EXTENSIONS_NS = \"http://www.garmin.com/xmlschemas/ActivityExtension/v2\";\nconst TRACKPOINT_ATTRIBUTES = [\n [\"heartRate\", \"heartRates\"],\n [\"Cadence\", \"cadences\"],\n // Extended Trackpoint attributes\n [\"Speed\", \"speeds\"],\n [\"Watts\", \"watts\"],\n];\nconst LAP_ATTRIBUTES = [\n [\"TotalTimeSeconds\", \"totalTimeSeconds\"],\n [\"DistanceMeters\", \"distanceMeters\"],\n [\"MaximumSpeed\", \"maxSpeed\"],\n [\"AverageHeartRateBpm\", \"avgHeartRate\"],\n [\"MaximumHeartRateBpm\", \"maxHeartRate\"],\n // Extended Lap attributes\n [\"AvgSpeed\", \"avgSpeed\"],\n [\"AvgWatts\", \"avgWatts\"],\n [\"MaxWatts\", \"maxWatts\"],\n];\nfunction getProperties(node, attributeNames) {\n const properties = [];\n for (const [tag, alias] of attributeNames) {\n let elem = get1(node, tag);\n if (!elem) {\n const elements = node.getElementsByTagNameNS(EXTENSIONS_NS, tag);\n if (elements.length) {\n elem = elements[0];\n }\n }\n const val = parseFloat(nodeVal(elem));\n if (!isNaN(val)) {\n properties.push([alias, val]);\n }\n }\n return properties;\n}\nfunction coordPair(node) {\n const ll = [num1(node, \"LongitudeDegrees\"), num1(node, \"LatitudeDegrees\")];\n if (ll[0] === undefined ||\n isNaN(ll[0]) ||\n ll[1] === undefined ||\n isNaN(ll[1])) {\n return null;\n }\n const heartRate = get1(node, \"HeartRateBpm\");\n const time = nodeVal(get1(node, \"Time\"));\n get1(node, \"AltitudeMeters\", (alt) => {\n const a = parseFloat(nodeVal(alt));\n if (!isNaN(a)) {\n ll.push(a);\n }\n });\n return {\n coordinates: ll,\n time: time || null,\n heartRate: heartRate ? parseFloat(nodeVal(heartRate)) : null,\n extensions: getProperties(node, TRACKPOINT_ATTRIBUTES),\n };\n}\nfunction getPoints(node) {\n const pts = $(node, \"Trackpoint\");\n const line = [];\n const times = [];\n const heartRates = [];\n if (pts.length < 2)\n return null; // Invalid line in GeoJSON\n const extendedProperties = {};\n const result = { extendedProperties };\n for (let i = 0; i < pts.length; i++) {\n const c = coordPair(pts[i]);\n if (c === null)\n continue;\n line.push(c.coordinates);\n const { time, heartRate, extensions } = c;\n if (time)\n times.push(time);\n if (heartRate)\n heartRates.push(heartRate);\n for (const [alias, value] of extensions) {\n if (!extendedProperties[alias]) {\n extendedProperties[alias] = Array(pts.length).fill(null);\n }\n extendedProperties[alias][i] = value;\n }\n }\n if (line.length < 2)\n return null;\n return Object.assign(result, {\n line: line,\n times: times,\n heartRates: heartRates,\n });\n}\nfunction getLap(node) {\n const segments = $(node, \"Track\");\n const track = [];\n const times = [];\n const heartRates = [];\n const allExtendedProperties = [];\n let line;\n const properties = Object.assign(Object.fromEntries(getProperties(node, LAP_ATTRIBUTES)), get(node, \"Name\", (nameElement) => {\n return { name: nodeVal(nameElement) };\n }));\n for (const segment of segments) {\n line = getPoints(segment);\n if (line) {\n track.push(line.line);\n if (line.times.length)\n times.push(line.times);\n if (line.heartRates.length)\n heartRates.push(line.heartRates);\n allExtendedProperties.push(line.extendedProperties);\n }\n }\n for (let i = 0; i < allExtendedProperties.length; i++) {\n const extendedProperties = allExtendedProperties[i];\n for (const property in extendedProperties) {\n if (segments.length === 1) {\n if (line) {\n properties[property] = line.extendedProperties[property];\n }\n }\n else {\n if (!properties[property]) {\n properties[property] = track.map((track) => Array(track.length).fill(null));\n }\n properties[property][i] = extendedProperties[property];\n }\n }\n }\n if (track.length === 0)\n return null;\n if (times.length || heartRates.length) {\n properties.coordinateProperties = Object.assign(times.length\n ? {\n times: track.length === 1 ? times[0] : times,\n }\n : {}, heartRates.length\n ? {\n heart: track.length === 1 ? heartRates[0] : heartRates,\n }\n : {});\n }\n return {\n type: \"Feature\",\n properties: properties,\n geometry: track.length === 1\n ? {\n type: \"LineString\",\n coordinates: track[0],\n }\n : {\n type: \"MultiLineString\",\n coordinates: track,\n },\n };\n}\n/**\n * Incrementally convert a TCX document to GeoJSON. The\n * first argument, `doc`, must be a TCX\n * document as an XML DOM - not as a string.\n */\nfunction* tcxGen(node) {\n for (const lap of $(node, \"Lap\")) {\n const feature = getLap(lap);\n if (feature)\n yield feature;\n }\n for (const course of $(node, \"Courses\")) {\n const feature = getLap(course);\n if (feature)\n yield feature;\n }\n}\n/**\n * Convert a TCX document to GeoJSON. The first argument, `doc`, must be a TCX\n * document as an XML DOM - not as a string.\n */\nfunction tcx(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(tcxGen(node)),\n };\n}\n\nfunction fixColor(v, prefix) {\n const properties = {};\n const colorProp = prefix == \"stroke\" || prefix === \"fill\" ? prefix : prefix + \"-color\";\n if (v[0] === \"#\") {\n v = v.substring(1);\n }\n if (v.length === 6 || v.length === 3) {\n properties[colorProp] = \"#\" + v;\n }\n else if (v.length === 8) {\n properties[prefix + \"-opacity\"] = parseInt(v.substring(0, 2), 16) / 255;\n properties[colorProp] =\n \"#\" + v.substring(6, 8) + v.substring(4, 6) + v.substring(2, 4);\n }\n return properties;\n}\n\nfunction numericProperty(node, source, target) {\n const properties = {};\n num1(node, source, (val) => {\n properties[target] = val;\n });\n return properties;\n}\nfunction getColor(node, output) {\n return get(node, \"color\", (elem) => fixColor(nodeVal(elem), output));\n}\nfunction extractIconHref(node) {\n return get(node, \"Icon\", (icon, properties) => {\n val1(icon, \"href\", (href) => {\n properties.icon = href;\n });\n return properties;\n });\n}\nfunction extractIcon(node) {\n return get(node, \"IconStyle\", (iconStyle) => {\n return Object.assign(getColor(iconStyle, \"icon\"), numericProperty(iconStyle, \"scale\", \"icon-scale\"), numericProperty(iconStyle, \"heading\", \"icon-heading\"), get(iconStyle, \"hotSpot\", (hotspot) => {\n const left = parseFloat(hotspot.getAttribute(\"x\") || \"\");\n const top = parseFloat(hotspot.getAttribute(\"y\") || \"\");\n const xunits = hotspot.getAttribute(\"xunits\") || \"\";\n const yunits = hotspot.getAttribute(\"yunits\") || \"\";\n if (!isNaN(left) && !isNaN(top))\n return {\n \"icon-offset\": [left, top],\n \"icon-offset-units\": [xunits, yunits],\n };\n return {};\n }), extractIconHref(iconStyle));\n });\n}\nfunction extractLabel(node) {\n return get(node, \"LabelStyle\", (labelStyle) => {\n return Object.assign(getColor(labelStyle, \"label\"), numericProperty(labelStyle, \"scale\", \"label-scale\"));\n });\n}\nfunction extractLine(node) {\n return get(node, \"LineStyle\", (lineStyle) => {\n return Object.assign(getColor(lineStyle, \"stroke\"), numericProperty(lineStyle, \"width\", \"stroke-width\"));\n });\n}\nfunction extractPoly(node) {\n return get(node, \"PolyStyle\", (polyStyle, properties) => {\n return Object.assign(properties, get(polyStyle, \"color\", (elem) => fixColor(nodeVal(elem), \"fill\")), val1(polyStyle, \"fill\", (fill) => {\n if (fill === \"0\")\n return { \"fill-opacity\": 0 };\n }), val1(polyStyle, \"outline\", (outline) => {\n if (outline === \"0\")\n return { \"stroke-opacity\": 0 };\n }));\n });\n}\nfunction extractStyle(node) {\n return Object.assign({}, extractPoly(node), extractLine(node), extractLabel(node), extractIcon(node));\n}\n\nfunction extractExtendedData(node) {\n return get(node, \"ExtendedData\", (extendedData, properties) => {\n for (const data of $(extendedData, \"Data\")) {\n properties[data.getAttribute(\"name\") || \"\"] = nodeVal(get1(data, \"value\"));\n }\n for (const simpleData of $(extendedData, \"SimpleData\")) {\n properties[simpleData.getAttribute(\"name\") || \"\"] = nodeVal(simpleData);\n }\n return properties;\n });\n}\nfunction getMaybeHTMLDescription(node) {\n const descriptionNode = get1(node, \"description\");\n for (const c of Array.from(descriptionNode?.childNodes || [])) {\n if (c.nodeType === 4) {\n return {\n description: {\n \"@type\": \"html\",\n value: nodeVal(c),\n },\n };\n }\n }\n return {};\n}\nfunction extractTimeSpan(node) {\n return get(node, \"TimeSpan\", (timeSpan) => {\n return {\n timespan: {\n begin: nodeVal(get1(timeSpan, \"begin\")),\n end: nodeVal(get1(timeSpan, \"end\")),\n },\n };\n });\n}\nfunction extractTimeStamp(node) {\n return get(node, \"TimeStamp\", (timeStamp) => {\n return { timestamp: nodeVal(get1(timeStamp, \"when\")) };\n });\n}\nfunction extractCascadedStyle(node, styleMap) {\n return val1(node, \"styleUrl\", (styleUrl) => {\n styleUrl = normalizeId(styleUrl);\n if (styleMap[styleUrl]) {\n return Object.assign({ styleUrl }, styleMap[styleUrl]);\n }\n // For backward-compatibility. Should we still include\n // styleUrl even if it's not resolved?\n return { styleUrl };\n });\n}\n\nconst removeSpace = /\\s*/g;\nconst trimSpace = /^\\s*|\\s*$/g;\nconst splitSpace = /\\s+/;\n/**\n * Get one coordinate from a coordinate array, if any\n */\nfunction coord1(value) {\n return value\n .replace(removeSpace, \"\")\n .split(\",\")\n .map(parseFloat)\n .filter((num) => !isNaN(num))\n .slice(0, 3);\n}\n/**\n * Get all coordinates from a coordinate array as [[],[]]\n */\nfunction coord(value) {\n return value\n .replace(trimSpace, \"\")\n .split(splitSpace)\n .map(coord1)\n .filter((coord) => {\n return coord.length >= 2;\n });\n}\nfunction gxCoords(node) {\n let elems = $(node, \"coord\");\n if (elems.length === 0) {\n elems = $ns(node, \"coord\", \"*\");\n }\n const coordinates = elems.map((elem) => {\n return nodeVal(elem).split(\" \").map(parseFloat);\n });\n if (coordinates.length === 0) {\n return null;\n }\n return {\n geometry: coordinates.length > 2\n ? {\n type: \"LineString\",\n coordinates,\n }\n : {\n type: \"Point\",\n coordinates: coordinates[0],\n },\n times: $(node, \"when\").map((elem) => nodeVal(elem)),\n };\n}\nfunction fixRing(ring) {\n if (ring.length === 0)\n return ring;\n const first = ring[0];\n const last = ring[ring.length - 1];\n let equal = true;\n for (let i = 0; i < Math.max(first.length, last.length); i++) {\n if (first[i] !== last[i]) {\n equal = false;\n break;\n }\n }\n if (!equal) {\n return ring.concat([ring[0]]);\n }\n return ring;\n}\nfunction getCoordinates(node) {\n return nodeVal(get1(node, \"coordinates\"));\n}\nfunction getGeometry(node) {\n let geometries = [];\n let coordTimes = [];\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = node.childNodes.item(i);\n if (isElement(child)) {\n switch (child.tagName) {\n case \"MultiGeometry\":\n case \"MultiTrack\":\n case \"gx:MultiTrack\": {\n const childGeometries = getGeometry(child);\n geometries = geometries.concat(childGeometries.geometries);\n coordTimes = coordTimes.concat(childGeometries.coordTimes);\n break;\n }\n case \"Point\": {\n const coordinates = coord1(getCoordinates(child));\n if (coordinates.length >= 2) {\n geometries.push({\n type: \"Point\",\n coordinates,\n });\n }\n break;\n }\n case \"LineString\": {\n const coordinates = coord(getCoordinates(child));\n if (coordinates.length >= 2) {\n geometries.push({\n type: \"LineString\",\n coordinates,\n });\n }\n break;\n }\n case \"Polygon\": {\n const coords = [];\n for (const linearRing of $(child, \"LinearRing\")) {\n const ring = fixRing(coord(getCoordinates(linearRing)));\n if (ring.length >= 4) {\n coords.push(ring);\n }\n }\n if (coords.length) {\n geometries.push({\n type: \"Polygon\",\n coordinates: coords,\n });\n }\n break;\n }\n case \"Track\":\n case \"gx:Track\": {\n const gx = gxCoords(child);\n if (!gx)\n break;\n const { times, geometry } = gx;\n geometries.push(geometry);\n if (times.length)\n coordTimes.push(times);\n break;\n }\n }\n }\n }\n return {\n geometries,\n coordTimes,\n };\n}\n\nfunction geometryListToGeometry(geometries) {\n return geometries.length === 0\n ? null\n : geometries.length === 1\n ? geometries[0]\n : {\n type: \"GeometryCollection\",\n geometries,\n };\n}\nfunction getPlacemark(node, styleMap) {\n const { coordTimes, geometries } = getGeometry(node);\n const feature = {\n type: \"Feature\",\n geometry: geometryListToGeometry(geometries),\n properties: Object.assign(getMulti(node, [\n \"name\",\n \"address\",\n \"visibility\",\n \"open\",\n \"phoneNumber\",\n \"description\",\n ]), getMaybeHTMLDescription(node), extractCascadedStyle(node, styleMap), extractStyle(node), extractExtendedData(node), extractTimeSpan(node), extractTimeStamp(node), coordTimes.length\n ? {\n coordinateProperties: {\n times: coordTimes.length === 1 ? coordTimes[0] : coordTimes,\n },\n }\n : {}),\n };\n if (feature.properties?.visibility !== undefined) {\n feature.properties.visibility = feature.properties.visibility !== \"0\";\n }\n const id = node.getAttribute(\"id\");\n if (id !== null && id !== \"\")\n feature.id = id;\n return feature;\n}\n\nfunction getGroundOverlayBox(node) {\n const latLonQuad = get1(node, \"gx:LatLonQuad\");\n if (latLonQuad) {\n const ring = fixRing(coord(getCoordinates(node)));\n return {\n type: \"Polygon\",\n coordinates: [ring],\n };\n }\n return getLatLonBox(node);\n}\nconst DEGREES_TO_RADIANS = Math.PI / 180;\nfunction rotateBox(bbox, coordinates, rotation) {\n const center = [(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2];\n return [\n coordinates[0].map((coordinate) => {\n const dy = coordinate[1] - center[1];\n const dx = coordinate[0] - center[0];\n const distance = Math.sqrt(Math.pow(dy, 2) + Math.pow(dx, 2));\n const angle = Math.atan2(dy, dx) - rotation * DEGREES_TO_RADIANS;\n return [\n center[0] + Math.cos(angle) * distance,\n center[1] + Math.sin(angle) * distance,\n ];\n }),\n ];\n}\nfunction getLatLonBox(node) {\n const latLonBox = get1(node, \"LatLonBox\");\n if (latLonBox) {\n const north = num1(latLonBox, \"north\");\n const west = num1(latLonBox, \"west\");\n const east = num1(latLonBox, \"east\");\n const south = num1(latLonBox, \"south\");\n const rotation = num1(latLonBox, \"rotation\");\n if (typeof north === \"number\" &&\n typeof south === \"number\" &&\n typeof west === \"number\" &&\n typeof east === \"number\") {\n const bbox = [west, south, east, north];\n let coordinates = [\n [\n [west, north],\n [east, north],\n [east, south],\n [west, south],\n [west, north], // top left (again)\n ],\n ];\n if (typeof rotation === \"number\") {\n coordinates = rotateBox(bbox, coordinates, rotation);\n }\n return {\n type: \"Polygon\",\n coordinates,\n };\n }\n }\n return null;\n}\nfunction getGroundOverlay(node, styleMap) {\n const geometry = getGroundOverlayBox(node);\n const feature = {\n type: \"Feature\",\n geometry,\n properties: Object.assign(\n /**\n * Related to\n * https://gist.github.com/tmcw/037a1cb6660d74a392e9da7446540f46\n */\n { \"@geometry-type\": \"groundoverlay\" }, getMulti(node, [\n \"name\",\n \"address\",\n \"visibility\",\n \"open\",\n \"phoneNumber\",\n \"description\",\n ]), getMaybeHTMLDescription(node), extractCascadedStyle(node, styleMap), extractStyle(node), extractIconHref(node), extractExtendedData(node), extractTimeSpan(node), extractTimeStamp(node)),\n };\n if (feature.properties?.visibility !== undefined) {\n feature.properties.visibility = feature.properties.visibility !== \"0\";\n }\n const id = node.getAttribute(\"id\");\n if (id !== null && id !== \"\")\n feature.id = id;\n return feature;\n}\n\nfunction getStyleId(style) {\n let id = style.getAttribute(\"id\");\n const parentNode = style.parentNode;\n if (!id &&\n isElement(parentNode) &&\n parentNode.localName === \"CascadingStyle\") {\n id = parentNode.getAttribute(\"kml:id\") || parentNode.getAttribute(\"id\");\n }\n return normalizeId(id || \"\");\n}\nfunction buildStyleMap(node) {\n const styleMap = {};\n for (const style of $(node, \"Style\")) {\n styleMap[getStyleId(style)] = extractStyle(style);\n }\n for (const map of $(node, \"StyleMap\")) {\n const id = normalizeId(map.getAttribute(\"id\") || \"\");\n val1(map, \"styleUrl\", (styleUrl) => {\n styleUrl = normalizeId(styleUrl);\n if (styleMap[styleUrl]) {\n styleMap[id] = styleMap[styleUrl];\n }\n });\n }\n return styleMap;\n}\nconst FOLDER_PROPS = [\n \"name\",\n \"visibility\",\n \"open\",\n \"address\",\n \"description\",\n \"phoneNumber\",\n \"visibility\",\n];\nfunction getFolder(node) {\n const meta = {};\n for (const child of Array.from(node.childNodes)) {\n if (isElement(child) && FOLDER_PROPS.includes(child.tagName)) {\n meta[child.tagName] = nodeVal(child);\n }\n }\n return {\n type: \"folder\",\n meta,\n children: [],\n };\n}\n/**\n * Yield a nested tree with KML folder structure\n *\n * This generates a tree with the given structure:\n *\n * ```js\n * {\n * \"type\": \"root\",\n * \"children\": [\n * {\n * \"type\": \"folder\",\n * \"meta\": {\n * \"name\": \"Test\"\n * },\n * \"children\": [\n * // ...features and folders\n * ]\n * }\n * // ...features\n * ]\n * }\n * ```\n *\n * ### GroundOverlay\n *\n * GroundOverlay elements are converted into\n * `Feature` objects with `Polygon` geometries,\n * a property like:\n *\n * ```json\n * {\n * \"@geometry-type\": \"groundoverlay\"\n * }\n * ```\n *\n * And the ground overlay's image URL in the `href`\n * property. Ground overlays will need to be displayed\n * with a separate method to other features, depending\n * on which map framework you're using.\n */\nfunction kmlWithFolders(node) {\n const styleMap = buildStyleMap(node);\n const tree = { type: \"root\", children: [] };\n function traverse(node, pointer) {\n if (isElement(node)) {\n switch (node.tagName) {\n case \"GroundOverlay\": {\n const placemark = getGroundOverlay(node, styleMap);\n if (placemark) {\n pointer.children.push(placemark);\n }\n break;\n }\n case \"Placemark\": {\n const placemark = getPlacemark(node, styleMap);\n if (placemark) {\n pointer.children.push(placemark);\n }\n break;\n }\n case \"Folder\": {\n const folder = getFolder(node);\n pointer.children.push(folder);\n pointer = folder;\n break;\n }\n }\n }\n if (node.childNodes) {\n for (let i = 0; i < node.childNodes.length; i++) {\n traverse(node.childNodes[i], pointer);\n }\n }\n }\n traverse(node, tree);\n return tree;\n}\n/**\n * Convert KML to GeoJSON incrementally, returning\n * a [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)\n * that yields output feature by feature.\n */\nfunction* kmlGen(node) {\n const styleMap = buildStyleMap(node);\n for (const placemark of $(node, \"Placemark\")) {\n const feature = getPlacemark(placemark, styleMap);\n if (feature)\n yield feature;\n }\n for (const groundOverlay of $(node, \"GroundOverlay\")) {\n const feature = getGroundOverlay(groundOverlay, styleMap);\n if (feature)\n yield feature;\n }\n}\n/**\n * Convert a KML document to GeoJSON. The first argument, `doc`, must be a KML\n * document as an XML DOM - not as a string. You can get this using jQuery's default\n * `.ajax` function or using a bare XMLHttpRequest with the `.response` property\n * holding an XML DOM.\n *\n * The output is a JavaScript object of GeoJSON data. You can convert it to a string\n * with [JSON.stringify](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)\n * or use it directly in libraries.\n */\nfunction kml(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(kmlGen(node)),\n };\n}\n\nexport { gpx, gpxGen, kml, kmlGen, kmlWithFolders, tcx, tcxGen };\n//# sourceMappingURL=togeojson.es.mjs.map\n","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>} 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","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nimport { LIcon, LMarker } from '@vue-leaflet/vue-leaflet'\n import { toRefs } from 'vue'\n\n import { TCoordinates } from '@/types/workouts'\n\n interface Props {\n markerCoordinates: TCoordinates\n isStart: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CustomMarker',\n props: {\n markerCoordinates: null,\n isStart: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n markerCoordinates: TCoordinates\n isStart: boolean\n }\n\n \n\n const { isStart, markerCoordinates } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(markerCoordinates).latitude)\n ? (_openBlock(), _createBlock(_unref(LMarker), {\n key: 0,\n \"lat-lng\": [_unref(markerCoordinates).latitude, _unref(markerCoordinates).longitude]\n }, {\n default: _withCtx(() => [\n _createVNode(_unref(LIcon), {\n \"icon-url\": `/img/workouts/${_unref(isStart) ? 'start' : 'finish'}.svg`,\n iconSize: [15, 15]\n }, null, 8, [\"icon-url\"])\n ]),\n _: 1\n }, 8, [\"lat-lng\"]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./CustomMarker.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./CustomMarker.vue?vue&type=script&lang=ts&setup=true\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, normalizeClass as _normalizeClass, createBlock as _createBlock, resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6b490f5d\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-map\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"leaflet-container\"\n}\nconst _hoisted_3 = { key: 1 }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-refresh\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_5 = {\n key: 1,\n class: \"no-map\"\n}\n\nimport { gpx } from '@tmcw/togeojson'\n import {\n LControl,\n LControlLayers,\n LGeoJson,\n LLayerGroup,\n LMap,\n LMarker,\n LTileLayer,\n } from '@vue-leaflet/vue-leaflet'\n import { ComputedRef, computed, ref, toRefs, withDefaults } from 'vue'\n import 'leaflet/dist/leaflet.css'\n\n import CustomMarker from '@/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue'\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 interface Props {\n workoutData: IWorkoutData\n markerCoordinates?: TCoordinates\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n workoutData: null,\n markerCoordinates: { default: () => ({} as TCoordinates) }\n },\n setup(__props: any) {\n\nconst props = __props as { workoutData: IWorkoutData, markerCoordinates: TCoordinates }\n\n \n\n const store = useStore()\n\n const { workoutData, markerCoordinates } = toRefs(props)\n const workoutMap = ref null }\n }>(null)\n const bounds = computed(() => getBounds())\n const appConfig: ComputedRef = 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 const startMarkerCoordinates = computed(() =>\n props.workoutData && props.workoutData.chartData.length > 0\n ? {\n latitude: props.workoutData.chartData[0].latitude,\n longitude: props.workoutData.chartData[0].longitude,\n }\n : {}\n )\n const endMarkerCoordinates = computed(() =>\n props.workoutData && props.workoutData.chartData.length > 0\n ? {\n latitude:\n props.workoutData.chartData[props.workoutData.chartData.length - 1]\n .latitude,\n longitude:\n props.workoutData.chartData[props.workoutData.chartData.length - 1]\n .longitude,\n }\n : {}\n )\n const isFullscreen = ref(false)\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[] {\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 function getBounds() {\n return 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 function resetZoom() {\n workoutMap.value?.leafletObject.fitBounds(getBounds())\n }\n function toggleFullscreen() {\n isFullscreen.value = !isFullscreen.value\n if (!isFullscreen.value) {\n setTimeout(() => {\n resetZoom()\n }, 100)\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_VFullscreen = _resolveComponent(\"VFullscreen\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(workoutData).loading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_unref(workoutData).workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_VFullscreen, {\n key: 0,\n modelValue: isFullscreen.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((isFullscreen).value = $event))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"leaflet-container\", { 'fullscreen-map': isFullscreen.value }])\n }, [\n (_unref(geoJson).jsonData && _unref(center) && _unref(bounds).length === 2)\n ? (_openBlock(), _createBlock(_unref(LMap), {\n key: 0,\n zoom: 13,\n maxZoom: 19,\n center: _unref(center),\n bounds: _unref(bounds),\n ref_key: \"workoutMap\",\n ref: workoutMap,\n onReady: _cache[0] || (_cache[0] = ($event: any) => (fitBounds(_unref(bounds))))\n }, {\n default: _withCtx(() => [\n _createVNode(_unref(LControlLayers)),\n _createVNode(_unref(LControl), {\n position: \"topleft\",\n class: \"map-control\",\n onClick: resetZoom\n }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }),\n _createVNode(_unref(LControl), {\n position: \"topleft\",\n class: \"map-control\",\n onClick: toggleFullscreen\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa-${isFullscreen.value ? 'compress' : 'arrows-alt'}`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _: 1\n }),\n _createVNode(_unref(LTileLayer), {\n url: `${_unref(getApiUrl)()}workouts/map_tile/{s}/{z}/{x}/{y}.png`,\n attribution: _unref(appConfig).map_attribution,\n bounds: _unref(bounds)\n }, null, 8, [\"url\", \"attribution\", \"bounds\"]),\n _createVNode(_unref(LGeoJson), {\n geojson: _unref(geoJson).jsonData\n }, null, 8, [\"geojson\"]),\n (_unref(markerCoordinates).latitude)\n ? (_openBlock(), _createBlock(_unref(LMarker), {\n key: 0,\n \"lat-lng\": [\n _unref(markerCoordinates).latitude,\n _unref(markerCoordinates).longitude,\n ]\n }, null, 8, [\"lat-lng\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_unref(LLayerGroup), {\n name: _ctx.$t('workouts.START_AND_FINISH'),\n \"layer-type\": \"overlay\"\n }, {\n default: _withCtx(() => [\n (_unref(startMarkerCoordinates).latitude)\n ? (_openBlock(), _createBlock(CustomMarker, {\n key: 0,\n markerCoordinates: _unref(startMarkerCoordinates),\n isStart: true\n }, null, 8, [\"markerCoordinates\"]))\n : _createCommentVNode(\"\", true),\n (_unref(endMarkerCoordinates).latitude)\n ? (_openBlock(), _createBlock(CustomMarker, {\n key: 1,\n markerCoordinates: _unref(endMarkerCoordinates),\n isStart: false\n }, null, 8, [\"markerCoordinates\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"name\"])\n ]),\n _: 1\n }, 8, [\"center\", \"bounds\"]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ]),\n _: 1\n }, 8, [\"modelValue\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('workouts.NO_MAP')), 1))\n ]))\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=6b490f5d&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6b490f5d\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, withCtx as _withCtx, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9fc0bab8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workout-detail\" }\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n watch,\n withDefaults,\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/index.vue'\n import { WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } 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 interface Props {\n authUser: IAuthUserProfile\n displaySegment: boolean\n sports: ISport[]\n workoutData: IWorkoutData\n markerCoordinates?: TCoordinates\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n authUser: null,\n displaySegment: { type: Boolean },\n sports: null,\n workoutData: null,\n markerCoordinates: { default: () => ({} as TCoordinates) }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, displaySegment: boolean, sports: ISport[], workoutData: IWorkoutData, markerCoordinates: TCoordinates }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { authUser, markerCoordinates, workoutData } = toRefs(props)\n const workout: ComputedRef = computed(\n () => props.workoutData.workout\n )\n const segmentId: Ref = ref(\n route.params.workoutId ? +route.params.segmentId : null\n )\n const segment: ComputedRef = computed(() =>\n workout.value.segments.length > 0 && segmentId.value\n ? workout.value.segments[+segmentId.value - 1]\n : null\n )\n const displayModal: Ref = ref(false)\n const sport = computed(() =>\n props.sports\n ? props.sports.find(\n (sport) => sport.id === props.workoutData.workout.sport_id\n )\n : {}\n )\n const workoutObject = computed(() =>\n getWorkoutObject(workout.value, segment.value)\n )\n\n function getWorkoutObjectUrl(\n workout: IWorkout,\n displaySegment: boolean,\n segmentId: number | null\n ): Record {\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 props.authUser.date_format\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 weatherStart: segment ? null : workout.weather_start,\n with_gpx: workout.with_gpx,\n workoutId: workout.id,\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 watch(\n () => route.params.segmentId,\n async (newSegmentId) => {\n if (newSegmentId) {\n segmentId.value = +newSegmentId\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t('workouts.WORKOUT_DELETION_CONFIRMATION'),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (deleteWorkout(_unref(workoutObject).workoutId))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createVNode(WorkoutCardTitle, {\n sport: _unref(sport),\n workoutObject: _unref(workoutObject),\n onDisplayModal: _cache[2] || (_cache[2] = ($event: any) => (updateDisplayModal(true)))\n }, null, 8, [\"sport\", \"workoutObject\"])\n ]),\n content: _withCtx(() => [\n _createVNode(WorkoutMap, {\n workoutData: _unref(workoutData),\n markerCoordinates: _unref(markerCoordinates)\n }, null, 8, [\"workoutData\", \"markerCoordinates\"]),\n _createVNode(WorkoutData, {\n workoutObject: _unref(workoutObject),\n useImperialUnits: _unref(authUser).imperial_units,\n displayHARecord: _unref(authUser).display_ascent\n }, null, 8, [\"workoutObject\", \"useImperialUnits\", \"displayHARecord\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=9fc0bab8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9fc0bab8\"]])\n\nexport default __exports__","import { Chart, LegendItem } from 'chart.js'\n\nconst getOrCreateLegendList = (id: string): HTMLUListElement => {\n const legendContainer = document.getElementById(id)\n if (legendContainer) {\n let listContainer = legendContainer.querySelector('ul')\n if (!listContainer) {\n listContainer = document.createElement('ul')\n legendContainer.appendChild(listContainer)\n }\n return listContainer\n }\n throw new Error('No legend container')\n}\n\nexport const htmlLegendPlugin = {\n id: 'htmlLegend',\n afterUpdate(\n chart: Chart,\n args: Record,\n options: Record\n ): void {\n const ul = getOrCreateLegendList(options.containerID)\n while (ul.firstChild) {\n ul.firstChild.remove()\n }\n\n const legendItems = chart.options.plugins?.legend?.labels?.generateLabels\n ? chart.options.plugins?.legend?.labels?.generateLabels(chart)\n : []\n\n legendItems.forEach((item: LegendItem) => {\n const li = document.createElement('li')\n li.onclick = () => {\n if (item.datasetIndex !== undefined) {\n chart.setDatasetVisibility(\n item.datasetIndex,\n !chart.isDatasetVisible(item.datasetIndex)\n )\n chart.update()\n }\n }\n\n const checkBox = document.createElement('input')\n if (checkBox) {\n checkBox.type = 'checkbox'\n checkBox.id = item.text\n checkBox.checked = !item.hidden\n }\n\n const text = document.createTextNode(item.text)\n\n const boxSpan = document.createElement('span')\n if (boxSpan) {\n boxSpan.style.background = String(item.fillStyle)\n boxSpan.style.borderColor = String(item.strokeStyle)\n }\n\n li.appendChild(checkBox)\n li.appendChild(text)\n li.appendChild(boxSpan)\n ul.appendChild(li)\n })\n },\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, unref as _unref, mergeProps as _mergeProps, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-dcea1168\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-chart\" }\nconst _hoisted_2 = { class: \"chart-radio\" }\nconst _hoisted_3 = [\"checked\"]\nconst _hoisted_4 = [\"checked\"]\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"chart-legend\" }, null, -1))\nconst _hoisted_6 = { class: \"chart-info\" }\nconst _hoisted_7 = { class: \"no-data-cleaning\" }\nconst _hoisted_8 = { class: \"elevation-start\" }\nconst _hoisted_9 = [\"checked\"]\n\nimport { ChartData, ChartOptions } from 'chart.js'\n import { ComputedRef, computed, ref } from 'vue'\n import { LineChart, useLineChart } from 'vue-chart-3'\n import { useI18n } from 'vue-i18n'\n\n import { htmlLegendPlugin } from '@/components/Workout/WorkoutDetail/WorkoutChart/legend'\n import { TUnit } from '@/types/units'\n import { IAuthUserProfile } from '@/types/user'\n import {\n IWorkoutChartData,\n IWorkoutData,\n TCoordinates,\n } from '@/types/workouts'\n import { units } from '@/utils/units'\n import { getDatasets } from '@/utils/workouts'\n\n interface Props {\n authUser: IAuthUserProfile\n workoutData: IWorkoutData\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n authUser: null,\n workoutData: null\n },\n emits: ['getCoordinates'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n workoutData: IWorkoutData\n }\n\n \n\n \n\n const { t } = useI18n()\n\n const displayDistance = ref(true)\n const beginElevationAtZero = ref(true)\n const datasets: ComputedRef = computed(() =>\n getDatasets(props.workoutData.chartData, t, props.authUser.imperial_units)\n )\n const fromKmUnit = getUnitTo('km')\n const fromMUnit = getUnitTo('m')\n const chartData: ComputedRef> = 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 = computed(\n () => datasets.value.coordinates\n )\n const options = computed>(() => ({\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') + ` (${fromKmUnit})`\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') + ` (${fromKmUnit}/h)`,\n },\n },\n yElevation: {\n beginAtZero: beginElevationAtZero.value,\n grid: {\n drawOnChartArea: false,\n },\n position: 'right',\n title: {\n display: true,\n text: t('workouts.ELEVATION') + ` (${fromMUnit})`,\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 + ` ${fromMUnit}`\n : label + ` ${fromKmUnit}/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')}: ${\n tooltipItems[0].label\n } ${fromKmUnit}`\n : `${t('workouts.DURATION')}: ${formatDuration(\n tooltipItems[0].label.replace(',', '')\n )}`\n },\n },\n },\n legend: {\n display: false,\n },\n htmlLegend: {\n containerID: 'chart-legend',\n },\n },\n }))\n const { lineChartProps } = useLineChart({\n chartData,\n options,\n plugins: [htmlLegendPlugin],\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 function getUnitTo(unitFrom: TUnit): TUnit {\n return props.authUser.imperial_units\n ? units[unitFrom].defaultTarget\n : unitFrom\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.ANALYSIS')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"distance\",\n checked: displayDistance.value,\n onClick: updateDisplayDistance\n }, null, 8, _hoisted_3),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"duration\",\n checked: !displayDistance.value,\n onClick: updateDisplayDistance\n }, null, 8, _hoisted_4),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DURATION')), 1)\n ])\n ]),\n _hoisted_5,\n _createVNode(_unref(LineChart), _mergeProps(_unref(lineChartProps), {\n class: \"line-chart\",\n onMouseleave: emitEmptyCoordinates\n }), null, 16),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.NO_DATA_CLEANING')), 1),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n checked: beginElevationAtZero.value,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (beginElevationAtZero.value = !beginElevationAtZero.value))\n }, null, 8, _hoisted_9),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.START_ELEVATION_AT_ZERO')), 1)\n ])\n ])\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=dcea1168&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-dcea1168\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-028ad527\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-note\" }\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n notes?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutNotes',\n props: {\n notes: { default: () => null }\n },\n setup(__props: any) {\n\nconst props = __props as { notes: string | null }\n\n \n\n const { notes } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.NOTES')), 1)\n ]),\n content: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(notes) && _unref(notes) !== '' ? _unref(notes) : _ctx.$t('workouts.NO_NOTES')), 1)\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./WorkoutNotes.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutNotes.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutNotes.vue?vue&type=style&index=0&id=028ad527&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-028ad527\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6b8a27cd\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-segments\" }\n\nimport { toRefs } from 'vue'\n\n import { IWorkoutSegment } from '@/types/workouts'\n\n interface Props {\n segments: IWorkoutSegment[]\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutSegments',\n props: {\n segments: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n segments: IWorkoutSegment[]\n useImperialUnits: boolean\n }\n\n \n\n const { segments, useImperialUnits } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.SEGMENT', 2)), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"ul\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(segments), (segment, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: segment.segment_id\n }, [\n _createVNode(_component_router_link, {\n to: {\n name: 'WorkoutSegment',\n params: {\n workoutId: segment.workout_id,\n segmentId: index + 1,\n },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.SEGMENT', 1)) + \" \" + _toDisplayString(index + 1), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n _createTextVNode(\" (\" + _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \": \", 1),\n _createVNode(_component_Distance, {\n distance: segment.distance,\n unitFrom: \"km\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createTextVNode(\", \" + _toDisplayString(_ctx.$t('workouts.DURATION')) + \": \" + _toDisplayString(segment.duration) + \") \", 1)\n ]))\n }), 128))\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./WorkoutSegments.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutSegments.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutSegments.vue?vue&type=style&index=0&id=6b8a27cd&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6b8a27cd\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-53c4e53a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workout-container\"\n}\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\nconst _hoisted_6 = { key: 1 }\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\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 WorkoutDetail from '@/components/Workout/WorkoutDetail/index.vue'\n import WorkoutChart from '@/components/Workout/WorkoutDetail/WorkoutChart/index.vue'\n import WorkoutNotes from '@/components/Workout/WorkoutDetail/WorkoutNotes.vue'\n import WorkoutSegments from '@/components/Workout/WorkoutDetail/WorkoutSegments.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData, IWorkoutPayload, TCoordinates } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n displaySegment: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Workout',\n props: {\n displaySegment: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n displaySegment: boolean\n }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { displaySegment } = toRefs(props)\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const markerCoordinates: Ref = ref({\n latitude: null,\n longitude: null,\n })\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 onUnmounted(() => {\n store.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\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\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_unref(workoutData).workout.id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(WorkoutDetail, {\n workoutData: _unref(workoutData),\n sports: _unref(sports),\n authUser: _unref(authUser),\n markerCoordinates: markerCoordinates.value,\n displaySegment: _unref(displaySegment)\n }, null, 8, [\"workoutData\", \"sports\", \"authUser\", \"markerCoordinates\", \"displaySegment\"]),\n (\n _unref(workoutData).workout.with_gpx && _unref(workoutData).chartData.length > 0\n )\n ? (_openBlock(), _createBlock(WorkoutChart, {\n key: 0,\n workoutData: _unref(workoutData),\n authUser: _unref(authUser),\n displaySegment: _unref(displaySegment),\n onGetCoordinates: updateCoordinates\n }, null, 8, [\"workoutData\", \"authUser\", \"displaySegment\"]))\n : _createCommentVNode(\"\", true),\n (!_unref(displaySegment) && _unref(workoutData).workout.segments.length > 1)\n ? (_openBlock(), _createBlock(WorkoutSegments, {\n key: 1,\n segments: _unref(workoutData).workout.segments,\n useImperialUnits: _unref(authUser).imperial_units\n }, null, 8, [\"segments\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n (!_unref(displaySegment))\n ? (_openBlock(), _createBlock(WorkoutNotes, {\n key: 2,\n notes: _unref(workoutData).workout.notes\n }, null, 8, [\"notes\"]))\n : _createCommentVNode(\"\", true),\n _hoisted_5\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n (!_unref(workoutData).loading)\n ? (_openBlock(), _createBlock(NotFound, {\n key: 0,\n target: \"WORKOUT\"\n }))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./Workout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Workout.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Workout.vue?vue&type=style&index=0&id=53c4e53a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-53c4e53a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6c38593a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workouts-filters\" }\nconst _hoisted_2 = { class: \"box\" }\nconst _hoisted_3 = { class: \"form\" }\nconst _hoisted_4 = { class: \"form-items-group\" }\nconst _hoisted_5 = { class: \"form-item\" }\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = { class: \"form-item\" }\nconst _hoisted_8 = [\"value\"]\nconst _hoisted_9 = { class: \"form-items-group\" }\nconst _hoisted_10 = { class: \"form-item\" }\nconst _hoisted_11 = [\"value\"]\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"option\", { value: \"\" }, null, -1))\nconst _hoisted_13 = [\"value\"]\nconst _hoisted_14 = { class: \"form-items-group\" }\nconst _hoisted_15 = { class: \"form-item\" }\nconst _hoisted_16 = { class: \"form-inputs-group\" }\nconst _hoisted_17 = [\"value\"]\nconst _hoisted_18 = [\"value\"]\nconst _hoisted_19 = { class: \"form-items-group\" }\nconst _hoisted_20 = { class: \"form-item\" }\nconst _hoisted_21 = { class: \"form-inputs-group\" }\nconst _hoisted_22 = [\"value\"]\nconst _hoisted_23 = [\"value\"]\nconst _hoisted_24 = { class: \"form-items-group\" }\nconst _hoisted_25 = { class: \"form-item\" }\nconst _hoisted_26 = { class: \"form-inputs-group\" }\nconst _hoisted_27 = [\"value\"]\nconst _hoisted_28 = [\"value\"]\nconst _hoisted_29 = { class: \"form-items-group\" }\nconst _hoisted_30 = { class: \"form-item\" }\nconst _hoisted_31 = { class: \"form-inputs-group\" }\nconst _hoisted_32 = [\"value\"]\nconst _hoisted_33 = [\"value\"]\nconst _hoisted_34 = { class: \"form-button\" }\n\nimport { ComputedRef, computed, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { translateSports } from '@/utils/sports'\n import { units } from '@/utils/units'\n\n interface Props {\n authUser: IAuthUserProfile\n sports: ISport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsFilters',\n props: {\n authUser: null,\n sports: null\n },\n emits: ['filter'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n sports: ISport[]\n }\n\n \n\n \n\n const { t } = useI18n()\n const route = useRoute()\n const router = useRouter()\n\n const { authUser } = toRefs(props)\n\n const toUnit = authUser.value.imperial_units\n ? units['km'].defaultTarget\n : 'km'\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.sports, t)\n )\n let params: LocationQuery = Object.assign({}, route.query)\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')\n if ('page' in params) {\n params['page'] = '1'\n }\n router.push({ path: '/workouts', query: params })\n }\n function onClearFilter() {\n emit('filter')\n router.push({ path: '/workouts', query: {} })\n }\n\n watch(\n () => route.query,\n (newQuery) => {\n params = Object.assign({}, newQuery)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.FROM')) + \": \", 1),\n _createElementVNode(\"input\", {\n name: \"from\",\n type: \"date\",\n value: _ctx.$route.query.from,\n onChange: handleFilterChange\n }, null, 40, _hoisted_6)\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.TO')) + \": \", 1),\n _createElementVNode(\"input\", {\n name: \"to\",\n type: \"date\",\n value: _ctx.$route.query.to,\n onChange: handleFilterChange\n }, null, 40, _hoisted_8)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.SPORT', 1)) + \":\", 1),\n _createElementVNode(\"select\", {\n name: \"sport_id\",\n value: _ctx.$route.query.sport_id,\n onChange: handleFilterChange\n }, [\n _hoisted_12,\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports).filter((s) =>\n _unref(authUser).sports_list.includes(s.id)\n ), (sport) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: sport.id,\n key: sport.id\n }, _toDisplayString(sport.translatedLabel), 9, _hoisted_13))\n }), 128))\n ], 40, _hoisted_11)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"): \", 1),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"input\", {\n name: \"distance_from\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: _ctx.$route.query.distance_from,\n onChange: handleFilterChange\n }, null, 40, _hoisted_17),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n name: \"distance_to\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: _ctx.$route.query.distance_to,\n onChange: handleFilterChange\n }, null, 40, _hoisted_18)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"div\", _hoisted_20, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DURATION')) + \": \", 1),\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"input\", {\n name: \"duration_from\",\n value: _ctx.$route.query.duration_from,\n onChange: handleFilterChange,\n pattern: \"^([0-9]*[0-9]):([0-5][0-9])$\",\n placeholder: \"hh:mm\",\n type: \"text\"\n }, null, 40, _hoisted_22),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n name: \"duration_to\",\n value: _ctx.$route.query.duration_to,\n onChange: handleFilterChange,\n pattern: \"^([0-9]*[0-9]):([0-5][0-9])$\",\n placeholder: \"hh:mm\",\n type: \"text\"\n }, null, 40, _hoisted_23)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_24, [\n _createElementVNode(\"div\", _hoisted_25, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.AVE_SPEED')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"/h): \", 1),\n _createElementVNode(\"div\", _hoisted_26, [\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"ave_speed_from\",\n value: _ctx.$route.query.ave_speed_from,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_27),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"ave_speed_to\",\n value: _ctx.$route.query.ave_speed_to,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_28)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_29, [\n _createElementVNode(\"div\", _hoisted_30, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"/h): \", 1),\n _createElementVNode(\"div\", _hoisted_31, [\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"max_speed_from\",\n value: _ctx.$route.query.max_speed_from,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_32),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"max_speed_to\",\n value: _ctx.$route.query.max_speed_to,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_33)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_34, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: onFilter\n }, _toDisplayString(_ctx.$t('buttons.FILTER')), 1),\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: onClearFilter\n }, _toDisplayString(_ctx.$t('buttons.CLEAR_FILTER')), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./WorkoutsFilters.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsFilters.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsFilters.vue?vue&type=style&index=0&id=6c38593a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6c38593a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createBlock as _createBlock, withCtx as _withCtx, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0f8ea7b0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workouts-list\" }\nconst _hoisted_2 = { class: \"total\" }\nconst _hoisted_3 = { class: \"total-label\" }\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = {\n key: 0,\n class: \"workouts-table responsive-table\"\n}\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", { class: \"sport-col\" }, null, -1))\nconst _hoisted_7 = { class: \"sport-col\" }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = [\"onMouseover\"]\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"fa fa-map-o\",\n \"aria-hidden\": \"true\"\n}\nconst _hoisted_12 = { class: \"title\" }\nconst _hoisted_13 = { class: \"workout-date\" }\nconst _hoisted_14 = { class: \"cell-heading\" }\nconst _hoisted_15 = { class: \"text-right\" }\nconst _hoisted_16 = { class: \"cell-heading\" }\nconst _hoisted_17 = { class: \"text-right\" }\nconst _hoisted_18 = { class: \"cell-heading\" }\nconst _hoisted_19 = { class: \"text-right\" }\nconst _hoisted_20 = { class: \"cell-heading\" }\nconst _hoisted_21 = { class: \"text-right\" }\nconst _hoisted_22 = { class: \"cell-heading\" }\nconst _hoisted_23 = { class: \"text-right\" }\nconst _hoisted_24 = { class: \"cell-heading\" }\nconst _hoisted_25 = { class: \"text-right\" }\nconst _hoisted_26 = { class: \"cell-heading\" }\nconst _hoisted_27 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n watch,\n capitalize,\n onBeforeMount,\n } from 'vue'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import FilterSelects from '@/components/Common/FilterSelects.vue'\n import Pagination from '@/components/Common/Pagination.vue'\n import StaticMap from '@/components/Common/StaticMap.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { ROOT_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { IPagination } from '@/types/api'\n import { ITranslatedSport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkout, TWorkoutsPayload } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { getQuery, sortList, workoutsPayloadKeys } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n import { getSportColor, getSportLabel } from '@/utils/sports'\n import { convertDistance } from '@/utils/units'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n user: IAuthUserProfile\n sports: ITranslatedSport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsList',\n props: {\n user: null,\n sports: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n sports: ITranslatedSport[]\n }\n\n \n\n const store = useStore()\n const route = useRoute()\n const router = useRouter()\n\n const { user, sports } = toRefs(props)\n const orderByList: string[] = [\n 'ave_speed',\n 'distance',\n 'duration',\n 'workout_date',\n ]\n const workouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.USER_WORKOUTS]\n )\n const pagination: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUTS_PAGINATION]\n )\n const currentLanguage: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n let query: TWorkoutsPayload = getWorkoutsQuery(route.query)\n const hoverWorkoutId: Ref = ref(null)\n\n onBeforeMount(() => {\n loadWorkouts(query)\n })\n\n function loadWorkouts(payload: TWorkoutsPayload) {\n store.dispatch(\n WORKOUTS_STORE.ACTIONS.GET_USER_WORKOUTS,\n user.value.imperial_units ? getConvertedPayload(payload) : payload\n )\n }\n function reloadWorkouts(queryParam: string, queryValue: string) {\n const newQuery: LocationQuery = Object.assign({}, route.query)\n newQuery[queryParam] = queryValue\n if (queryParam === 'per_page') {\n newQuery['page'] = '1'\n }\n query = getWorkoutsQuery(newQuery)\n router.push({ path: '/workouts', query })\n }\n\n function getWorkoutsQuery(newQuery: LocationQuery): TWorkoutsPayload {\n const workoutQuery = getQuery(\n newQuery,\n orderByList,\n defaultOrder.order_by,\n {\n defaultSort: defaultOrder.order,\n }\n )\n Object.keys(newQuery)\n .filter((k) => workoutsPayloadKeys.includes(k))\n .map((k) => {\n if (typeof newQuery[k] === 'string') {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n workoutQuery[k] = newQuery[k]\n }\n })\n return workoutQuery\n }\n\n function getConvertedPayload(payload: TWorkoutsPayload): TWorkoutsPayload {\n const convertedPayload: TWorkoutsPayload = {\n ...payload,\n }\n Object.entries(convertedPayload).map((entry) => {\n if (entry[0].match('speed|distance') && entry[1]) {\n convertedPayload[entry[0]] = convertDistance(+entry[1], 'mi', 'km')\n }\n })\n return convertedPayload\n }\n\n function onHover(workoutId: string | null) {\n hoverWorkoutId.value = workoutId\n }\n\n watch(\n () => route.query,\n async (newQuery) => {\n query = getWorkoutsQuery(newQuery)\n loadWorkouts(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"box\", { 'empty-table': _unref(workouts).length === 0 }])\n }, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('common.TOTAL').toLowerCase()) + \": \", 1),\n (_unref(pagination).total !== null)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, _toDisplayString(_unref(pagination).total) + \" \" + _toDisplayString(_ctx.$t('workouts.WORKOUT', _unref(pagination).total)), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(FilterSelects, {\n sort: _unref(sortList),\n order_by: orderByList,\n query: _unref(query),\n message: \"workouts\",\n onUpdateSelect: reloadWorkouts\n }, null, 8, [\"sort\", \"query\"]),\n (_unref(workouts).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createVNode(Pagination, {\n class: \"top-pagination\",\n pagination: _unref(pagination),\n path: \"/workouts\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]),\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", {\n class: _normalizeClass({ smaller: 'de' === _unref(currentLanguage) })\n }, [\n _createElementVNode(\"tr\", null, [\n _hoisted_6,\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 1))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DATE'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DISTANCE'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DURATION'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.AVE_SPEED'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.MAX_SPEED'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.ASCENT'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DESCENT'))), 1)\n ])\n ], 2),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: workout.id\n }, [\n _createElementVNode(\"td\", _hoisted_7, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('workouts.SPORT', 1)), 1),\n (_unref(sports).length > 0)\n ? (_openBlock(), _createBlock(_component_SportImage, {\n key: 0,\n title: \n _unref(sports).find((s) => s.id === workout.sport_id)\n .translatedLabel\n ,\n \"sport-label\": _unref(getSportLabel)(workout, _unref(sports)),\n color: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"title\", \"sport-label\", \"color\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"td\", {\n class: \"workout-title\",\n onMouseover: ($event: any) => (onHover(workout.id)),\n onMouseleave: _cache[0] || (_cache[0] = ($event: any) => (onHover(null)))\n }, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 1))), 1),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: { name: 'Workout', params: { workoutId: workout.id } }\n }, {\n default: _withCtx(() => [\n (workout.with_gpx)\n ? (_openBlock(), _createElementBlock(\"i\", _hoisted_11))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(workout.title), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n (workout.with_gpx && hoverWorkoutId.value === workout.id)\n ? (_openBlock(), _createBlock(StaticMap, {\n key: 0,\n workout: workout,\n \"display-hover\": true\n }, null, 8, [\"workout\"]))\n : _createCommentVNode(\"\", true)\n ], 40, _hoisted_9),\n _createElementVNode(\"td\", _hoisted_13, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('workouts.DATE')), 1),\n _createTextVNode(\" \" + _toDisplayString(_unref(formatDate)(\n workout.workout_date,\n _unref(user).timezone,\n _unref(user).date_format\n )), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_15, [\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1),\n _createVNode(_component_Distance, {\n distance: workout.distance,\n unitFrom: \"km\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_17, [\n _createElementVNode(\"span\", _hoisted_18, _toDisplayString(_ctx.$t('workouts.DURATION')), 1),\n _createTextVNode(\" \" + _toDisplayString(workout.moving), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_19, [\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('workouts.AVE_SPEED')), 1),\n _createVNode(_component_Distance, {\n distance: workout.ave_speed,\n unitFrom: \"km\",\n speed: true,\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_21, [\n _createElementVNode(\"span\", _hoisted_22, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')), 1),\n _createVNode(_component_Distance, {\n distance: workout.max_speed,\n unitFrom: \"km\",\n speed: true,\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_23, [\n _createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('workouts.ASCENT')), 1),\n (workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: workout.ascent,\n unitFrom: \"m\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"td\", _hoisted_25, [\n _createElementVNode(\"span\", _hoisted_26, _toDisplayString(_ctx.$t('workouts.DESCENT')), 1),\n (workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: workout.descent,\n unitFrom: \"m\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n }), 128))\n ])\n ]),\n _createVNode(Pagination, {\n pagination: _unref(pagination),\n path: \"/workouts\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"])\n ]))\n : _createCommentVNode(\"\", true)\n ], 2),\n (_unref(workouts).length === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true),\n _hoisted_27\n ]))\n}\n}\n\n})","import script from \"./WorkoutsList.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsList.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsList.vue?vue&type=style&index=0&id=0f8ea7b0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0f8ea7b0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-77e54012\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"workouts\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container workouts-container\" }\nconst _hoisted_3 = { class: \"display-filters\" }\nconst _hoisted_4 = { class: \"list-container\" }\n\nimport { ComputedRef, computed, 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 { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsView',\n setup(__props) {\n\n const { t } = useI18n()\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(sports.value, t)\n )\n const hiddenFilters = ref(true)\n\n function toggleFilters() {\n hiddenFilters.value = !hiddenFilters.value\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"filters-container\", { hidden: hiddenFilters.value }])\n }, [\n _createVNode(WorkoutsFilters, {\n sports: _unref(translatedSports),\n authUser: _unref(authUser),\n onFilter: toggleFilters\n }, null, 8, [\"sports\", \"authUser\"])\n ], 2),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", { onClick: toggleFilters }, [\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa-caret-${hiddenFilters.value ? 'down' : 'up'}`),\n \"aria-hidden\": \"true\"\n }, null, 2),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`workouts.${hiddenFilters.value ? 'DISPLAY' : 'HIDE'}_FILTERS`)), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(WorkoutsList, {\n user: _unref(authUser),\n sports: _unref(translatedSports)\n }, null, 8, [\"user\", \"sports\"])\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutsView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsView.vue?vue&type=style&index=0&id=77e54012&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-77e54012\"]])\n\nexport default __exports__"],"names":["_hoisted_1","id","_hoisted_2","_hoisted_3","class","_hoisted_4","key","_hoisted_5","_hoisted_6","for","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_defineComponent","__name","props","authUser","sports","isCreation","type","Boolean","default","loading","workout","setup","__props","t","useI18n","store","useStore","router","useRouter","toRefs","translatedSports","computed","translateSports","value","sport_id","appConfig","getters","ROOT_STORE","fileSizeLimit","max_single_file_size","getReadableFileSize","gpx_limit_import","zipSizeLimit","max_zip_file_size","errorMessages","workoutForm","reactive","title","notes","workoutDate","workoutTime","workoutDurationHour","workoutDurationMinutes","workoutDurationSeconds","workoutDistance","withGpx","ref","with_gpx","gpxFile","formErrors","updateNotes","updateWithGpx","updateFile","event","target","files","formatWorkoutForm","workoutDateTime","formatWorkoutDate","getDateWithTZ","workout_date","timezone","duration","split","imperial_units","convertDistance","distance","parseFloat","toFixed","workout_time","formatPayload","payload","updateWorkout","dispatch","WORKOUTS_STORE","workoutId","data","errorMessage","commit","file","onCancel","push","name","params","go","invalidateForm","onMounted","onUnmounted","watch","async","newWorkout","previousWorkout","_ctx","_cache","_component_CustomTextArea","_resolveComponent","_component_ErrorMessage","_component_Loader","_component_Card","_openBlock","_createElementBlock","_normalizeClass","_unref","_createVNode","_withCtx","_createTextVNode","_toDisplayString","$t","content","_createElementVNode","errors","onSubmit","_withModifiers","checked","disabled","onClick","_createCommentVNode","_withDirectives","required","onInvalid","$event","_Fragment","_renderList","sport","translatedLabel","_vModelSelect","accept","onInput","_vModelText","placeholder","minlength","maxlength","pattern","min","step","input","onUpdateValue","_createBlock","message","_","__exports__","SPORTS_STORE","AUTH_USER_STORE","workoutData","WorkoutEdition","route","useRoute","onBeforeMount","newWorkoutId","_withScopeId","n","_pushScopeId","_popScopeId","workoutObject","emits","emit","downloadGpx","authApi","responseType","then","response","gpxFileUrl","window","URL","createObjectURL","Blob","gpxLink","document","createElement","href","setAttribute","body","appendChild","click","_component_SportImage","_component_router_link","inactive","previousUrl","$router","label","color","segmentId","to","nextUrl","recordType","records","find","record","record_type","directions","convertDegreeToDirection","angle","Math","floor","weather","useImperialUnits","getWindDirectionTitle","windBearing","_component_Distance","wind","unitFrom","digits","displayUnit","style","_normalizeStyle","transform","weatherStart","weatherEnd","src","icon","alt","Number","temperature","humidity","WeatherWind","displayHARecord","withPause","pauses","moving","WorkoutRecord","strong","aveSpeed","speed","maxSpeed","maxAlt","minAlt","ascent","descent","WorkoutWeather","$","element","tagName","Array","from","getElementsByTagName","nodeVal","node","normalize","textContent","get1","callback","result","length","get","properties","val1","val","$num","isNaN","num1","getMulti","propertyNames","property","isElement","nodeType","getLineStyle","lineStyle","Object","assign","stroke","opacity","width","getExtensions","values","child","childNodes","abbreviateName","nodeName","concat","parseNumeric","includes","num","coordPair$1","ll","getAttribute","time","coordinates","extendedValues","extractProperties","extensions","getElementsByTagNameNS","parentNode","replace","links","map","link","getPoints$1","pointname","pts","line","times","i","c","plural","fill","getRoute","_gpxType","geometry","getTrack","segments","track","extractedLines","segment","multi","coordinateProperties","entries","getPoint","pair","gpxGen","feature","waypoint","point","gpx","features","PI","debounce","fn","timeout","args","context","this","clearTimeout","setTimeout","apply","capitalizeFirstLetter","string","charAt","toUpperCase","slice","propsBinder","methods","leafletElement","setMethodName","newVal","oldVal","remapEvents","contextAttrs","attrName","startsWith","eventName","toLocaleLowerCase","resetWebpackIcon","Icon","modules","Promise","all","Default","prototype","_getIconUrl","mergeOptions","iconRetinaUrl","iconUrl","shadowUrl","provideLeafletWrapper","methodName","wrapped","console","warn","wrapper","updateLeafletWrapper","leafletMethod","WINDOW_OR_GLOBAL","self","g","global","undefined","GLOBAL_LEAFLET_OPT","options","props$1","pane","String","attribution","custom","layerType","visible","setup$1","leafletRef","addLayer","removeLayer","componentOptions","componentMethods","addThisLayer","leafletObject","removeThisLayer","setAttribution","old","attributionControl","$parent","removeAttribution","addAttribution","setName","setLayerType","setVisible","isVisible","bindPopup","bindTooltip","unbindTooltip","tooltip","getTooltip","unbindPopup","popup","getPopup","updateVisibleProp","render","ready","slots","h","display","props$2","interactive","bubblingMouseEvents","props$3","weight","lineCap","lineJoin","dashArray","dashOffset","fillColor","fillOpacity","fillRule","className","props$4","latLng","radius","props$6","position","setup$6","setPosition","remove","render$1","script$2","disableClickPropagation","disableScrollPropagation","root","useGlobalLeaflet","registerControl","Control","DomEvent","L","LControl","extend","onAdd","$slots","props$8","collapsed","autoZIndex","hideSingleBase","sortLayers","sortFunction","Function","setup$8","controlOptions","layer","addBaseLayer","addOverlay","script$4","registerLayerControl","control","layers","props$b","setup$b","layerOptions","layerMethods","props$d","geojson","setup$d","layerGroupMethods","setGeojson","clearLayers","addData","getGeoJSONData","toGeoJSON","getBounds","script$8","geoJSON","listeners","attrs","on","props$e","zIndex","tileSize","noWrap","minZoom","maxZoom","setup$e","props$f","iconSize","iconAnchor","popupAnchor","tooltipAnchor","shadowRetinaUrl","shadowSize","shadowAnchor","bgPos","script$a","canSetParentHtml","setParentHtml","setIcon","onDomEvent","offDomEvent","divIcon","iconObject","createIcon","el","recreationNeeded","htmlSwapNeeded","elHtml","innerHTML","html","scheduleCreateIcon","scheduleHtmlSwap","setIconUrl","setIconRetinaUrl","setIconSize","setIconAnchor","setPopupAnchor","setTooltipAnchor","setShadowUrl","setShadowRetinaUrl","setShadowAnchor","setBgPos","setClassName","setHtml","lDivIcon","lIcon","off","observer","MutationObserver","observe","attributes","childList","characterData","subtree","script$c","layerGroup","script$d","center","bounds","maxBounds","zoom","paddingBottomRight","paddingTopLeft","padding","worldCopyJump","crs","maxBoundsViscosity","inertia","inertiaDeceleration","inertiaMaxSpeed","easeLinearity","zoomAnimation","zoomAnimationThreshold","fadeAnimation","markerZoomAnimation","noBlockingAnimations","blueprint","layersToAdd","layersInControl","eventHandlers","moveEndHandler","getZoom","getCenter","overlayAddHandler","e","l","overlayRemoveHandler","CRS","latLngBounds","beforeMapMount","error","optionsCrs","EPSG3857","layerControl","exist","_leaflet_id","filter","lControlLayer","forEach","lControl","addControl","setZoom","animate","setPaddingBottomRight","setPaddingTopLeft","setPadding","setCrs","prevBounds","fitBounds","setBounds","newBounds","isValid","oldBounds","lastSetBounds","boundsChanged","equals","fitBoundsOptions","setCenter","newCenter","oldCenter","lastSetCenter","lat","lng","panTo","height","props$h","draggable","zIndexOffset","setup$g","setDraggable","dragging","enable","disable","latLngSync","latlng","setLatLng","oldLatLng","getLatLng","script$e","getElement","newIcon","marker","props$i","latLngs","smoothFactor","noClip","props$j","props$k","props$n","tms","subdomains","detectRetina","url","setup$m","gridLayerOptions","gridLayerMethods","script$j","tileLayer","markerCoordinates","isStart","latitude","LMarker","longitude","LIcon","workoutMap","geoJson","getGeoJson","startMarkerCoordinates","chartData","endMarkerCoordinates","isFullscreen","gpxContent","jsonData","DOMParser","parseFromString","resetZoom","toggleFullscreen","_component_VFullscreen","modelValue","LMap","ref_key","onReady","LControlLayers","LTileLayer","getApiUrl","map_attribution","LGeoJson","LLayerGroup","CustomMarker","displaySegment","displayModal","getWorkoutObject","getWorkoutObjectUrl","previous_workout","next_workout","urls","date_format","ave_speed","max_alt","max_speed","min_alt","segment_id","weather_end","weather_start","updateDisplayModal","deleteWorkout","newSegmentId","_component_Modal","onConfirmAction","onCancelAction","WorkoutCardTitle","onDisplayModal","WorkoutMap","WorkoutData","display_ascent","getOrCreateLegendList","legendContainer","getElementById","listContainer","querySelector","Error","htmlLegendPlugin","afterUpdate","chart","ul","containerID","firstChild","legendItems","plugins","legend","labels","generateLabels","item","li","onclick","datasetIndex","setDatasetVisibility","isDatasetVisible","update","checkBox","text","hidden","createTextNode","boxSpan","background","fillStyle","borderColor","strokeStyle","displayDistance","beginElevationAtZero","datasets","getDatasets","fromKmUnit","getUnitTo","fromMUnit","distance_labels","duration_labels","JSON","parse","stringify","elevation","responsive","maintainAspectRatio","animation","layout","top","scales","grid","drawOnChartArea","ticks","count","formatDuration","ySpeed","yElevation","beginAtZero","elements","pointStyle","pointRadius","datalabels","interaction","intersect","mode","callbacks","dataset","formattedValue","yAxisID","tooltipItems","emitCoordinates","dataIndex","htmlLegend","lineChartProps","useLineChart","updateDisplayDistance","Date","toISOString","substr","emitEmptyCoordinates","units","defaultTarget","LineChart","_mergeProps","onMouseleave","index","workout_id","updateCoordinates","WorkoutDetail","WorkoutChart","onGetCoordinates","WorkoutSegments","WorkoutNotes","NotFound","toUnit","query","handleFilterChange","onFilter","path","onClearFilter","newQuery","$route","onChange","s","sports_list","distance_from","distance_to","duration_from","duration_to","ave_speed_from","ave_speed_to","max_speed_from","max_speed_to","user","orderByList","workouts","pagination","currentLanguage","getWorkoutsQuery","hoverWorkoutId","loadWorkouts","getConvertedPayload","reloadWorkouts","queryParam","queryValue","workoutQuery","getQuery","defaultOrder","defaultSort","keys","k","workoutsPayloadKeys","convertedPayload","entry","match","onHover","toLowerCase","total","FilterSelects","sort","sortList","order_by","onUpdateSelect","Pagination","smaller","capitalize","getSportLabel","getSportColor","onMouseover","StaticMap","formatDate","NoWorkouts","hiddenFilters","toggleFilters","username","WorkoutsFilters","WorkoutsList"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/workouts.71e8fef0.js","mappings":"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","sources":["webpack://fittrackee_client/./src/components/Workout/WorkoutEdition.vue?1df7","webpack://fittrackee_client/./src/components/Workout/WorkoutEdition.vue","webpack://fittrackee_client/./src/views/workouts/AddWorkout.vue?212d","webpack://fittrackee_client/./src/views/workouts/AddWorkout.vue","webpack://fittrackee_client/./src/views/workouts/EditWorkout.vue?ba9e","webpack://fittrackee_client/./src/views/workouts/EditWorkout.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutCardTitle.vue?4e0b","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutCardTitle.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutRecord.vue?0a89","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutRecord.vue","webpack://fittrackee_client/./src/utils/weather.ts","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WeatherWind.vue?bd35","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WeatherWind.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutWeather.vue?84e1","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutWeather.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutData.vue?ef29","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutData.vue","webpack://fittrackee_client/./node_modules/@tmcw/togeojson/dist/togeojson.es.mjs","webpack://fittrackee_client/./node_modules/@vue-leaflet/vue-leaflet/dist/vue-leaflet.esm.js","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue?3193","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/index.vue?a62d","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutMap/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/index.vue?8ebb","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/legend.ts","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/index.vue?65aa","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutChart/index.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutNotes.vue?a827","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutNotes.vue","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutSegments.vue?037e","webpack://fittrackee_client/./src/components/Workout/WorkoutDetail/WorkoutSegments.vue","webpack://fittrackee_client/./src/views/workouts/Workout.vue?3305","webpack://fittrackee_client/./src/views/workouts/Workout.vue","webpack://fittrackee_client/./src/components/Workouts/WorkoutsFilters.vue?c3bc","webpack://fittrackee_client/./src/components/Workouts/WorkoutsFilters.vue","webpack://fittrackee_client/./src/components/Workouts/WorkoutsList.vue?72e6","webpack://fittrackee_client/./src/components/Workouts/WorkoutsList.vue","webpack://fittrackee_client/./src/views/workouts/WorkoutsView.vue?ee31","webpack://fittrackee_client/./src/views/workouts/WorkoutsView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, vModelSelect as _vModelSelect, withDirectives as _withDirectives, vModelText as _vModelText, resolveComponent as _resolveComponent, createVNode as _createVNode, createBlock as _createBlock, withModifiers as _withModifiers, normalizeClass as _normalizeClass, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-886f93f6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-form\" }\nconst _hoisted_2 = [\"onSubmit\"]\nconst _hoisted_3 = { class: \"form-items\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"form-item-radio\"\n}\nconst _hoisted_5 = [\"checked\", \"disabled\"]\nconst _hoisted_6 = { for: \"withGpx\" }\nconst _hoisted_7 = [\"checked\", \"disabled\"]\nconst _hoisted_8 = { for: \"withoutGpx\" }\nconst _hoisted_9 = { class: \"form-item\" }\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = [\"value\"]\nconst _hoisted_12 = {\n key: 1,\n class: \"form-item\"\n}\nconst _hoisted_13 = { for: \"gpxFile\" }\nconst _hoisted_14 = [\"disabled\"]\nconst _hoisted_15 = { class: \"files-help info-box\" }\nconst _hoisted_16 = {\n key: 2,\n class: \"form-item\"\n}\nconst _hoisted_17 = { for: \"title\" }\nconst _hoisted_18 = [\"required\", \"disabled\"]\nconst _hoisted_19 = { key: 3 }\nconst _hoisted_20 = { class: \"workout-date-duration\" }\nconst _hoisted_21 = { class: \"form-item\" }\nconst _hoisted_22 = { class: \"workout-date-time\" }\nconst _hoisted_23 = [\"disabled\"]\nconst _hoisted_24 = [\"disabled\"]\nconst _hoisted_25 = { class: \"form-item\" }\nconst _hoisted_26 = [\"disabled\"]\nconst _hoisted_27 = [\"disabled\"]\nconst _hoisted_28 = [\"disabled\"]\nconst _hoisted_29 = { class: \"form-item\" }\nconst _hoisted_30 = [\"disabled\"]\nconst _hoisted_31 = { class: \"form-item\" }\nconst _hoisted_32 = { key: 1 }\nconst _hoisted_33 = {\n key: 2,\n class: \"form-buttons\"\n}\nconst _hoisted_34 = [\"disabled\"]\nconst _hoisted_35 = [\"onClick\"]\n\nimport {\n ComputedRef,\n computed,\n reactive,\n ref,\n toRefs,\n watch,\n onMounted,\n onUnmounted,\n withDefaults,\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 { IAuthUserProfile } 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 import { convertDistance } from '@/utils/units'\n\n interface Props {\n authUser: IAuthUserProfile\n sports: ISport[]\n isCreation?: boolean\n loading?: boolean\n workout?: IWorkout\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutEdition',\n props: {\n authUser: null,\n sports: null,\n isCreation: { type: Boolean, default: false },\n loading: { type: Boolean, default: false },\n workout: { default: () => ({} as IWorkout) }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, sports: ISport[], isCreation: boolean, loading: boolean, workout: IWorkout }\n\n \n\n const { t } = useI18n()\n const store = useStore()\n const router = useRouter()\n\n const { authUser, workout, isCreation, loading } = toRefs(props)\n const translatedSports: ComputedRef = computed(() =>\n translateSports(\n props.sports,\n t,\n 'is_active_for_user',\n workout.value.id ? [workout.value.sport_id] : []\n )\n )\n const appConfig: ComputedRef = 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 = 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 const withGpx = ref(\n props.workout.id ? props.workout.with_gpx : props.isCreation\n )\n let gpxFile: File | null = null\n const formErrors = ref(false)\n\n onMounted(() => {\n if (props.workout.id) {\n formatWorkoutForm(props.workout)\n }\n })\n\n function updateNotes(value: string) {\n workoutForm.notes = value\n }\n function updateWithGpx() {\n withGpx.value = !withGpx.value\n formErrors.value = false\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 = `${\n authUser.value.imperial_units\n ? convertDistance(workout.distance, 'km', 'mi', 2)\n : parseFloat(workout.distance.toFixed(2))\n }`\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 = authUser.value.imperial_units\n ? convertDistance(+workoutForm.workoutDistance, 'mi', 'km', 3)\n : +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.id) {\n if (props.workout.with_gpx) {\n payload.title = workoutForm.title\n } else {\n formatPayload(payload)\n }\n store.dispatch(WORKOUTS_STORE.ACTIONS.EDIT_WORKOUT, {\n workoutId: props.workout.id,\n data: payload,\n })\n } else {\n if (withGpx.value) {\n if (!gpxFile) {\n const errorMessage = 'workouts.NO_FILE_PROVIDED'\n store.commit(ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES, errorMessage)\n return\n }\n payload.file = gpxFile\n store.dispatch(WORKOUTS_STORE.ACTIONS.ADD_WORKOUT, payload)\n } else {\n formatPayload(payload)\n store.dispatch(WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX, payload)\n }\n }\n }\n function onCancel() {\n if (props.workout.id) {\n router.push({\n name: 'Workout',\n params: { workoutId: props.workout.id },\n })\n } else {\n router.go(-1)\n }\n }\n function invalidateForm() {\n formErrors.value = true\n }\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\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\nreturn (_ctx: any,_cache: any) => {\n const _component_CustomTextArea = _resolveComponent(\"CustomTextArea\")!\n const _component_ErrorMessage = _resolveComponent(\"ErrorMessage\")!\n const _component_Loader = _resolveComponent(\"Loader\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n id: \"workout-edition\",\n class: _normalizeClass([\"center-card with-margin\", { 'center-form': _unref(workout) && _unref(workout).with_gpx }])\n }, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(`workouts.${_unref(isCreation) ? 'ADD' : 'EDIT'}_WORKOUT`)), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"form\", {\n class: _normalizeClass({ errors: formErrors.value }),\n onSubmit: _withModifiers(updateWorkout, [\"prevent\"])\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_unref(isCreation))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"input\", {\n id: \"withGpx\",\n type: \"radio\",\n checked: withGpx.value,\n disabled: _unref(loading),\n onClick: updateWithGpx\n }, null, 8, _hoisted_5),\n _createElementVNode(\"label\", _hoisted_6, _toDisplayString(_ctx.$t('workouts.WITH_GPX')), 1)\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"input\", {\n id: \"withoutGpx\",\n type: \"radio\",\n checked: !withGpx.value,\n disabled: _unref(loading),\n onClick: updateWithGpx\n }, null, 8, _hoisted_7),\n _createElementVNode(\"label\", _hoisted_8, _toDisplayString(_ctx.$t('workouts.WITHOUT_GPX')), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.SPORT', 1)) + \": \", 1),\n _withDirectives(_createElementVNode(\"select\", {\n id: \"sport\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((workoutForm.sport_id) = $event))\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports), (sport) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: sport.id,\n key: sport.id\n }, _toDisplayString(sport.translatedLabel), 9, _hoisted_11))\n }), 128))\n ], 40, _hoisted_10), [\n [_vModelSelect, workoutForm.sport_id]\n ])\n ]),\n (_unref(isCreation) && withGpx.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n _createElementVNode(\"label\", _hoisted_13, _toDisplayString(_ctx.$t('workouts.GPX_FILE')) + \" \" + _toDisplayString(_ctx.$t('workouts.ZIP_ARCHIVE_DESCRIPTION')) + \": \", 1),\n _createElementVNode(\"input\", {\n id: \"gpxFile\",\n name: \"gpxFile\",\n type: \"file\",\n accept: \".gpx, .zip\",\n disabled: _unref(loading),\n required: \"\",\n onInvalid: invalidateForm,\n onInput: updateFile\n }, null, 40, _hoisted_14),\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.$t('workouts.GPX_FILE')) + \":\", 1),\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(fileSizeLimit)), 1)\n ])\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.$t('workouts.ZIP_ARCHIVE')) + \":\", 1),\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.NO_FOLDER')), 1),\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_FILES')) + \": \" + _toDisplayString(_unref(gpx_limit_import)), 1),\n _createElementVNode(\"li\", null, _toDisplayString(_ctx.$t('workouts.MAX_SIZE')) + \": \" + _toDisplayString(_unref(zipSizeLimit)), 1)\n ])\n ])\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_16, [\n _createElementVNode(\"label\", _hoisted_17, _toDisplayString(_ctx.$t('workouts.TITLE')) + \": \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"title\",\n name: \"title\",\n type: \"text\",\n required: !_unref(isCreation),\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((workoutForm.title) = $event))\n }, null, 40, _hoisted_18), [\n [_vModelText, workoutForm.title]\n ])\n ])),\n (!withGpx.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_19, [\n _createElementVNode(\"div\", _hoisted_20, [\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.WORKOUT_DATE')) + \":\", 1),\n _createElementVNode(\"div\", _hoisted_22, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-date\",\n name: \"workout-date\",\n type: \"date\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((workoutForm.workoutDate) = $event))\n }, null, 40, _hoisted_23), [\n [_vModelText, workoutForm.workoutDate]\n ]),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-time\",\n name: \"workout-time\",\n class: \"workout-time\",\n type: \"time\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((workoutForm.workoutTime) = $event))\n }, null, 40, _hoisted_24), [\n [_vModelText, workoutForm.workoutTime]\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_25, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DURATION')) + \":\", 1),\n _createElementVNode(\"div\", null, [\n _withDirectives(_createElementVNode(\"input\", {\n id: \"workout-duration-hour\",\n name: \"workout-duration-hour\",\n class: \"workout-duration\",\n type: \"text\",\n placeholder: \"HH\",\n minlength: \"1\",\n maxlength: \"2\",\n pattern: \"^([0-1]?[0-9]|2[0-3])$\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((workoutForm.workoutDurationHour) = $event))\n }, null, 40, _hoisted_26), [\n [_vModelText, workoutForm.workoutDurationHour]\n ]),\n _createTextVNode(\" : \"),\n _withDirectives(_createElementVNode(\"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 minlength: \"2\",\n maxlength: \"2\",\n placeholder: \"MM\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = ($event: any) => ((workoutForm.workoutDurationMinutes) = $event))\n }, null, 40, _hoisted_27), [\n [_vModelText, workoutForm.workoutDurationMinutes]\n ]),\n _createTextVNode(\" : \"),\n _withDirectives(_createElementVNode(\"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 minlength: \"2\",\n maxlength: \"2\",\n placeholder: \"SS\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = ($event: any) => ((workoutForm.workoutDurationSeconds) = $event))\n }, null, 40, _hoisted_28), [\n [_vModelText, workoutForm.workoutDurationSeconds]\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_29, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \" (\" + _toDisplayString(_unref(authUser).imperial_units ? 'mi' : 'km') + \"): \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n name: \"workout-distance\",\n type: \"number\",\n min: \"0\",\n step: \"0.001\",\n required: \"\",\n onInvalid: invalidateForm,\n disabled: _unref(loading),\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => ((workoutForm.workoutDistance) = $event))\n }, null, 40, _hoisted_30), [\n [_vModelText, workoutForm.workoutDistance]\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_31, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.NOTES')) + \": \", 1),\n _createVNode(_component_CustomTextArea, {\n name: \"notes\",\n input: workoutForm.notes,\n disabled: _unref(loading),\n onUpdateValue: updateNotes\n }, null, 8, [\"input\", \"disabled\"])\n ])\n ]),\n (_unref(errorMessages))\n ? (_openBlock(), _createBlock(_component_ErrorMessage, {\n key: 0,\n message: _unref(errorMessages)\n }, null, 8, [\"message\"]))\n : _createCommentVNode(\"\", true),\n (_unref(loading))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [\n _createVNode(_component_Loader)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_33, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n type: \"submit\",\n disabled: _unref(loading)\n }, _toDisplayString(_ctx.$t('buttons.SUBMIT')), 9, _hoisted_34),\n _createElementVNode(\"button\", {\n class: \"cancel\",\n onClick: _withModifiers(onCancel, [\"prevent\"])\n }, _toDisplayString(_ctx.$t('buttons.CANCEL')), 9, _hoisted_35)\n ]))\n ], 42, _hoisted_2)\n ])\n ]),\n _: 1\n })\n ], 2))\n}\n}\n\n})","import script from \"./WorkoutEdition.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutEdition.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutEdition.vue?vue&type=style&index=0&id=886f93f6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-886f93f6\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"add-workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { ComputedRef, computed } from 'vue'\n\n import WorkoutEdition from '@/components/Workout/WorkoutEdition.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AddWorkout',\n setup(__props) {\n\n const store = useStore()\n\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(WorkoutEdition, {\n authUser: _unref(authUser),\n sports: _unref(sports),\n isCreation: true,\n loading: _unref(workoutData).loading\n }, null, 8, [\"authUser\", \"sports\", \"loading\"])\n ])\n ]))\n}\n}\n\n})","import script from \"./AddWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AddWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n id: \"edit-workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\n\nimport { computed, watch, onBeforeMount, ComputedRef } from 'vue'\n import { useRoute } from 'vue-router'\n\n import WorkoutEdition from '@/components/Workout/WorkoutEdition.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'EditWorkout',\n setup(__props) {\n\n const route = useRoute()\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n\n onBeforeMount(() => {\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, {\n workoutId: route.params.workoutId,\n })\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\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(workoutData).workout.id)\n ? (_openBlock(), _createBlock(WorkoutEdition, {\n key: 0,\n authUser: _unref(authUser),\n sports: _unref(sports),\n workout: _unref(workoutData).workout,\n loading: _unref(workoutData).loading\n }, null, 8, [\"authUser\", \"sports\", \"workout\", \"loading\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./EditWorkout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./EditWorkout.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, withModifiers as _withModifiers, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-4d9f9a8a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-card-title\" }\nconst _hoisted_2 = [\"title\"]\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-left\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = [\n _hoisted_3\n]\nconst _hoisted_5 = { class: \"workout-card-title\" }\nconst _hoisted_6 = { class: \"workout-title-date\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"workout-title\"\n}\nconst _hoisted_8 = {\n key: 1,\n class: \"workout-title\"\n}\nconst _hoisted_9 = { class: \"workout-segment\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-map-marker\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { class: \"workout-date\" }\nconst _hoisted_12 = { class: \"workout-link\" }\nconst _hoisted_13 = [\"title\"]\nconst _hoisted_14 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-chevron-right\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_15 = [\n _hoisted_14\n]\n\nimport { toRefs } from 'vue'\n\n import authApi from '@/api/authApi'\n import { ISport } from '@/types/sports'\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n sport: ISport\n workoutObject: IWorkoutObject\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutCardTitle',\n props: {\n sport: null,\n workoutObject: null\n },\n emits: ['displayModal'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n sport: ISport\n workoutObject: IWorkoutObject\n }\n\n \n\n \n\n const { sport, workoutObject } = toRefs(props)\n\n async function downloadGpx(workoutId: string) {\n await authApi\n .get(`workouts/${workoutId}/gpx/download`, {\n responseType: 'blob',\n })\n .then((response) => {\n const gpxFileUrl = window.URL.createObjectURL(\n new Blob([response.data], { type: 'application/gpx+xml' })\n )\n const gpxLink = document.createElement('a')\n gpxLink.href = gpxFileUrl\n gpxLink.setAttribute('download', `${workoutId}.gpx`)\n document.body.appendChild(gpxLink)\n gpxLink.click()\n })\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-previous workout-arrow\", { inactive: !_unref(workoutObject).previousUrl }]),\n title: \n _unref(workoutObject).previousUrl\n ? _ctx.$t(`workouts.PREVIOUS_${_unref(workoutObject).type}`)\n : _ctx.$t(`workouts.NO_PREVIOUS_${_unref(workoutObject).type}`)\n ,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (\n _unref(workoutObject).previousUrl\n ? _ctx.$router.push(_unref(workoutObject).previousUrl)\n : null\n ))\n }, _hoisted_4, 10, _hoisted_2),\n _createElementVNode(\"div\", _hoisted_5, [\n _createVNode(_component_SportImage, {\n \"sport-label\": _unref(sport).label,\n color: _unref(sport).color\n }, null, 8, [\"sport-label\", \"color\"]),\n _createElementVNode(\"div\", _hoisted_6, [\n (_unref(workoutObject).type === 'WORKOUT')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createElementVNode(\"span\", null, _toDisplayString(_unref(workoutObject).title), 1),\n _createElementVNode(\"i\", {\n class: \"fa fa-edit\",\n \"aria-hidden\": \"true\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (\n _ctx.$router.push({\n name: 'EditWorkout',\n params: { workoutId: _unref(workoutObject).workoutId },\n })\n ))\n }),\n (_unref(workoutObject).with_gpx)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-download\",\n \"aria-hidden\": \"true\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (downloadGpx(_unref(workoutObject).workoutId)), [\"prevent\"]))\n }))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"i\", {\n class: \"fa fa-trash\",\n \"aria-hidden\": \"true\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (emit('displayModal', true)))\n })\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_unref(workoutObject).title) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_9, [\n _createTextVNode(\" — \"),\n _hoisted_10,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.SEGMENT')) + \" \" + _toDisplayString(_unref(workoutObject).segmentId + 1), 1)\n ])\n ])),\n _createElementVNode(\"div\", _hoisted_11, [\n _createTextVNode(_toDisplayString(_unref(workoutObject).workoutDate) + \" - \" + _toDisplayString(_unref(workoutObject).workoutTime) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_12, [\n (_unref(workoutObject).type === 'SEGMENT')\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n to: {\n name: 'Workout',\n params: { workoutId: _unref(workoutObject).workoutId },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" > \" + _toDisplayString(_ctx.$t('workouts.BACK_TO_WORKOUT')), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"workout-next workout-arrow\", { inactive: !_unref(workoutObject).nextUrl }]),\n title: \n _unref(workoutObject).nextUrl\n ? _ctx.$t(`workouts.NEXT_${_unref(workoutObject).type}`)\n : _ctx.$t(`workouts.NO_NEXT_${_unref(workoutObject).type}`)\n ,\n onClick: _cache[4] || (_cache[4] = ($event: any) => (\n _unref(workoutObject).nextUrl ? _ctx.$router.push(_unref(workoutObject).nextUrl) : null\n ))\n }, _hoisted_15, 10, _hoisted_13)\n ]))\n}\n}\n\n})","import script from \"./WorkoutCardTitle.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutCardTitle.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutCardTitle.vue?vue&type=style&index=0&id=4d9f9a8a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4d9f9a8a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1a5282f6\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n class: \"workout-record\"\n}\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"sup\", null, [\n /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-trophy\",\n \"aria-hidden\": \"true\"\n })\n], -1))\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nimport { toRefs } from 'vue'\n\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n recordType: string\n workoutObject: IWorkoutObject\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutRecord',\n props: {\n recordType: null,\n workoutObject: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n recordType: string\n workoutObject: IWorkoutObject\n }\n\n \n\n const { recordType, workoutObject } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (\n _unref(workoutObject).records &&\n _unref(workoutObject).records.find((record) => record.record_type === _unref(recordType))\n )\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_1, _hoisted_3))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutRecord.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutRecord.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutRecord.vue?vue&type=style&index=0&id=1a5282f6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1a5282f6\"]])\n\nexport default __exports__","const directions = [\n 'N',\n 'NNE',\n 'NE',\n 'ENE',\n 'E',\n 'ESE',\n 'SE',\n 'SSE',\n 'S',\n 'SSW',\n 'SW',\n 'WSW',\n 'W',\n 'WNW',\n 'NW',\n 'NNW',\n]\n\nexport const convertDegreeToDirection = (angle: number): string => {\n const value = Math.floor(angle / 22.5 + 0.5)\n return directions[value % 16]\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-46a7c31c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"wind\" }\nconst _hoisted_2 = { class: \"wind-bearing\" }\nconst _hoisted_3 = [\"title\"]\n\nimport { toRefs } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { IWeather } from '@/types/workouts'\n import { convertDegreeToDirection } from '@/utils/weather'\n\n interface Props {\n weather: IWeather\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WeatherWind',\n props: {\n weather: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n weather: IWeather\n useImperialUnits: boolean\n }\n\n \n\n const { useImperialUnits, weather } = toRefs(props)\n const { t } = useI18n()\n\n function getWindDirectionTitle(windBearing: number): string {\n return t(\n `workouts.WEATHER.WIND_DIRECTIONS.${convertDegreeToDirection(\n windBearing\n )}`\n )\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Distance, {\n distance: _unref(weather).wind,\n unitFrom: \"m\",\n digits: 1,\n displayUnit: false,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createTextVNode(\" \" + _toDisplayString(_unref(useImperialUnits) ? 'ft' : 'm') + \"/s \", 1),\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(weather).windBearing)\n ? (_openBlock(), _createElementBlock(\"i\", {\n key: 0,\n class: \"fa fa-long-arrow-down\",\n style: _normalizeStyle({\n transform: `rotate(${_unref(weather).windBearing}deg)`,\n }),\n \"aria-hidden\": \"true\",\n title: getWindDirectionTitle(_unref(weather).windBearing)\n }, null, 12, _hoisted_3))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./WeatherWind.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WeatherWind.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WeatherWind.vue?vue&type=style&index=0&id=46a7c31c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-46a7c31c\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-76e9ab62\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"workout-weather\"\n}\nconst _hoisted_2 = { class: \"weather-table\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, null, -1))\nconst _hoisted_4 = { class: \"weather-th\" }\nconst _hoisted_5 = [\"src\", \"alt\", \"title\"]\nconst _hoisted_6 = { class: \"weather-th\" }\nconst _hoisted_7 = [\"src\", \"alt\", \"title\"]\nconst _hoisted_8 = [\"alt\", \"title\"]\nconst _hoisted_9 = [\"alt\", \"title\"]\nconst _hoisted_10 = [\"alt\", \"title\"]\n\nimport { toRefs } from 'vue'\n\n import WeatherWind from '@/components/Workout/WorkoutDetail/WeatherWind.vue'\n import { IWorkoutObject } from '@/types/workouts'\n\n interface Props {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutWeather',\n props: {\n workoutObject: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n }\n\n \n\n const { useImperialUnits, workoutObject } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(workoutObject).weatherStart && _unref(workoutObject).weatherEnd)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"table\", _hoisted_2, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_3,\n _createElementVNode(\"th\", null, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.START')) + \" \", 1),\n _createElementVNode(\"img\", {\n class: \"weather-img\",\n src: `/img/weather/${_unref(workoutObject).weatherStart.icon}.svg`,\n alt: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherStart.icon}`\n )\n ,\n title: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherStart.icon}`\n )\n \n }, null, 8, _hoisted_5)\n ])\n ]),\n _createElementVNode(\"th\", null, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.END')) + \" \", 1),\n _createElementVNode(\"img\", {\n class: \"weather-img\",\n src: `/img/weather/${_unref(workoutObject).weatherEnd.icon}.svg`,\n alt: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherEnd.icon}`\n )\n ,\n title: \n _ctx.$t(\n `workouts.WEATHER.DARK_SKY.${_unref(workoutObject).weatherEnd.icon}`\n )\n \n }, null, 8, _hoisted_7)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/temperature.svg\",\n alt: _ctx.$t(`workouts.WEATHER.TEMPERATURE`),\n title: _ctx.$t(`workouts.WEATHER.TEMPERATURE`)\n }, null, 8, _hoisted_8)\n ]),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherStart.temperature).toFixed(1)) + \"°C \", 1),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherEnd.temperature).toFixed(1)) + \"°C \", 1)\n ]),\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/pour-rain.svg\",\n alt: _ctx.$t(`workouts.WEATHER.HUMIDITY`),\n title: _ctx.$t(`workouts.WEATHER.HUMIDITY`)\n }, null, 8, _hoisted_9)\n ]),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherStart.humidity * 100).toFixed(1)) + \"% \", 1),\n _createElementVNode(\"td\", null, _toDisplayString(Number(_unref(workoutObject).weatherEnd.humidity * 100).toFixed(1)) + \"% \", 1)\n ]),\n _createElementVNode(\"tr\", null, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"img\", {\n class: \"weather-img weather-img-small\",\n src: \"/img/weather/breeze.svg\",\n alt: _ctx.$t(`workouts.WEATHER.WIND`),\n title: _ctx.$t(`workouts.WEATHER.WIND`)\n }, null, 8, _hoisted_10)\n ]),\n _createElementVNode(\"td\", null, [\n _createVNode(WeatherWind, {\n weather: _unref(workoutObject).weatherStart,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"weather\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", null, [\n _createVNode(WeatherWind, {\n weather: _unref(workoutObject).weatherEnd,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"weather\", \"useImperialUnits\"])\n ])\n ])\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutWeather.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutWeather.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutWeather.vue?vue&type=style&index=0&id=76e9ab62&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-76e9ab62\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, unref as _unref, createVNode as _createVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-74c5993b\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-info\" }\nconst _hoisted_2 = { class: \"workout-data\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-clock-o\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_4 = { class: \"label\" }\nconst _hoisted_5 = { class: \"value\" }\nconst _hoisted_6 = { key: 0 }\nconst _hoisted_7 = { class: \"value\" }\nconst _hoisted_8 = { class: \"value\" }\nconst _hoisted_9 = { class: \"workout-data\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-road\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_11 = { class: \"label\" }\nconst _hoisted_12 = { class: \"workout-data\" }\nconst _hoisted_13 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-tachometer\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_14 = { class: \"label\" }\nconst _hoisted_15 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_16 = { class: \"label\" }\nconst _hoisted_17 = {\n key: 0,\n class: \"workout-data\"\n}\nconst _hoisted_18 = [\"alt\"]\nconst _hoisted_19 = { class: \"label\" }\nconst _hoisted_20 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_21 = { class: \"label\" }\nconst _hoisted_22 = {\n key: 1,\n class: \"workout-data\"\n}\nconst _hoisted_23 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-location-arrow\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_24 = { class: \"label\" }\nconst _hoisted_25 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"br\", null, null, -1))\nconst _hoisted_26 = { class: \"label\" }\n\nimport { computed, toRefs } 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 interface Props {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n displayHARecord: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutData',\n props: {\n workoutObject: null,\n useImperialUnits: { type: Boolean },\n displayHARecord: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n workoutObject: IWorkoutObject\n useImperialUnits: boolean\n displayHARecord: boolean\n }\n\n \n\n const { displayHARecord, workoutObject, useImperialUnits } = toRefs(props)\n const withPause = computed(\n () =>\n props.workoutObject.pauses !== '0:00:00' &&\n props.workoutObject.pauses !== null\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.$t('workouts.DURATION')), 1),\n _createTextVNode(\": \"),\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_unref(workoutObject).moving), 1),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"LD\"\n }, null, 8, [\"workoutObject\"]),\n (_unref(withPause))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createTextVNode(\" (\" + _toDisplayString(_ctx.$t('workouts.PAUSES')) + \": \", 1),\n _createElementVNode(\"span\", _hoisted_7, _toDisplayString(_unref(workoutObject).pauses), 1),\n _createTextVNode(\" - \" + _toDisplayString(_ctx.$t('workouts.TOTAL_DURATION')) + \": \", 1),\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_unref(workoutObject).duration) + \")\", 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).distance,\n digits: 3,\n unitFrom: \"km\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"FD\"\n }, null, 8, [\"workoutObject\"])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _hoisted_13,\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('workouts.AVERAGE_SPEED')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).aveSpeed,\n unitFrom: \"km\",\n speed: true,\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"AS\"\n }, null, 8, [\"workoutObject\"]),\n _hoisted_15,\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).maxSpeed,\n unitFrom: \"km\",\n speed: true,\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createVNode(WorkoutRecord, {\n workoutObject: _unref(workoutObject),\n recordType: \"MS\"\n }, null, 8, [\"workoutObject\"])\n ]),\n (_unref(workoutObject).maxAlt !== null && _unref(workoutObject).minAlt !== null)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createElementVNode(\"img\", {\n class: \"mountains\",\n src: \"/img/workouts/mountains.svg\",\n alt: _ctx.$t('workouts.ELEVATION')\n }, null, 8, _hoisted_18),\n _createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('workouts.MIN_ALTITUDE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).minAlt,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _hoisted_20,\n _createElementVNode(\"span\", _hoisted_21, _toDisplayString(_ctx.$t('workouts.MAX_ALTITUDE')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).maxAlt,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]))\n : _createCommentVNode(\"\", true),\n (_unref(workoutObject).ascent !== null && _unref(workoutObject).descent !== null)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_22, [\n _hoisted_23,\n _createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('workouts.ASCENT')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).ascent,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n (_unref(displayHARecord))\n ? (_openBlock(), _createBlock(WorkoutRecord, {\n key: 0,\n workoutObject: _unref(workoutObject),\n recordType: \"HA\"\n }, null, 8, [\"workoutObject\"]))\n : _createCommentVNode(\"\", true),\n _hoisted_25,\n _createElementVNode(\"span\", _hoisted_26, _toDisplayString(_ctx.$t('workouts.DESCENT')), 1),\n _createTextVNode(\": \"),\n _createVNode(_component_Distance, {\n distance: _unref(workoutObject).descent,\n unitFrom: \"m\",\n strong: true,\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(WorkoutWeather, {\n workoutObject: _unref(workoutObject),\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"workoutObject\", \"useImperialUnits\"])\n ]))\n}\n}\n\n})","import script from \"./WorkoutData.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutData.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutData.vue?vue&type=style&index=0&id=74c5993b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-74c5993b\"]])\n\nexport default __exports__","function $(element, tagName) {\n return Array.from(element.getElementsByTagName(tagName));\n}\nfunction normalizeId(id) {\n return id[0] === \"#\" ? id : `#${id}`;\n}\nfunction $ns(element, tagName, ns) {\n return Array.from(element.getElementsByTagNameNS(ns, tagName));\n}\n/**\n * get the content of a text node, if any\n */\nfunction nodeVal(node) {\n node?.normalize();\n return (node && node.textContent) || \"\";\n}\n/**\n * Get one Y child of X, if any, otherwise null\n */\nfunction get1(node, tagName, callback) {\n const n = node.getElementsByTagName(tagName);\n const result = n.length ? n[0] : null;\n if (result && callback)\n callback(result);\n return result;\n}\nfunction get(node, tagName, callback) {\n const properties = {};\n if (!node)\n return properties;\n const n = node.getElementsByTagName(tagName);\n const result = n.length ? n[0] : null;\n if (result && callback) {\n return callback(result, properties);\n }\n return properties;\n}\nfunction val1(node, tagName, callback) {\n const val = nodeVal(get1(node, tagName));\n if (val && callback)\n return callback(val) || {};\n return {};\n}\nfunction $num(node, tagName, callback) {\n const val = parseFloat(nodeVal(get1(node, tagName)));\n if (isNaN(val))\n return undefined;\n if (val && callback)\n return callback(val) || {};\n return {};\n}\nfunction num1(node, tagName, callback) {\n const val = parseFloat(nodeVal(get1(node, tagName)));\n if (isNaN(val))\n return undefined;\n if (val && callback)\n callback(val);\n return val;\n}\nfunction getMulti(node, propertyNames) {\n const properties = {};\n for (const property of propertyNames) {\n val1(node, property, (val) => {\n properties[property] = val;\n });\n }\n return properties;\n}\nfunction isElement(node) {\n return node?.nodeType === 1;\n}\n\nfunction getLineStyle(node) {\n return get(node, \"line\", (lineStyle) => {\n const val = Object.assign({}, val1(lineStyle, \"color\", (color) => {\n return { stroke: `#${color}` };\n }), $num(lineStyle, \"opacity\", (opacity) => {\n return { \"stroke-opacity\": opacity };\n }), $num(lineStyle, \"width\", (width) => {\n // GPX width is in mm, convert to px with 96 px per inch\n return { \"stroke-width\": (width * 96) / 25.4 };\n }));\n return val;\n });\n}\n\nfunction getExtensions(node) {\n let values = [];\n if (node === null)\n return values;\n for (const child of Array.from(node.childNodes)) {\n if (!isElement(child))\n continue;\n const name = abbreviateName(child.nodeName);\n if (name === \"gpxtpx:TrackPointExtension\") {\n // loop again for nested garmin extensions (eg. \"gpxtpx:hr\")\n values = values.concat(getExtensions(child));\n }\n else {\n // push custom extension (eg. \"power\")\n const val = nodeVal(child);\n values.push([name, parseNumeric(val)]);\n }\n }\n return values;\n}\nfunction abbreviateName(name) {\n return [\"heart\", \"gpxtpx:hr\", \"hr\"].includes(name) ? \"heart\" : name;\n}\nfunction parseNumeric(val) {\n const num = parseFloat(val);\n return isNaN(num) ? val : num;\n}\n\nfunction coordPair$1(node) {\n const ll = [\n parseFloat(node.getAttribute(\"lon\") || \"\"),\n parseFloat(node.getAttribute(\"lat\") || \"\"),\n ];\n if (isNaN(ll[0]) || isNaN(ll[1])) {\n return null;\n }\n num1(node, \"ele\", (val) => {\n ll.push(val);\n });\n const time = get1(node, \"time\");\n return {\n coordinates: ll,\n time: time ? nodeVal(time) : null,\n extendedValues: getExtensions(get1(node, \"extensions\")),\n };\n}\n\nfunction extractProperties(node) {\n const properties = getMulti(node, [\n \"name\",\n \"cmt\",\n \"desc\",\n \"type\",\n \"time\",\n \"keywords\",\n ]);\n const extensions = Array.from(node.getElementsByTagNameNS(\"http://www.garmin.com/xmlschemas/GpxExtensions/v3\", \"*\"));\n for (const child of extensions) {\n if (child.parentNode?.parentNode === node) {\n properties[child.tagName.replace(\":\", \"_\")] = nodeVal(child);\n }\n }\n const links = $(node, \"link\");\n if (links.length) {\n properties.links = links.map((link) => Object.assign({ href: link.getAttribute(\"href\") }, getMulti(link, [\"text\", \"type\"])));\n }\n return properties;\n}\n\n/**\n * Extract points from a trkseg or rte element.\n */\nfunction getPoints$1(node, pointname) {\n const pts = $(node, pointname);\n const line = [];\n const times = [];\n const extendedValues = {};\n for (let i = 0; i < pts.length; i++) {\n const c = coordPair$1(pts[i]);\n if (!c) {\n continue;\n }\n line.push(c.coordinates);\n if (c.time)\n times.push(c.time);\n for (const [name, val] of c.extendedValues) {\n const plural = name === \"heart\" ? name : name.replace(\"gpxtpx:\", \"\") + \"s\";\n if (!extendedValues[plural]) {\n extendedValues[plural] = Array(pts.length).fill(null);\n }\n extendedValues[plural][i] = val;\n }\n }\n if (line.length < 2)\n return; // Invalid line in GeoJSON\n return {\n line: line,\n times: times,\n extendedValues: extendedValues,\n };\n}\n/**\n * Extract a LineString geometry from a rte\n * element.\n */\nfunction getRoute(node) {\n const line = getPoints$1(node, \"rtept\");\n if (!line)\n return;\n return {\n type: \"Feature\",\n properties: Object.assign({ _gpxType: \"rte\" }, extractProperties(node), getLineStyle(get1(node, \"extensions\"))),\n geometry: {\n type: \"LineString\",\n coordinates: line.line,\n },\n };\n}\nfunction getTrack(node) {\n const segments = $(node, \"trkseg\");\n const track = [];\n const times = [];\n const extractedLines = [];\n for (const segment of segments) {\n const line = getPoints$1(segment, \"trkpt\");\n if (line) {\n extractedLines.push(line);\n if (line.times && line.times.length)\n times.push(line.times);\n }\n }\n if (extractedLines.length === 0)\n return null;\n const multi = extractedLines.length > 1;\n const properties = Object.assign({ _gpxType: \"trk\" }, extractProperties(node), getLineStyle(get1(node, \"extensions\")), times.length\n ? {\n coordinateProperties: {\n times: multi ? times : times[0],\n },\n }\n : {});\n for (const line of extractedLines) {\n track.push(line.line);\n if (!properties.coordinateProperties) {\n properties.coordinateProperties = {};\n }\n const props = properties.coordinateProperties;\n const entries = Object.entries(line.extendedValues);\n for (let i = 0; i < entries.length; i++) {\n const [name, val] = entries[i];\n if (multi) {\n if (!props[name]) {\n props[name] = extractedLines.map((line) => new Array(line.line.length).fill(null));\n }\n props[name][i] = val;\n }\n else {\n props[name] = val;\n }\n }\n }\n return {\n type: \"Feature\",\n properties: properties,\n geometry: multi\n ? {\n type: \"MultiLineString\",\n coordinates: track,\n }\n : {\n type: \"LineString\",\n coordinates: track[0],\n },\n };\n}\n/**\n * Extract a point, if possible, from a given node,\n * which is usually a wpt or trkpt\n */\nfunction getPoint(node) {\n const properties = Object.assign(extractProperties(node), getMulti(node, [\"sym\"]));\n const pair = coordPair$1(node);\n if (!pair)\n return null;\n return {\n type: \"Feature\",\n properties,\n geometry: {\n type: \"Point\",\n coordinates: pair.coordinates,\n },\n };\n}\n/**\n * Convert GPX to GeoJSON incrementally, returning\n * a [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)\n * that yields output feature by feature.\n */\nfunction* gpxGen(node) {\n for (const track of $(node, \"trk\")) {\n const feature = getTrack(track);\n if (feature)\n yield feature;\n }\n for (const route of $(node, \"rte\")) {\n const feature = getRoute(route);\n if (feature)\n yield feature;\n }\n for (const waypoint of $(node, \"wpt\")) {\n const point = getPoint(waypoint);\n if (point)\n yield point;\n }\n}\n/**\n *\n * Convert a GPX document to GeoJSON. The first argument, `doc`, must be a GPX\n * document as an XML DOM - not as a string. You can get this using jQuery's default\n * `.ajax` function or using a bare XMLHttpRequest with the `.response` property\n * holding an XML DOM.\n *\n * The output is a JavaScript object of GeoJSON data, same as `.kml` outputs, with the\n * addition of a `_gpxType` property on each `LineString` feature that indicates whether\n * the feature was encoded as a route (`rte`) or track (`trk`) in the GPX document.\n */\nfunction gpx(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(gpxGen(node)),\n };\n}\n\nconst EXTENSIONS_NS = \"http://www.garmin.com/xmlschemas/ActivityExtension/v2\";\nconst TRACKPOINT_ATTRIBUTES = [\n [\"heartRate\", \"heartRates\"],\n [\"Cadence\", \"cadences\"],\n // Extended Trackpoint attributes\n [\"Speed\", \"speeds\"],\n [\"Watts\", \"watts\"],\n];\nconst LAP_ATTRIBUTES = [\n [\"TotalTimeSeconds\", \"totalTimeSeconds\"],\n [\"DistanceMeters\", \"distanceMeters\"],\n [\"MaximumSpeed\", \"maxSpeed\"],\n [\"AverageHeartRateBpm\", \"avgHeartRate\"],\n [\"MaximumHeartRateBpm\", \"maxHeartRate\"],\n // Extended Lap attributes\n [\"AvgSpeed\", \"avgSpeed\"],\n [\"AvgWatts\", \"avgWatts\"],\n [\"MaxWatts\", \"maxWatts\"],\n];\nfunction getProperties(node, attributeNames) {\n const properties = [];\n for (const [tag, alias] of attributeNames) {\n let elem = get1(node, tag);\n if (!elem) {\n const elements = node.getElementsByTagNameNS(EXTENSIONS_NS, tag);\n if (elements.length) {\n elem = elements[0];\n }\n }\n const val = parseFloat(nodeVal(elem));\n if (!isNaN(val)) {\n properties.push([alias, val]);\n }\n }\n return properties;\n}\nfunction coordPair(node) {\n const ll = [num1(node, \"LongitudeDegrees\"), num1(node, \"LatitudeDegrees\")];\n if (ll[0] === undefined ||\n isNaN(ll[0]) ||\n ll[1] === undefined ||\n isNaN(ll[1])) {\n return null;\n }\n const heartRate = get1(node, \"HeartRateBpm\");\n const time = nodeVal(get1(node, \"Time\"));\n get1(node, \"AltitudeMeters\", (alt) => {\n const a = parseFloat(nodeVal(alt));\n if (!isNaN(a)) {\n ll.push(a);\n }\n });\n return {\n coordinates: ll,\n time: time || null,\n heartRate: heartRate ? parseFloat(nodeVal(heartRate)) : null,\n extensions: getProperties(node, TRACKPOINT_ATTRIBUTES),\n };\n}\nfunction getPoints(node) {\n const pts = $(node, \"Trackpoint\");\n const line = [];\n const times = [];\n const heartRates = [];\n if (pts.length < 2)\n return null; // Invalid line in GeoJSON\n const extendedProperties = {};\n const result = { extendedProperties };\n for (let i = 0; i < pts.length; i++) {\n const c = coordPair(pts[i]);\n if (c === null)\n continue;\n line.push(c.coordinates);\n const { time, heartRate, extensions } = c;\n if (time)\n times.push(time);\n if (heartRate)\n heartRates.push(heartRate);\n for (const [alias, value] of extensions) {\n if (!extendedProperties[alias]) {\n extendedProperties[alias] = Array(pts.length).fill(null);\n }\n extendedProperties[alias][i] = value;\n }\n }\n if (line.length < 2)\n return null;\n return Object.assign(result, {\n line: line,\n times: times,\n heartRates: heartRates,\n });\n}\nfunction getLap(node) {\n const segments = $(node, \"Track\");\n const track = [];\n const times = [];\n const heartRates = [];\n const allExtendedProperties = [];\n let line;\n const properties = Object.assign(Object.fromEntries(getProperties(node, LAP_ATTRIBUTES)), get(node, \"Name\", (nameElement) => {\n return { name: nodeVal(nameElement) };\n }));\n for (const segment of segments) {\n line = getPoints(segment);\n if (line) {\n track.push(line.line);\n if (line.times.length)\n times.push(line.times);\n if (line.heartRates.length)\n heartRates.push(line.heartRates);\n allExtendedProperties.push(line.extendedProperties);\n }\n }\n for (let i = 0; i < allExtendedProperties.length; i++) {\n const extendedProperties = allExtendedProperties[i];\n for (const property in extendedProperties) {\n if (segments.length === 1) {\n if (line) {\n properties[property] = line.extendedProperties[property];\n }\n }\n else {\n if (!properties[property]) {\n properties[property] = track.map((track) => Array(track.length).fill(null));\n }\n properties[property][i] = extendedProperties[property];\n }\n }\n }\n if (track.length === 0)\n return null;\n if (times.length || heartRates.length) {\n properties.coordinateProperties = Object.assign(times.length\n ? {\n times: track.length === 1 ? times[0] : times,\n }\n : {}, heartRates.length\n ? {\n heart: track.length === 1 ? heartRates[0] : heartRates,\n }\n : {});\n }\n return {\n type: \"Feature\",\n properties: properties,\n geometry: track.length === 1\n ? {\n type: \"LineString\",\n coordinates: track[0],\n }\n : {\n type: \"MultiLineString\",\n coordinates: track,\n },\n };\n}\n/**\n * Incrementally convert a TCX document to GeoJSON. The\n * first argument, `doc`, must be a TCX\n * document as an XML DOM - not as a string.\n */\nfunction* tcxGen(node) {\n for (const lap of $(node, \"Lap\")) {\n const feature = getLap(lap);\n if (feature)\n yield feature;\n }\n for (const course of $(node, \"Courses\")) {\n const feature = getLap(course);\n if (feature)\n yield feature;\n }\n}\n/**\n * Convert a TCX document to GeoJSON. The first argument, `doc`, must be a TCX\n * document as an XML DOM - not as a string.\n */\nfunction tcx(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(tcxGen(node)),\n };\n}\n\nfunction fixColor(v, prefix) {\n const properties = {};\n const colorProp = prefix == \"stroke\" || prefix === \"fill\" ? prefix : prefix + \"-color\";\n if (v[0] === \"#\") {\n v = v.substring(1);\n }\n if (v.length === 6 || v.length === 3) {\n properties[colorProp] = \"#\" + v;\n }\n else if (v.length === 8) {\n properties[prefix + \"-opacity\"] = parseInt(v.substring(0, 2), 16) / 255;\n properties[colorProp] =\n \"#\" + v.substring(6, 8) + v.substring(4, 6) + v.substring(2, 4);\n }\n return properties;\n}\n\nfunction numericProperty(node, source, target) {\n const properties = {};\n num1(node, source, (val) => {\n properties[target] = val;\n });\n return properties;\n}\nfunction getColor(node, output) {\n return get(node, \"color\", (elem) => fixColor(nodeVal(elem), output));\n}\nfunction extractIconHref(node) {\n return get(node, \"Icon\", (icon, properties) => {\n val1(icon, \"href\", (href) => {\n properties.icon = href;\n });\n return properties;\n });\n}\nfunction extractIcon(node) {\n return get(node, \"IconStyle\", (iconStyle) => {\n return Object.assign(getColor(iconStyle, \"icon\"), numericProperty(iconStyle, \"scale\", \"icon-scale\"), numericProperty(iconStyle, \"heading\", \"icon-heading\"), get(iconStyle, \"hotSpot\", (hotspot) => {\n const left = parseFloat(hotspot.getAttribute(\"x\") || \"\");\n const top = parseFloat(hotspot.getAttribute(\"y\") || \"\");\n const xunits = hotspot.getAttribute(\"xunits\") || \"\";\n const yunits = hotspot.getAttribute(\"yunits\") || \"\";\n if (!isNaN(left) && !isNaN(top))\n return {\n \"icon-offset\": [left, top],\n \"icon-offset-units\": [xunits, yunits],\n };\n return {};\n }), extractIconHref(iconStyle));\n });\n}\nfunction extractLabel(node) {\n return get(node, \"LabelStyle\", (labelStyle) => {\n return Object.assign(getColor(labelStyle, \"label\"), numericProperty(labelStyle, \"scale\", \"label-scale\"));\n });\n}\nfunction extractLine(node) {\n return get(node, \"LineStyle\", (lineStyle) => {\n return Object.assign(getColor(lineStyle, \"stroke\"), numericProperty(lineStyle, \"width\", \"stroke-width\"));\n });\n}\nfunction extractPoly(node) {\n return get(node, \"PolyStyle\", (polyStyle, properties) => {\n return Object.assign(properties, get(polyStyle, \"color\", (elem) => fixColor(nodeVal(elem), \"fill\")), val1(polyStyle, \"fill\", (fill) => {\n if (fill === \"0\")\n return { \"fill-opacity\": 0 };\n }), val1(polyStyle, \"outline\", (outline) => {\n if (outline === \"0\")\n return { \"stroke-opacity\": 0 };\n }));\n });\n}\nfunction extractStyle(node) {\n return Object.assign({}, extractPoly(node), extractLine(node), extractLabel(node), extractIcon(node));\n}\n\nfunction extractExtendedData(node) {\n return get(node, \"ExtendedData\", (extendedData, properties) => {\n for (const data of $(extendedData, \"Data\")) {\n properties[data.getAttribute(\"name\") || \"\"] = nodeVal(get1(data, \"value\"));\n }\n for (const simpleData of $(extendedData, \"SimpleData\")) {\n properties[simpleData.getAttribute(\"name\") || \"\"] = nodeVal(simpleData);\n }\n return properties;\n });\n}\nfunction getMaybeHTMLDescription(node) {\n const descriptionNode = get1(node, \"description\");\n for (const c of Array.from(descriptionNode?.childNodes || [])) {\n if (c.nodeType === 4) {\n return {\n description: {\n \"@type\": \"html\",\n value: nodeVal(c),\n },\n };\n }\n }\n return {};\n}\nfunction extractTimeSpan(node) {\n return get(node, \"TimeSpan\", (timeSpan) => {\n return {\n timespan: {\n begin: nodeVal(get1(timeSpan, \"begin\")),\n end: nodeVal(get1(timeSpan, \"end\")),\n },\n };\n });\n}\nfunction extractTimeStamp(node) {\n return get(node, \"TimeStamp\", (timeStamp) => {\n return { timestamp: nodeVal(get1(timeStamp, \"when\")) };\n });\n}\nfunction extractCascadedStyle(node, styleMap) {\n return val1(node, \"styleUrl\", (styleUrl) => {\n styleUrl = normalizeId(styleUrl);\n if (styleMap[styleUrl]) {\n return Object.assign({ styleUrl }, styleMap[styleUrl]);\n }\n // For backward-compatibility. Should we still include\n // styleUrl even if it's not resolved?\n return { styleUrl };\n });\n}\n\nconst removeSpace = /\\s*/g;\nconst trimSpace = /^\\s*|\\s*$/g;\nconst splitSpace = /\\s+/;\n/**\n * Get one coordinate from a coordinate array, if any\n */\nfunction coord1(value) {\n return value\n .replace(removeSpace, \"\")\n .split(\",\")\n .map(parseFloat)\n .filter((num) => !isNaN(num))\n .slice(0, 3);\n}\n/**\n * Get all coordinates from a coordinate array as [[],[]]\n */\nfunction coord(value) {\n return value\n .replace(trimSpace, \"\")\n .split(splitSpace)\n .map(coord1)\n .filter((coord) => {\n return coord.length >= 2;\n });\n}\nfunction gxCoords(node) {\n let elems = $(node, \"coord\");\n if (elems.length === 0) {\n elems = $ns(node, \"coord\", \"*\");\n }\n const coordinates = elems.map((elem) => {\n return nodeVal(elem).split(\" \").map(parseFloat);\n });\n if (coordinates.length === 0) {\n return null;\n }\n return {\n geometry: coordinates.length > 2\n ? {\n type: \"LineString\",\n coordinates,\n }\n : {\n type: \"Point\",\n coordinates: coordinates[0],\n },\n times: $(node, \"when\").map((elem) => nodeVal(elem)),\n };\n}\nfunction fixRing(ring) {\n if (ring.length === 0)\n return ring;\n const first = ring[0];\n const last = ring[ring.length - 1];\n let equal = true;\n for (let i = 0; i < Math.max(first.length, last.length); i++) {\n if (first[i] !== last[i]) {\n equal = false;\n break;\n }\n }\n if (!equal) {\n return ring.concat([ring[0]]);\n }\n return ring;\n}\nfunction getCoordinates(node) {\n return nodeVal(get1(node, \"coordinates\"));\n}\nfunction getGeometry(node) {\n let geometries = [];\n let coordTimes = [];\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = node.childNodes.item(i);\n if (isElement(child)) {\n switch (child.tagName) {\n case \"MultiGeometry\":\n case \"MultiTrack\":\n case \"gx:MultiTrack\": {\n const childGeometries = getGeometry(child);\n geometries = geometries.concat(childGeometries.geometries);\n coordTimes = coordTimes.concat(childGeometries.coordTimes);\n break;\n }\n case \"Point\": {\n const coordinates = coord1(getCoordinates(child));\n if (coordinates.length >= 2) {\n geometries.push({\n type: \"Point\",\n coordinates,\n });\n }\n break;\n }\n case \"LineString\": {\n const coordinates = coord(getCoordinates(child));\n if (coordinates.length >= 2) {\n geometries.push({\n type: \"LineString\",\n coordinates,\n });\n }\n break;\n }\n case \"Polygon\": {\n const coords = [];\n for (const linearRing of $(child, \"LinearRing\")) {\n const ring = fixRing(coord(getCoordinates(linearRing)));\n if (ring.length >= 4) {\n coords.push(ring);\n }\n }\n if (coords.length) {\n geometries.push({\n type: \"Polygon\",\n coordinates: coords,\n });\n }\n break;\n }\n case \"Track\":\n case \"gx:Track\": {\n const gx = gxCoords(child);\n if (!gx)\n break;\n const { times, geometry } = gx;\n geometries.push(geometry);\n if (times.length)\n coordTimes.push(times);\n break;\n }\n }\n }\n }\n return {\n geometries,\n coordTimes,\n };\n}\n\nfunction geometryListToGeometry(geometries) {\n return geometries.length === 0\n ? null\n : geometries.length === 1\n ? geometries[0]\n : {\n type: \"GeometryCollection\",\n geometries,\n };\n}\nfunction getPlacemark(node, styleMap) {\n const { coordTimes, geometries } = getGeometry(node);\n const feature = {\n type: \"Feature\",\n geometry: geometryListToGeometry(geometries),\n properties: Object.assign(getMulti(node, [\n \"name\",\n \"address\",\n \"visibility\",\n \"open\",\n \"phoneNumber\",\n \"description\",\n ]), getMaybeHTMLDescription(node), extractCascadedStyle(node, styleMap), extractStyle(node), extractExtendedData(node), extractTimeSpan(node), extractTimeStamp(node), coordTimes.length\n ? {\n coordinateProperties: {\n times: coordTimes.length === 1 ? coordTimes[0] : coordTimes,\n },\n }\n : {}),\n };\n if (feature.properties?.visibility !== undefined) {\n feature.properties.visibility = feature.properties.visibility !== \"0\";\n }\n const id = node.getAttribute(\"id\");\n if (id !== null && id !== \"\")\n feature.id = id;\n return feature;\n}\n\nfunction getGroundOverlayBox(node) {\n const latLonQuad = get1(node, \"gx:LatLonQuad\");\n if (latLonQuad) {\n const ring = fixRing(coord(getCoordinates(node)));\n return {\n type: \"Polygon\",\n coordinates: [ring],\n };\n }\n return getLatLonBox(node);\n}\nconst DEGREES_TO_RADIANS = Math.PI / 180;\nfunction rotateBox(bbox, coordinates, rotation) {\n const center = [(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2];\n return [\n coordinates[0].map((coordinate) => {\n const dy = coordinate[1] - center[1];\n const dx = coordinate[0] - center[0];\n const distance = Math.sqrt(Math.pow(dy, 2) + Math.pow(dx, 2));\n const angle = Math.atan2(dy, dx) - rotation * DEGREES_TO_RADIANS;\n return [\n center[0] + Math.cos(angle) * distance,\n center[1] + Math.sin(angle) * distance,\n ];\n }),\n ];\n}\nfunction getLatLonBox(node) {\n const latLonBox = get1(node, \"LatLonBox\");\n if (latLonBox) {\n const north = num1(latLonBox, \"north\");\n const west = num1(latLonBox, \"west\");\n const east = num1(latLonBox, \"east\");\n const south = num1(latLonBox, \"south\");\n const rotation = num1(latLonBox, \"rotation\");\n if (typeof north === \"number\" &&\n typeof south === \"number\" &&\n typeof west === \"number\" &&\n typeof east === \"number\") {\n const bbox = [west, south, east, north];\n let coordinates = [\n [\n [west, north],\n [east, north],\n [east, south],\n [west, south],\n [west, north], // top left (again)\n ],\n ];\n if (typeof rotation === \"number\") {\n coordinates = rotateBox(bbox, coordinates, rotation);\n }\n return {\n type: \"Polygon\",\n coordinates,\n };\n }\n }\n return null;\n}\nfunction getGroundOverlay(node, styleMap) {\n const geometry = getGroundOverlayBox(node);\n const feature = {\n type: \"Feature\",\n geometry,\n properties: Object.assign(\n /**\n * Related to\n * https://gist.github.com/tmcw/037a1cb6660d74a392e9da7446540f46\n */\n { \"@geometry-type\": \"groundoverlay\" }, getMulti(node, [\n \"name\",\n \"address\",\n \"visibility\",\n \"open\",\n \"phoneNumber\",\n \"description\",\n ]), getMaybeHTMLDescription(node), extractCascadedStyle(node, styleMap), extractStyle(node), extractIconHref(node), extractExtendedData(node), extractTimeSpan(node), extractTimeStamp(node)),\n };\n if (feature.properties?.visibility !== undefined) {\n feature.properties.visibility = feature.properties.visibility !== \"0\";\n }\n const id = node.getAttribute(\"id\");\n if (id !== null && id !== \"\")\n feature.id = id;\n return feature;\n}\n\nfunction getStyleId(style) {\n let id = style.getAttribute(\"id\");\n const parentNode = style.parentNode;\n if (!id &&\n isElement(parentNode) &&\n parentNode.localName === \"CascadingStyle\") {\n id = parentNode.getAttribute(\"kml:id\") || parentNode.getAttribute(\"id\");\n }\n return normalizeId(id || \"\");\n}\nfunction buildStyleMap(node) {\n const styleMap = {};\n for (const style of $(node, \"Style\")) {\n styleMap[getStyleId(style)] = extractStyle(style);\n }\n for (const map of $(node, \"StyleMap\")) {\n const id = normalizeId(map.getAttribute(\"id\") || \"\");\n val1(map, \"styleUrl\", (styleUrl) => {\n styleUrl = normalizeId(styleUrl);\n if (styleMap[styleUrl]) {\n styleMap[id] = styleMap[styleUrl];\n }\n });\n }\n return styleMap;\n}\nconst FOLDER_PROPS = [\n \"name\",\n \"visibility\",\n \"open\",\n \"address\",\n \"description\",\n \"phoneNumber\",\n \"visibility\",\n];\nfunction getFolder(node) {\n const meta = {};\n for (const child of Array.from(node.childNodes)) {\n if (isElement(child) && FOLDER_PROPS.includes(child.tagName)) {\n meta[child.tagName] = nodeVal(child);\n }\n }\n return {\n type: \"folder\",\n meta,\n children: [],\n };\n}\n/**\n * Yield a nested tree with KML folder structure\n *\n * This generates a tree with the given structure:\n *\n * ```js\n * {\n * \"type\": \"root\",\n * \"children\": [\n * {\n * \"type\": \"folder\",\n * \"meta\": {\n * \"name\": \"Test\"\n * },\n * \"children\": [\n * // ...features and folders\n * ]\n * }\n * // ...features\n * ]\n * }\n * ```\n *\n * ### GroundOverlay\n *\n * GroundOverlay elements are converted into\n * `Feature` objects with `Polygon` geometries,\n * a property like:\n *\n * ```json\n * {\n * \"@geometry-type\": \"groundoverlay\"\n * }\n * ```\n *\n * And the ground overlay's image URL in the `href`\n * property. Ground overlays will need to be displayed\n * with a separate method to other features, depending\n * on which map framework you're using.\n */\nfunction kmlWithFolders(node) {\n const styleMap = buildStyleMap(node);\n const tree = { type: \"root\", children: [] };\n function traverse(node, pointer) {\n if (isElement(node)) {\n switch (node.tagName) {\n case \"GroundOverlay\": {\n const placemark = getGroundOverlay(node, styleMap);\n if (placemark) {\n pointer.children.push(placemark);\n }\n break;\n }\n case \"Placemark\": {\n const placemark = getPlacemark(node, styleMap);\n if (placemark) {\n pointer.children.push(placemark);\n }\n break;\n }\n case \"Folder\": {\n const folder = getFolder(node);\n pointer.children.push(folder);\n pointer = folder;\n break;\n }\n }\n }\n if (node.childNodes) {\n for (let i = 0; i < node.childNodes.length; i++) {\n traverse(node.childNodes[i], pointer);\n }\n }\n }\n traverse(node, tree);\n return tree;\n}\n/**\n * Convert KML to GeoJSON incrementally, returning\n * a [Generator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators)\n * that yields output feature by feature.\n */\nfunction* kmlGen(node) {\n const styleMap = buildStyleMap(node);\n for (const placemark of $(node, \"Placemark\")) {\n const feature = getPlacemark(placemark, styleMap);\n if (feature)\n yield feature;\n }\n for (const groundOverlay of $(node, \"GroundOverlay\")) {\n const feature = getGroundOverlay(groundOverlay, styleMap);\n if (feature)\n yield feature;\n }\n}\n/**\n * Convert a KML document to GeoJSON. The first argument, `doc`, must be a KML\n * document as an XML DOM - not as a string. You can get this using jQuery's default\n * `.ajax` function or using a bare XMLHttpRequest with the `.response` property\n * holding an XML DOM.\n *\n * The output is a JavaScript object of GeoJSON data. You can convert it to a string\n * with [JSON.stringify](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)\n * or use it directly in libraries.\n */\nfunction kml(node) {\n return {\n type: \"FeatureCollection\",\n features: Array.from(kmlGen(node)),\n };\n}\n\nexport { gpx, gpxGen, kml, kmlGen, kmlWithFolders, tcx, tcxGen };\n//# sourceMappingURL=togeojson.es.mjs.map\n","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>} 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","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nimport { LIcon, LMarker } from '@vue-leaflet/vue-leaflet'\n import { toRefs } from 'vue'\n\n import { TCoordinates } from '@/types/workouts'\n\n interface Props {\n markerCoordinates: TCoordinates\n isStart: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'CustomMarker',\n props: {\n markerCoordinates: null,\n isStart: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n markerCoordinates: TCoordinates\n isStart: boolean\n }\n\n \n\n const { isStart, markerCoordinates } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(markerCoordinates).latitude)\n ? (_openBlock(), _createBlock(_unref(LMarker), {\n key: 0,\n \"lat-lng\": [_unref(markerCoordinates).latitude, _unref(markerCoordinates).longitude]\n }, {\n default: _withCtx(() => [\n _createVNode(_unref(LIcon), {\n \"icon-url\": `/img/workouts/${_unref(isStart) ? 'start' : 'finish'}.svg`,\n iconSize: [15, 15]\n }, null, 8, [\"icon-url\"])\n ]),\n _: 1\n }, 8, [\"lat-lng\"]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./CustomMarker.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./CustomMarker.vue?vue&type=script&lang=ts&setup=true\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, normalizeClass as _normalizeClass, createBlock as _createBlock, resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6b490f5d\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-map\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"leaflet-container\"\n}\nconst _hoisted_3 = { key: 1 }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-refresh\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_5 = {\n key: 1,\n class: \"no-map\"\n}\n\nimport { gpx } from '@tmcw/togeojson'\n import {\n LControl,\n LControlLayers,\n LGeoJson,\n LLayerGroup,\n LMap,\n LMarker,\n LTileLayer,\n } from '@vue-leaflet/vue-leaflet'\n import { ComputedRef, computed, ref, toRefs, withDefaults } from 'vue'\n import 'leaflet/dist/leaflet.css'\n\n import CustomMarker from '@/components/Workout/WorkoutDetail/WorkoutMap/CustomMarker.vue'\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 interface Props {\n workoutData: IWorkoutData\n markerCoordinates?: TCoordinates\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n workoutData: null,\n markerCoordinates: { default: () => ({} as TCoordinates) }\n },\n setup(__props: any) {\n\nconst props = __props as { workoutData: IWorkoutData, markerCoordinates: TCoordinates }\n\n \n\n const store = useStore()\n\n const { workoutData, markerCoordinates } = toRefs(props)\n const workoutMap = ref null }\n }>(null)\n const bounds = computed(() => getBounds())\n const appConfig: ComputedRef = 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 const startMarkerCoordinates = computed(() =>\n props.workoutData && props.workoutData.chartData.length > 0\n ? {\n latitude: props.workoutData.chartData[0].latitude,\n longitude: props.workoutData.chartData[0].longitude,\n }\n : {}\n )\n const endMarkerCoordinates = computed(() =>\n props.workoutData && props.workoutData.chartData.length > 0\n ? {\n latitude:\n props.workoutData.chartData[props.workoutData.chartData.length - 1]\n .latitude,\n longitude:\n props.workoutData.chartData[props.workoutData.chartData.length - 1]\n .longitude,\n }\n : {}\n )\n const isFullscreen = ref(false)\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[] {\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 function getBounds() {\n return 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 function resetZoom() {\n workoutMap.value?.leafletObject.fitBounds(getBounds())\n }\n function toggleFullscreen() {\n isFullscreen.value = !isFullscreen.value\n if (!isFullscreen.value) {\n setTimeout(() => {\n resetZoom()\n }, 100)\n }\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_VFullscreen = _resolveComponent(\"VFullscreen\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(workoutData).loading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_unref(workoutData).workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_VFullscreen, {\n key: 0,\n modelValue: isFullscreen.value,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((isFullscreen).value = $event))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"leaflet-container\", { 'fullscreen-map': isFullscreen.value }])\n }, [\n (_unref(geoJson).jsonData && _unref(center) && _unref(bounds).length === 2)\n ? (_openBlock(), _createBlock(_unref(LMap), {\n key: 0,\n zoom: 13,\n maxZoom: 19,\n center: _unref(center),\n bounds: _unref(bounds),\n ref_key: \"workoutMap\",\n ref: workoutMap,\n onReady: _cache[0] || (_cache[0] = ($event: any) => (fitBounds(_unref(bounds))))\n }, {\n default: _withCtx(() => [\n _createVNode(_unref(LControlLayers)),\n _createVNode(_unref(LControl), {\n position: \"topleft\",\n class: \"map-control\",\n onClick: resetZoom\n }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }),\n _createVNode(_unref(LControl), {\n position: \"topleft\",\n class: \"map-control\",\n onClick: toggleFullscreen\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa-${isFullscreen.value ? 'compress' : 'arrows-alt'}`),\n \"aria-hidden\": \"true\"\n }, null, 2)\n ]),\n _: 1\n }),\n _createVNode(_unref(LTileLayer), {\n url: `${_unref(getApiUrl)()}workouts/map_tile/{s}/{z}/{x}/{y}.png`,\n attribution: _unref(appConfig).map_attribution,\n bounds: _unref(bounds)\n }, null, 8, [\"url\", \"attribution\", \"bounds\"]),\n _createVNode(_unref(LGeoJson), {\n geojson: _unref(geoJson).jsonData\n }, null, 8, [\"geojson\"]),\n (_unref(markerCoordinates).latitude)\n ? (_openBlock(), _createBlock(_unref(LMarker), {\n key: 0,\n \"lat-lng\": [\n _unref(markerCoordinates).latitude,\n _unref(markerCoordinates).longitude,\n ]\n }, null, 8, [\"lat-lng\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_unref(LLayerGroup), {\n name: _ctx.$t('workouts.START_AND_FINISH'),\n \"layer-type\": \"overlay\"\n }, {\n default: _withCtx(() => [\n (_unref(startMarkerCoordinates).latitude)\n ? (_openBlock(), _createBlock(CustomMarker, {\n key: 0,\n markerCoordinates: _unref(startMarkerCoordinates),\n isStart: true\n }, null, 8, [\"markerCoordinates\"]))\n : _createCommentVNode(\"\", true),\n (_unref(endMarkerCoordinates).latitude)\n ? (_openBlock(), _createBlock(CustomMarker, {\n key: 1,\n markerCoordinates: _unref(endMarkerCoordinates),\n isStart: false\n }, null, 8, [\"markerCoordinates\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"name\"])\n ]),\n _: 1\n }, 8, [\"center\", \"bounds\"]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ]),\n _: 1\n }, 8, [\"modelValue\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('workouts.NO_MAP')), 1))\n ]))\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=6b490f5d&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6b490f5d\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { resolveComponent as _resolveComponent, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, withCtx as _withCtx, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9fc0bab8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workout-detail\" }\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n watch,\n withDefaults,\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/index.vue'\n import { WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } 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 interface Props {\n authUser: IAuthUserProfile\n displaySegment: boolean\n sports: ISport[]\n workoutData: IWorkoutData\n markerCoordinates?: TCoordinates\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n authUser: null,\n displaySegment: { type: Boolean },\n sports: null,\n workoutData: null,\n markerCoordinates: { default: () => ({} as TCoordinates) }\n },\n setup(__props: any) {\n\nconst props = __props as { authUser: IAuthUserProfile, displaySegment: boolean, sports: ISport[], workoutData: IWorkoutData, markerCoordinates: TCoordinates }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { authUser, markerCoordinates, workoutData } = toRefs(props)\n const workout: ComputedRef = computed(\n () => props.workoutData.workout\n )\n const segmentId: Ref = ref(\n route.params.workoutId ? +route.params.segmentId : null\n )\n const segment: ComputedRef = computed(() =>\n workout.value.segments.length > 0 && segmentId.value\n ? workout.value.segments[+segmentId.value - 1]\n : null\n )\n const displayModal: Ref = ref(false)\n const sport = computed(() =>\n props.sports\n ? props.sports.find(\n (sport) => sport.id === props.workoutData.workout.sport_id\n )\n : {}\n )\n const workoutObject = computed(() =>\n getWorkoutObject(workout.value, segment.value)\n )\n\n function getWorkoutObjectUrl(\n workout: IWorkout,\n displaySegment: boolean,\n segmentId: number | null\n ): Record {\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 props.authUser.date_format\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 weatherStart: segment ? null : workout.weather_start,\n with_gpx: workout.with_gpx,\n workoutId: workout.id,\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 watch(\n () => route.params.segmentId,\n async (newSegmentId) => {\n if (newSegmentId) {\n segmentId.value = +newSegmentId\n }\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Modal = _resolveComponent(\"Modal\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (displayModal.value)\n ? (_openBlock(), _createBlock(_component_Modal, {\n key: 0,\n title: _ctx.$t('common.CONFIRMATION'),\n message: _ctx.$t('workouts.WORKOUT_DELETION_CONFIRMATION'),\n onConfirmAction: _cache[0] || (_cache[0] = ($event: any) => (deleteWorkout(_unref(workoutObject).workoutId))),\n onCancelAction: _cache[1] || (_cache[1] = ($event: any) => (updateDisplayModal(false)))\n }, null, 8, [\"title\", \"message\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createVNode(WorkoutCardTitle, {\n sport: _unref(sport),\n workoutObject: _unref(workoutObject),\n onDisplayModal: _cache[2] || (_cache[2] = ($event: any) => (updateDisplayModal(true)))\n }, null, 8, [\"sport\", \"workoutObject\"])\n ]),\n content: _withCtx(() => [\n _createVNode(WorkoutMap, {\n workoutData: _unref(workoutData),\n markerCoordinates: _unref(markerCoordinates)\n }, null, 8, [\"workoutData\", \"markerCoordinates\"]),\n _createVNode(WorkoutData, {\n workoutObject: _unref(workoutObject),\n useImperialUnits: _unref(authUser).imperial_units,\n displayHARecord: _unref(authUser).display_ascent\n }, null, 8, [\"workoutObject\", \"useImperialUnits\", \"displayHARecord\"])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=9fc0bab8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9fc0bab8\"]])\n\nexport default __exports__","import { Chart, LegendItem } from 'chart.js'\n\nconst getOrCreateLegendList = (id: string): HTMLUListElement => {\n const legendContainer = document.getElementById(id)\n if (legendContainer) {\n let listContainer = legendContainer.querySelector('ul')\n if (!listContainer) {\n listContainer = document.createElement('ul')\n legendContainer.appendChild(listContainer)\n }\n return listContainer\n }\n throw new Error('No legend container')\n}\n\nexport const htmlLegendPlugin = {\n id: 'htmlLegend',\n afterUpdate(\n chart: Chart,\n args: Record,\n options: Record\n ): void {\n const ul = getOrCreateLegendList(options.containerID)\n while (ul.firstChild) {\n ul.firstChild.remove()\n }\n\n const legendItems = chart.options.plugins?.legend?.labels?.generateLabels\n ? chart.options.plugins?.legend?.labels?.generateLabels(chart)\n : []\n\n legendItems.forEach((item: LegendItem) => {\n const li = document.createElement('li')\n li.onclick = () => {\n if (item.datasetIndex !== undefined) {\n chart.setDatasetVisibility(\n item.datasetIndex,\n !chart.isDatasetVisible(item.datasetIndex)\n )\n chart.update()\n }\n }\n\n const checkBox = document.createElement('input')\n if (checkBox) {\n checkBox.type = 'checkbox'\n checkBox.id = item.text\n checkBox.checked = !item.hidden\n }\n\n const text = document.createTextNode(item.text)\n\n const boxSpan = document.createElement('span')\n if (boxSpan) {\n boxSpan.style.background = String(item.fillStyle)\n boxSpan.style.borderColor = String(item.strokeStyle)\n }\n\n li.appendChild(checkBox)\n li.appendChild(text)\n li.appendChild(boxSpan)\n ul.appendChild(li)\n })\n },\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, unref as _unref, mergeProps as _mergeProps, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-dcea1168\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-chart\" }\nconst _hoisted_2 = { class: \"chart-radio\" }\nconst _hoisted_3 = [\"checked\"]\nconst _hoisted_4 = [\"checked\"]\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"chart-legend\" }, null, -1))\nconst _hoisted_6 = { class: \"chart-info\" }\nconst _hoisted_7 = { class: \"no-data-cleaning\" }\nconst _hoisted_8 = { class: \"elevation-start\" }\nconst _hoisted_9 = [\"checked\"]\n\nimport { ChartData, ChartOptions } from 'chart.js'\n import { ComputedRef, computed, ref } from 'vue'\n import { LineChart, useLineChart } from 'vue-chart-3'\n import { useI18n } from 'vue-i18n'\n\n import { htmlLegendPlugin } from '@/components/Workout/WorkoutDetail/WorkoutChart/legend'\n import { TUnit } from '@/types/units'\n import { IAuthUserProfile } from '@/types/user'\n import {\n IWorkoutChartData,\n IWorkoutData,\n TCoordinates,\n } from '@/types/workouts'\n import { units } from '@/utils/units'\n import { getDatasets } from '@/utils/workouts'\n\n interface Props {\n authUser: IAuthUserProfile\n workoutData: IWorkoutData\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'index',\n props: {\n authUser: null,\n workoutData: null\n },\n emits: ['getCoordinates'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n workoutData: IWorkoutData\n }\n\n \n\n \n\n const { t } = useI18n()\n\n const displayDistance = ref(true)\n const beginElevationAtZero = ref(true)\n const datasets: ComputedRef = computed(() =>\n getDatasets(props.workoutData.chartData, t, props.authUser.imperial_units)\n )\n const fromKmUnit = getUnitTo('km')\n const fromMUnit = getUnitTo('m')\n const chartData: ComputedRef> = 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 = computed(\n () => datasets.value.coordinates\n )\n const options = computed>(() => ({\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') + ` (${fromKmUnit})`\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') + ` (${fromKmUnit}/h)`,\n },\n },\n yElevation: {\n beginAtZero: beginElevationAtZero.value,\n grid: {\n drawOnChartArea: false,\n },\n position: 'right',\n title: {\n display: true,\n text: t('workouts.ELEVATION') + ` (${fromMUnit})`,\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 + ` ${fromMUnit}`\n : label + ` ${fromKmUnit}/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')}: ${\n tooltipItems[0].label\n } ${fromKmUnit}`\n : `${t('workouts.DURATION')}: ${formatDuration(\n tooltipItems[0].label.replace(',', '')\n )}`\n },\n },\n },\n legend: {\n display: false,\n },\n htmlLegend: {\n containerID: 'chart-legend',\n },\n },\n }))\n const { lineChartProps } = useLineChart({\n chartData,\n options,\n plugins: [htmlLegendPlugin],\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 function getUnitTo(unitFrom: TUnit): TUnit {\n return props.authUser.imperial_units\n ? units[unitFrom].defaultTarget\n : unitFrom\n }\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.ANALYSIS')), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"distance\",\n checked: displayDistance.value,\n onClick: updateDisplayDistance\n }, null, 8, _hoisted_3),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1)\n ]),\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"radio\",\n name: \"duration\",\n checked: !displayDistance.value,\n onClick: updateDisplayDistance\n }, null, 8, _hoisted_4),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.DURATION')), 1)\n ])\n ]),\n _hoisted_5,\n _createVNode(_unref(LineChart), _mergeProps(_unref(lineChartProps), {\n class: \"line-chart\",\n onMouseleave: emitEmptyCoordinates\n }), null, 16),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('workouts.NO_DATA_CLEANING')), 1),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"label\", null, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n checked: beginElevationAtZero.value,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (beginElevationAtZero.value = !beginElevationAtZero.value))\n }, null, 8, _hoisted_9),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('workouts.START_ELEVATION_AT_ZERO')), 1)\n ])\n ])\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./index.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=dcea1168&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-dcea1168\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-028ad527\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-note\" }\n\nimport { toRefs, withDefaults } from 'vue'\n\n interface Props {\n notes?: string | null\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutNotes',\n props: {\n notes: { default: () => null }\n },\n setup(__props: any) {\n\nconst props = __props as { notes: string | null }\n\n \n\n const { notes } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.NOTES')), 1)\n ]),\n content: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(notes) && _unref(notes) !== '' ? _unref(notes) : _ctx.$t('workouts.NO_NOTES')), 1)\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./WorkoutNotes.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutNotes.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutNotes.vue?vue&type=style&index=0&id=028ad527&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-028ad527\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6b8a27cd\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"workout-segments\" }\n\nimport { toRefs } from 'vue'\n\n import { IWorkoutSegment } from '@/types/workouts'\n\n interface Props {\n segments: IWorkoutSegment[]\n useImperialUnits: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutSegments',\n props: {\n segments: null,\n useImperialUnits: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n segments: IWorkoutSegment[]\n useImperialUnits: boolean\n }\n\n \n\n const { segments, useImperialUnits } = toRefs(props)\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Card, null, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.SEGMENT', 2)), 1)\n ]),\n content: _withCtx(() => [\n _createElementVNode(\"ul\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(segments), (segment, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: segment.segment_id\n }, [\n _createVNode(_component_router_link, {\n to: {\n name: 'WorkoutSegment',\n params: {\n workoutId: segment.workout_id,\n segmentId: index + 1,\n },\n }\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('workouts.SEGMENT', 1)) + \" \" + _toDisplayString(index + 1), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n _createTextVNode(\" (\" + _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \": \", 1),\n _createVNode(_component_Distance, {\n distance: segment.distance,\n unitFrom: \"km\",\n useImperialUnits: _unref(useImperialUnits)\n }, null, 8, [\"distance\", \"useImperialUnits\"]),\n _createTextVNode(\", \" + _toDisplayString(_ctx.$t('workouts.DURATION')) + \": \" + _toDisplayString(segment.duration) + \") \", 1)\n ]))\n }), 128))\n ])\n ]),\n _: 1\n })\n ]))\n}\n}\n\n})","import script from \"./WorkoutSegments.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutSegments.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutSegments.vue?vue&type=style&index=0&id=6b8a27cd&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6b8a27cd\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-53c4e53a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n id: \"workout\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"workout-container\"\n}\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\nconst _hoisted_6 = { key: 1 }\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\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 WorkoutDetail from '@/components/Workout/WorkoutDetail/index.vue'\n import WorkoutChart from '@/components/Workout/WorkoutDetail/WorkoutChart/index.vue'\n import WorkoutNotes from '@/components/Workout/WorkoutDetail/WorkoutNotes.vue'\n import WorkoutSegments from '@/components/Workout/WorkoutDetail/WorkoutSegments.vue'\n import {\n AUTH_USER_STORE,\n SPORTS_STORE,\n WORKOUTS_STORE,\n } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkoutData, IWorkoutPayload, TCoordinates } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n interface Props {\n displaySegment: boolean\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Workout',\n props: {\n displaySegment: { type: Boolean }\n },\n setup(__props: any) {\n\nconst props = __props as {\n displaySegment: boolean\n }\n\n \n\n const route = useRoute()\n const store = useStore()\n\n const { displaySegment } = toRefs(props)\n const workoutData: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const markerCoordinates: Ref = ref({\n latitude: null,\n longitude: null,\n })\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 onUnmounted(() => {\n store.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\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\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_unref(sports).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_unref(workoutData).workout.id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(WorkoutDetail, {\n workoutData: _unref(workoutData),\n sports: _unref(sports),\n authUser: _unref(authUser),\n markerCoordinates: markerCoordinates.value,\n displaySegment: _unref(displaySegment)\n }, null, 8, [\"workoutData\", \"sports\", \"authUser\", \"markerCoordinates\", \"displaySegment\"]),\n (\n _unref(workoutData).workout.with_gpx && _unref(workoutData).chartData.length > 0\n )\n ? (_openBlock(), _createBlock(WorkoutChart, {\n key: 0,\n workoutData: _unref(workoutData),\n authUser: _unref(authUser),\n displaySegment: _unref(displaySegment),\n onGetCoordinates: updateCoordinates\n }, null, 8, [\"workoutData\", \"authUser\", \"displaySegment\"]))\n : _createCommentVNode(\"\", true),\n (!_unref(displaySegment) && _unref(workoutData).workout.segments.length > 1)\n ? (_openBlock(), _createBlock(WorkoutSegments, {\n key: 1,\n segments: _unref(workoutData).workout.segments,\n useImperialUnits: _unref(authUser).imperial_units\n }, null, 8, [\"segments\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true),\n (!_unref(displaySegment))\n ? (_openBlock(), _createBlock(WorkoutNotes, {\n key: 2,\n notes: _unref(workoutData).workout.notes\n }, null, 8, [\"notes\"]))\n : _createCommentVNode(\"\", true),\n _hoisted_5\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n (!_unref(workoutData).loading)\n ? (_openBlock(), _createBlock(NotFound, {\n key: 0,\n target: \"WORKOUT\"\n }))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}\n}\n\n})","import script from \"./Workout.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Workout.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Workout.vue?vue&type=style&index=0&id=53c4e53a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-53c4e53a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6c38593a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workouts-filters\" }\nconst _hoisted_2 = { class: \"box\" }\nconst _hoisted_3 = { class: \"form\" }\nconst _hoisted_4 = { class: \"form-items-group\" }\nconst _hoisted_5 = { class: \"form-item\" }\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = { class: \"form-item\" }\nconst _hoisted_8 = [\"value\"]\nconst _hoisted_9 = { class: \"form-items-group\" }\nconst _hoisted_10 = { class: \"form-item\" }\nconst _hoisted_11 = [\"value\"]\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"option\", { value: \"\" }, null, -1))\nconst _hoisted_13 = [\"value\"]\nconst _hoisted_14 = { class: \"form-items-group\" }\nconst _hoisted_15 = { class: \"form-item\" }\nconst _hoisted_16 = { class: \"form-inputs-group\" }\nconst _hoisted_17 = [\"value\"]\nconst _hoisted_18 = [\"value\"]\nconst _hoisted_19 = { class: \"form-items-group\" }\nconst _hoisted_20 = { class: \"form-item\" }\nconst _hoisted_21 = { class: \"form-inputs-group\" }\nconst _hoisted_22 = [\"value\"]\nconst _hoisted_23 = [\"value\"]\nconst _hoisted_24 = { class: \"form-items-group\" }\nconst _hoisted_25 = { class: \"form-item\" }\nconst _hoisted_26 = { class: \"form-inputs-group\" }\nconst _hoisted_27 = [\"value\"]\nconst _hoisted_28 = [\"value\"]\nconst _hoisted_29 = { class: \"form-items-group\" }\nconst _hoisted_30 = { class: \"form-item\" }\nconst _hoisted_31 = { class: \"form-inputs-group\" }\nconst _hoisted_32 = [\"value\"]\nconst _hoisted_33 = [\"value\"]\nconst _hoisted_34 = { class: \"form-button\" }\n\nimport { ComputedRef, computed, toRefs, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import { ISport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { translateSports } from '@/utils/sports'\n import { units } from '@/utils/units'\n\n interface Props {\n authUser: IAuthUserProfile\n sports: ISport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsFilters',\n props: {\n authUser: null,\n sports: null\n },\n emits: ['filter'],\n setup(__props: any, { emit }) {\n\nconst props = __props as {\n authUser: IAuthUserProfile\n sports: ISport[]\n }\n\n \n\n \n\n const { t } = useI18n()\n const route = useRoute()\n const router = useRouter()\n\n const { authUser } = toRefs(props)\n\n const toUnit = authUser.value.imperial_units\n ? units['km'].defaultTarget\n : 'km'\n const translatedSports: ComputedRef = computed(() =>\n translateSports(props.sports, t)\n )\n let params: LocationQuery = Object.assign({}, route.query)\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')\n if ('page' in params) {\n params['page'] = '1'\n }\n router.push({ path: '/workouts', query: params })\n }\n function onClearFilter() {\n emit('filter')\n router.push({ path: '/workouts', query: {} })\n }\n\n watch(\n () => route.query,\n (newQuery) => {\n params = Object.assign({}, newQuery)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.FROM')) + \": \", 1),\n _createElementVNode(\"input\", {\n name: \"from\",\n type: \"date\",\n value: _ctx.$route.query.from,\n onChange: handleFilterChange\n }, null, 40, _hoisted_6)\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.TO')) + \": \", 1),\n _createElementVNode(\"input\", {\n name: \"to\",\n type: \"date\",\n value: _ctx.$route.query.to,\n onChange: handleFilterChange\n }, null, 40, _hoisted_8)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.SPORT', 1)) + \":\", 1),\n _createElementVNode(\"select\", {\n name: \"sport_id\",\n value: _ctx.$route.query.sport_id,\n onChange: handleFilterChange\n }, [\n _hoisted_12,\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(translatedSports).filter((s) =>\n _unref(authUser).sports_list.includes(s.id)\n ), (sport) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: sport.id,\n key: sport.id\n }, _toDisplayString(sport.translatedLabel), 9, _hoisted_13))\n }), 128))\n ], 40, _hoisted_11)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DISTANCE')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"): \", 1),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"input\", {\n name: \"distance_from\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: _ctx.$route.query.distance_from,\n onChange: handleFilterChange\n }, null, 40, _hoisted_17),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n name: \"distance_to\",\n type: \"number\",\n min: \"0\",\n step: \"0.1\",\n value: _ctx.$route.query.distance_to,\n onChange: handleFilterChange\n }, null, 40, _hoisted_18)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"div\", _hoisted_20, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.DURATION')) + \": \", 1),\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"input\", {\n name: \"duration_from\",\n value: _ctx.$route.query.duration_from,\n onChange: handleFilterChange,\n pattern: \"^([0-9]*[0-9]):([0-5][0-9])$\",\n placeholder: \"hh:mm\",\n type: \"text\"\n }, null, 40, _hoisted_22),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n name: \"duration_to\",\n value: _ctx.$route.query.duration_to,\n onChange: handleFilterChange,\n pattern: \"^([0-9]*[0-9]):([0-5][0-9])$\",\n placeholder: \"hh:mm\",\n type: \"text\"\n }, null, 40, _hoisted_23)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_24, [\n _createElementVNode(\"div\", _hoisted_25, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.AVE_SPEED')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"/h): \", 1),\n _createElementVNode(\"div\", _hoisted_26, [\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"ave_speed_from\",\n value: _ctx.$route.query.ave_speed_from,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_27),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"ave_speed_to\",\n value: _ctx.$route.query.ave_speed_to,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_28)\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_29, [\n _createElementVNode(\"div\", _hoisted_30, [\n _createElementVNode(\"label\", null, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')) + \" (\" + _toDisplayString(_unref(toUnit)) + \"/h): \", 1),\n _createElementVNode(\"div\", _hoisted_31, [\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"max_speed_from\",\n value: _ctx.$route.query.max_speed_from,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_32),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('workouts.TO')), 1),\n _createElementVNode(\"input\", {\n min: \"0\",\n name: \"max_speed_to\",\n value: _ctx.$route.query.max_speed_to,\n onChange: handleFilterChange,\n step: \"0.1\",\n type: \"number\"\n }, null, 40, _hoisted_33)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_34, [\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: onFilter\n }, _toDisplayString(_ctx.$t('buttons.FILTER')), 1),\n _createElementVNode(\"button\", {\n class: \"confirm\",\n onClick: onClearFilter\n }, _toDisplayString(_ctx.$t('buttons.CLEAR_FILTER')), 1)\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./WorkoutsFilters.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsFilters.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsFilters.vue?vue&type=style&index=0&id=6c38593a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6c38593a\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createBlock as _createBlock, withCtx as _withCtx, createTextVNode as _createTextVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0f8ea7b0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"workouts-list\" }\nconst _hoisted_2 = { class: \"total\" }\nconst _hoisted_3 = { class: \"total-label\" }\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = {\n key: 0,\n class: \"workouts-table responsive-table\"\n}\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", { class: \"sport-col\" }, null, -1))\nconst _hoisted_7 = { class: \"sport-col\" }\nconst _hoisted_8 = { class: \"cell-heading\" }\nconst _hoisted_9 = [\"onMouseover\"]\nconst _hoisted_10 = { class: \"cell-heading\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"fa fa-map-o\",\n \"aria-hidden\": \"true\"\n}\nconst _hoisted_12 = { class: \"title\" }\nconst _hoisted_13 = { class: \"workout-date\" }\nconst _hoisted_14 = { class: \"cell-heading\" }\nconst _hoisted_15 = { class: \"text-right\" }\nconst _hoisted_16 = { class: \"cell-heading\" }\nconst _hoisted_17 = { class: \"text-right\" }\nconst _hoisted_18 = { class: \"cell-heading\" }\nconst _hoisted_19 = { class: \"text-right\" }\nconst _hoisted_20 = { class: \"cell-heading\" }\nconst _hoisted_21 = { class: \"text-right\" }\nconst _hoisted_22 = { class: \"cell-heading\" }\nconst _hoisted_23 = { class: \"text-right\" }\nconst _hoisted_24 = { class: \"cell-heading\" }\nconst _hoisted_25 = { class: \"text-right\" }\nconst _hoisted_26 = { class: \"cell-heading\" }\nconst _hoisted_27 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\n\nimport {\n ComputedRef,\n Ref,\n computed,\n ref,\n toRefs,\n watch,\n capitalize,\n onBeforeMount,\n } from 'vue'\n import { LocationQuery, useRoute, useRouter } from 'vue-router'\n\n import FilterSelects from '@/components/Common/FilterSelects.vue'\n import Pagination from '@/components/Common/Pagination.vue'\n import StaticMap from '@/components/Common/StaticMap.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { ROOT_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { IPagination } from '@/types/api'\n import { ITranslatedSport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { IWorkout, TWorkoutsPayload } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { getQuery, sortList, workoutsPayloadKeys } from '@/utils/api'\n import { formatDate } from '@/utils/dates'\n import { getSportColor, getSportLabel } from '@/utils/sports'\n import { convertDistance } from '@/utils/units'\n import { defaultOrder } from '@/utils/workouts'\n\n interface Props {\n user: IAuthUserProfile\n sports: ITranslatedSport[]\n }\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsList',\n props: {\n user: null,\n sports: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n user: IAuthUserProfile\n sports: ITranslatedSport[]\n }\n\n \n\n const store = useStore()\n const route = useRoute()\n const router = useRouter()\n\n const { user, sports } = toRefs(props)\n const orderByList: string[] = [\n 'ave_speed',\n 'distance',\n 'duration',\n 'workout_date',\n ]\n const workouts: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.USER_WORKOUTS]\n )\n const pagination: ComputedRef = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUTS_PAGINATION]\n )\n const currentLanguage: ComputedRef = computed(\n () => store.getters[ROOT_STORE.GETTERS.LANGUAGE]\n )\n let query: TWorkoutsPayload = getWorkoutsQuery(route.query)\n const hoverWorkoutId: Ref = ref(null)\n\n onBeforeMount(() => {\n loadWorkouts(query)\n })\n\n function loadWorkouts(payload: TWorkoutsPayload) {\n store.dispatch(\n WORKOUTS_STORE.ACTIONS.GET_USER_WORKOUTS,\n user.value.imperial_units ? getConvertedPayload(payload) : payload\n )\n }\n function reloadWorkouts(queryParam: string, queryValue: string) {\n const newQuery: LocationQuery = Object.assign({}, route.query)\n newQuery[queryParam] = queryValue\n if (queryParam === 'per_page') {\n newQuery['page'] = '1'\n }\n query = getWorkoutsQuery(newQuery)\n router.push({ path: '/workouts', query })\n }\n\n function getWorkoutsQuery(newQuery: LocationQuery): TWorkoutsPayload {\n const workoutQuery = getQuery(\n newQuery,\n orderByList,\n defaultOrder.order_by,\n {\n defaultSort: defaultOrder.order,\n }\n )\n Object.keys(newQuery)\n .filter((k) => workoutsPayloadKeys.includes(k))\n .map((k) => {\n if (typeof newQuery[k] === 'string') {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n workoutQuery[k] = newQuery[k]\n }\n })\n return workoutQuery\n }\n\n function getConvertedPayload(payload: TWorkoutsPayload): TWorkoutsPayload {\n const convertedPayload: TWorkoutsPayload = {\n ...payload,\n }\n Object.entries(convertedPayload).map((entry) => {\n if (entry[0].match('speed|distance') && entry[1]) {\n convertedPayload[entry[0]] = convertDistance(+entry[1], 'mi', 'km')\n }\n })\n return convertedPayload\n }\n\n function onHover(workoutId: string | null) {\n hoverWorkoutId.value = workoutId\n }\n\n watch(\n () => route.query,\n async (newQuery) => {\n query = getWorkoutsQuery(newQuery)\n loadWorkouts(query)\n }\n )\n\nreturn (_ctx: any,_cache: any) => {\n const _component_SportImage = _resolveComponent(\"SportImage\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Distance = _resolveComponent(\"Distance\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"box\", { 'empty-table': _unref(workouts).length === 0 }])\n }, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('common.TOTAL').toLowerCase()) + \": \", 1),\n (_unref(pagination).total !== null)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, _toDisplayString(_unref(pagination).total) + \" \" + _toDisplayString(_ctx.$t('workouts.WORKOUT', _unref(pagination).total)), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(FilterSelects, {\n sort: _unref(sortList),\n order_by: orderByList,\n query: _unref(query),\n message: \"workouts\",\n onUpdateSelect: reloadWorkouts\n }, null, 8, [\"sort\", \"query\"]),\n (_unref(workouts).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createVNode(Pagination, {\n class: \"top-pagination\",\n pagination: _unref(pagination),\n path: \"/workouts\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"]),\n _createElementVNode(\"table\", null, [\n _createElementVNode(\"thead\", {\n class: _normalizeClass({ smaller: 'de' === _unref(currentLanguage) })\n }, [\n _createElementVNode(\"tr\", null, [\n _hoisted_6,\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 1))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DATE'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DISTANCE'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DURATION'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.AVE_SPEED'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.MAX_SPEED'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.ASCENT'))), 1),\n _createElementVNode(\"th\", null, _toDisplayString(capitalize(_ctx.$t('workouts.DESCENT'))), 1)\n ])\n ], 2),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(workouts), (workout) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n key: workout.id\n }, [\n _createElementVNode(\"td\", _hoisted_7, [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('workouts.SPORT', 1)), 1),\n (_unref(sports).length > 0)\n ? (_openBlock(), _createBlock(_component_SportImage, {\n key: 0,\n title: \n _unref(sports).find((s) => s.id === workout.sport_id)\n .translatedLabel\n ,\n \"sport-label\": _unref(getSportLabel)(workout, _unref(sports)),\n color: _unref(getSportColor)(workout, _unref(sports))\n }, null, 8, [\"title\", \"sport-label\", \"color\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"td\", {\n class: \"workout-title\",\n onMouseover: ($event: any) => (onHover(workout.id)),\n onMouseleave: _cache[0] || (_cache[0] = ($event: any) => (onHover(null)))\n }, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(capitalize(_ctx.$t('workouts.WORKOUT', 1))), 1),\n _createVNode(_component_router_link, {\n class: \"nav-item\",\n to: { name: 'Workout', params: { workoutId: workout.id } }\n }, {\n default: _withCtx(() => [\n (workout.with_gpx)\n ? (_openBlock(), _createElementBlock(\"i\", _hoisted_11))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"span\", _hoisted_12, _toDisplayString(workout.title), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n (workout.with_gpx && hoverWorkoutId.value === workout.id)\n ? (_openBlock(), _createBlock(StaticMap, {\n key: 0,\n workout: workout,\n \"display-hover\": true\n }, null, 8, [\"workout\"]))\n : _createCommentVNode(\"\", true)\n ], 40, _hoisted_9),\n _createElementVNode(\"td\", _hoisted_13, [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('workouts.DATE')), 1),\n _createTextVNode(\" \" + _toDisplayString(_unref(formatDate)(\n workout.workout_date,\n _unref(user).timezone,\n _unref(user).date_format\n )), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_15, [\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t('workouts.DISTANCE')), 1),\n _createVNode(_component_Distance, {\n distance: workout.distance,\n unitFrom: \"km\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_17, [\n _createElementVNode(\"span\", _hoisted_18, _toDisplayString(_ctx.$t('workouts.DURATION')), 1),\n _createTextVNode(\" \" + _toDisplayString(workout.moving), 1)\n ]),\n _createElementVNode(\"td\", _hoisted_19, [\n _createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('workouts.AVE_SPEED')), 1),\n _createVNode(_component_Distance, {\n distance: workout.ave_speed,\n unitFrom: \"km\",\n speed: true,\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_21, [\n _createElementVNode(\"span\", _hoisted_22, _toDisplayString(_ctx.$t('workouts.MAX_SPEED')), 1),\n _createVNode(_component_Distance, {\n distance: workout.max_speed,\n unitFrom: \"km\",\n speed: true,\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"])\n ]),\n _createElementVNode(\"td\", _hoisted_23, [\n _createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('workouts.ASCENT')), 1),\n (workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: workout.ascent,\n unitFrom: \"m\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"td\", _hoisted_25, [\n _createElementVNode(\"span\", _hoisted_26, _toDisplayString(_ctx.$t('workouts.DESCENT')), 1),\n (workout.with_gpx)\n ? (_openBlock(), _createBlock(_component_Distance, {\n key: 0,\n distance: workout.descent,\n unitFrom: \"m\",\n useImperialUnits: _unref(user).imperial_units\n }, null, 8, [\"distance\", \"useImperialUnits\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n }), 128))\n ])\n ]),\n _createVNode(Pagination, {\n pagination: _unref(pagination),\n path: \"/workouts\",\n query: _unref(query)\n }, null, 8, [\"pagination\", \"query\"])\n ]))\n : _createCommentVNode(\"\", true)\n ], 2),\n (_unref(workouts).length === 0)\n ? (_openBlock(), _createBlock(NoWorkouts, { key: 0 }))\n : _createCommentVNode(\"\", true),\n _hoisted_27\n ]))\n}\n}\n\n})","import script from \"./WorkoutsList.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsList.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsList.vue?vue&type=style&index=0&id=0f8ea7b0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0f8ea7b0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-77e54012\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"workouts\",\n class: \"view\"\n}\nconst _hoisted_2 = { class: \"container workouts-container\" }\nconst _hoisted_3 = { class: \"display-filters\" }\nconst _hoisted_4 = { class: \"list-container\" }\n\nimport { ComputedRef, computed, 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 { AUTH_USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IAuthUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'WorkoutsView',\n setup(__props) {\n\n const { t } = useI18n()\n const store = useStore()\n\n const authUser: ComputedRef = computed(\n () => store.getters[AUTH_USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const translatedSports: ComputedRef = computed(() =>\n translateSports(sports.value, t)\n )\n const hiddenFilters = ref(true)\n\n function toggleFilters() {\n hiddenFilters.value = !hiddenFilters.value\n }\n\nreturn (_ctx: any,_cache: any) => {\n return (_unref(authUser).username)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"filters-container\", { hidden: hiddenFilters.value }])\n }, [\n _createVNode(WorkoutsFilters, {\n sports: _unref(translatedSports),\n authUser: _unref(authUser),\n onFilter: toggleFilters\n }, null, 8, [\"sports\", \"authUser\"])\n ], 2),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", { onClick: toggleFilters }, [\n _createElementVNode(\"i\", {\n class: _normalizeClass(`fa fa-caret-${hiddenFilters.value ? 'down' : 'up'}`),\n \"aria-hidden\": \"true\"\n }, null, 2),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(`workouts.${hiddenFilters.value ? 'DISPLAY' : 'HIDE'}_FILTERS`)), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(WorkoutsList, {\n user: _unref(authUser),\n sports: _unref(translatedSports)\n }, null, 8, [\"user\", \"sports\"])\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./WorkoutsView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WorkoutsView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./WorkoutsView.vue?vue&type=style&index=0&id=77e54012&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-77e54012\"]])\n\nexport default __exports__"],"names":["_hoisted_1","id","_hoisted_2","_hoisted_3","class","_hoisted_4","key","_hoisted_5","_hoisted_6","for","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_defineComponent","__name","props","authUser","sports","isCreation","type","Boolean","default","loading","workout","setup","__props","t","useI18n","store","useStore","router","useRouter","toRefs","translatedSports","computed","translateSports","value","sport_id","appConfig","getters","ROOT_STORE","fileSizeLimit","max_single_file_size","getReadableFileSize","gpx_limit_import","zipSizeLimit","max_zip_file_size","errorMessages","workoutForm","reactive","title","notes","workoutDate","workoutTime","workoutDurationHour","workoutDurationMinutes","workoutDurationSeconds","workoutDistance","withGpx","ref","with_gpx","gpxFile","formErrors","updateNotes","updateWithGpx","updateFile","event","target","files","formatWorkoutForm","workoutDateTime","formatWorkoutDate","getDateWithTZ","workout_date","timezone","duration","split","imperial_units","convertDistance","distance","parseFloat","toFixed","workout_time","formatPayload","payload","updateWorkout","dispatch","WORKOUTS_STORE","workoutId","data","errorMessage","commit","file","onCancel","push","name","params","go","invalidateForm","onMounted","onUnmounted","watch","async","newWorkout","previousWorkout","_ctx","_cache","_component_CustomTextArea","_resolveComponent","_component_ErrorMessage","_component_Loader","_component_Card","_openBlock","_createElementBlock","_normalizeClass","_unref","_createVNode","_withCtx","_createTextVNode","_toDisplayString","$t","content","_createElementVNode","errors","onSubmit","_withModifiers","checked","disabled","onClick","_createCommentVNode","_withDirectives","required","onInvalid","$event","_Fragment","_renderList","sport","translatedLabel","_vModelSelect","accept","onInput","_vModelText","placeholder","minlength","maxlength","pattern","min","step","input","onUpdateValue","_createBlock","message","_","__exports__","SPORTS_STORE","AUTH_USER_STORE","workoutData","WorkoutEdition","route","useRoute","onBeforeMount","newWorkoutId","_withScopeId","n","_pushScopeId","_popScopeId","workoutObject","emits","emit","downloadGpx","authApi","responseType","then","response","gpxFileUrl","window","URL","createObjectURL","Blob","gpxLink","document","createElement","href","setAttribute","body","appendChild","click","_component_SportImage","_component_router_link","inactive","previousUrl","$router","label","color","segmentId","to","nextUrl","recordType","records","find","record","record_type","directions","convertDegreeToDirection","angle","Math","floor","weather","useImperialUnits","getWindDirectionTitle","windBearing","_component_Distance","wind","unitFrom","digits","displayUnit","style","_normalizeStyle","transform","weatherStart","weatherEnd","src","icon","alt","Number","temperature","humidity","WeatherWind","displayHARecord","withPause","pauses","moving","WorkoutRecord","strong","aveSpeed","speed","maxSpeed","maxAlt","minAlt","ascent","descent","WorkoutWeather","$","element","tagName","Array","from","getElementsByTagName","nodeVal","node","normalize","textContent","get1","callback","result","length","get","properties","val1","val","$num","isNaN","num1","getMulti","propertyNames","property","isElement","nodeType","getLineStyle","lineStyle","Object","assign","stroke","opacity","width","getExtensions","values","child","childNodes","abbreviateName","nodeName","concat","parseNumeric","includes","num","coordPair$1","ll","getAttribute","time","coordinates","extendedValues","extractProperties","extensions","getElementsByTagNameNS","parentNode","replace","links","map","link","getPoints$1","pointname","pts","line","times","i","c","plural","fill","getRoute","_gpxType","geometry","getTrack","segments","track","extractedLines","segment","multi","coordinateProperties","entries","getPoint","pair","gpxGen","feature","waypoint","point","gpx","features","PI","debounce","fn","timeout","args","context","this","clearTimeout","setTimeout","apply","capitalizeFirstLetter","string","charAt","toUpperCase","slice","propsBinder","methods","leafletElement","setMethodName","newVal","oldVal","remapEvents","contextAttrs","attrName","startsWith","eventName","toLocaleLowerCase","resetWebpackIcon","Icon","modules","Promise","all","Default","prototype","_getIconUrl","mergeOptions","iconRetinaUrl","iconUrl","shadowUrl","provideLeafletWrapper","methodName","wrapped","console","warn","wrapper","updateLeafletWrapper","leafletMethod","WINDOW_OR_GLOBAL","self","g","global","undefined","GLOBAL_LEAFLET_OPT","options","props$1","pane","String","attribution","custom","layerType","visible","setup$1","leafletRef","addLayer","removeLayer","componentOptions","componentMethods","addThisLayer","leafletObject","removeThisLayer","setAttribution","old","attributionControl","$parent","removeAttribution","addAttribution","setName","setLayerType","setVisible","isVisible","bindPopup","bindTooltip","unbindTooltip","tooltip","getTooltip","unbindPopup","popup","getPopup","updateVisibleProp","render","ready","slots","h","display","props$2","interactive","bubblingMouseEvents","props$3","weight","lineCap","lineJoin","dashArray","dashOffset","fillColor","fillOpacity","fillRule","className","props$4","latLng","radius","props$6","position","setup$6","setPosition","remove","render$1","script$2","disableClickPropagation","disableScrollPropagation","root","useGlobalLeaflet","registerControl","Control","DomEvent","L","LControl","extend","onAdd","$slots","props$8","collapsed","autoZIndex","hideSingleBase","sortLayers","sortFunction","Function","setup$8","controlOptions","layer","addBaseLayer","addOverlay","script$4","registerLayerControl","control","layers","props$b","setup$b","layerOptions","layerMethods","props$d","geojson","setup$d","layerGroupMethods","setGeojson","clearLayers","addData","getGeoJSONData","toGeoJSON","getBounds","script$8","geoJSON","listeners","attrs","on","props$e","zIndex","tileSize","noWrap","minZoom","maxZoom","setup$e","props$f","iconSize","iconAnchor","popupAnchor","tooltipAnchor","shadowRetinaUrl","shadowSize","shadowAnchor","bgPos","script$a","canSetParentHtml","setParentHtml","setIcon","onDomEvent","offDomEvent","divIcon","iconObject","createIcon","el","recreationNeeded","htmlSwapNeeded","elHtml","innerHTML","html","scheduleCreateIcon","scheduleHtmlSwap","setIconUrl","setIconRetinaUrl","setIconSize","setIconAnchor","setPopupAnchor","setTooltipAnchor","setShadowUrl","setShadowRetinaUrl","setShadowAnchor","setBgPos","setClassName","setHtml","lDivIcon","lIcon","off","observer","MutationObserver","observe","attributes","childList","characterData","subtree","script$c","layerGroup","script$d","center","bounds","maxBounds","zoom","paddingBottomRight","paddingTopLeft","padding","worldCopyJump","crs","maxBoundsViscosity","inertia","inertiaDeceleration","inertiaMaxSpeed","easeLinearity","zoomAnimation","zoomAnimationThreshold","fadeAnimation","markerZoomAnimation","noBlockingAnimations","blueprint","layersToAdd","layersInControl","eventHandlers","moveEndHandler","getZoom","getCenter","overlayAddHandler","e","l","overlayRemoveHandler","CRS","latLngBounds","beforeMapMount","error","optionsCrs","EPSG3857","layerControl","exist","_leaflet_id","filter","lControlLayer","forEach","lControl","addControl","setZoom","animate","setPaddingBottomRight","setPaddingTopLeft","setPadding","setCrs","prevBounds","fitBounds","setBounds","newBounds","isValid","oldBounds","lastSetBounds","boundsChanged","equals","fitBoundsOptions","setCenter","newCenter","oldCenter","lastSetCenter","lat","lng","panTo","height","props$h","draggable","zIndexOffset","setup$g","setDraggable","dragging","enable","disable","latLngSync","latlng","setLatLng","oldLatLng","getLatLng","script$e","getElement","newIcon","marker","props$i","latLngs","smoothFactor","noClip","props$j","props$k","props$n","tms","subdomains","detectRetina","url","setup$m","gridLayerOptions","gridLayerMethods","script$j","tileLayer","markerCoordinates","isStart","latitude","LMarker","longitude","LIcon","workoutMap","geoJson","getGeoJson","startMarkerCoordinates","chartData","endMarkerCoordinates","isFullscreen","gpxContent","jsonData","DOMParser","parseFromString","resetZoom","toggleFullscreen","_component_VFullscreen","modelValue","LMap","ref_key","onReady","LControlLayers","LTileLayer","getApiUrl","map_attribution","LGeoJson","LLayerGroup","CustomMarker","displaySegment","displayModal","getWorkoutObject","getWorkoutObjectUrl","previous_workout","next_workout","urls","date_format","ave_speed","max_alt","max_speed","min_alt","segment_id","weather_end","weather_start","updateDisplayModal","deleteWorkout","newSegmentId","_component_Modal","onConfirmAction","onCancelAction","WorkoutCardTitle","onDisplayModal","WorkoutMap","WorkoutData","display_ascent","getOrCreateLegendList","legendContainer","getElementById","listContainer","querySelector","Error","htmlLegendPlugin","afterUpdate","chart","ul","containerID","firstChild","legendItems","plugins","legend","labels","generateLabels","item","li","onclick","datasetIndex","setDatasetVisibility","isDatasetVisible","update","checkBox","text","hidden","createTextNode","boxSpan","background","fillStyle","borderColor","strokeStyle","displayDistance","beginElevationAtZero","datasets","getDatasets","fromKmUnit","getUnitTo","fromMUnit","distance_labels","duration_labels","JSON","parse","stringify","elevation","responsive","maintainAspectRatio","animation","layout","top","scales","grid","drawOnChartArea","ticks","count","formatDuration","ySpeed","yElevation","beginAtZero","elements","pointStyle","pointRadius","datalabels","interaction","intersect","mode","callbacks","dataset","formattedValue","yAxisID","tooltipItems","emitCoordinates","dataIndex","htmlLegend","lineChartProps","useLineChart","updateDisplayDistance","Date","toISOString","substr","emitEmptyCoordinates","units","defaultTarget","LineChart","_mergeProps","onMouseleave","index","workout_id","updateCoordinates","WorkoutDetail","WorkoutChart","onGetCoordinates","WorkoutSegments","WorkoutNotes","NotFound","toUnit","query","handleFilterChange","onFilter","path","onClearFilter","newQuery","$route","onChange","s","sports_list","distance_from","distance_to","duration_from","duration_to","ave_speed_from","ave_speed_to","max_speed_from","max_speed_to","user","orderByList","workouts","pagination","currentLanguage","getWorkoutsQuery","hoverWorkoutId","loadWorkouts","getConvertedPayload","reloadWorkouts","queryParam","queryValue","workoutQuery","getQuery","defaultOrder","defaultSort","keys","k","workoutsPayloadKeys","convertedPayload","entry","match","onHover","toLowerCase","total","FilterSelects","sort","sortList","order_by","onUpdateSelect","Pagination","smaller","capitalize","getSportLabel","getSportColor","onMouseover","StaticMap","formatDate","NoWorkouts","hiddenFilters","toggleFilters","username","WorkoutsFilters","WorkoutsList"],"sourceRoot":""} \ No newline at end of file diff --git a/fittrackee_client/package.json b/fittrackee_client/package.json index 025e76db..6eb18383 100644 --- a/fittrackee_client/package.json +++ b/fittrackee_client/package.json @@ -1,6 +1,6 @@ { "name": "fittrackee_client", - "version": "0.7.3", + "version": "0.7.4", "private": true, "scripts": { "serve": "vue-cli-service serve", diff --git a/pyproject.toml b/pyproject.toml index a6aba638..90712409 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "fittrackee" -version = "0.7.3" +version = "0.7.4" description = "Self-hosted outdoor workout/activity tracker" authors = ["SamR1"] license = "AGPL-3.0"